diff --git a/dictionary.txt b/dictionary.txt index a7d2034716..552fb2f008 100644 --- a/dictionary.txt +++ b/dictionary.txt @@ -90,6 +90,8 @@ Roboto Rushi Rustup SIGINT +SSWU +SVDW Secp Segoe Shacham @@ -594,6 +596,7 @@ protoio protos provercmd provergrpc +provergrpcapi pruningtypes prysm prysmaticlabs @@ -694,6 +697,7 @@ strangelove stretchr struct structs +strxor stylesheet subdenom subdenoms diff --git a/evm/contracts/apps/ucs/01-relay/Relay.sol b/evm/contracts/apps/ucs/01-relay/Relay.sol index f127eb055c..771cf92080 100644 --- a/evm/contracts/apps/ucs/01-relay/Relay.sol +++ b/evm/contracts/apps/ucs/01-relay/Relay.sol @@ -27,6 +27,32 @@ struct RelayPacket { Token[] tokens; } +interface IRelay is IIBCModule { + function getDenomAddress( + string memory denom + ) external view returns (address); + + function getOutstanding( + string memory sourcePort, + string memory sourceChannel, + address token + ) external view returns (uint256); + + function getCounterpartyEndpoint( + string memory sourcePort, + string memory sourceChannel + ) external view returns (IbcCoreChannelV1Counterparty.Data memory); + + function send( + string calldata sourcePort, + string calldata sourceChannel, + bytes calldata receiver, + LocalToken[] calldata tokens, + uint64 counterpartyTimeoutRevisionNumber, + uint64 counterpartyTimeoutRevisionHeight + ) external; +} + library RelayLib { using LibString for *; @@ -236,7 +262,7 @@ library RelayLib { } } - function hexToAddress(string memory s) public pure returns (address) { + function hexToAddress(string memory s) internal pure returns (address) { if (bytes(s).length != 42) { revert ErrInvalidHexAddress(); } @@ -284,7 +310,7 @@ library RelayPacketLib { } } -contract UCS01Relay is IBCAppBase { +contract UCS01Relay is IBCAppBase, IRelay { using RelayPacketLib for RelayPacket; using LibString for *; using strings for *; @@ -308,7 +334,7 @@ contract UCS01Relay is IBCAppBase { function getDenomAddress( string memory denom - ) public view returns (address) { + ) external view override returns (address) { return denomToAddress[denom]; } @@ -316,14 +342,19 @@ contract UCS01Relay is IBCAppBase { string memory sourcePort, string memory sourceChannel, address token - ) public view returns (uint256) { + ) external view override returns (uint256) { return outstanding[sourcePort][sourceChannel][token]; } function getCounterpartyEndpoint( string memory sourcePort, string memory sourceChannel - ) public view returns (IbcCoreChannelV1Counterparty.Data memory) { + ) + external + view + override + returns (IbcCoreChannelV1Counterparty.Data memory) + { return counterpartyEndpoints[sourcePort][sourceChannel]; } @@ -388,7 +419,7 @@ contract UCS01Relay is IBCAppBase { LocalToken[] calldata tokens, uint64 counterpartyTimeoutRevisionNumber, uint64 counterpartyTimeoutRevisionHeight - ) public { + ) external override { IbcCoreChannelV1Counterparty.Data memory counterparty = counterpartyEndpoints[sourcePort][ sourceChannel @@ -533,7 +564,7 @@ contract UCS01Relay is IBCAppBase { function onRecvPacket( IbcCoreChannelV1Packet.Data calldata ibcPacket, address relayer - ) external virtual override onlyIBC returns (bytes memory) { + ) external override(IBCAppBase, IIBCModule) onlyIBC returns (bytes memory) { // TODO: maybe consider threading _res in the failure ack (bool success, bytes memory _res) = address(this).call( abi.encodeWithSelector( @@ -553,7 +584,7 @@ contract UCS01Relay is IBCAppBase { IbcCoreChannelV1Packet.Data calldata ibcPacket, bytes calldata acknowledgement, address _relayer - ) external virtual override onlyIBC { + ) external override(IBCAppBase, IIBCModule) onlyIBC { if ( acknowledgement.length != RelayLib.ACK_LENGTH || (acknowledgement[0] != RelayLib.ACK_FAILURE && @@ -574,7 +605,7 @@ contract UCS01Relay is IBCAppBase { function onTimeoutPacket( IbcCoreChannelV1Packet.Data calldata ibcPacket, address _relayer - ) external virtual override onlyIBC { + ) external override(IBCAppBase, IIBCModule) onlyIBC { refundTokens( ibcPacket.source_port, ibcPacket.source_channel, @@ -589,7 +620,7 @@ contract UCS01Relay is IBCAppBase { string calldata channelId, IbcCoreChannelV1Counterparty.Data calldata counterpartyEndpoint, string calldata version - ) external virtual override onlyIBC { + ) external override(IBCAppBase, IIBCModule) onlyIBC { if (!RelayLib.isValidVersion(version)) { revert RelayLib.ErrInvalidProtocolVersion(); } @@ -607,7 +638,7 @@ contract UCS01Relay is IBCAppBase { IbcCoreChannelV1Counterparty.Data calldata counterpartyEndpoint, string calldata version, string calldata counterpartyVersion - ) external virtual override onlyIBC { + ) external override(IBCAppBase, IIBCModule) onlyIBC { if (!RelayLib.isValidVersion(version)) { revert RelayLib.ErrInvalidProtocolVersion(); } @@ -625,7 +656,7 @@ contract UCS01Relay is IBCAppBase { string calldata channelId, string calldata counterpartyChannelId, string calldata counterpartyVersion - ) external virtual override onlyIBC { + ) external override(IBCAppBase, IIBCModule) onlyIBC { if (!RelayLib.isValidVersion(counterpartyVersion)) { revert RelayLib.ErrInvalidCounterpartyProtocolVersion(); } @@ -637,19 +668,19 @@ contract UCS01Relay is IBCAppBase { function onChanOpenConfirm( string calldata _portId, string calldata _channelId - ) external virtual override onlyIBC {} + ) external override(IBCAppBase, IIBCModule) onlyIBC {} function onChanCloseInit( string calldata _portId, string calldata _channelId - ) external virtual override onlyIBC { + ) external override(IBCAppBase, IIBCModule) onlyIBC { revert RelayLib.ErrUnstoppable(); } function onChanCloseConfirm( string calldata _portId, string calldata _channelId - ) external virtual override onlyIBC { + ) external override(IBCAppBase, IIBCModule) onlyIBC { revert RelayLib.ErrUnstoppable(); } } diff --git a/evm/contracts/clients/Verifier.sol b/evm/contracts/clients/Verifier.sol index 9c84f24c43..732473e657 100644 --- a/evm/contracts/clients/Verifier.sol +++ b/evm/contracts/clients/Verifier.sol @@ -46,65 +46,61 @@ contract Verifier is IZKVerifierV2 { // Groth16 alpha point in G1 uint256 constant ALPHA_X = - 12953796731566255356153533186899970596541789506787316310421265866460204452345; + 210400609118751867867594962339236416900807823190943555300977451252876367251; uint256 constant ALPHA_Y = - 16108099332627179116882890117640860610766253379177782725877946988741043002151; + 15114917314049487003769383074865116286536524761334960573881383182006812098667; // Groth16 beta point in G2 in powers of i uint256 constant BETA_NEG_X_0 = - 7189998629544061358868906102425391182345467937747171889044260956112296857453; + 4025695320685928294502537638656612753817559258692794664435345502849231300067; uint256 constant BETA_NEG_X_1 = - 11715211044976611849279736941659181461607821837429796658922621107593979258018; + 18548846535245326130909941053625664549629964661821753718960511623672350665970; uint256 constant BETA_NEG_Y_0 = - 21619939555605977664462722857628766746010558584894478667635551317055122810048; + 11041812570379749260952002555243362169050281371699289540491470062146377949858; uint256 constant BETA_NEG_Y_1 = - 17744148816587107869967191160344383643814015065165838706210713825793780643664; + 7086530552084536928760407590619509472686325136379940088298434085503010610917; // Groth16 gamma point in G2 in powers of i uint256 constant GAMMA_NEG_X_0 = - 3203739780556455486614737616951770238449562962366174174415509385502339079134; + 3871507673786634538856304899308535382710007469487017238115999457851260261753; uint256 constant GAMMA_NEG_X_1 = - 330365480594874048579972851352786169022705988981774516328112713209916814425; + 9263528541268382918393290127320839732843244267184360590957560203659557939807; uint256 constant GAMMA_NEG_Y_0 = - 20727415115882681892016430268352505550338140930514103693522477672680520482110; + 460085126711753980079882291129874808860955437963028782772312595071958830910; uint256 constant GAMMA_NEG_Y_1 = - 11770494869568371860365301978617470999730178637197214918443012817597339833626; + 5659507275301128335480015236667146972531485943427570808675852670599024875145; // Groth16 delta point in G2 in powers of i uint256 constant DELTA_NEG_X_0 = - 144471853326950176158652078814987832244858457888532278798444997831177703256; + 10511954649625640946194391595271440757788300118705902871380699323889590717070; uint256 constant DELTA_NEG_X_1 = - 11723967339734259367269684565753317343894480284660483851808778513760163502167; + 3624887307974581652668788593721111206379446020443390411004753466558440004576; uint256 constant DELTA_NEG_Y_0 = - 8658017305463622670988550192886929502068646694881738953533949013510868981849; + 14620721906662022476476821247254018294642326056513995738211968660558997332653; uint256 constant DELTA_NEG_Y_1 = - 14970547642275722192880833497617759418334101954226638914501320639527882466979; + 8017039972559091515318513919400394779640332862574074418135272025093207644503; // Constant and public input points uint256 constant CONSTANT_X = - 468243475977942096739227064799809074577932864561864594431724289332044119393; + 7548860451745230603118483440705740915442110531593946049093378206268978489889; uint256 constant CONSTANT_Y = - 12026957193107468267989691684356505173830039075560970134183365962992276088502; + 8642676949380445344876359442033848518648809724845273937857877647136985821580; uint256 constant PUB_0_X = - 4273127142915912066836331589937887852131041396580330861495976561450995509060; + 3761607900566975305271041912404145777243969522402194441451368484814115763984; uint256 constant PUB_0_Y = - 20311891790436735379947440583419330671207702790700221333652972975201502172109; + 5236577135937549420013214983430521575368103283652548157969360454835627955674; uint256 constant PUB_1_X = - 5867078984367927991529260476370712193826388223706691841033290533650191497842; + 6551227099151518169715147953582656472887860242160769774314802712412742643231; uint256 constant PUB_1_Y = - 15457584854730416542120021991798916984793483604514831168874602434669080770632; + 1819741224363792162320411058820080302711126963872887137191002940993034590657; uint256 constant PUB_2_X = - 6073935183581261599921354767516829294802045150352674700000707907321520444286; + 14381003547507154363999629345246039179209989264380273368866915523962951751353; uint256 constant PUB_2_Y = - 19421513883482432722033354055257568460031664693915650865773106969145220560478; + 11723454477524607914925823310578875758974497210070578907830734479226804006505; uint256 constant PUB_3_X = - 6573761322005933095907247349767854226263237757268335098982485126002570113042; + 9428637111213429505715745409259434820588419778432030319817634906362966081466; uint256 constant PUB_3_Y = - 21648292561695958729986475933727235437209737383625151779025875934553286731278; - uint256 constant PUB_4_X = - 7850217296098862761033756178241744898548923761706289522462295413515747119164; - uint256 constant PUB_4_Y = - 15481433110471107159567305060748336299937224568483713663114311452391215471632; + 20385940124935492750321915374844475607796921194332338238981177318927052319236; /// Compute the public input linear combination. /// @notice Reverts with PublicInputNotInField if the input is not in the field. @@ -116,7 +112,7 @@ contract Verifier is IZKVerifierV2 { /// @return y The Y coordinate of the resulting G1 point. function publicInputMSM( uint256[2] calldata proofCommitment, - uint256[5] calldata input + uint256[4] calldata input ) internal view returns (bool success, uint256 x, uint256 y) { // Note: The ECMUL precompile does not reject unreduced values, so we check this. // Note: Unrolling this loop does not cost much extra in code-size, the bulk of the @@ -193,19 +189,6 @@ contract Verifier is IZKVerifierV2 { success, staticcall(gas(), PRECOMPILE_ADD, f, 0x80, f, 0x40) ) - mstore(g, PUB_4_X) - mstore(add(g, 0x20), PUB_4_Y) - s := calldataload(add(input, 128)) - mstore(add(g, 0x40), s) - success := and(success, lt(s, R)) - success := and( - success, - staticcall(gas(), PRECOMPILE_MUL, g, 0x60, g, 0x40) - ) - success := and( - success, - staticcall(gas(), PRECOMPILE_ADD, f, 0x80, f, 0x40) - ) x := mload(f) y := mload(add(f, 0x20)) } @@ -223,7 +206,7 @@ contract Verifier is IZKVerifierV2 { function verifyProof( uint256[8] calldata proof, uint256[2] calldata proofCommitment, - uint256[5] calldata input + uint256[4] calldata input ) public view returns (bool) { (bool success, uint256 x, uint256 y) = publicInputMSM( proofCommitment, diff --git a/evm/contracts/core/02-client/IBCClient.sol b/evm/contracts/core/02-client/IBCClient.sol index f19a4208b2..bc0b46124a 100644 --- a/evm/contracts/core/02-client/IBCClient.sol +++ b/evm/contracts/core/02-client/IBCClient.sol @@ -15,7 +15,6 @@ library IBCClientLib { error ErrClientTypeNotFound(); error ErrFailedToCreateClient(); error ErrFailedToUpdateClient(); - error ErrClientNotFound(); } /** @@ -92,7 +91,7 @@ contract IBCClient is IBCStore, IIBCClient { IBCCommitment.clientStateCommitmentKey(msg_.clientId) ] == bytes32(0) ) { - revert IBCClientLib.ErrClientNotFound(); + revert IBCStoreLib.ErrClientNotFound(); } ( bytes32 clientStateCommitment, diff --git a/evm/contracts/core/04-channel/IBCPacket.sol b/evm/contracts/core/04-channel/IBCPacket.sol index 094c658001..3ab07ac543 100644 --- a/evm/contracts/core/04-channel/IBCPacket.sol +++ b/evm/contracts/core/04-channel/IBCPacket.sol @@ -6,7 +6,7 @@ import "../25-handler/IBCMsgs.sol"; import "../02-client/IBCHeight.sol"; import "../24-host/IBCStore.sol"; import "../24-host/IBCCommitment.sol"; -import "../04-channel/IIBCChannel.sol"; +import "../04-channel/IIBCPacket.sol"; import "../05-port/ModuleManager.sol"; import "../05-port/IIBCModule.sol"; @@ -76,7 +76,7 @@ contract IBCPacket is IBCStore, IIBCPacket, ModuleManager { IbcCoreClientV1Height.Data calldata timeoutHeight, uint64 timeoutTimestamp, bytes calldata data - ) external override { + ) external override returns (uint64) { if ( !authenticateCapability( channelCapabilityPath(sourcePort, sourceChannel) @@ -144,6 +144,8 @@ contract IBCPacket is IBCStore, IIBCPacket, ModuleManager { timeoutTimestamp, data ); + + return packetSequence; } /** diff --git a/evm/contracts/core/04-channel/IIBCChannel.sol b/evm/contracts/core/04-channel/IIBCChannel.sol index 32e236180e..aeea8d4c30 100644 --- a/evm/contracts/core/04-channel/IIBCChannel.sol +++ b/evm/contracts/core/04-channel/IIBCChannel.sol @@ -44,49 +44,3 @@ interface IIBCChannelHandshake { IBCMsgs.MsgChannelCloseConfirm calldata msg_ ) external; } - -interface IIBCPacket { - /** - * @dev sendPacket is called by a module in order to send an IBC packet on a channel. - * The packet sequence generated for the packet to be sent is returned. An error - * is returned if one occurs. - */ - function sendPacket( - string calldata sourcePort, - string calldata sourceChannel, - IbcCoreClientV1Height.Data calldata timeoutHeight, - uint64 timeoutTimestamp, - bytes calldata data - ) external; - - /** - * @dev recvPacket is called by a module in order to receive & process an IBC packet - * sent on the corresponding channel end on the counterparty chain. - */ - function recvPacket(IBCMsgs.MsgPacketRecv calldata msg_) external; - - /** - * @dev writeAcknowledgement writes the packet execution acknowledgement to the state, - * which will be verified by the counterparty chain using AcknowledgePacket. - */ - function writeAcknowledgement( - string calldata destinationPortId, - string calldata destinationChannel, - uint64 sequence, - bytes calldata acknowledgement - ) external; - - /** - * @dev AcknowledgePacket is called by a module to process the acknowledgement of a - * packet previously sent by the calling module on a channel to a counterparty - * module on the counterparty chain. Its intended usage is within the ante - * handler. AcknowledgePacket will clean up the packet commitment, - * which is no longer necessary since the packet has been received and acted upon. - * It will also increment NextSequenceAck in case of ORDERED channels. - */ - function acknowledgePacket( - IBCMsgs.MsgPacketAcknowledgement calldata msg_ - ) external; - - function timeoutPacket(IBCMsgs.MsgPacketTimeout calldata msg_) external; -} diff --git a/evm/contracts/core/04-channel/IIBCPacket.sol b/evm/contracts/core/04-channel/IIBCPacket.sol new file mode 100644 index 0000000000..c117aa2ae0 --- /dev/null +++ b/evm/contracts/core/04-channel/IIBCPacket.sol @@ -0,0 +1,53 @@ +pragma solidity ^0.8.23; + +import "../25-handler/IBCMsgs.sol"; + +interface IIBCPacket { + /** + * @dev sendPacket is called by a module in order to send an IBC packet on a channel. + * The packet sequence generated for the packet to be sent is returned. An error + * is returned if one occurs. + */ + function sendPacket( + string calldata sourcePort, + string calldata sourceChannel, + IbcCoreClientV1Height.Data calldata timeoutHeight, + uint64 timeoutTimestamp, + bytes calldata data + ) external returns (uint64); + + /** + * @dev recvPacket is called by a module in order to receive & process an IBC packet + * sent on the corresponding channel end on the counterparty chain. + */ + function recvPacket(IBCMsgs.MsgPacketRecv calldata msg_) external; + + /** + * @dev writeAcknowledgement writes the packet execution acknowledgement to the state, + * which will be verified by the counterparty chain using AcknowledgePacket. + */ + function writeAcknowledgement( + string calldata destinationPortId, + string calldata destinationChannel, + uint64 sequence, + bytes calldata acknowledgement + ) external; + + /** + * @dev AcknowledgePacket is called by a module to process the acknowledgement of a + * packet previously sent by the calling module on a channel to a counterparty + * module on the counterparty chain. Its intended usage is within the ante + * handler. AcknowledgePacket will clean up the packet commitment, + * which is no longer necessary since the packet has been received and acted upon. + * It will also increment NextSequenceAck in case of ORDERED channels. + */ + function acknowledgePacket( + IBCMsgs.MsgPacketAcknowledgement calldata msg_ + ) external; + + /** + * @dev timeoutPacket is called by a module in order to receive & process an IBC packet + * sent on the corresponding channel end on the counterparty chain. + */ + function timeoutPacket(IBCMsgs.MsgPacketTimeout calldata msg_) external; +} diff --git a/evm/contracts/core/25-handler/IBCPacketHandler.sol b/evm/contracts/core/25-handler/IBCPacketHandler.sol index 88d87df4a0..11bd9d4215 100644 --- a/evm/contracts/core/25-handler/IBCPacketHandler.sol +++ b/evm/contracts/core/25-handler/IBCPacketHandler.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.23; import "@openzeppelin/utils/Context.sol"; import "../25-handler/IBCMsgs.sol"; import "../24-host/IBCHost.sol"; -import "../04-channel/IIBCChannel.sol"; +import "../04-channel/IIBCPacket.sol"; import "../05-port/ModuleManager.sol"; /** @@ -23,7 +23,7 @@ abstract contract IBCPacketHandler is IIBCPacket, Context, ModuleManager { IbcCoreClientV1Height.Data calldata timeoutHeight, uint64 timeoutTimestamp, bytes calldata data - ) external virtual override { + ) external virtual override returns (uint64) { passthrough(ibcPacket); } diff --git a/evm/contracts/core/IZKVerifierV2.sol b/evm/contracts/core/IZKVerifierV2.sol index 9f9cb2e089..320b719084 100644 --- a/evm/contracts/core/IZKVerifierV2.sol +++ b/evm/contracts/core/IZKVerifierV2.sol @@ -4,6 +4,6 @@ interface IZKVerifierV2 { function verifyProof( uint256[8] calldata proof, uint256[2] calldata proofCommitment, - uint256[5] calldata input + uint256[4] calldata input ) external returns (bool); } diff --git a/evm/contracts/lib/CometblsHelp.sol b/evm/contracts/lib/CometblsHelp.sol index 50c24fb072..c11b195810 100644 --- a/evm/contracts/lib/CometblsHelp.sol +++ b/evm/contracts/lib/CometblsHelp.sol @@ -37,9 +37,6 @@ library CometblsHelp { bytes constant HMAC_O = hex"1F333139281E100F5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C"; - bytes1 constant ZERO = bytes1(uint8(0)); - bytes1 constant ONE = bytes1(uint8(1)); - // Specialized https://en.wikipedia.org/wiki/HMAC for keccak256 with `CometBLS` as key. // TODO: link whitepaper function hmac_keccak(bytes memory message) internal pure returns (bytes32) { @@ -57,16 +54,6 @@ library CometblsHelp { return (uint256(hmac_keccak(message)) % PRIME_R_MINUS_ONE) + 1; } - // TODO: link whitepaper - function hashToField2( - bytes memory message - ) internal pure returns (uint256, uint256) { - return ( - hashToField(abi.encodePacked(ZERO, message)), - hashToField(abi.encodePacked(ONE, message)) - ); - } - function verifyZKP( IZKVerifierV2 verifier, bytes32 trustedValidatorsHash, @@ -74,7 +61,7 @@ library CometblsHelp { bytes memory message, bytes memory zkp ) internal returns (bool) { - (uint256 messageX, uint256 messageY) = hashToField2(message); + uint256 message = hashToField(message); ( uint256[8] memory proof, @@ -82,11 +69,10 @@ library CometblsHelp { uint256[2] memory proofCommitment ) = abi.decode(zkp, (uint256[8], uint256, uint256[2])); - uint256[5] memory inputs = [ + uint256[4] memory inputs = [ uint256(trustedValidatorsHash), uint256(untrustedValidatorsHash), - messageX, - messageY, + message, // Gnark commitment API extend internal inputs with the following commitment hash and proof commitment // See https://github.com/ConsenSys/gnark/issues/652 commitmentHash diff --git a/evm/evm.nix b/evm/evm.nix index 806ba75829..7b3b67c179 100644 --- a/evm/evm.nix +++ b/evm/evm.nix @@ -108,7 +108,8 @@ wrapProgram $out/bin/forge \ --append-flags "--offline --no-auto-detect" \ --set PATH ${pkgs.lib.makeBinPath [ pkgs.solc ]} \ - --set SSL_CERT_FILE "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt" + --set SSL_CERT_FILE "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt" \ + --set FOUNDRY_CONFIG "${foundryConfig}/foundry.toml" ''; }; networks = [ @@ -134,7 +135,7 @@ deploy = { rpc-url, private-key, path, name, args ? "" }: '' echo "Deploying ${name}..." - ${pkgs.lib.toUpper name}=$(forge create \ + ${pkgs.lib.toUpper name}=$(FOUNDRY_PROFILE=optimized forge create \ --json \ --rpc-url ${rpc-url} \ --private-key ${private-key} \ @@ -284,7 +285,6 @@ buildInputs = [ wrappedForge ]; buildPhase = '' forge --version - cp ${foundryConfig}/foundry.toml . FOUNDRY_PROFILE=optimized forge build --sizes ''; doCheck = true; @@ -315,47 +315,41 @@ ''; }; - solidity-coverage = - pkgs.runCommand "solidity-coverage" - { - buildInputs = [ wrappedForge pkgs.lcov ]; - } '' - FOUNDRY_CONFIG="${foundryConfig}/foundry.toml" \ - FOUNDRY_PROFILE="test" \ - forge coverage --ir-minimum --report lcov - lcov --remove ./lcov.info -o ./lcov.info.pruned \ - '${evmSources}/contracts/proto/*' \ - '${evmSources}/contracts/clients/MockClient.sol' \ - '${evmSources}/contracts/clients/Verifier.sol' \ - '${evmSources}/contracts/apps/ucs/00-pingpong/*' \ - '${evmSources}/contracts/core/DevnetIBCHandlerInit.sol' \ - '${evmSources}/contracts/core/DevnetOwnableIBCHandler.sol' \ - '${evmSources}/contracts/core/OwnableIBCHandler.sol' \ - '${evmSources}/contracts/core/25-handler/IBCQuerier.sol' \ - '${evmSources}/contracts/core/24-host/IBCCommitment.sol' \ - '${evmSources}/tests/*' - genhtml lcov.info.pruned -o $out --branch-coverage - mv lcov.info.pruned $out/lcov.info - ''; - - show-solidity-coverage = pkgs.writeShellApplication { - name = "show-solidity-coverage"; - runtimeInputs = [ ]; - text = '' - xdg-open ${self'.packages.solidity-coverage}/index.html - ''; - }; + # NOTE: currently unable to build the tests with coverage, tried many different combination of the optimizer though... + # solidity-coverage = + # pkgs.runCommand "solidity-coverage" + # { + # buildInputs = [ self'.packages.forge pkgs.lcov ]; + # } '' + # FOUNDRY_PROFILE="test" forge coverage --ir-minimum --report lcov + # lcov --remove ./lcov.info -o ./lcov.info.pruned \ + # '${evmSources}/contracts/proto/*' \ + # '${evmSources}/contracts/clients/MockClient.sol' \ + # '${evmSources}/contracts/clients/Verifier.sol' \ + # '${evmSources}/contracts/apps/ucs/00-pingpong/*' \ + # '${evmSources}/contracts/core/DevnetIBCHandlerInit.sol' \ + # '${evmSources}/contracts/core/DevnetOwnableIBCHandler.sol' \ + # '${evmSources}/contracts/core/OwnableIBCHandler.sol' \ + # '${evmSources}/contracts/core/25-handler/IBCQuerier.sol' \ + # '${evmSources}/contracts/core/24-host/IBCCommitment.sol' \ + # '${evmSources}/tests/*' + # genhtml lcov.info.pruned -o $out --branch-coverage + # mv lcov.info.pruned $out/lcov.info + # ''; + # show-solidity-coverage = pkgs.writeShellApplication { + # name = "show-solidity-coverage"; + # runtimeInputs = [ ]; + # text = '' + # xdg-open ${self'.packages.solidity-coverage}/index.html + # ''; + # }; solidity-build-tests = pkgs.writeShellApplication { name = "run-solidity-build-tests"; runtimeInputs = [ self'.packages.forge ]; text = '' ${ensureAtRepositoryRoot} - FOUNDRY_CONFIG="${foundryConfig}/foundry.toml" \ - FOUNDRY_SRC="evm/contracts" \ - FOUNDRY_PROFILE="test" \ - FOUNDRY_TEST="evm/tests/src" \ - forge test -vvv --gas-report + FOUNDRY_PROFILE="test" forge test -vvv --gas-report ''; }; diff --git a/evm/tests/src/25-handler/IBCChannelHandler.t.sol b/evm/tests/src/25-handler/IBCChannelHandler.t.sol index 5782faa048..1940a5ed4c 100644 --- a/evm/tests/src/25-handler/IBCChannelHandler.t.sol +++ b/evm/tests/src/25-handler/IBCChannelHandler.t.sol @@ -27,7 +27,7 @@ contract TestVerifier is IZKVerifierV2 { function verifyProof( uint256[8] memory proof, uint256[2] memory proofCommitment, - uint256[5] calldata input + uint256[4] calldata input ) external returns (bool) { bool ok = valid > 0; if (valid > 0) { diff --git a/evm/tests/src/25-handler/IBCClientHandler.t.sol b/evm/tests/src/25-handler/IBCClientHandler.t.sol index 4ebb78f115..196f76fa98 100644 --- a/evm/tests/src/25-handler/IBCClientHandler.t.sol +++ b/evm/tests/src/25-handler/IBCClientHandler.t.sol @@ -26,7 +26,7 @@ contract TestVerifier is IZKVerifierV2 { function verifyProof( uint256[8] memory proof, uint256[2] memory proofCommitment, - uint256[5] calldata input + uint256[4] calldata input ) external returns (bool) { bool ok = valid > 0; if (valid > 0) { diff --git a/evm/tests/src/25-handler/IBCConnectionHandler.t.sol b/evm/tests/src/25-handler/IBCConnectionHandler.t.sol index 9bbb0a785c..8cf9745997 100644 --- a/evm/tests/src/25-handler/IBCConnectionHandler.t.sol +++ b/evm/tests/src/25-handler/IBCConnectionHandler.t.sol @@ -20,7 +20,7 @@ contract TestVerifier is IZKVerifierV2 { function verifyProof( uint256[8] memory proof, uint256[2] memory proofCommitment, - uint256[5] calldata input + uint256[4] calldata input ) external returns (bool) { return true; } diff --git a/evm/tests/src/25-handler/IBCPacketHandler.t.sol b/evm/tests/src/25-handler/IBCPacketHandler.t.sol index adce3e93e7..e2fc9f3329 100644 --- a/evm/tests/src/25-handler/IBCPacketHandler.t.sol +++ b/evm/tests/src/25-handler/IBCPacketHandler.t.sol @@ -10,7 +10,7 @@ import {IBCHandler} from "../../../contracts/core/25-handler/IBCHandler.sol"; import {IBCConnection} from "../../../contracts/core/03-connection/IBCConnection.sol"; import {IBCClient} from "../../../contracts/core/02-client/IBCClient.sol"; import {IBCChannelHandshake} from "../../../contracts/core/04-channel/IBCChannelHandshake.sol"; -import {IIBCPacket} from "../../../contracts/core/04-channel/IIBCChannel.sol"; +import {IIBCPacket} from "../../../contracts/core/04-channel/IIBCPacket.sol"; import {IBCPacket, IBCPacketLib} from "../../../contracts/core/04-channel/IBCPacket.sol"; import {IBCMsgs} from "../../../contracts/core/25-handler/IBCMsgs.sol"; import {IbcCoreClientV1Height as ClientHeight} from "../../../contracts/proto/MockClient.sol"; @@ -46,7 +46,7 @@ contract TestVerifier is IZKVerifierV2 { function verifyProof( uint256[8] memory proof, uint256[2] memory proofCommitment, - uint256[5] calldata input + uint256[4] calldata input ) external returns (bool) { bool ok = valid > 0; if (valid > 0) { diff --git a/evm/tests/src/CometblsHelp.t.sol b/evm/tests/src/CometblsHelp.t.sol index 09446cfe21..e2b6c86a4f 100644 --- a/evm/tests/src/CometblsHelp.t.sol +++ b/evm/tests/src/CometblsHelp.t.sol @@ -49,10 +49,10 @@ contract CometblsHelpTests is Test { assertTrue( proxy.verifyZKP( new Verifier(), - 0x09539669AC74E3530F2782443258734DABAC8B8E036ECB9BC378361016892156, - 0x09539669AC74E3530F2782443258734DABAC8B8E036ECB9BC378361016892156, - hex"650802113E0200000000000022480A20B8C88CE47A2AC003E6736975F3AE14517A07E90CBF3293C8E073CF45FB371E79122408011220AC08E7599D7F5682B77E2293928D68A956B2A73E917E5B9F0DBA64B0ED8C2E2F320E756E696F6E2D6465766E65742D31", - hex"21D80AACFCA03DC2B84881E3EF1A73C25D2D088E48AA35764A6B4485A78354F021C90A4CBAAB731658D13CE5152F147DF1734F0196031DAF918BF06DAEA1A4E9082959B87795E28482B4FE13AD4B777F9A2D4BFBC8C3FF2640A5DB5619A8F2DA04D6037DAEA584F0C93EDC769859BE695493F48813E491540C37587C2C3214490AE2C9DC087D8039CAF2BD181E289D60EA9AC8B4BF3411A9F9888DC9250525DD055143FE81924CF683CF8381167431A8CB0C984C9DB2BA13D6C9B2374FFD7323052586453C7C06E234B861E9E212EB4A8DF470BD9ADCDB759FED40E62004ECB8210E3A53A0D1F570552C5118521943BC2CC4BB1DA8A5877667A2800D4DF62665304E914F6631B3CE27C88F21E1E8FFAC6C0512D62AE00BEEA79F649BD6E139BD254011571644878C8A72D167D82B5F409360209E1B8E146457C1893769383F4F2F9C0E2EF22885F92672277AF244840CA6EB5298D74E73334BD88360D6B33681" + 0x1BBACC23BE35969FFCEFC2892440045E83C3C78E81BF2D6473DD745A93835684, + 0x1BBACC23BE35969FFCEFC2892440045E83C3C78E81BF2D6473DD745A93835684, + hex"650802113E0200000000000022480A2053D3DC9F43757EEA63FC3B28C383074A111146B2DE7F73A198D29A6D6919DA6D12240801122023C8BED9455A38334F6462A3EAC87616CF51226F825A229FA23CA420E26730B9320E756E696F6E2D6465766E65742D31", + hex"1BFF5A73FF68B0DAF1F9A29DAD3675762BC346BB36DB701FB5DC80D7FE49C6BE08919D9E16A64159D119278B3BB0EF17DD3703CC3BB6E2FE9E54E84C638EE21829F7FB01533159D70B95F032A99E712D7E06BCCE645D7701615DA5EBAEA75088271F5ECA5E9DAC8D4B1A3CEC0A423F856940D02E5F71B5D9A7C980239987C0D224E1CB5AFE824E7201D959E1B21CBCEE6E0B9BD3B33667741BF7FE201A9A8BA414ACA69E03C3C5DED496B65F02469BC7941AD20E832678BDACF37BD0F7E1A4C50DB32B4A5871AC0584912C09A103FDE335D0A20134C6E2AE52419C84BE775A6C2B4C38DE85412682F66ED405023E9CCEC604B3854B800DFB346EAABF676E844A0EFB9D293D0CC163BAD528AD73B91EDDCDA5FCE49D6ACBA8417D9DC514E1B9FA0C55ADB722120C67CF120CF00225E6B7842A5561772AE1095E30E8FCD7A513370FAD55D57F7794DB096BD7FF7E4373410D04194BE1A1818EFFE5D09F9E08CF8D" ) ); } diff --git a/evm/tests/src/apps/ucs/01-relay/Relay.t.sol b/evm/tests/src/apps/ucs/01-relay/Relay.t.sol index a0e2393e3d..996809ad2f 100644 --- a/evm/tests/src/apps/ucs/01-relay/Relay.t.sol +++ b/evm/tests/src/apps/ucs/01-relay/Relay.t.sol @@ -13,11 +13,12 @@ import {IBCHandler} from "../../../../../contracts/core/25-handler/IBCHandler.so import {IBCConnection} from "../../../../../contracts/core/03-connection/IBCConnection.sol"; import {IBCClient} from "../../../../../contracts/core/02-client/IBCClient.sol"; import {IBCChannelHandshake} from "../../../../../contracts/core/04-channel/IBCChannelHandshake.sol"; -import {IIBCPacket} from "../../../../../contracts/core/04-channel/IIBCChannel.sol"; +import {IIBCPacket} from "../../../../../contracts/core/04-channel/IIBCPacket.sol"; import {IBCPacket} from "../../../../../contracts/core/04-channel/IBCPacket.sol"; contract IBCHandlerFake is IBCHandler { IbcCoreChannelV1Packet.Data[] packets; + uint64 sequence; constructor() IBCHandler( @@ -34,10 +35,12 @@ contract IBCHandlerFake is IBCHandler { IbcCoreClientV1Height.Data calldata timeoutHeight, uint64 timeoutTimestamp, bytes calldata data - ) external override { + ) external override returns (uint64) { + uint64 packetSequence = sequence; + sequence++; packets.push( IbcCoreChannelV1Packet.Data({ - sequence: 0, + sequence: packetSequence, source_port: sourcePort, source_channel: sourceChannel, destination_port: "dummy-port", @@ -47,6 +50,7 @@ contract IBCHandlerFake is IBCHandler { timeout_timestamp: timeoutTimestamp }) ); + return packetSequence; } function lastPacket() @@ -63,13 +67,14 @@ contract RelayTests is Test { using strings for *; IBCHandlerFake ibcHandler; + IRelay relay; - constructor() { + function setUp() public { ibcHandler = new IBCHandlerFake(); + relay = new UCS01Relay(ibcHandler); } function initChannel( - UCS01Relay relay, string memory sourcePort, string memory sourceChannel, string memory destinationPort, @@ -90,27 +95,21 @@ contract RelayTests is Test { ); } - function createRelay( + function initRelay( string memory sourcePort, string memory sourceChannel, string memory destinationPort, string memory destinationChannel - ) public returns (UCS01Relay) { - UCS01Relay relay = new UCS01Relay(ibcHandler); - + ) public { initChannel( - relay, destinationPort, destinationChannel, sourcePort, sourceChannel ); - - return relay; } function sendLocalToken( - UCS01Relay relay, string memory sourcePort, string memory sourceChannel, address sender, @@ -141,7 +140,6 @@ contract RelayTests is Test { } function sendRemoteToken( - UCS01Relay relay, string memory sourcePort, string memory sourceChannel, bytes memory sender, @@ -172,7 +170,6 @@ contract RelayTests is Test { } function receiveRemoteToken( - UCS01Relay relay, uint64 sequence, string memory sourcePort, string memory sourceChannel, @@ -261,9 +258,9 @@ contract RelayTests is Test { string memory destinationPort, string memory destinationChannel ) public { - UCS01Relay relay = new UCS01Relay(ibcHandler); + IRelay r = new UCS01Relay(ibcHandler); vm.expectRevert(IBCAppLib.ErrNotIBC.selector); - relay.onChanOpenInit( + r.onChanOpenInit( IbcCoreChannelV1GlobalEnums.Order.ORDER_UNORDERED, new string[](0), destinationPort, @@ -282,10 +279,10 @@ contract RelayTests is Test { string memory destinationPort, string memory destinationChannel ) public { - UCS01Relay relay = new UCS01Relay(ibcHandler); + IRelay r = new UCS01Relay(ibcHandler); vm.expectRevert(RelayLib.ErrInvalidProtocolVersion.selector); vm.prank(address(ibcHandler)); - relay.onChanOpenInit( + r.onChanOpenInit( IbcCoreChannelV1GlobalEnums.Order.ORDER_UNORDERED, new string[](0), destinationPort, @@ -304,10 +301,10 @@ contract RelayTests is Test { string memory destinationPort, string memory destinationChannel ) public { - UCS01Relay relay = new UCS01Relay(ibcHandler); + IRelay r = new UCS01Relay(ibcHandler); vm.expectRevert(RelayLib.ErrInvalidProtocolOrdering.selector); vm.prank(address(ibcHandler)); - relay.onChanOpenInit( + r.onChanOpenInit( IbcCoreChannelV1GlobalEnums.Order.ORDER_ORDERED, new string[](0), destinationPort, @@ -326,9 +323,9 @@ contract RelayTests is Test { string memory destinationPort, string memory destinationChannel ) public { - UCS01Relay relay = new UCS01Relay(ibcHandler); + IRelay r = new UCS01Relay(ibcHandler); vm.prank(address(ibcHandler)); - relay.onChanOpenInit( + r.onChanOpenInit( IbcCoreChannelV1GlobalEnums.Order.ORDER_UNORDERED, new string[](0), destinationPort, @@ -339,7 +336,7 @@ contract RelayTests is Test { }), RelayLib.VERSION ); - IbcCoreChannelV1Counterparty.Data memory counterparty = relay + IbcCoreChannelV1Counterparty.Data memory counterparty = r .getCounterpartyEndpoint(destinationPort, destinationChannel); assertEq(counterparty.port_id, sourcePort); assertEq(counterparty.channel_id, sourceChannel); @@ -351,9 +348,9 @@ contract RelayTests is Test { string memory destinationPort, string memory destinationChannel ) public { - UCS01Relay relay = new UCS01Relay(ibcHandler); + IRelay r = new UCS01Relay(ibcHandler); vm.expectRevert(IBCAppLib.ErrNotIBC.selector); - relay.onChanOpenTry( + r.onChanOpenTry( IbcCoreChannelV1GlobalEnums.Order.ORDER_UNORDERED, new string[](0), destinationPort, @@ -373,9 +370,9 @@ contract RelayTests is Test { string memory destinationPort, string memory destinationChannel ) public { - UCS01Relay relay = new UCS01Relay(ibcHandler); + IRelay r = new UCS01Relay(ibcHandler); vm.prank(address(ibcHandler)); - relay.onChanOpenTry( + r.onChanOpenTry( IbcCoreChannelV1GlobalEnums.Order.ORDER_UNORDERED, new string[](0), destinationPort, @@ -387,7 +384,7 @@ contract RelayTests is Test { RelayLib.VERSION, RelayLib.VERSION ); - IbcCoreChannelV1Counterparty.Data memory counterparty = relay + IbcCoreChannelV1Counterparty.Data memory counterparty = r .getCounterpartyEndpoint(destinationPort, destinationChannel); assertEq(counterparty.port_id, sourcePort); assertEq(counterparty.channel_id, sourceChannel); @@ -399,10 +396,10 @@ contract RelayTests is Test { string memory destinationPort, string memory destinationChannel ) public { - UCS01Relay relay = new UCS01Relay(ibcHandler); + IRelay r = new UCS01Relay(ibcHandler); vm.expectRevert(RelayLib.ErrInvalidProtocolVersion.selector); vm.prank(address(ibcHandler)); - relay.onChanOpenTry( + r.onChanOpenTry( IbcCoreChannelV1GlobalEnums.Order.ORDER_UNORDERED, new string[](0), destinationPort, @@ -422,10 +419,10 @@ contract RelayTests is Test { string memory destinationPort, string memory destinationChannel ) public { - UCS01Relay relay = new UCS01Relay(ibcHandler); + IRelay r = new UCS01Relay(ibcHandler); vm.expectRevert(RelayLib.ErrInvalidProtocolOrdering.selector); vm.prank(address(ibcHandler)); - relay.onChanOpenTry( + r.onChanOpenTry( IbcCoreChannelV1GlobalEnums.Order.ORDER_ORDERED, new string[](0), destinationPort, @@ -445,12 +442,12 @@ contract RelayTests is Test { string memory destinationPort, string memory destinationChannel ) public { - UCS01Relay relay = new UCS01Relay(ibcHandler); + IRelay r = new UCS01Relay(ibcHandler); vm.expectRevert( RelayLib.ErrInvalidCounterpartyProtocolVersion.selector ); vm.prank(address(ibcHandler)); - relay.onChanOpenTry( + r.onChanOpenTry( IbcCoreChannelV1GlobalEnums.Order.ORDER_UNORDERED, new string[](0), destinationPort, @@ -469,9 +466,9 @@ contract RelayTests is Test { string memory destinationPort, string memory destinationChannel ) public { - UCS01Relay relay = new UCS01Relay(ibcHandler); + IRelay r = new UCS01Relay(ibcHandler); vm.expectRevert(IBCAppLib.ErrNotIBC.selector); - relay.onChanOpenAck( + r.onChanOpenAck( destinationPort, destinationChannel, sourceChannel, @@ -484,12 +481,12 @@ contract RelayTests is Test { string memory destinationPort, string memory destinationChannel ) public { - UCS01Relay relay = new UCS01Relay(ibcHandler); + IRelay r = new UCS01Relay(ibcHandler); vm.expectRevert( RelayLib.ErrInvalidCounterpartyProtocolVersion.selector ); vm.prank(address(ibcHandler)); - relay.onChanOpenAck( + r.onChanOpenAck( destinationPort, destinationChannel, sourceChannel, @@ -503,9 +500,9 @@ contract RelayTests is Test { string memory destinationPort, string memory destinationChannel ) public { - UCS01Relay relay = new UCS01Relay(ibcHandler); + IRelay r = new UCS01Relay(ibcHandler); vm.prank(address(ibcHandler)); - relay.onChanOpenInit( + r.onChanOpenInit( IbcCoreChannelV1GlobalEnums.Order.ORDER_UNORDERED, new string[](0), destinationPort, @@ -516,18 +513,18 @@ contract RelayTests is Test { }), RelayLib.VERSION ); - IbcCoreChannelV1Counterparty.Data memory counterparty = relay + IbcCoreChannelV1Counterparty.Data memory counterparty = r .getCounterpartyEndpoint(destinationPort, destinationChannel); assertEq(counterparty.port_id, sourcePort); assertEq(counterparty.channel_id, ""); vm.prank(address(ibcHandler)); - relay.onChanOpenAck( + r.onChanOpenAck( destinationPort, destinationChannel, sourceChannel, RelayLib.VERSION ); - counterparty = relay.getCounterpartyEndpoint( + counterparty = r.getCounterpartyEndpoint( destinationPort, destinationChannel ); @@ -539,56 +536,56 @@ contract RelayTests is Test { string memory destinationPort, string memory destinationChannel ) public { - UCS01Relay relay = new UCS01Relay(ibcHandler); + IRelay r = new UCS01Relay(ibcHandler); vm.expectRevert(IBCAppLib.ErrNotIBC.selector); - relay.onChanOpenConfirm(destinationPort, destinationChannel); + r.onChanOpenConfirm(destinationPort, destinationChannel); } function test_openConfirm( string memory destinationPort, string memory destinationChannel ) public { - UCS01Relay relay = new UCS01Relay(ibcHandler); + IRelay r = new UCS01Relay(ibcHandler); vm.prank(address(ibcHandler)); - relay.onChanOpenConfirm(destinationPort, destinationChannel); + r.onChanOpenConfirm(destinationPort, destinationChannel); } function test_closeInit_onlyIBC( string memory destinationPort, string memory destinationChannel ) public { - UCS01Relay relay = new UCS01Relay(ibcHandler); + IRelay r = new UCS01Relay(ibcHandler); vm.expectRevert(IBCAppLib.ErrNotIBC.selector); - relay.onChanCloseInit(destinationPort, destinationChannel); + r.onChanCloseInit(destinationPort, destinationChannel); } function test_closeInit_impossible( string memory destinationPort, string memory destinationChannel ) public { - UCS01Relay relay = new UCS01Relay(ibcHandler); + IRelay r = new UCS01Relay(ibcHandler); vm.expectRevert(RelayLib.ErrUnstoppable.selector); vm.prank(address(ibcHandler)); - relay.onChanCloseInit(destinationPort, destinationChannel); + r.onChanCloseInit(destinationPort, destinationChannel); } function test_closeConfirm_onlyIBC( string memory destinationPort, string memory destinationChannel ) public { - UCS01Relay relay = new UCS01Relay(ibcHandler); + IRelay r = new UCS01Relay(ibcHandler); vm.expectRevert(IBCAppLib.ErrNotIBC.selector); - relay.onChanCloseConfirm(destinationPort, destinationChannel); + r.onChanCloseConfirm(destinationPort, destinationChannel); } function test_closeConfirm_impossible( string memory destinationPort, string memory destinationChannel ) public { - UCS01Relay relay = new UCS01Relay(ibcHandler); + IRelay r = new UCS01Relay(ibcHandler); vm.expectRevert(RelayLib.ErrUnstoppable.selector); vm.prank(address(ibcHandler)); - relay.onChanCloseConfirm(destinationPort, destinationChannel); + r.onChanCloseConfirm(destinationPort, destinationChannel); } function test_onRecvPacketProcessing_onlySelf( @@ -602,10 +599,10 @@ contract RelayTests is Test { uint64 timeoutTimestamp, address relayer ) public { - UCS01Relay relay = new UCS01Relay(ibcHandler); + UCS01Relay r = new UCS01Relay(ibcHandler); vm.expectRevert(RelayLib.ErrUnauthorized.selector); vm.prank(address(ibcHandler)); - relay.onRecvPacketProcessing( + r.onRecvPacketProcessing( IbcCoreChannelV1Packet.Data({ sequence: sequence, source_port: sourcePort, @@ -634,10 +631,10 @@ contract RelayTests is Test { uint64 timeoutTimestamp, address relayer ) public { - UCS01Relay relay = new UCS01Relay(ibcHandler); + IRelay r = new UCS01Relay(ibcHandler); vm.record(); vm.expectRevert(IBCAppLib.ErrNotIBC.selector); - relay.onRecvPacket( + r.onRecvPacket( IbcCoreChannelV1Packet.Data({ sequence: sequence, source_port: sourcePort, @@ -666,10 +663,10 @@ contract RelayTests is Test { uint64 timeoutTimestamp, address relayer ) public { - UCS01Relay relay = new UCS01Relay(ibcHandler); + IRelay r = new UCS01Relay(ibcHandler); vm.record(); vm.prank(address(ibcHandler)); - bytes memory acknowledgement = relay.onRecvPacket( + bytes memory acknowledgement = r.onRecvPacket( IbcCoreChannelV1Packet.Data({ sequence: sequence, source_port: sourcePort, @@ -711,7 +708,7 @@ contract RelayTests is Test { vm.assume(relayer != address(0)); vm.assume(amount > 0); - UCS01Relay relay = createRelay( + initRelay( destinationPort, destinationChannel, sourcePort, @@ -820,7 +817,7 @@ contract RelayTests is Test { vm.assume(relayer != address(0)); vm.assume(amount > 0); - UCS01Relay relay = createRelay( + initRelay( destinationPort, destinationChannel, sourcePort, @@ -828,7 +825,6 @@ contract RelayTests is Test { ); receiveRemoteToken( - relay, sequence, sourcePort, sourceChannel, @@ -858,7 +854,7 @@ contract RelayTests is Test { vm.assume(sender != address(0)); vm.assume(amount > 0); - UCS01Relay relay = createRelay( + initRelay( destinationPort, destinationChannel, sourcePort, @@ -930,7 +926,7 @@ contract RelayTests is Test { vm.assume(relayer != address(0)); vm.assume(amount > 0); - UCS01Relay relay = createRelay( + initRelay( destinationPort, destinationChannel, sourcePort, @@ -938,7 +934,6 @@ contract RelayTests is Test { ); receiveRemoteToken( - relay, sequence, sourcePort, sourceChannel, @@ -1019,7 +1014,7 @@ contract RelayTests is Test { vm.assume(relayer != address(0)); vm.assume(amount > 0); - UCS01Relay relay = createRelay( + initRelay( destinationPort, destinationChannel, sourcePort, @@ -1027,7 +1022,6 @@ contract RelayTests is Test { ); address denomAddress = sendLocalToken( - relay, destinationPort, destinationChannel, sender, @@ -1057,7 +1051,7 @@ contract RelayTests is Test { vm.assume(relayer != address(0)); vm.assume(amount > 0); - UCS01Relay relay = createRelay( + initRelay( destinationPort, destinationChannel, sourcePort, @@ -1065,7 +1059,6 @@ contract RelayTests is Test { ); address denomAddress = sendLocalToken( - relay, destinationPort, destinationChannel, sender, @@ -1131,7 +1124,7 @@ contract RelayTests is Test { vm.assume(relayer != address(0)); vm.assume(amount > 0); - UCS01Relay relay = createRelay( + initRelay( destinationPort, destinationChannel, sourcePort, @@ -1139,7 +1132,6 @@ contract RelayTests is Test { ); receiveRemoteToken( - relay, sequence, sourcePort, sourceChannel, @@ -1160,7 +1152,6 @@ contract RelayTests is Test { ); sendRemoteToken( - relay, destinationPort, destinationChannel, sender, @@ -1212,7 +1203,7 @@ contract RelayTests is Test { vm.assume(relayer != address(0)); vm.assume(amount > 0); - UCS01Relay relay = createRelay( + initRelay( destinationPort, destinationChannel, sourcePort, @@ -1220,7 +1211,6 @@ contract RelayTests is Test { ); address denomAddress = sendLocalToken( - relay, destinationPort, destinationChannel, sender, @@ -1290,7 +1280,7 @@ contract RelayTests is Test { vm.assume(relayer != address(0)); vm.assume(amount > 0); - UCS01Relay relay = createRelay( + initRelay( destinationPort, destinationChannel, sourcePort, @@ -1298,7 +1288,6 @@ contract RelayTests is Test { ); receiveRemoteToken( - relay, sequence, sourcePort, sourceChannel, @@ -1319,7 +1308,6 @@ contract RelayTests is Test { ); sendRemoteToken( - relay, destinationPort, destinationChannel, sender, @@ -1375,7 +1363,7 @@ contract RelayTests is Test { vm.assume(relayer != address(0)); vm.assume(amount > 0); - UCS01Relay relay = createRelay( + initRelay( destinationPort, destinationChannel, sourcePort, @@ -1383,7 +1371,6 @@ contract RelayTests is Test { ); address denomAddress = sendLocalToken( - relay, destinationPort, destinationChannel, sender, @@ -1428,7 +1415,7 @@ contract RelayTests is Test { vm.assume(relayer != address(0)); vm.assume(amount > 0); - UCS01Relay relay = createRelay( + initRelay( destinationPort, destinationChannel, sourcePort, @@ -1436,7 +1423,6 @@ contract RelayTests is Test { ); receiveRemoteToken( - relay, sequence, sourcePort, sourceChannel, @@ -1457,7 +1443,6 @@ contract RelayTests is Test { ); sendRemoteToken( - relay, destinationPort, destinationChannel, sender, diff --git a/galoisd/ARCHITECTURE.md b/galoisd/ARCHITECTURE.md index 77889b8afa..d7bc05881a 100644 --- a/galoisd/ARCHITECTURE.md +++ b/galoisd/ARCHITECTURE.md @@ -9,9 +9,9 @@ We decided to implements the circuit on top of [Gnark](https://github.com/Consen Galois includes the following **gadgets** that are not yet available in Gnark: - a **merkle** gadget to re-compute the validator set MiMC merkle root in-circuit. -- a **emulated** gadget for `BN254` emulated $G_2$ arithmetic: addition, multiplication, scalar multiplication, mapping to curve and cofactor clearing. +- a **emulated** gadget for `BN254` emulated $G_2$ arithmetic: addition, multiplication, scalar multiplication, hashing to curve and cofactor clearing. - a **bls** gadget on top of emulated arithmetic for public key aggregation and signature verification. -- a **lightclient** gadget to verify CometBLS (non-)adjacent transition between blocks (public key aggregation, power threshold validation and signature verification). +- a **lightclient** gadget to verify CometBLS (non-)adjacent transition signature between blocks (public key aggregation, validator set root verification, voting power threshold validation and signature verification). ## gRPC diff --git a/galoisd/cmd/galoisd/cmd/client.go b/galoisd/cmd/galoisd/cmd/client.go index 566b62f092..e9ee380964 100644 --- a/galoisd/cmd/galoisd/cmd/client.go +++ b/galoisd/cmd/galoisd/cmd/client.go @@ -3,7 +3,7 @@ package cmd import ( "context" "crypto/tls" - provergrpc "galois/grpc/api/v1" + provergrpc "galois/grpc/api/v2" "github.com/spf13/cobra" "google.golang.org/grpc" "google.golang.org/grpc/credentials" diff --git a/galoisd/cmd/galoisd/cmd/example_prove.go b/galoisd/cmd/galoisd/cmd/example_prove.go index 421c2f0931..f7b6b3a255 100644 --- a/galoisd/cmd/galoisd/cmd/example_prove.go +++ b/galoisd/cmd/galoisd/cmd/example_prove.go @@ -4,7 +4,7 @@ import ( "context" "crypto/rand" "fmt" - provergrpc "galois/grpc/api/v1" + provergrpc "galois/grpc/api/v2" "math/big" "strconv" diff --git a/galoisd/cmd/galoisd/cmd/example_prove16.go b/galoisd/cmd/galoisd/cmd/example_prove16.go deleted file mode 100644 index bc9d926aa2..0000000000 --- a/galoisd/cmd/galoisd/cmd/example_prove16.go +++ /dev/null @@ -1,872 +0,0 @@ -package cmd - -import ( - "context" - "encoding/base64" - "encoding/hex" - "fmt" - provergrpc "galois/grpc/api/v1" - "log" - "math/big" - - "cosmossdk.io/math" - cometbn254 "github.com/cometbft/cometbft/crypto/bn254" - ce "github.com/cometbft/cometbft/crypto/encoding" - "github.com/cometbft/cometbft/proto/tendermint/types" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/spf13/cobra" -) - -// Example call to the prover `Prove` endpoint using hardcoded values dumped from a local devnet. -// The sole purpose of this command is to see a live example and understand how to interact with the prover. -func ExampleProve16Cmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "example-prove16 [uri]", - Args: cobra.ExactArgs(1), - RunE: MakeCobra(func(ctx context.Context, client provergrpc.UnionProverAPIClient, cmd *cobra.Command, args []string) error { - decodeB64 := func(s string) []byte { - bz, err := base64.StdEncoding.DecodeString(s) - if err != nil { - log.Fatal(err) - } - return bz - } - - // Nb of tokens for each val in devnet - tokens, success := new(big.Int).SetString("1000000000000000000000", 10) - if !success { - log.Fatal("Impossible; qed;") - } - - toValidator := func(pubKey []byte) *types.SimpleValidator { - protoPK, err := ce.PubKeyToProto(cometbn254.PubKey(pubKey)) - if err != nil { - log.Fatal(err) - } - return &types.SimpleValidator{ - PubKey: &protoPK, - VotingPower: sdk.TokensToConsensusPower(math.NewIntFromBigInt(tokens), sdk.DefaultPowerReduction), - } - } - - // cSpell:disable - /* - { - "block_id": { - "hash": "3CECE4F2364BFA92040E6217FE7D43DA93F09F02FB5269177214BCDEF05298E1", - "parts": { - "total": 1, - "hash": "749946B107F3BE49728999F84FD7E16C4BC028C6E6538F8A287DE04203AC10A1" - } - }, - "block": { - "header": { - "version": { - "block": "11" - }, - "chain_id": "union-devnet-1", - "height": "1", - "time": "2023-09-18T19:40:37.830641577Z", - "last_block_id": { - "hash": "", - "parts": { - "total": 0, - "hash": "" - } - }, - "last_commit_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "validators_hash": "D7622F989219A191951500F2829907D31B1F05FC200D6250392B6FB3060DA6E8", - "next_validators_hash": "D7622F989219A191951500F2829907D31B1F05FC200D6250392B6FB3060DA6E8", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "proposer_address": "00B978986867D21B0A93DACD62A7EDD3D913F3D9" - }, - "data": { - "txs": null - }, - "evidence": { - "evidence": null - }, - "last_commit": { - "height": "0", - "round": 0, - "block_id": { - "hash": "", - "parts": { - "total": 0, - "hash": "" - } - }, - "signatures": null - } - } - } - - - { - "block_id": { - "hash": "0E9922F487B1F1AD2821680748DB17AF5E5A5A396B6D4147C1030A377DDEEC97", - "parts": { - "total": 1, - "hash": "EBE618A59041FA8455EC79659205A630D5F8C7A52995A87CD31A49462E367002" - } - }, - "block": { - "header": { - "version": { - "block": "11" - }, - "chain_id": "union-devnet-1", - "height": "2", - "time": "2023-09-19T10:35:41.311344117Z", - "last_block_id": { - "hash": "3CECE4F2364BFA92040E6217FE7D43DA93F09F02FB5269177214BCDEF05298E1", - "parts": { - "total": 1, - "hash": "749946B107F3BE49728999F84FD7E16C4BC028C6E6538F8A287DE04203AC10A1" - } - }, - "last_commit_hash": "723767B95D280F25099CC97FE44F05CEE0B1264A5531694044F11007EB942314", - "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "validators_hash": "D7622F989219A191951500F2829907D31B1F05FC200D6250392B6FB3060DA6E8", - "next_validators_hash": "D7622F989219A191951500F2829907D31B1F05FC200D6250392B6FB3060DA6E8", - "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", - "app_hash": "3D1B75075A78904B83905F434461DDC7F047E3C1CA789433F7603F782CB2135E", - "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", - "proposer_address": "0C26B59A0B65D191A86D969D5D3F2DC40DD9C977" - }, - "data": { - "txs": null - }, - "evidence": { - "evidence": null - }, - "last_commit": { - "height": "1", - "round": 0, - "block_id": { - "hash": "3CECE4F2364BFA92040E6217FE7D43DA93F09F02FB5269177214BCDEF05298E1", - "parts": { - "total": 1, - "hash": "749946B107F3BE49728999F84FD7E16C4BC028C6E6538F8A287DE04203AC10A1" - } - }, - "signatures": [ - { - "block_id_flag": 2, - "validator_address": "00B978986867D21B0A93DACD62A7EDD3D913F3D9", - "timestamp": "2023-09-19T10:35:41.311468435Z", - "signature": "lBIMmBoSo0jcJfFtwpZVzpltsZeBPYk+WLpaokCHoYUgU4d9n2GtSvfOBG7XQKf5DZNaKM+7JvnAuFrKiM8qeA==" - }, - { - "block_id_flag": 2, - "validator_address": "0C26B59A0B65D191A86D969D5D3F2DC40DD9C977", - "timestamp": "2023-09-19T10:35:41.317548709Z", - "signature": "jTFVLTwKgONfRq/9HHqRTYFIYUzQo/Qxs2UrhtRDLYcrQiarjXecINudtZ1FXTvHXr6irOimrrqixZ5Hq2BVmw==" - }, - { - "block_id_flag": 2, - "validator_address": "196D6009588DA28CF40039C957A53B08104723F9", - "timestamp": "2023-09-19T10:35:41.317615216Z", - "signature": "x9uPPVyOrwEtd+2vwYu2k90rr2qtDnXqyBo1Twl66hYQgeY42nuuRdAIgB1jTxjPFxhw9/TzzrkG1gh1gOOGlw==" - }, - { - "block_id_flag": 2, - "validator_address": "19963640A11B2EC4F08E5B5000CD30D8641AA569", - "timestamp": "2023-09-19T10:35:41.311339439Z", - "signature": "1W3/De1lakrcHWK/M7y2ikKNbX1925MYUE+X28DG1S0b6gMY50omYl7V/z1pBgGmbSMLRjyGYCWLXIGtthNZhw==" - }, - { - "block_id_flag": 2, - "validator_address": "245DC189905D4F57D26EAE5120377707ED56ECA0", - "timestamp": "2023-09-19T10:35:41.317560283Z", - "signature": "ihNyjyK1No97Nz0/jsc1oDueaIfMwEAYpt9aZZyW7zMYxpq17D8mWAjXpDOg015W09ZNK5d03a1HRotNMcLXMw==" - }, - { - "block_id_flag": 2, - "validator_address": "257BC7E3F7BAD2C5EB1A11318003FE6CB5A52BE5", - "timestamp": "2023-09-19T10:35:41.303518751Z", - "signature": "w6u2qCzMNILalSua6Jr9c3R23c35hTH7ppuCpVho9p4YkStg3wuvVrXmrtpth3bJjua8SPs6ZtcBrigwrLj0Rg==" - }, - { - "block_id_flag": 2, - "validator_address": "2DCE4E05E127F97B23F8099E4D1DBDEB7587DC8B", - "timestamp": "2023-09-19T10:35:41.311422879Z", - "signature": "n8OQzqpYl5vvRFhBSkNsTHHi+qAH6Nw4xMxpHqRb6rIj1NM9BCDg9uW7tt8qRmJb2V6kqL6OcPq8gsISF0X+LA==" - }, - { - "block_id_flag": 2, - "validator_address": "36E1644D94064ED11521041E9138A0D1CCA9C31C", - "timestamp": "2023-09-19T10:35:41.508361788Z", - "signature": "7l/Ro9QII39SX1Pzjjs1LX0pMXB9m6GFHV+Rf6gRhuoBXcoT9CClA8ItHokeaO7ijCzI2CEUICzgFysaE2nKsw==" - }, - { - "block_id_flag": 2, - "validator_address": "4CE57693C82B50F830731DAB14FA759327762456", - "timestamp": "2023-09-19T10:35:41.303517231Z", - "signature": "q8n1IEwXBf7PtsexuFKBKxonbzTGJrQINwGtjmA3hYUFx8+ejOGjDwB6KEjgVodGV6A7KKLGoArVWZKLcMvnoQ==" - }, - { - "block_id_flag": 2, - "validator_address": "503662ECE25CF73487F100EDD02D775EEFEFCD0E", - "timestamp": "2023-09-19T10:35:41.305274844Z", - "signature": "zA5EYZUYXU7ApTRRVwzlXsGubbOr4WsICo+d3ikoo3YkBBuPqtQQ01Tx91WOqB34TOVK8dvBIgGwR3KoDqMJ7w==" - }, - { - "block_id_flag": 2, - "validator_address": "94FEEE87198F3AD180733D7B3C10FD2F150C3E62", - "timestamp": "2023-09-19T10:35:41.311344117Z", - "signature": "5suzZsuuzvE8iCESiiZ30RalvUljUFZwZgtJtkpxKUkmElVpVCxzrDTi7MpqzhuSmqqIHSzwutOXbji8SH2GOQ==" - }, - { - "block_id_flag": 2, - "validator_address": "C5AFE5C76192ACD502AB9D9D88CBC9C75597C411", - "timestamp": "2023-09-19T10:35:41.4058391Z", - "signature": "yL99BSFXDR5DTGJjlIp0FcwWnIYDVOYbHTHDtL99hzIZsY8Cl6ZNRAfJbCUoUlJdNx4Tg6EXi8Itfkypkm/6kQ==" - }, - { - "block_id_flag": 2, - "validator_address": "D619CD0E08ED87F92BB7BC2171071CFAC7BE1A4B", - "timestamp": "2023-09-19T10:35:41.303519341Z", - "signature": "7fFHIB6pG65TQCxxcj9bICHrZ9O1iPmKW7QfQL4902AjRiChsSOdc5UsccdwayzjI6Jg0rDk+Omg2PWdF391dQ==" - }, - { - "block_id_flag": 2, - "validator_address": "DFA8398671155E09BBA8244C2D7C295F980F4A2A", - "timestamp": "2023-09-19T10:35:41.514480165Z", - "signature": "rIEUr8Gt+CWiIJI+rDmuuwsIWk/5RQAJ3lOpd+Lpux8E7R0IafXV1DsjrWdPOzeBbbT9b/5reHvZAJIc2zCVsg==" - }, - { - "block_id_flag": 2, - "validator_address": "EFB1D8B3A56D97F2AB24AC5F0B04F48535F74DA9", - "timestamp": "2023-09-19T10:35:41.213336321Z", - "signature": "kY52piLql5OBdkGqbJ60ruJOlUZ91OCXAskx8YyB0XkKa+WcJAiHGsKyoe9gOLhnv3k5cFOJSkCJ6FeE12/e1w==" - }, - { - "block_id_flag": 2, - "validator_address": "F3A5615BEB78B0D297FE37254433D7C0C367158A", - "timestamp": "2023-09-19T10:35:41.311341594Z", - "signature": "rsnq7gcKdEYtPi9NL01QNErl6SO12VIqliiYu3S0cLwL3AFe/6q6a6G1KyRj5gWmql//fQI5Un3NtrVqIMKhng==" - } - ] - } - } - } - - - { - "pagination": { - "next_key": null, - "total": "0" - }, - "validators": [ - { - "commission": { - "commission_rates": { - "max_change_rate": "0.010000000000000000", - "max_rate": "0.200000000000000000", - "rate": "0.100000000000000000" - }, - "update_time": "2023-09-18T19:40:37.830641577Z" - }, - "consensus_pubkey": { - "@type": "/cosmos.crypto.bn254.PubKey", - "key": "ley/CHKtnWvu5aVxbfU9jgcWRkWV+j2bSmYNqgK8nAY=" - }, - "delegator_shares": "1000000000000000000000.000000000000000000", - "description": { - "details": "", - "identity": "", - "moniker": "validator-12", - "security_contact": "", - "website": "" - }, - "jailed": false, - "min_self_delegation": "1", - "operator_address": "unionvaloper1xy8p8c8v6lkjflp4svsfe5jwqny9f36e3mtgyp", - "status": "BOND_STATUS_BONDED", - "tokens": "1000000000000000000000", - "unbonding_height": "0", - "unbonding_ids": [], - "unbonding_on_hold_ref_count": "0", - "unbonding_time": "1970-01-01T00:00:00Z" - }, - { - "commission": { - "commission_rates": { - "max_change_rate": "0.010000000000000000", - "max_rate": "0.200000000000000000", - "rate": "0.100000000000000000" - }, - "update_time": "2023-09-18T19:40:37.830641577Z" - }, - "consensus_pubkey": { - "@type": "/cosmos.crypto.bn254.PubKey", - "key": "mMjsEy9PZLJLGURHF1KXRlpgdS38eCbztA/wYUUuO+w=" - }, - "delegator_shares": "1000000000000000000000.000000000000000000", - "description": { - "details": "", - "identity": "", - "moniker": "validator-5", - "security_contact": "", - "website": "" - }, - "jailed": false, - "min_self_delegation": "1", - "operator_address": "unionvaloper1fhw5vm4mxxv3t3nftp2y5g5r0xyy270eg70rgs", - "status": "BOND_STATUS_BONDED", - "tokens": "1000000000000000000000", - "unbonding_height": "0", - "unbonding_ids": [], - "unbonding_on_hold_ref_count": "0", - "unbonding_time": "1970-01-01T00:00:00Z" - }, - { - "commission": { - "commission_rates": { - "max_change_rate": "0.010000000000000000", - "max_rate": "0.200000000000000000", - "rate": "0.100000000000000000" - }, - "update_time": "2023-09-18T19:40:37.830641577Z" - }, - "consensus_pubkey": { - "@type": "/cosmos.crypto.bn254.PubKey", - "key": "gAM5W+LDW4eFkZw2n3WDmCCd565WTDd5E7L2L7yzOW8=" - }, - "delegator_shares": "1000000000000000000000.000000000000000000", - "description": { - "details": "", - "identity": "", - "moniker": "validator-10", - "security_contact": "", - "website": "" - }, - "jailed": false, - "min_self_delegation": "1", - "operator_address": "unionvaloper12j6c882v773tjcyqrd7z086yttfjz0hguu898t", - "status": "BOND_STATUS_BONDED", - "tokens": "1000000000000000000000", - "unbonding_height": "0", - "unbonding_ids": [], - "unbonding_on_hold_ref_count": "0", - "unbonding_time": "1970-01-01T00:00:00Z" - }, - { - "commission": { - "commission_rates": { - "max_change_rate": "0.010000000000000000", - "max_rate": "0.200000000000000000", - "rate": "0.100000000000000000" - }, - "update_time": "2023-09-18T19:40:37.830641577Z" - }, - "consensus_pubkey": { - "@type": "/cosmos.crypto.bn254.PubKey", - "key": "j2f0mRA51Iz9VQNu131t/7V0a4k19azWsyiimmUPkoU=" - }, - "delegator_shares": "1000000000000000000000.000000000000000000", - "description": { - "details": "", - "identity": "", - "moniker": "validator-15", - "security_contact": "", - "website": "" - }, - "jailed": false, - "min_self_delegation": "1", - "operator_address": "unionvaloper1vfugh97026jcqmt0pq22kmfveynyq2m49pxwly", - "status": "BOND_STATUS_BONDED", - "tokens": "1000000000000000000000", - "unbonding_height": "0", - "unbonding_ids": [], - "unbonding_on_hold_ref_count": "0", - "unbonding_time": "1970-01-01T00:00:00Z" - }, - { - "commission": { - "commission_rates": { - "max_change_rate": "0.010000000000000000", - "max_rate": "0.200000000000000000", - "rate": "0.100000000000000000" - }, - "update_time": "2023-09-18T19:40:37.830641577Z" - }, - "consensus_pubkey": { - "@type": "/cosmos.crypto.bn254.PubKey", - "key": "p7jGEk8mMgsCp1KPonEoJoo48AHxIj7csAU61OlEEhs=" - }, - "delegator_shares": "1000000000000000000000.000000000000000000", - "description": { - "details": "", - "identity": "", - "moniker": "validator-6", - "security_contact": "", - "website": "" - }, - "jailed": false, - "min_self_delegation": "1", - "operator_address": "unionvaloper1w0lsj30p8wcp40tpwqxspywaee92l4y0mmjpck", - "status": "BOND_STATUS_BONDED", - "tokens": "1000000000000000000000", - "unbonding_height": "0", - "unbonding_ids": [], - "unbonding_on_hold_ref_count": "0", - "unbonding_time": "1970-01-01T00:00:00Z" - }, - { - "commission": { - "commission_rates": { - "max_change_rate": "0.010000000000000000", - "max_rate": "0.200000000000000000", - "rate": "0.100000000000000000" - }, - "update_time": "2023-09-18T19:40:37.830641577Z" - }, - "consensus_pubkey": { - "@type": "/cosmos.crypto.bn254.PubKey", - "key": "k/tDqzvtGyDwEI6mUX9qpL+pbP+GeYPpZC5XQiSU12Q=" - }, - "delegator_shares": "1000000000000000000000.000000000000000000", - "description": { - "details": "", - "identity": "", - "moniker": "validator-3", - "security_contact": "", - "website": "" - }, - "jailed": false, - "min_self_delegation": "1", - "operator_address": "unionvaloper1sw27dhxh32dz4klrllygy24g7tlse7latavr30", - "status": "BOND_STATUS_BONDED", - "tokens": "1000000000000000000000", - "unbonding_height": "0", - "unbonding_ids": [], - "unbonding_on_hold_ref_count": "0", - "unbonding_time": "1970-01-01T00:00:00Z" - }, - { - "commission": { - "commission_rates": { - "max_change_rate": "0.010000000000000000", - "max_rate": "0.200000000000000000", - "rate": "0.100000000000000000" - }, - "update_time": "2023-09-18T19:40:37.830641577Z" - }, - "consensus_pubkey": { - "@type": "/cosmos.crypto.bn254.PubKey", - "key": "7ZAoR4jcMmiqojusF0tkv/Q27wYPXAVieQWEzvUsW9g=" - }, - "delegator_shares": "1000000000000000000000.000000000000000000", - "description": { - "details": "", - "identity": "", - "moniker": "validator-1", - "security_contact": "", - "website": "" - }, - "jailed": false, - "min_self_delegation": "1", - "operator_address": "unionvaloper1s36k93gu7x58zns0g4mrep8qgnr5fm4jrqddkv", - "status": "BOND_STATUS_BONDED", - "tokens": "1000000000000000000000", - "unbonding_height": "0", - "unbonding_ids": [], - "unbonding_on_hold_ref_count": "0", - "unbonding_time": "1970-01-01T00:00:00Z" - }, - { - "commission": { - "commission_rates": { - "max_change_rate": "0.010000000000000000", - "max_rate": "0.200000000000000000", - "rate": "0.100000000000000000" - }, - "update_time": "2023-09-18T19:40:37.830641577Z" - }, - "consensus_pubkey": { - "@type": "/cosmos.crypto.bn254.PubKey", - "key": "wV8abg4Z83e0/NFv8E2yoj07lzSmxZGsHfi7NkEbKX0=" - }, - "delegator_shares": "1000000000000000000000.000000000000000000", - "description": { - "details": "", - "identity": "", - "moniker": "validator-9", - "security_contact": "", - "website": "" - }, - "jailed": false, - "min_self_delegation": "1", - "operator_address": "unionvaloper1sukjrc6cr4ag33h3w25rfsl834q22zp06d7h6p", - "status": "BOND_STATUS_BONDED", - "tokens": "1000000000000000000000", - "unbonding_height": "0", - "unbonding_ids": [], - "unbonding_on_hold_ref_count": "0", - "unbonding_time": "1970-01-01T00:00:00Z" - }, - { - "commission": { - "commission_rates": { - "max_change_rate": "0.010000000000000000", - "max_rate": "0.200000000000000000", - "rate": "0.100000000000000000" - }, - "update_time": "2023-09-18T19:40:37.830641577Z" - }, - "consensus_pubkey": { - "@type": "/cosmos.crypto.bn254.PubKey", - "key": "wUIdx4VSAyjBSD7KGxEHhE19IczlZFFEmNFf2dIzklM=" - }, - "delegator_shares": "1000000000000000000000.000000000000000000", - "description": { - "details": "", - "identity": "", - "moniker": "validator-8", - "security_contact": "", - "website": "" - }, - "jailed": false, - "min_self_delegation": "1", - "operator_address": "unionvaloper13t0nnfuv9vt2e95ss0yhuqvvc40agn68x6hwtj", - "status": "BOND_STATUS_BONDED", - "tokens": "1000000000000000000000", - "unbonding_height": "0", - "unbonding_ids": [], - "unbonding_on_hold_ref_count": "0", - "unbonding_time": "1970-01-01T00:00:00Z" - }, - { - "commission": { - "commission_rates": { - "max_change_rate": "0.010000000000000000", - "max_rate": "0.200000000000000000", - "rate": "0.100000000000000000" - }, - "update_time": "2023-09-18T19:40:37.830641577Z" - }, - "consensus_pubkey": { - "@type": "/cosmos.crypto.bn254.PubKey", - "key": "jZiv55ih+4mChYy+Jm3M/u/MA5ZK530uMkgqgBcQnfo=" - }, - "delegator_shares": "1000000000000000000000.000000000000000000", - "description": { - "details": "", - "identity": "", - "moniker": "validator-2", - "security_contact": "", - "website": "" - }, - "jailed": false, - "min_self_delegation": "1", - "operator_address": "unionvaloper1ndm3ljzqwvc60uvxwkhczgrczc4jv2ll9etcn6", - "status": "BOND_STATUS_BONDED", - "tokens": "1000000000000000000000", - "unbonding_height": "0", - "unbonding_ids": [], - "unbonding_on_hold_ref_count": "0", - "unbonding_time": "1970-01-01T00:00:00Z" - }, - { - "commission": { - "commission_rates": { - "max_change_rate": "0.010000000000000000", - "max_rate": "0.200000000000000000", - "rate": "0.100000000000000000" - }, - "update_time": "2023-09-18T19:40:37.830641577Z" - }, - "consensus_pubkey": { - "@type": "/cosmos.crypto.bn254.PubKey", - "key": "ht8ttsjmD9S+0ZQKLjKp9iUSnhOlFWAjqfGDnoCjHfg=" - }, - "delegator_shares": "1000000000000000000000.000000000000000000", - "description": { - "details": "", - "identity": "", - "moniker": "validator-0", - "security_contact": "", - "website": "" - }, - "jailed": false, - "min_self_delegation": "1", - "operator_address": "unionvaloper14fldwd959h7glh2e3k45veuqfszvgm693pv868", - "status": "BOND_STATUS_BONDED", - "tokens": "1000000000000000000000", - "unbonding_height": "0", - "unbonding_ids": [], - "unbonding_on_hold_ref_count": "0", - "unbonding_time": "1970-01-01T00:00:00Z" - }, - { - "commission": { - "commission_rates": { - "max_change_rate": "0.010000000000000000", - "max_rate": "0.200000000000000000", - "rate": "0.100000000000000000" - }, - "update_time": "2023-09-18T19:40:37.830641577Z" - }, - "consensus_pubkey": { - "@type": "/cosmos.crypto.bn254.PubKey", - "key": "nI931rYm57np2qqZLxwGLZYQkrXiMUPckaxneyZss98=" - }, - "delegator_shares": "1000000000000000000000.000000000000000000", - "description": { - "details": "", - "identity": "", - "moniker": "validator-4", - "security_contact": "", - "website": "" - }, - "jailed": false, - "min_self_delegation": "1", - "operator_address": "unionvaloper1hmrw08ttdkkmv8kt9dsjcfap8thqkc9zwugk3k", - "status": "BOND_STATUS_BONDED", - "tokens": "1000000000000000000000", - "unbonding_height": "0", - "unbonding_ids": [], - "unbonding_on_hold_ref_count": "0", - "unbonding_time": "1970-01-01T00:00:00Z" - }, - { - "commission": { - "commission_rates": { - "max_change_rate": "0.010000000000000000", - "max_rate": "0.200000000000000000", - "rate": "0.100000000000000000" - }, - "update_time": "2023-09-18T19:40:37.830641577Z" - }, - "consensus_pubkey": { - "@type": "/cosmos.crypto.bn254.PubKey", - "key": "4KRIncS9hK37sD0cHGDcFI0EEu8T7I/JFEiGKVefx3U=" - }, - "delegator_shares": "1000000000000000000000.000000000000000000", - "description": { - "details": "", - "identity": "", - "moniker": "validator-13", - "security_contact": "", - "website": "" - }, - "jailed": false, - "min_self_delegation": "1", - "operator_address": "unionvaloper1csrs76kwlna8j4demjpyhe0nknvv7hz3ket7r0", - "status": "BOND_STATUS_BONDED", - "tokens": "1000000000000000000000", - "unbonding_height": "0", - "unbonding_ids": [], - "unbonding_on_hold_ref_count": "0", - "unbonding_time": "1970-01-01T00:00:00Z" - }, - { - "commission": { - "commission_rates": { - "max_change_rate": "0.010000000000000000", - "max_rate": "0.200000000000000000", - "rate": "0.100000000000000000" - }, - "update_time": "2023-09-18T19:40:37.830641577Z" - }, - "consensus_pubkey": { - "@type": "/cosmos.crypto.bn254.PubKey", - "key": "rW4uEup6ZPtH6RHeCBltigC7P6y+mTF0XSkAu8zfXnk=" - }, - "delegator_shares": "1000000000000000000000.000000000000000000", - "description": { - "details": "", - "identity": "", - "moniker": "validator-7", - "security_contact": "", - "website": "" - }, - "jailed": false, - "min_self_delegation": "1", - "operator_address": "unionvaloper1cnwslh2ghgadxz65x9yjcn8x9sn3hlxr3w46ah", - "status": "BOND_STATUS_BONDED", - "tokens": "1000000000000000000000", - "unbonding_height": "0", - "unbonding_ids": [], - "unbonding_on_hold_ref_count": "0", - "unbonding_time": "1970-01-01T00:00:00Z" - }, - { - "commission": { - "commission_rates": { - "max_change_rate": "0.010000000000000000", - "max_rate": "0.200000000000000000", - "rate": "0.100000000000000000" - }, - "update_time": "2023-09-18T19:40:37.830641577Z" - }, - "consensus_pubkey": { - "@type": "/cosmos.crypto.bn254.PubKey", - "key": "hHtgMOdYMU8muqxX5PrdjYWRsIZ9cwezbE2gz5vVFpo=" - }, - "delegator_shares": "1000000000000000000000.000000000000000000", - "description": { - "details": "", - "identity": "", - "moniker": "validator-11", - "security_contact": "", - "website": "" - }, - "jailed": false, - "min_self_delegation": "1", - "operator_address": "unionvaloper1mktwvdckj02j0nd5mzey6u7wqfd5ner3erxpuj", - "status": "BOND_STATUS_BONDED", - "tokens": "1000000000000000000000", - "unbonding_height": "0", - "unbonding_ids": [], - "unbonding_on_hold_ref_count": "0", - "unbonding_time": "1970-01-01T00:00:00Z" - }, - { - "commission": { - "commission_rates": { - "max_change_rate": "0.010000000000000000", - "max_rate": "0.200000000000000000", - "rate": "0.100000000000000000" - }, - "update_time": "2023-09-18T19:40:37.830641577Z" - }, - "consensus_pubkey": { - "@type": "/cosmos.crypto.bn254.PubKey", - "key": "mUhqAu7NxIjEALZXq2X0jeYW0wTcaccgsrnxbusUKCQ=" - }, - "delegator_shares": "1000000000000000000000.000000000000000000", - "description": { - "details": "", - "identity": "", - "moniker": "validator-14", - "security_contact": "", - "website": "" - }, - "jailed": false, - "min_self_delegation": "1", - "operator_address": "unionvaloper173t2zxc9ndft4gvpafm3aqnsj57sxfk8wmu3za", - "status": "BOND_STATUS_BONDED", - "tokens": "1000000000000000000000", - "unbonding_height": "0", - "unbonding_ids": [], - "unbonding_on_hold_ref_count": "0", - "unbonding_time": "1970-01-01T00:00:00Z" - } - ] - } - */ - // cSpell:enable - - blockHash, err := hex.DecodeString("3CECE4F2364BFA92040E6217FE7D43DA93F09F02FB5269177214BCDEF05298E1") - if err != nil { - log.Fatal(err) - } - - partSetHeaderHash, err := hex.DecodeString("749946B107F3BE49728999F84FD7E16C4BC028C6E6538F8A287DE04203AC10A1") - if err != nil { - log.Fatal(err) - } - - vote := types.CanonicalVote{ - Type: types.PrecommitType, - Height: 1, - Round: 0, - BlockID: &types.CanonicalBlockID{ - Hash: blockHash, - PartSetHeader: types.CanonicalPartSetHeader{ - Total: 1, - Hash: partSetHeaderHash, - }, - }, - ChainID: "union-devnet-1", - } - - validators := []*types.SimpleValidator{ - toValidator(decodeB64("ht8ttsjmD9S+0ZQKLjKp9iUSnhOlFWAjqfGDnoCjHfg=")), - toValidator(decodeB64("7ZAoR4jcMmiqojusF0tkv/Q27wYPXAVieQWEzvUsW9g=")), - toValidator(decodeB64("jZiv55ih+4mChYy+Jm3M/u/MA5ZK530uMkgqgBcQnfo=")), - toValidator(decodeB64("k/tDqzvtGyDwEI6mUX9qpL+pbP+GeYPpZC5XQiSU12Q=")), - toValidator(decodeB64("nI931rYm57np2qqZLxwGLZYQkrXiMUPckaxneyZss98=")), - toValidator(decodeB64("mMjsEy9PZLJLGURHF1KXRlpgdS38eCbztA/wYUUuO+w=")), - toValidator(decodeB64("p7jGEk8mMgsCp1KPonEoJoo48AHxIj7csAU61OlEEhs=")), - toValidator(decodeB64("rW4uEup6ZPtH6RHeCBltigC7P6y+mTF0XSkAu8zfXnk=")), - toValidator(decodeB64("wUIdx4VSAyjBSD7KGxEHhE19IczlZFFEmNFf2dIzklM=")), - toValidator(decodeB64("wV8abg4Z83e0/NFv8E2yoj07lzSmxZGsHfi7NkEbKX0=")), - toValidator(decodeB64("gAM5W+LDW4eFkZw2n3WDmCCd565WTDd5E7L2L7yzOW8=")), - toValidator(decodeB64("hHtgMOdYMU8muqxX5PrdjYWRsIZ9cwezbE2gz5vVFpo=")), - toValidator(decodeB64("ley/CHKtnWvu5aVxbfU9jgcWRkWV+j2bSmYNqgK8nAY=")), - toValidator(decodeB64("4KRIncS9hK37sD0cHGDcFI0EEu8T7I/JFEiGKVefx3U=")), - toValidator(decodeB64("mUhqAu7NxIjEALZXq2X0jeYW0wTcaccgsrnxbusUKCQ=")), - toValidator(decodeB64("j2f0mRA51Iz9VQNu131t/7V0a4k19azWsyiimmUPkoU=")), - } - - trustedValidators := validators - untrustedValidators := validators - - signatures := [][]byte{ - decodeB64("lBIMmBoSo0jcJfFtwpZVzpltsZeBPYk+WLpaokCHoYUgU4d9n2GtSvfOBG7XQKf5DZNaKM+7JvnAuFrKiM8qeA=="), - decodeB64("jTFVLTwKgONfRq/9HHqRTYFIYUzQo/Qxs2UrhtRDLYcrQiarjXecINudtZ1FXTvHXr6irOimrrqixZ5Hq2BVmw=="), - decodeB64("x9uPPVyOrwEtd+2vwYu2k90rr2qtDnXqyBo1Twl66hYQgeY42nuuRdAIgB1jTxjPFxhw9/TzzrkG1gh1gOOGlw=="), - decodeB64("1W3/De1lakrcHWK/M7y2ikKNbX1925MYUE+X28DG1S0b6gMY50omYl7V/z1pBgGmbSMLRjyGYCWLXIGtthNZhw=="), - decodeB64("ihNyjyK1No97Nz0/jsc1oDueaIfMwEAYpt9aZZyW7zMYxpq17D8mWAjXpDOg015W09ZNK5d03a1HRotNMcLXMw=="), - decodeB64("w6u2qCzMNILalSua6Jr9c3R23c35hTH7ppuCpVho9p4YkStg3wuvVrXmrtpth3bJjua8SPs6ZtcBrigwrLj0Rg=="), - decodeB64("n8OQzqpYl5vvRFhBSkNsTHHi+qAH6Nw4xMxpHqRb6rIj1NM9BCDg9uW7tt8qRmJb2V6kqL6OcPq8gsISF0X+LA=="), - decodeB64("7l/Ro9QII39SX1Pzjjs1LX0pMXB9m6GFHV+Rf6gRhuoBXcoT9CClA8ItHokeaO7ijCzI2CEUICzgFysaE2nKsw=="), - decodeB64("q8n1IEwXBf7PtsexuFKBKxonbzTGJrQINwGtjmA3hYUFx8+ejOGjDwB6KEjgVodGV6A7KKLGoArVWZKLcMvnoQ=="), - decodeB64("zA5EYZUYXU7ApTRRVwzlXsGubbOr4WsICo+d3ikoo3YkBBuPqtQQ01Tx91WOqB34TOVK8dvBIgGwR3KoDqMJ7w=="), - decodeB64("5suzZsuuzvE8iCESiiZ30RalvUljUFZwZgtJtkpxKUkmElVpVCxzrDTi7MpqzhuSmqqIHSzwutOXbji8SH2GOQ=="), - decodeB64("yL99BSFXDR5DTGJjlIp0FcwWnIYDVOYbHTHDtL99hzIZsY8Cl6ZNRAfJbCUoUlJdNx4Tg6EXi8Itfkypkm/6kQ=="), - decodeB64("7fFHIB6pG65TQCxxcj9bICHrZ9O1iPmKW7QfQL4902AjRiChsSOdc5UsccdwayzjI6Jg0rDk+Omg2PWdF391dQ=="), - decodeB64("rIEUr8Gt+CWiIJI+rDmuuwsIWk/5RQAJ3lOpd+Lpux8E7R0IafXV1DsjrWdPOzeBbbT9b/5reHvZAJIc2zCVsg=="), - decodeB64("kY52piLql5OBdkGqbJ60ruJOlUZ91OCXAskx8YyB0XkKa+WcJAiHGsKyoe9gOLhnv3k5cFOJSkCJ6FeE12/e1w=="), - decodeB64("rsnq7gcKdEYtPi9NL01QNErl6SO12VIqliiYu3S0cLwL3AFe/6q6a6G1KyRj5gWmql//fQI5Un3NtrVqIMKhng=="), - } - - trustedSignatures := signatures - untrustedSignatures := signatures - - var bitmap big.Int - for i := 0; i < 16; i++ { - bitmap.SetBit(&bitmap, i, 1) - } - - trustedBitmap := bitmap - untrustedBitmap := bitmap - - res, err := client.Prove(ctx, &provergrpc.ProveRequest{ - Vote: &vote, - TrustedCommit: &provergrpc.ValidatorSetCommit{ - Validators: trustedValidators, - Signatures: trustedSignatures, - Bitmap: trustedBitmap.Bytes(), - }, - UntrustedCommit: &provergrpc.ValidatorSetCommit{ - Validators: untrustedValidators, - Signatures: untrustedSignatures, - Bitmap: untrustedBitmap.Bytes(), - }, - }) - if err != nil { - log.Fatal(err) - } - - fmt.Printf("Gnark Proof: %X\n", res.Proof.Content) - fmt.Printf("Public inputs: %X\n", res.Proof.PublicInputs) - fmt.Printf("Trusted root: %X\n", res.TrustedValidatorSetRoot) - fmt.Printf("Untrusted root: %X\n", res.UntrustedValidatorSetRoot) - fmt.Printf("EVM compatible ZKP: %X\n", res.Proof.EvmProof) - - return nil - }), - } - cmd.Flags().String(flagTLS, "", "Wether the gRPC endpoint expect TLS.") - return cmd -} diff --git a/galoisd/cmd/galoisd/cmd/example_verify.go b/galoisd/cmd/galoisd/cmd/example_verify.go index ee54ea08e9..cbeaaea14f 100644 --- a/galoisd/cmd/galoisd/cmd/example_verify.go +++ b/galoisd/cmd/galoisd/cmd/example_verify.go @@ -6,7 +6,7 @@ import ( "encoding/hex" "encoding/json" "fmt" - provergrpc "galois/grpc/api/v1" + provergrpc "galois/grpc/api/v2" "log" "math/big" @@ -375,14 +375,13 @@ func ExampleVerifyCmd() *cobra.Command { log.Fatal(err) } - hmX, hmY := cometbft_bn254.HashToField2(signedBytes) + hm := cometbft_bn254.HashToField(signedBytes) verifyRes, err := client.Verify(ctx, &provergrpc.VerifyRequest{ Proof: proveRes.Proof, TrustedValidatorSetRoot: trustedValidatorSetRoot, UntrustedValidatorSetRoot: untrustedValidatorSetRoot, - BlockHeaderX: &provergrpc.FrElement{Value: hmX.Marshal()}, - BlockHeaderY: &provergrpc.FrElement{Value: hmY.Marshal()}, + HashedMessage: &provergrpc.FrElement{Value: hm.Marshal()}, }) if err != nil { diff --git a/galoisd/cmd/galoisd/cmd/gen_contract.go b/galoisd/cmd/galoisd/cmd/gen_contract.go index 9590b62fa8..50900ceb39 100644 --- a/galoisd/cmd/galoisd/cmd/gen_contract.go +++ b/galoisd/cmd/galoisd/cmd/gen_contract.go @@ -3,7 +3,7 @@ package cmd import ( "context" "fmt" - provergrpc "galois/grpc/api/v1" + provergrpc "galois/grpc/api/v2" "log" "os" diff --git a/galoisd/cmd/galoisd/cmd/query_stats.go b/galoisd/cmd/galoisd/cmd/query_stats.go index cea5e9d8b8..80f09299b0 100644 --- a/galoisd/cmd/galoisd/cmd/query_stats.go +++ b/galoisd/cmd/galoisd/cmd/query_stats.go @@ -4,7 +4,7 @@ import ( "context" "encoding/json" "fmt" - provergrpc "galois/grpc/api/v1" + provergrpc "galois/grpc/api/v2" "log" "github.com/spf13/cobra" diff --git a/galoisd/cmd/galoisd/cmd/serve.go b/galoisd/cmd/galoisd/cmd/serve.go index b057ba8dfe..a7b7be3ebd 100644 --- a/galoisd/cmd/galoisd/cmd/serve.go +++ b/galoisd/cmd/galoisd/cmd/serve.go @@ -1,7 +1,8 @@ package cmd import ( - provergrpc "galois/grpc/api/v1" + provergrpc "galois/grpc" + provergrpcapi "galois/grpc/api/v2" "log" "net" "time" @@ -57,7 +58,7 @@ func ServeCmd() *cobra.Command { Time: 5 * time.Second, Timeout: 20 * time.Second, })) - provergrpc.RegisterUnionProverAPIServer(grpcServer, server) + provergrpcapi.RegisterUnionProverAPIServer(grpcServer, server) log.Println("Serving...") return grpcServer.Serve(limitedLis) }, diff --git a/galoisd/cmd/galoisd/main.go b/galoisd/cmd/galoisd/main.go index cf7e07829f..36669e3867 100644 --- a/galoisd/cmd/galoisd/main.go +++ b/galoisd/cmd/galoisd/main.go @@ -10,7 +10,6 @@ func main() { rootCmd.AddCommand(cmd.ServeCmd()) rootCmd.AddCommand(cmd.GenContract()) rootCmd.AddCommand(cmd.ExampleProveCmd()) - rootCmd.AddCommand(cmd.ExampleProve16Cmd()) rootCmd.AddCommand(cmd.ExampleVerifyCmd()) rootCmd.AddCommand(cmd.QueryStats()) rootCmd.Execute() diff --git a/galoisd/go.mod b/galoisd/go.mod index dbfacb4379..c8585003e8 100644 --- a/galoisd/go.mod +++ b/galoisd/go.mod @@ -96,6 +96,7 @@ require ( github.com/spf13/pflag v1.0.5 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/tendermint/go-amino v0.16.0 // indirect + github.com/tunabay/go-bitarray v1.3.1 // indirect github.com/x448/float16 v0.8.4 // indirect go.etcd.io/bbolt v1.3.8 // indirect golang.org/x/crypto v0.17.0 // indirect @@ -113,10 +114,10 @@ require ( ) replace ( - github.com/cometbft/cometbft => github.com/unionlabs/cometbls v0.0.0-20240111183309-e159e964fa07 + github.com/cometbft/cometbft => github.com/unionlabs/cometbls v0.0.0-20240125180347-5b33e3460932 github.com/consensys/gnark => github.com/consensys/gnark v0.9.2-0.20240115131420-34fdb0391653 // Fork of gnark crypto until https://github.com/ConsenSys/gnark-crypto/pull/314 is merged github.com/consensys/gnark-crypto => github.com/unionlabs/gnark-crypto v0.0.0-20240112093739-635c1b6963c6 - github.com/cosmos/cosmos-sdk => github.com/unionlabs/cosmos-sdk v0.0.0-20240111183419-b58f90f260ce + github.com/cosmos/cosmos-sdk => github.com/unionlabs/cosmos-sdk v0.0.0-20240125200611-e1b8b82c712b github.com/cosmos/gogoproto => github.com/cosmos/gogoproto v1.4.11 ) diff --git a/galoisd/go.sum b/galoisd/go.sum index e073c4f32e..bf03c9cd66 100644 --- a/galoisd/go.sum +++ b/galoisd/go.sum @@ -23,6 +23,7 @@ github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= github.com/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= @@ -425,12 +426,14 @@ github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2l github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= +github.com/tunabay/go-bitarray v1.3.1 h1:5q38uagXhrdzT0LjKWBB5ILO56fptGrJG8750171cAo= +github.com/tunabay/go-bitarray v1.3.1/go.mod h1:k6MncM9mWklQRcVy5Xe9RYixeDd9b3H0xqtgiANJFF4= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/unionlabs/cometbls v0.0.0-20240111183309-e159e964fa07 h1:y2q9sWscXNgo0w/iDdnRID3Fd2s4Mbdcn4poDwwSfpI= -github.com/unionlabs/cometbls v0.0.0-20240111183309-e159e964fa07/go.mod h1:3H1gcLEVOQZbPwdH8gyv4UzwHtEawNgcnytglkCQVOQ= -github.com/unionlabs/cosmos-sdk v0.0.0-20240111183419-b58f90f260ce h1:XsA/6QgQixsGW6CBOFYaK6D/viGcRBXF4THJhhBP2LM= -github.com/unionlabs/cosmos-sdk v0.0.0-20240111183419-b58f90f260ce/go.mod h1:l6W0x49uOfoq2JVMJGE6OqmYtBcUssRCNXlPXEzp3cY= +github.com/unionlabs/cometbls v0.0.0-20240125180347-5b33e3460932 h1:ecEdIXw7w3I4JEpNoNMwpHu4Iy6PRgGl++uWQIcPYBw= +github.com/unionlabs/cometbls v0.0.0-20240125180347-5b33e3460932/go.mod h1:ZN5TH4WzX9x+hgcipytd0WghjGcCBy6M8YVgnHOCd/0= +github.com/unionlabs/cosmos-sdk v0.0.0-20240125200611-e1b8b82c712b h1:eUv6PZDYQaO4vFVGYXlufFjiDq8UnZtmoVyBen+uzyo= +github.com/unionlabs/cosmos-sdk v0.0.0-20240125200611-e1b8b82c712b/go.mod h1:iEaeKpRLz88bVPyU7Zk0WODyY05qHmR33vNsFaJ4lP8= github.com/unionlabs/gnark-crypto v0.0.0-20240112093739-635c1b6963c6 h1:wRt6Yt29bWvwCSeRmRJ/Wm1sRev1GjJGXn4MzSrMbv4= github.com/unionlabs/gnark-crypto v0.0.0-20240112093739-635c1b6963c6/go.mod h1:wKqwsieaKPThcFkHe0d0zMsbHEUWFmZcG7KBCse210o= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= diff --git a/galoisd/grpc/api/v2/galois.pb.go b/galoisd/grpc/api/v2/galois.pb.go new file mode 100644 index 0000000000..cdd05b0e59 --- /dev/null +++ b/galoisd/grpc/api/v2/galois.pb.go @@ -0,0 +1,1712 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.29.1 +// protoc v3.21.12 +// source: api/v2/galois.proto + +package grpc + +import ( + types "github.com/cometbft/cometbft/proto/tendermint/types" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type FrElement struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *FrElement) Reset() { + *x = FrElement{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_galois_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FrElement) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FrElement) ProtoMessage() {} + +func (x *FrElement) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_galois_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FrElement.ProtoReflect.Descriptor instead. +func (*FrElement) Descriptor() ([]byte, []int) { + return file_api_v2_galois_proto_rawDescGZIP(), []int{0} +} + +func (x *FrElement) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +type ZeroKnowledgeProof struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Content []byte `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"` + CompressedContent []byte `protobuf:"bytes,2,opt,name=compressed_content,json=compressedContent,proto3" json:"compressed_content,omitempty"` + EvmProof []byte `protobuf:"bytes,3,opt,name=evm_proof,json=evmProof,proto3" json:"evm_proof,omitempty"` + PublicInputs []byte `protobuf:"bytes,4,opt,name=public_inputs,json=publicInputs,proto3" json:"public_inputs,omitempty"` +} + +func (x *ZeroKnowledgeProof) Reset() { + *x = ZeroKnowledgeProof{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_galois_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ZeroKnowledgeProof) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ZeroKnowledgeProof) ProtoMessage() {} + +func (x *ZeroKnowledgeProof) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_galois_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ZeroKnowledgeProof.ProtoReflect.Descriptor instead. +func (*ZeroKnowledgeProof) Descriptor() ([]byte, []int) { + return file_api_v2_galois_proto_rawDescGZIP(), []int{1} +} + +func (x *ZeroKnowledgeProof) GetContent() []byte { + if x != nil { + return x.Content + } + return nil +} + +func (x *ZeroKnowledgeProof) GetCompressedContent() []byte { + if x != nil { + return x.CompressedContent + } + return nil +} + +func (x *ZeroKnowledgeProof) GetEvmProof() []byte { + if x != nil { + return x.EvmProof + } + return nil +} + +func (x *ZeroKnowledgeProof) GetPublicInputs() []byte { + if x != nil { + return x.PublicInputs + } + return nil +} + +type ValidatorSetCommit struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Validators []*types.SimpleValidator `protobuf:"bytes,1,rep,name=validators,proto3" json:"validators,omitempty"` + Signatures [][]byte `protobuf:"bytes,2,rep,name=signatures,proto3" json:"signatures,omitempty"` + Bitmap []byte `protobuf:"bytes,3,opt,name=bitmap,proto3" json:"bitmap,omitempty"` +} + +func (x *ValidatorSetCommit) Reset() { + *x = ValidatorSetCommit{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_galois_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidatorSetCommit) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidatorSetCommit) ProtoMessage() {} + +func (x *ValidatorSetCommit) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_galois_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValidatorSetCommit.ProtoReflect.Descriptor instead. +func (*ValidatorSetCommit) Descriptor() ([]byte, []int) { + return file_api_v2_galois_proto_rawDescGZIP(), []int{2} +} + +func (x *ValidatorSetCommit) GetValidators() []*types.SimpleValidator { + if x != nil { + return x.Validators + } + return nil +} + +func (x *ValidatorSetCommit) GetSignatures() [][]byte { + if x != nil { + return x.Signatures + } + return nil +} + +func (x *ValidatorSetCommit) GetBitmap() []byte { + if x != nil { + return x.Bitmap + } + return nil +} + +type ProveRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Vote *types.CanonicalVote `protobuf:"bytes,1,opt,name=vote,proto3" json:"vote,omitempty"` + TrustedCommit *ValidatorSetCommit `protobuf:"bytes,2,opt,name=trusted_commit,json=trustedCommit,proto3" json:"trusted_commit,omitempty"` + UntrustedCommit *ValidatorSetCommit `protobuf:"bytes,3,opt,name=untrusted_commit,json=untrustedCommit,proto3" json:"untrusted_commit,omitempty"` +} + +func (x *ProveRequest) Reset() { + *x = ProveRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_galois_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProveRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProveRequest) ProtoMessage() {} + +func (x *ProveRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_galois_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProveRequest.ProtoReflect.Descriptor instead. +func (*ProveRequest) Descriptor() ([]byte, []int) { + return file_api_v2_galois_proto_rawDescGZIP(), []int{3} +} + +func (x *ProveRequest) GetVote() *types.CanonicalVote { + if x != nil { + return x.Vote + } + return nil +} + +func (x *ProveRequest) GetTrustedCommit() *ValidatorSetCommit { + if x != nil { + return x.TrustedCommit + } + return nil +} + +func (x *ProveRequest) GetUntrustedCommit() *ValidatorSetCommit { + if x != nil { + return x.UntrustedCommit + } + return nil +} + +type ProveResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Proof *ZeroKnowledgeProof `protobuf:"bytes,1,opt,name=proof,proto3" json:"proof,omitempty"` + TrustedValidatorSetRoot []byte `protobuf:"bytes,2,opt,name=trusted_validator_set_root,json=trustedValidatorSetRoot,proto3" json:"trusted_validator_set_root,omitempty"` + UntrustedValidatorSetRoot []byte `protobuf:"bytes,3,opt,name=untrusted_validator_set_root,json=untrustedValidatorSetRoot,proto3" json:"untrusted_validator_set_root,omitempty"` +} + +func (x *ProveResponse) Reset() { + *x = ProveResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_galois_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProveResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProveResponse) ProtoMessage() {} + +func (x *ProveResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_galois_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProveResponse.ProtoReflect.Descriptor instead. +func (*ProveResponse) Descriptor() ([]byte, []int) { + return file_api_v2_galois_proto_rawDescGZIP(), []int{4} +} + +func (x *ProveResponse) GetProof() *ZeroKnowledgeProof { + if x != nil { + return x.Proof + } + return nil +} + +func (x *ProveResponse) GetTrustedValidatorSetRoot() []byte { + if x != nil { + return x.TrustedValidatorSetRoot + } + return nil +} + +func (x *ProveResponse) GetUntrustedValidatorSetRoot() []byte { + if x != nil { + return x.UntrustedValidatorSetRoot + } + return nil +} + +type VerifyRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Proof *ZeroKnowledgeProof `protobuf:"bytes,1,opt,name=proof,proto3" json:"proof,omitempty"` + TrustedValidatorSetRoot []byte `protobuf:"bytes,2,opt,name=trusted_validator_set_root,json=trustedValidatorSetRoot,proto3" json:"trusted_validator_set_root,omitempty"` + UntrustedValidatorSetRoot []byte `protobuf:"bytes,3,opt,name=untrusted_validator_set_root,json=untrustedValidatorSetRoot,proto3" json:"untrusted_validator_set_root,omitempty"` + HashedMessage *FrElement `protobuf:"bytes,4,opt,name=hashed_message,json=hashedMessage,proto3" json:"hashed_message,omitempty"` +} + +func (x *VerifyRequest) Reset() { + *x = VerifyRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_galois_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VerifyRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VerifyRequest) ProtoMessage() {} + +func (x *VerifyRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_galois_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VerifyRequest.ProtoReflect.Descriptor instead. +func (*VerifyRequest) Descriptor() ([]byte, []int) { + return file_api_v2_galois_proto_rawDescGZIP(), []int{5} +} + +func (x *VerifyRequest) GetProof() *ZeroKnowledgeProof { + if x != nil { + return x.Proof + } + return nil +} + +func (x *VerifyRequest) GetTrustedValidatorSetRoot() []byte { + if x != nil { + return x.TrustedValidatorSetRoot + } + return nil +} + +func (x *VerifyRequest) GetUntrustedValidatorSetRoot() []byte { + if x != nil { + return x.UntrustedValidatorSetRoot + } + return nil +} + +func (x *VerifyRequest) GetHashedMessage() *FrElement { + if x != nil { + return x.HashedMessage + } + return nil +} + +type VerifyResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Valid bool `protobuf:"varint,1,opt,name=valid,proto3" json:"valid,omitempty"` +} + +func (x *VerifyResponse) Reset() { + *x = VerifyResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_galois_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VerifyResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VerifyResponse) ProtoMessage() {} + +func (x *VerifyResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_galois_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VerifyResponse.ProtoReflect.Descriptor instead. +func (*VerifyResponse) Descriptor() ([]byte, []int) { + return file_api_v2_galois_proto_rawDescGZIP(), []int{6} +} + +func (x *VerifyResponse) GetValid() bool { + if x != nil { + return x.Valid + } + return false +} + +type GenerateContractRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *GenerateContractRequest) Reset() { + *x = GenerateContractRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_galois_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenerateContractRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenerateContractRequest) ProtoMessage() {} + +func (x *GenerateContractRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_galois_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenerateContractRequest.ProtoReflect.Descriptor instead. +func (*GenerateContractRequest) Descriptor() ([]byte, []int) { + return file_api_v2_galois_proto_rawDescGZIP(), []int{7} +} + +type GenerateContractResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Content []byte `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"` +} + +func (x *GenerateContractResponse) Reset() { + *x = GenerateContractResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_galois_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenerateContractResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenerateContractResponse) ProtoMessage() {} + +func (x *GenerateContractResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_galois_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenerateContractResponse.ProtoReflect.Descriptor instead. +func (*GenerateContractResponse) Descriptor() ([]byte, []int) { + return file_api_v2_galois_proto_rawDescGZIP(), []int{8} +} + +func (x *GenerateContractResponse) GetContent() []byte { + if x != nil { + return x.Content + } + return nil +} + +type QueryStatsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *QueryStatsRequest) Reset() { + *x = QueryStatsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_galois_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryStatsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryStatsRequest) ProtoMessage() {} + +func (x *QueryStatsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_galois_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use QueryStatsRequest.ProtoReflect.Descriptor instead. +func (*QueryStatsRequest) Descriptor() ([]byte, []int) { + return file_api_v2_galois_proto_rawDescGZIP(), []int{9} +} + +type VariableStats struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + NbInternalVariables uint32 `protobuf:"varint,1,opt,name=nb_internal_variables,json=nbInternalVariables,proto3" json:"nb_internal_variables,omitempty"` + NbSecretVariables uint32 `protobuf:"varint,2,opt,name=nb_secret_variables,json=nbSecretVariables,proto3" json:"nb_secret_variables,omitempty"` + NbPublicVariables uint32 `protobuf:"varint,3,opt,name=nb_public_variables,json=nbPublicVariables,proto3" json:"nb_public_variables,omitempty"` + NbConstraints uint32 `protobuf:"varint,4,opt,name=nb_constraints,json=nbConstraints,proto3" json:"nb_constraints,omitempty"` + NbCoefficients uint32 `protobuf:"varint,5,opt,name=nb_coefficients,json=nbCoefficients,proto3" json:"nb_coefficients,omitempty"` +} + +func (x *VariableStats) Reset() { + *x = VariableStats{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_galois_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VariableStats) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VariableStats) ProtoMessage() {} + +func (x *VariableStats) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_galois_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VariableStats.ProtoReflect.Descriptor instead. +func (*VariableStats) Descriptor() ([]byte, []int) { + return file_api_v2_galois_proto_rawDescGZIP(), []int{10} +} + +func (x *VariableStats) GetNbInternalVariables() uint32 { + if x != nil { + return x.NbInternalVariables + } + return 0 +} + +func (x *VariableStats) GetNbSecretVariables() uint32 { + if x != nil { + return x.NbSecretVariables + } + return 0 +} + +func (x *VariableStats) GetNbPublicVariables() uint32 { + if x != nil { + return x.NbPublicVariables + } + return 0 +} + +func (x *VariableStats) GetNbConstraints() uint32 { + if x != nil { + return x.NbConstraints + } + return 0 +} + +func (x *VariableStats) GetNbCoefficients() uint32 { + if x != nil { + return x.NbCoefficients + } + return 0 +} + +type ProvingKeyStats struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + NbG1 uint32 `protobuf:"varint,1,opt,name=nb_g1,json=nbG1,proto3" json:"nb_g1,omitempty"` + NbG2 uint32 `protobuf:"varint,2,opt,name=nb_g2,json=nbG2,proto3" json:"nb_g2,omitempty"` +} + +func (x *ProvingKeyStats) Reset() { + *x = ProvingKeyStats{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_galois_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProvingKeyStats) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProvingKeyStats) ProtoMessage() {} + +func (x *ProvingKeyStats) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_galois_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProvingKeyStats.ProtoReflect.Descriptor instead. +func (*ProvingKeyStats) Descriptor() ([]byte, []int) { + return file_api_v2_galois_proto_rawDescGZIP(), []int{11} +} + +func (x *ProvingKeyStats) GetNbG1() uint32 { + if x != nil { + return x.NbG1 + } + return 0 +} + +func (x *ProvingKeyStats) GetNbG2() uint32 { + if x != nil { + return x.NbG2 + } + return 0 +} + +type VerifyingKeyStats struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + NbG1 uint32 `protobuf:"varint,1,opt,name=nb_g1,json=nbG1,proto3" json:"nb_g1,omitempty"` + NbG2 uint32 `protobuf:"varint,2,opt,name=nb_g2,json=nbG2,proto3" json:"nb_g2,omitempty"` + NbPublicWitness uint32 `protobuf:"varint,3,opt,name=nb_public_witness,json=nbPublicWitness,proto3" json:"nb_public_witness,omitempty"` +} + +func (x *VerifyingKeyStats) Reset() { + *x = VerifyingKeyStats{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_galois_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VerifyingKeyStats) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VerifyingKeyStats) ProtoMessage() {} + +func (x *VerifyingKeyStats) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_galois_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VerifyingKeyStats.ProtoReflect.Descriptor instead. +func (*VerifyingKeyStats) Descriptor() ([]byte, []int) { + return file_api_v2_galois_proto_rawDescGZIP(), []int{12} +} + +func (x *VerifyingKeyStats) GetNbG1() uint32 { + if x != nil { + return x.NbG1 + } + return 0 +} + +func (x *VerifyingKeyStats) GetNbG2() uint32 { + if x != nil { + return x.NbG2 + } + return 0 +} + +func (x *VerifyingKeyStats) GetNbPublicWitness() uint32 { + if x != nil { + return x.NbPublicWitness + } + return 0 +} + +type CommitmentStats struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + NbPublicCommitted uint32 `protobuf:"varint,1,opt,name=nb_public_committed,json=nbPublicCommitted,proto3" json:"nb_public_committed,omitempty"` + NbPrivateCommitted uint32 `protobuf:"varint,2,opt,name=nb_private_committed,json=nbPrivateCommitted,proto3" json:"nb_private_committed,omitempty"` +} + +func (x *CommitmentStats) Reset() { + *x = CommitmentStats{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_galois_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CommitmentStats) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CommitmentStats) ProtoMessage() {} + +func (x *CommitmentStats) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_galois_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CommitmentStats.ProtoReflect.Descriptor instead. +func (*CommitmentStats) Descriptor() ([]byte, []int) { + return file_api_v2_galois_proto_rawDescGZIP(), []int{13} +} + +func (x *CommitmentStats) GetNbPublicCommitted() uint32 { + if x != nil { + return x.NbPublicCommitted + } + return 0 +} + +func (x *CommitmentStats) GetNbPrivateCommitted() uint32 { + if x != nil { + return x.NbPrivateCommitted + } + return 0 +} + +type QueryStatsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + VariableStats *VariableStats `protobuf:"bytes,1,opt,name=variable_stats,json=variableStats,proto3" json:"variable_stats,omitempty"` + ProvingKeyStats *ProvingKeyStats `protobuf:"bytes,2,opt,name=proving_key_stats,json=provingKeyStats,proto3" json:"proving_key_stats,omitempty"` + VerifyingKeyStats *VerifyingKeyStats `protobuf:"bytes,3,opt,name=verifying_key_stats,json=verifyingKeyStats,proto3" json:"verifying_key_stats,omitempty"` + CommitmentStats *CommitmentStats `protobuf:"bytes,4,opt,name=commitment_stats,json=commitmentStats,proto3" json:"commitment_stats,omitempty"` +} + +func (x *QueryStatsResponse) Reset() { + *x = QueryStatsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_galois_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryStatsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryStatsResponse) ProtoMessage() {} + +func (x *QueryStatsResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_galois_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use QueryStatsResponse.ProtoReflect.Descriptor instead. +func (*QueryStatsResponse) Descriptor() ([]byte, []int) { + return file_api_v2_galois_proto_rawDescGZIP(), []int{14} +} + +func (x *QueryStatsResponse) GetVariableStats() *VariableStats { + if x != nil { + return x.VariableStats + } + return nil +} + +func (x *QueryStatsResponse) GetProvingKeyStats() *ProvingKeyStats { + if x != nil { + return x.ProvingKeyStats + } + return nil +} + +func (x *QueryStatsResponse) GetVerifyingKeyStats() *VerifyingKeyStats { + if x != nil { + return x.VerifyingKeyStats + } + return nil +} + +func (x *QueryStatsResponse) GetCommitmentStats() *CommitmentStats { + if x != nil { + return x.CommitmentStats + } + return nil +} + +type PollRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Request *ProveRequest `protobuf:"bytes,1,opt,name=request,proto3" json:"request,omitempty"` +} + +func (x *PollRequest) Reset() { + *x = PollRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_galois_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PollRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PollRequest) ProtoMessage() {} + +func (x *PollRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_galois_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PollRequest.ProtoReflect.Descriptor instead. +func (*PollRequest) Descriptor() ([]byte, []int) { + return file_api_v2_galois_proto_rawDescGZIP(), []int{15} +} + +func (x *PollRequest) GetRequest() *ProveRequest { + if x != nil { + return x.Request + } + return nil +} + +type ProveRequestPending struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ProveRequestPending) Reset() { + *x = ProveRequestPending{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_galois_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProveRequestPending) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProveRequestPending) ProtoMessage() {} + +func (x *ProveRequestPending) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_galois_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProveRequestPending.ProtoReflect.Descriptor instead. +func (*ProveRequestPending) Descriptor() ([]byte, []int) { + return file_api_v2_galois_proto_rawDescGZIP(), []int{16} +} + +type ProveRequestFailed struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` +} + +func (x *ProveRequestFailed) Reset() { + *x = ProveRequestFailed{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_galois_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProveRequestFailed) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProveRequestFailed) ProtoMessage() {} + +func (x *ProveRequestFailed) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_galois_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProveRequestFailed.ProtoReflect.Descriptor instead. +func (*ProveRequestFailed) Descriptor() ([]byte, []int) { + return file_api_v2_galois_proto_rawDescGZIP(), []int{17} +} + +func (x *ProveRequestFailed) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +type ProveRequestDone struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Response *ProveResponse `protobuf:"bytes,1,opt,name=response,proto3" json:"response,omitempty"` +} + +func (x *ProveRequestDone) Reset() { + *x = ProveRequestDone{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_galois_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProveRequestDone) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProveRequestDone) ProtoMessage() {} + +func (x *ProveRequestDone) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_galois_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProveRequestDone.ProtoReflect.Descriptor instead. +func (*ProveRequestDone) Descriptor() ([]byte, []int) { + return file_api_v2_galois_proto_rawDescGZIP(), []int{18} +} + +func (x *ProveRequestDone) GetResponse() *ProveResponse { + if x != nil { + return x.Response + } + return nil +} + +type PollResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Result: + // + // *PollResponse_Pending + // *PollResponse_Failed + // *PollResponse_Done + Result isPollResponse_Result `protobuf_oneof:"result"` +} + +func (x *PollResponse) Reset() { + *x = PollResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v2_galois_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PollResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PollResponse) ProtoMessage() {} + +func (x *PollResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_v2_galois_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PollResponse.ProtoReflect.Descriptor instead. +func (*PollResponse) Descriptor() ([]byte, []int) { + return file_api_v2_galois_proto_rawDescGZIP(), []int{19} +} + +func (m *PollResponse) GetResult() isPollResponse_Result { + if m != nil { + return m.Result + } + return nil +} + +func (x *PollResponse) GetPending() *ProveRequestPending { + if x, ok := x.GetResult().(*PollResponse_Pending); ok { + return x.Pending + } + return nil +} + +func (x *PollResponse) GetFailed() *ProveRequestFailed { + if x, ok := x.GetResult().(*PollResponse_Failed); ok { + return x.Failed + } + return nil +} + +func (x *PollResponse) GetDone() *ProveRequestDone { + if x, ok := x.GetResult().(*PollResponse_Done); ok { + return x.Done + } + return nil +} + +type isPollResponse_Result interface { + isPollResponse_Result() +} + +type PollResponse_Pending struct { + Pending *ProveRequestPending `protobuf:"bytes,1,opt,name=pending,proto3,oneof"` +} + +type PollResponse_Failed struct { + Failed *ProveRequestFailed `protobuf:"bytes,2,opt,name=failed,proto3,oneof"` +} + +type PollResponse_Done struct { + Done *ProveRequestDone `protobuf:"bytes,3,opt,name=done,proto3,oneof"` +} + +func (*PollResponse_Pending) isPollResponse_Result() {} + +func (*PollResponse_Failed) isPollResponse_Result() {} + +func (*PollResponse_Done) isPollResponse_Result() {} + +var File_api_v2_galois_proto protoreflect.FileDescriptor + +var file_api_v2_galois_proto_rawDesc = []byte{ + 0x0a, 0x13, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x61, 0x6c, 0x6f, 0x69, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x13, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x61, 0x6c, + 0x6f, 0x69, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x1a, 0x20, 0x74, 0x65, 0x6e, 0x64, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x74, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x74, 0x65, + 0x6e, 0x64, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x74, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x63, + 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x21, + 0x0a, 0x09, 0x46, 0x72, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0x9f, 0x01, 0x0a, 0x12, 0x5a, 0x65, 0x72, 0x6f, 0x4b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, + 0x64, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, + 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x11, + 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x76, 0x6d, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x65, 0x76, 0x6d, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x23, + 0x0a, 0x0d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x49, 0x6e, 0x70, + 0x75, 0x74, 0x73, 0x22, 0x8f, 0x01, 0x0a, 0x12, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x41, 0x0a, 0x0a, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x74, 0x2e, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x1e, 0x0a, + 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0c, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x16, 0x0a, + 0x06, 0x62, 0x69, 0x74, 0x6d, 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x62, + 0x69, 0x74, 0x6d, 0x61, 0x70, 0x22, 0xe7, 0x01, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x74, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, + 0x6c, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x76, 0x6f, 0x74, 0x65, 0x12, 0x4e, 0x0a, 0x0e, 0x74, + 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x61, 0x6c, 0x6f, + 0x69, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x0d, 0x74, 0x72, + 0x75, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x52, 0x0a, 0x10, 0x75, + 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x61, + 0x6c, 0x6f, 0x69, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x0f, + 0x75, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x22, + 0xcc, 0x01, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x3d, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x27, 0x2e, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x61, 0x6c, 0x6f, 0x69, 0x73, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x5a, 0x65, 0x72, 0x6f, 0x4b, 0x6e, 0x6f, 0x77, 0x6c, + 0x65, 0x64, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, + 0x12, 0x3b, 0x0a, 0x1a, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x17, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x3f, 0x0a, + 0x1c, 0x75, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x19, 0x75, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x93, + 0x02, 0x0a, 0x0d, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x3d, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x27, 0x2e, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x61, 0x6c, 0x6f, 0x69, 0x73, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x5a, 0x65, 0x72, 0x6f, 0x4b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, + 0x64, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x12, + 0x3b, 0x0a, 0x1a, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x17, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x3f, 0x0a, 0x1c, + 0x75, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x19, 0x75, 0x6e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x74, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x45, 0x0a, + 0x0e, 0x68, 0x61, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x61, + 0x6c, 0x6f, 0x69, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x46, 0x72, 0x45, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0d, 0x68, 0x61, 0x73, 0x68, 0x65, 0x64, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x22, 0x26, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x19, 0x0a, 0x17, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x34, 0x0a, 0x18, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x13, 0x0a, + 0x11, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x22, 0xf3, 0x01, 0x0a, 0x0d, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x6e, 0x62, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x13, 0x6e, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x6e, 0x62, 0x5f, 0x73, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x6e, 0x62, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x6e, 0x62, 0x5f, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x6e, 0x62, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x62, 0x5f, 0x63, + 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0d, 0x6e, 0x62, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x12, + 0x27, 0x0a, 0x0f, 0x6e, 0x62, 0x5f, 0x63, 0x6f, 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, + 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6e, 0x62, 0x43, 0x6f, 0x65, 0x66, + 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3b, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x76, + 0x69, 0x6e, 0x67, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x13, 0x0a, 0x05, 0x6e, + 0x62, 0x5f, 0x67, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x6e, 0x62, 0x47, 0x31, + 0x12, 0x13, 0x0a, 0x05, 0x6e, 0x62, 0x5f, 0x67, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x04, 0x6e, 0x62, 0x47, 0x32, 0x22, 0x69, 0x0a, 0x11, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x69, + 0x6e, 0x67, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x13, 0x0a, 0x05, 0x6e, 0x62, + 0x5f, 0x67, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x6e, 0x62, 0x47, 0x31, 0x12, + 0x13, 0x0a, 0x05, 0x6e, 0x62, 0x5f, 0x67, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, + 0x6e, 0x62, 0x47, 0x32, 0x12, 0x2a, 0x0a, 0x11, 0x6e, 0x62, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x5f, 0x77, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0f, 0x6e, 0x62, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, + 0x22, 0x73, 0x0a, 0x0f, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, + 0x61, 0x74, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x6e, 0x62, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x11, 0x6e, 0x62, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x74, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x6e, 0x62, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x12, 0x6e, 0x62, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x74, 0x65, 0x64, 0x22, 0xda, 0x02, 0x0a, 0x12, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, + 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0e, + 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x61, 0x6c, + 0x6f, 0x69, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0d, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x50, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x6e, 0x67, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x61, 0x6c, 0x6f, 0x69, + 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x67, + 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, + 0x67, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x56, 0x0a, 0x13, 0x76, 0x65, 0x72, + 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2e, 0x67, + 0x61, 0x6c, 0x6f, 0x69, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x56, 0x65, 0x72, + 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x11, + 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, + 0x73, 0x12, 0x4f, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x75, 0x6e, + 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x61, 0x6c, 0x6f, 0x69, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, + 0x73, 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x22, 0x4a, 0x0a, 0x0b, 0x50, 0x6f, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x61, 0x6c, 0x6f, 0x69, + 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x15, + 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x65, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x0a, 0x12, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x52, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x44, 0x6f, 0x6e, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x75, 0x6e, + 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x61, 0x6c, 0x6f, 0x69, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, + 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xde, 0x01, 0x0a, 0x0c, 0x50, 0x6f, + 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x07, 0x70, 0x65, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x75, 0x6e, + 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x61, 0x6c, 0x6f, 0x69, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x65, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x07, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x12, 0x41, 0x0a, 0x06, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x27, 0x2e, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x61, 0x6c, 0x6f, 0x69, 0x73, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x48, 0x00, 0x52, 0x06, 0x66, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x12, 0x3b, 0x0a, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x25, 0x2e, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x61, 0x6c, 0x6f, 0x69, 0x73, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x44, 0x6f, 0x6e, 0x65, 0x48, 0x00, 0x52, 0x04, 0x64, 0x6f, 0x6e, 0x65, + 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x32, 0xd0, 0x03, 0x0a, 0x0e, 0x55, + 0x6e, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x50, 0x49, 0x12, 0x4e, 0x0a, + 0x05, 0x50, 0x72, 0x6f, 0x76, 0x65, 0x12, 0x21, 0x2e, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2e, 0x67, + 0x61, 0x6c, 0x6f, 0x69, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, + 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x75, 0x6e, 0x69, 0x6f, + 0x6e, 0x2e, 0x67, 0x61, 0x6c, 0x6f, 0x69, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, + 0x50, 0x72, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, + 0x06, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x22, 0x2e, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2e, + 0x67, 0x61, 0x6c, 0x6f, 0x69, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x75, 0x6e, + 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x61, 0x6c, 0x6f, 0x69, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x32, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x6f, 0x0a, 0x10, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, + 0x72, 0x61, 0x63, 0x74, 0x12, 0x2c, 0x2e, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x61, 0x6c, + 0x6f, 0x69, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x61, 0x6c, 0x6f, 0x69, + 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x5d, 0x0a, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, + 0x26, 0x2e, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2e, 0x67, 0x61, 0x6c, 0x6f, 0x69, 0x73, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2e, + 0x67, 0x61, 0x6c, 0x6f, 0x69, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x4b, 0x0a, 0x04, 0x50, 0x6f, 0x6c, 0x6c, 0x12, 0x20, 0x2e, 0x75, 0x6e, 0x69, 0x6f, 0x6e, + 0x2e, 0x67, 0x61, 0x6c, 0x6f, 0x69, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x50, + 0x6f, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x75, 0x6e, 0x69, + 0x6f, 0x6e, 0x2e, 0x67, 0x61, 0x6c, 0x6f, 0x69, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, + 0x2e, 0x50, 0x6f, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x17, 0x5a, + 0x15, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2f, 0x67, 0x61, 0x6c, 0x6f, 0x69, 0x73, 0x2f, 0x72, 0x70, + 0x63, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_api_v2_galois_proto_rawDescOnce sync.Once + file_api_v2_galois_proto_rawDescData = file_api_v2_galois_proto_rawDesc +) + +func file_api_v2_galois_proto_rawDescGZIP() []byte { + file_api_v2_galois_proto_rawDescOnce.Do(func() { + file_api_v2_galois_proto_rawDescData = protoimpl.X.CompressGZIP(file_api_v2_galois_proto_rawDescData) + }) + return file_api_v2_galois_proto_rawDescData +} + +var file_api_v2_galois_proto_msgTypes = make([]protoimpl.MessageInfo, 20) +var file_api_v2_galois_proto_goTypes = []interface{}{ + (*FrElement)(nil), // 0: union.galois.api.v2.FrElement + (*ZeroKnowledgeProof)(nil), // 1: union.galois.api.v2.ZeroKnowledgeProof + (*ValidatorSetCommit)(nil), // 2: union.galois.api.v2.ValidatorSetCommit + (*ProveRequest)(nil), // 3: union.galois.api.v2.ProveRequest + (*ProveResponse)(nil), // 4: union.galois.api.v2.ProveResponse + (*VerifyRequest)(nil), // 5: union.galois.api.v2.VerifyRequest + (*VerifyResponse)(nil), // 6: union.galois.api.v2.VerifyResponse + (*GenerateContractRequest)(nil), // 7: union.galois.api.v2.GenerateContractRequest + (*GenerateContractResponse)(nil), // 8: union.galois.api.v2.GenerateContractResponse + (*QueryStatsRequest)(nil), // 9: union.galois.api.v2.QueryStatsRequest + (*VariableStats)(nil), // 10: union.galois.api.v2.VariableStats + (*ProvingKeyStats)(nil), // 11: union.galois.api.v2.ProvingKeyStats + (*VerifyingKeyStats)(nil), // 12: union.galois.api.v2.VerifyingKeyStats + (*CommitmentStats)(nil), // 13: union.galois.api.v2.CommitmentStats + (*QueryStatsResponse)(nil), // 14: union.galois.api.v2.QueryStatsResponse + (*PollRequest)(nil), // 15: union.galois.api.v2.PollRequest + (*ProveRequestPending)(nil), // 16: union.galois.api.v2.ProveRequestPending + (*ProveRequestFailed)(nil), // 17: union.galois.api.v2.ProveRequestFailed + (*ProveRequestDone)(nil), // 18: union.galois.api.v2.ProveRequestDone + (*PollResponse)(nil), // 19: union.galois.api.v2.PollResponse + (*types.SimpleValidator)(nil), // 20: tendermint.types.SimpleValidator + (*types.CanonicalVote)(nil), // 21: tendermint.types.CanonicalVote +} +var file_api_v2_galois_proto_depIdxs = []int32{ + 20, // 0: union.galois.api.v2.ValidatorSetCommit.validators:type_name -> tendermint.types.SimpleValidator + 21, // 1: union.galois.api.v2.ProveRequest.vote:type_name -> tendermint.types.CanonicalVote + 2, // 2: union.galois.api.v2.ProveRequest.trusted_commit:type_name -> union.galois.api.v2.ValidatorSetCommit + 2, // 3: union.galois.api.v2.ProveRequest.untrusted_commit:type_name -> union.galois.api.v2.ValidatorSetCommit + 1, // 4: union.galois.api.v2.ProveResponse.proof:type_name -> union.galois.api.v2.ZeroKnowledgeProof + 1, // 5: union.galois.api.v2.VerifyRequest.proof:type_name -> union.galois.api.v2.ZeroKnowledgeProof + 0, // 6: union.galois.api.v2.VerifyRequest.hashed_message:type_name -> union.galois.api.v2.FrElement + 10, // 7: union.galois.api.v2.QueryStatsResponse.variable_stats:type_name -> union.galois.api.v2.VariableStats + 11, // 8: union.galois.api.v2.QueryStatsResponse.proving_key_stats:type_name -> union.galois.api.v2.ProvingKeyStats + 12, // 9: union.galois.api.v2.QueryStatsResponse.verifying_key_stats:type_name -> union.galois.api.v2.VerifyingKeyStats + 13, // 10: union.galois.api.v2.QueryStatsResponse.commitment_stats:type_name -> union.galois.api.v2.CommitmentStats + 3, // 11: union.galois.api.v2.PollRequest.request:type_name -> union.galois.api.v2.ProveRequest + 4, // 12: union.galois.api.v2.ProveRequestDone.response:type_name -> union.galois.api.v2.ProveResponse + 16, // 13: union.galois.api.v2.PollResponse.pending:type_name -> union.galois.api.v2.ProveRequestPending + 17, // 14: union.galois.api.v2.PollResponse.failed:type_name -> union.galois.api.v2.ProveRequestFailed + 18, // 15: union.galois.api.v2.PollResponse.done:type_name -> union.galois.api.v2.ProveRequestDone + 3, // 16: union.galois.api.v2.UnionProverAPI.Prove:input_type -> union.galois.api.v2.ProveRequest + 5, // 17: union.galois.api.v2.UnionProverAPI.Verify:input_type -> union.galois.api.v2.VerifyRequest + 7, // 18: union.galois.api.v2.UnionProverAPI.GenerateContract:input_type -> union.galois.api.v2.GenerateContractRequest + 9, // 19: union.galois.api.v2.UnionProverAPI.QueryStats:input_type -> union.galois.api.v2.QueryStatsRequest + 15, // 20: union.galois.api.v2.UnionProverAPI.Poll:input_type -> union.galois.api.v2.PollRequest + 4, // 21: union.galois.api.v2.UnionProverAPI.Prove:output_type -> union.galois.api.v2.ProveResponse + 6, // 22: union.galois.api.v2.UnionProverAPI.Verify:output_type -> union.galois.api.v2.VerifyResponse + 8, // 23: union.galois.api.v2.UnionProverAPI.GenerateContract:output_type -> union.galois.api.v2.GenerateContractResponse + 14, // 24: union.galois.api.v2.UnionProverAPI.QueryStats:output_type -> union.galois.api.v2.QueryStatsResponse + 19, // 25: union.galois.api.v2.UnionProverAPI.Poll:output_type -> union.galois.api.v2.PollResponse + 21, // [21:26] is the sub-list for method output_type + 16, // [16:21] is the sub-list for method input_type + 16, // [16:16] is the sub-list for extension type_name + 16, // [16:16] is the sub-list for extension extendee + 0, // [0:16] is the sub-list for field type_name +} + +func init() { file_api_v2_galois_proto_init() } +func file_api_v2_galois_proto_init() { + if File_api_v2_galois_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_api_v2_galois_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FrElement); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_galois_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ZeroKnowledgeProof); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_galois_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidatorSetCommit); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_galois_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProveRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_galois_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProveResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_galois_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VerifyRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_galois_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VerifyResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_galois_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenerateContractRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_galois_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenerateContractResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_galois_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryStatsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_galois_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VariableStats); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_galois_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProvingKeyStats); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_galois_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VerifyingKeyStats); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_galois_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CommitmentStats); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_galois_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryStatsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_galois_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PollRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_galois_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProveRequestPending); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_galois_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProveRequestFailed); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_galois_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProveRequestDone); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v2_galois_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PollResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_api_v2_galois_proto_msgTypes[19].OneofWrappers = []interface{}{ + (*PollResponse_Pending)(nil), + (*PollResponse_Failed)(nil), + (*PollResponse_Done)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_api_v2_galois_proto_rawDesc, + NumEnums: 0, + NumMessages: 20, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_api_v2_galois_proto_goTypes, + DependencyIndexes: file_api_v2_galois_proto_depIdxs, + MessageInfos: file_api_v2_galois_proto_msgTypes, + }.Build() + File_api_v2_galois_proto = out.File + file_api_v2_galois_proto_rawDesc = nil + file_api_v2_galois_proto_goTypes = nil + file_api_v2_galois_proto_depIdxs = nil +} diff --git a/galoisd/grpc/api/v2/galois_grpc.pb.go b/galoisd/grpc/api/v2/galois_grpc.pb.go new file mode 100644 index 0000000000..b5a72fb981 --- /dev/null +++ b/galoisd/grpc/api/v2/galois_grpc.pb.go @@ -0,0 +1,257 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: api/v2/galois.proto + +package grpc + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + UnionProverAPI_Prove_FullMethodName = "/union.galois.api.v2.UnionProverAPI/Prove" + UnionProverAPI_Verify_FullMethodName = "/union.galois.api.v2.UnionProverAPI/Verify" + UnionProverAPI_GenerateContract_FullMethodName = "/union.galois.api.v2.UnionProverAPI/GenerateContract" + UnionProverAPI_QueryStats_FullMethodName = "/union.galois.api.v2.UnionProverAPI/QueryStats" + UnionProverAPI_Poll_FullMethodName = "/union.galois.api.v2.UnionProverAPI/Poll" +) + +// UnionProverAPIClient is the client API for UnionProverAPI service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type UnionProverAPIClient interface { + Prove(ctx context.Context, in *ProveRequest, opts ...grpc.CallOption) (*ProveResponse, error) + Verify(ctx context.Context, in *VerifyRequest, opts ...grpc.CallOption) (*VerifyResponse, error) + GenerateContract(ctx context.Context, in *GenerateContractRequest, opts ...grpc.CallOption) (*GenerateContractResponse, error) + QueryStats(ctx context.Context, in *QueryStatsRequest, opts ...grpc.CallOption) (*QueryStatsResponse, error) + Poll(ctx context.Context, in *PollRequest, opts ...grpc.CallOption) (*PollResponse, error) +} + +type unionProverAPIClient struct { + cc grpc.ClientConnInterface +} + +func NewUnionProverAPIClient(cc grpc.ClientConnInterface) UnionProverAPIClient { + return &unionProverAPIClient{cc} +} + +func (c *unionProverAPIClient) Prove(ctx context.Context, in *ProveRequest, opts ...grpc.CallOption) (*ProveResponse, error) { + out := new(ProveResponse) + err := c.cc.Invoke(ctx, UnionProverAPI_Prove_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *unionProverAPIClient) Verify(ctx context.Context, in *VerifyRequest, opts ...grpc.CallOption) (*VerifyResponse, error) { + out := new(VerifyResponse) + err := c.cc.Invoke(ctx, UnionProverAPI_Verify_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *unionProverAPIClient) GenerateContract(ctx context.Context, in *GenerateContractRequest, opts ...grpc.CallOption) (*GenerateContractResponse, error) { + out := new(GenerateContractResponse) + err := c.cc.Invoke(ctx, UnionProverAPI_GenerateContract_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *unionProverAPIClient) QueryStats(ctx context.Context, in *QueryStatsRequest, opts ...grpc.CallOption) (*QueryStatsResponse, error) { + out := new(QueryStatsResponse) + err := c.cc.Invoke(ctx, UnionProverAPI_QueryStats_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *unionProverAPIClient) Poll(ctx context.Context, in *PollRequest, opts ...grpc.CallOption) (*PollResponse, error) { + out := new(PollResponse) + err := c.cc.Invoke(ctx, UnionProverAPI_Poll_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// UnionProverAPIServer is the server API for UnionProverAPI service. +// All implementations must embed UnimplementedUnionProverAPIServer +// for forward compatibility +type UnionProverAPIServer interface { + Prove(context.Context, *ProveRequest) (*ProveResponse, error) + Verify(context.Context, *VerifyRequest) (*VerifyResponse, error) + GenerateContract(context.Context, *GenerateContractRequest) (*GenerateContractResponse, error) + QueryStats(context.Context, *QueryStatsRequest) (*QueryStatsResponse, error) + Poll(context.Context, *PollRequest) (*PollResponse, error) + mustEmbedUnimplementedUnionProverAPIServer() +} + +// UnimplementedUnionProverAPIServer must be embedded to have forward compatible implementations. +type UnimplementedUnionProverAPIServer struct { +} + +func (UnimplementedUnionProverAPIServer) Prove(context.Context, *ProveRequest) (*ProveResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Prove not implemented") +} +func (UnimplementedUnionProverAPIServer) Verify(context.Context, *VerifyRequest) (*VerifyResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Verify not implemented") +} +func (UnimplementedUnionProverAPIServer) GenerateContract(context.Context, *GenerateContractRequest) (*GenerateContractResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GenerateContract not implemented") +} +func (UnimplementedUnionProverAPIServer) QueryStats(context.Context, *QueryStatsRequest) (*QueryStatsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method QueryStats not implemented") +} +func (UnimplementedUnionProverAPIServer) Poll(context.Context, *PollRequest) (*PollResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Poll not implemented") +} +func (UnimplementedUnionProverAPIServer) mustEmbedUnimplementedUnionProverAPIServer() {} + +// UnsafeUnionProverAPIServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to UnionProverAPIServer will +// result in compilation errors. +type UnsafeUnionProverAPIServer interface { + mustEmbedUnimplementedUnionProverAPIServer() +} + +func RegisterUnionProverAPIServer(s grpc.ServiceRegistrar, srv UnionProverAPIServer) { + s.RegisterService(&UnionProverAPI_ServiceDesc, srv) +} + +func _UnionProverAPI_Prove_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ProveRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UnionProverAPIServer).Prove(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: UnionProverAPI_Prove_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UnionProverAPIServer).Prove(ctx, req.(*ProveRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _UnionProverAPI_Verify_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VerifyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UnionProverAPIServer).Verify(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: UnionProverAPI_Verify_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UnionProverAPIServer).Verify(ctx, req.(*VerifyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _UnionProverAPI_GenerateContract_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GenerateContractRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UnionProverAPIServer).GenerateContract(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: UnionProverAPI_GenerateContract_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UnionProverAPIServer).GenerateContract(ctx, req.(*GenerateContractRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _UnionProverAPI_QueryStats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryStatsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UnionProverAPIServer).QueryStats(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: UnionProverAPI_QueryStats_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UnionProverAPIServer).QueryStats(ctx, req.(*QueryStatsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _UnionProverAPI_Poll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PollRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UnionProverAPIServer).Poll(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: UnionProverAPI_Poll_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UnionProverAPIServer).Poll(ctx, req.(*PollRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// UnionProverAPI_ServiceDesc is the grpc.ServiceDesc for UnionProverAPI service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var UnionProverAPI_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "union.galois.api.v2.UnionProverAPI", + HandlerType: (*UnionProverAPIServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Prove", + Handler: _UnionProverAPI_Prove_Handler, + }, + { + MethodName: "Verify", + Handler: _UnionProverAPI_Verify_Handler, + }, + { + MethodName: "GenerateContract", + Handler: _UnionProverAPI_GenerateContract_Handler, + }, + { + MethodName: "QueryStats", + Handler: _UnionProverAPI_QueryStats_Handler, + }, + { + MethodName: "Poll", + Handler: _UnionProverAPI_Poll_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "api/v2/galois.proto", +} diff --git a/galoisd/grpc/api/v1/server.go b/galoisd/grpc/server.go similarity index 74% rename from galoisd/grpc/api/v1/server.go rename to galoisd/grpc/server.go index 0596b3831e..75a783520f 100644 --- a/galoisd/grpc/api/v1/server.go +++ b/galoisd/grpc/server.go @@ -7,17 +7,9 @@ import ( "crypto/sha256" "encoding/json" "fmt" + "galois/grpc/api/v2" "galois/pkg/lightclient" lcgadget "galois/pkg/lightclient/nonadjacent" - "io" - "log" - "math/big" - "os" - "runtime" - "sync" - "sync/atomic" - "time" - cometbn254 "github.com/cometbft/cometbft/crypto/bn254" ce "github.com/cometbft/cometbft/crypto/encoding" "github.com/cometbft/cometbft/crypto/merkle" @@ -30,18 +22,25 @@ import ( "github.com/consensys/gnark-crypto/utils" backend "github.com/consensys/gnark/backend/groth16" backend_bn254 "github.com/consensys/gnark/backend/groth16/bn254" - "github.com/consensys/gnark/logger" - "github.com/rs/zerolog" - "github.com/consensys/gnark/constraint" cs_bn254 "github.com/consensys/gnark/constraint/bn254" "github.com/consensys/gnark/frontend" "github.com/consensys/gnark/frontend/cs/r1cs" + "github.com/consensys/gnark/logger" gadget "github.com/consensys/gnark/std/algebra/emulated/sw_bn254" + "github.com/rs/zerolog" + "io" + "log" + "math/big" + "os" + "runtime" + "sync" + "sync/atomic" + "time" ) type proverServer struct { - UnimplementedUnionProverAPIServer + grpc.UnimplementedUnionProverAPIServer cs cs_bn254.R1CS pk backend_bn254.ProvingKey vk backend_bn254.VerifyingKey @@ -52,83 +51,96 @@ type proverServer struct { func (*proverServer) mustEmbedUnimplementedUnionProverAPIServer() {} -func (p *proverServer) Poll(ctx context.Context, pollReq *PollRequest) (*PollResponse, error) { - req := pollReq.Request - - prove := func() (*ProveResponse, error) { - - marshalValidators := func(validators []*types.SimpleValidator) ([lightclient.MaxVal]lightclient.Validator, []byte, error) { - lcValidators := [lightclient.MaxVal]lightclient.Validator{} - // Make sure we zero initialize - for i := 0; i < lightclient.MaxVal; i++ { - lcValidators[i].HashableX = 0 - lcValidators[i].HashableXMSB = 0 - lcValidators[i].HashableY = 0 - lcValidators[i].HashableYMSB = 0 - lcValidators[i].Power = 0 - } - merkleTree := make([][]byte, len(validators)) - for i, val := range validators { - tmPK, err := ce.PubKeyFromProto(*val.PubKey) - if err != nil { - return lcValidators, nil, fmt.Errorf("Could not deserialize proto to tendermint public key %s", err) - } - var public bn254.G1Affine - _, err = public.SetBytes(tmPK.Bytes()) - if err != nil { - return lcValidators, nil, fmt.Errorf("Could not deserialize bn254 public key %s", err) - } - leaf, err := cometbn254.NewMerkleLeaf(public, val.VotingPower) - if err != nil { - return lcValidators, nil, fmt.Errorf("Could not create merkle leaf %s", err) - } - lcValidators[i].HashableX = leaf.ShiftedX - lcValidators[i].HashableY = leaf.ShiftedY - lcValidators[i].HashableXMSB = leaf.MsbX - lcValidators[i].HashableYMSB = leaf.MsbY - lcValidators[i].Power = leaf.VotingPower +func MarshalValidators(validators []*types.SimpleValidator) ([lightclient.MaxVal]lightclient.Validator, []byte, error) { + lcValidators := [lightclient.MaxVal]lightclient.Validator{} + // Make sure we zero initialize + for i := 0; i < lightclient.MaxVal; i++ { + lcValidators[i].HashableX = 0 + lcValidators[i].HashableXMSB = 0 + lcValidators[i].HashableY = 0 + lcValidators[i].HashableYMSB = 0 + lcValidators[i].Power = 0 + } + merkleTree := make([][]byte, len(validators)) + for i, val := range validators { + tmPK, err := ce.PubKeyFromProto(*val.PubKey) + if err != nil { + return lcValidators, nil, fmt.Errorf("Could not deserialize proto to tendermint public key %s", err) + } + var public bn254.G1Affine + _, err = public.SetBytes(tmPK.Bytes()) + if err != nil { + return lcValidators, nil, fmt.Errorf("Could not deserialize bn254 public key %s", err) + } + leaf, err := cometbn254.NewMerkleLeaf(public, val.VotingPower) + if err != nil { + return lcValidators, nil, fmt.Errorf("Could not create merkle leaf %s", err) + } + lcValidators[i].HashableX = leaf.ShiftedX + lcValidators[i].HashableY = leaf.ShiftedY + lcValidators[i].HashableXMSB = leaf.MsbX + lcValidators[i].HashableYMSB = leaf.MsbY + lcValidators[i].Power = leaf.VotingPower - merkleTree[i], err = leaf.Hash() - if err != nil { - return lcValidators, nil, fmt.Errorf("Could not create merkle hash %s", err) - } - } - return lcValidators, merkle.MimcHashFromByteSlices(merkleTree), nil + merkleTree[i], err = leaf.Hash() + if err != nil { + return lcValidators, nil, fmt.Errorf("Could not create merkle hash %s", err) } + } + return lcValidators, merkle.MimcHashFromByteSlices(merkleTree), nil +} - aggregateSignatures := func(signatures [][]byte) (curve.G2Affine, error) { - var aggregatedSignature curve.G2Affine - var decompressedSignature curve.G2Affine - for _, signature := range signatures { - _, err := decompressedSignature.SetBytes(signature) - if err != nil { - return curve.G2Affine{}, fmt.Errorf("Could not decompress signature %s", err) - } - aggregatedSignature.Add(&aggregatedSignature, &decompressedSignature) - } - return aggregatedSignature, nil +func AggregateSignatures(signatures [][]byte) (curve.G2Affine, error) { + var aggregatedSignature curve.G2Affine + var decompressedSignature curve.G2Affine + for _, signature := range signatures { + _, err := decompressedSignature.SetBytes(signature) + if err != nil { + return curve.G2Affine{}, fmt.Errorf("Could not decompress signature %s", err) } + aggregatedSignature.Add(&aggregatedSignature, &decompressedSignature) + } + return aggregatedSignature, nil +} + +func (p *proverServer) Poll(ctx context.Context, pollReq *grpc.PollRequest) (*grpc.PollResponse, error) { + req := pollReq.Request + + if len(req.TrustedCommit.Validators) > lightclient.MaxVal { + return nil, fmt.Errorf("The circuit can handle a maximum of %d validators", lightclient.MaxVal) + } + if len(req.UntrustedCommit.Validators) > lightclient.MaxVal { + return nil, fmt.Errorf("The circuit can handle a maximum of %d validators", lightclient.MaxVal) + } + if len(req.TrustedCommit.Signatures) > len(req.TrustedCommit.Signatures) { + return nil, fmt.Errorf("More signatures than validators") + } + if len(req.UntrustedCommit.Signatures) > len(req.UntrustedCommit.Signatures) { + return nil, fmt.Errorf("More signatures than validators") + } + + prove := func() (*grpc.ProveResponse, error) { log.Println("Marshalling trusted validators...") - trustedValidators, trustedValidatorsRoot, err := marshalValidators(req.TrustedCommit.Validators) + trustedValidators, trustedValidatorsRoot, err := MarshalValidators(req.TrustedCommit.Validators) if err != nil { return nil, fmt.Errorf("Could not marshal trusted validators %s", err) } log.Println("Aggregating trusted signature...") - trustedAggregatedSignature, err := aggregateSignatures(req.TrustedCommit.Signatures) + trustedAggregatedSignature, err := AggregateSignatures(req.TrustedCommit.Signatures) if err != nil { return nil, fmt.Errorf("Could not aggregate trusted signature %s", err) } log.Println("Marshalling untrusted validators...") - untrustedValidators, untrustedValidatorsRoot, err := marshalValidators(req.UntrustedCommit.Validators) + untrustedValidators, untrustedValidatorsRoot, err := MarshalValidators(req.UntrustedCommit.Validators) if err != nil { return nil, fmt.Errorf("Could not marshal untrusted validators %s", err) } log.Println("Aggregating untrusted signature...") - untrustedAggregatedSignature, err := aggregateSignatures(req.UntrustedCommit.Signatures) + untrustedAggregatedSignature, err := AggregateSignatures(req.UntrustedCommit.Signatures) if err != nil { return nil, fmt.Errorf("Could not aggregate untrusted signature %s", err) } @@ -154,14 +166,18 @@ func (p *proverServer) Poll(ctx context.Context, pollReq *PollRequest) (*PollRes return nil, fmt.Errorf("Could not marshal the vote %s", err) } - hmX, hmY := cometbn254.HashToField2(signedBytes) + message := cometbn254.HashToField(signedBytes) + + hashedMessage := cometbn254.HashToG2(signedBytes) witness := lcgadget.Circuit{ + DomainSeparationTag: []byte(cometbn254.CometblsSigDST), TrustedInput: trustedInput, UntrustedInput: untrustedInput, ExpectedTrustedValRoot: trustedValidatorsRoot, ExpectedUntrustedValRoot: untrustedValidatorsRoot, - Message: [2]frontend.Variable{hmX, hmY}, + Message: message, + HashedMessage: gadget.NewG2Affine(hashedMessage), } privateWitness, err := frontend.NewWitness(&witness, ecc.BN254.ScalarField()) @@ -246,8 +262,8 @@ func (p *proverServer) Poll(ctx context.Context, pollReq *PollRequest) (*PollRes // The EVM verifier has been extended to support this two extra public inputs. evmProof := append(append(proofBz[:256], commitmentHash...), proofCommitment...) - proveRes := ProveResponse{ - Proof: &ZeroKnowledgeProof{ + proveRes := grpc.ProveResponse{ + Proof: &grpc.ZeroKnowledgeProof{ Content: proofBz, CompressedContent: compressedProofBz, PublicInputs: publicInputs, @@ -266,31 +282,31 @@ func (p *proverServer) Poll(ctx context.Context, pollReq *PollRequest) (*PollRes } proveKey := sha256.Sum256(reqJson) - result, found := p.results.LoadOrStore(proveKey, &ProveRequestPending{}) + result, found := p.results.LoadOrStore(proveKey, &grpc.ProveRequestPending{}) if found { log.Println("Poll check...") switch _result := result.(type) { - case *ProveRequestPending: - return &PollResponse{ - Result: &PollResponse_Pending{ + case *grpc.ProveRequestPending: + return &grpc.PollResponse{ + Result: &grpc.PollResponse_Pending{ Pending: _result, }, }, nil - case *ProveResponse: + case *grpc.ProveResponse: p.results.Delete(proveKey) - return &PollResponse{ - Result: &PollResponse_Done{ - Done: &ProveRequestDone{ + return &grpc.PollResponse{ + Result: &grpc.PollResponse_Done{ + Done: &grpc.ProveRequestDone{ Response: _result, }, }, }, nil - case string: - return &PollResponse{ - Result: &PollResponse_Failed{ - Failed: &ProveRequestFailed{ - Message: _result, + case error: + return &grpc.PollResponse{ + Result: &grpc.PollResponse_Failed{ + Failed: &grpc.ProveRequestFailed{ + Message: _result.Error(), }, }, }, nil @@ -314,11 +330,11 @@ func (p *proverServer) Poll(ctx context.Context, pollReq *PollRequest) (*PollRes go func() { log.Println(string(reqJson)) proveRes, err := prove() - runtime.GC() if err != nil { p.results.Store(proveKey, fmt.Errorf("failed to generate proof: %v", err)) } else { p.results.Store(proveKey, proveRes) + runtime.GC() } for true { value := p.nbJobs.Load() @@ -330,14 +346,14 @@ func (p *proverServer) Poll(ctx context.Context, pollReq *PollRequest) (*PollRes }() } - return &PollResponse{ - Result: &PollResponse_Pending{ - Pending: &ProveRequestPending{}, + return &grpc.PollResponse{ + Result: &grpc.PollResponse_Pending{ + Pending: &grpc.ProveRequestPending{}, }, }, nil } -func (p *proverServer) Verify(ctx context.Context, req *VerifyRequest) (*VerifyResponse, error) { +func (p *proverServer) Verify(ctx context.Context, req *grpc.VerifyRequest) (*grpc.VerifyResponse, error) { log.Println("Verifying...") reqJson, err := json.MarshalIndent(req, "", " ") @@ -359,16 +375,10 @@ func (p *proverServer) Verify(ctx context.Context, req *VerifyRequest) (*VerifyR return nil, fmt.Errorf("The untrusted validator set root must be a SHA256 hash") } - var blockX fr.Element - err = blockX.SetBytesCanonical(req.BlockHeaderX.Value) - if err != nil { - return nil, fmt.Errorf("The block header X must be a BN254 fr.Element: %w", err) - } - - var blockY fr.Element - err = blockY.SetBytesCanonical(req.BlockHeaderY.Value) + var hashedMessage fr.Element + err = hashedMessage.SetBytesCanonical(req.HashedMessage.Value) if err != nil { - return nil, fmt.Errorf("The block header Y must be a BN254 fr.Element: %w", err) + return nil, fmt.Errorf("The hashed message must be a BN254 fr.Element: %w", err) } validators := [lightclient.MaxVal]lightclient.Validator{} @@ -394,7 +404,7 @@ func (p *proverServer) Verify(ctx context.Context, req *VerifyRequest) (*VerifyR UntrustedInput: dummyInput, ExpectedTrustedValRoot: req.TrustedValidatorSetRoot, ExpectedUntrustedValRoot: req.UntrustedValidatorSetRoot, - Message: [2]frontend.Variable{req.BlockHeaderX.Value, req.BlockHeaderY.Value}, + Message: hashedMessage, } privateWitness, err := frontend.NewWitness(&witness, ecc.BN254.ScalarField()) @@ -410,17 +420,17 @@ func (p *proverServer) Verify(ctx context.Context, req *VerifyRequest) (*VerifyR err = backend.Verify(backend.Proof(&proof), backend.VerifyingKey(&p.vk), publicWitness) if err != nil { log.Println("Verification failed: %w", err) - return &VerifyResponse{ + return &grpc.VerifyResponse{ Valid: false, }, nil } else { - return &VerifyResponse{ + return &grpc.VerifyResponse{ Valid: true, }, nil } } -func (p *proverServer) GenerateContract(ctx context.Context, req *GenerateContractRequest) (*GenerateContractResponse, error) { +func (p *proverServer) GenerateContract(ctx context.Context, req *grpc.GenerateContractRequest) (*grpc.GenerateContractResponse, error) { log.Println("Generating contract...") var buffer bytes.Buffer @@ -431,42 +441,43 @@ func (p *proverServer) GenerateContract(ctx context.Context, req *GenerateContra } mem.Flush() - return &GenerateContractResponse{ + return &grpc.GenerateContractResponse{ Content: buffer.Bytes(), }, nil } -func (p *proverServer) QueryStats(ctx context.Context, req *QueryStatsRequest) (*QueryStatsResponse, error) { +func (p *proverServer) QueryStats(ctx context.Context, req *grpc.QueryStatsRequest) (*grpc.QueryStatsResponse, error) { log.Println("Querying stats...") - return &QueryStatsResponse{ - VariableStats: &VariableStats{ + return &grpc.QueryStatsResponse{ + VariableStats: &grpc.VariableStats{ NbInternalVariables: uint32(p.cs.GetNbInternalVariables()), NbSecretVariables: uint32(p.cs.GetNbSecretVariables()), NbPublicVariables: uint32(p.cs.GetNbPublicVariables()), NbConstraints: uint32(p.cs.GetNbConstraints()), NbCoefficients: uint32(p.cs.GetNbCoefficients()), }, - ProvingKeyStats: &ProvingKeyStats{ + ProvingKeyStats: &grpc.ProvingKeyStats{ NbG1: uint32(p.pk.NbG1()), NbG2: uint32(p.pk.NbG2()), }, - VerifyingKeyStats: &VerifyingKeyStats{ + VerifyingKeyStats: &grpc.VerifyingKeyStats{ NbG1: uint32(p.vk.NbG1()), NbG2: uint32(p.vk.NbG2()), NbPublicWitness: uint32(p.vk.NbPublicWitness()), }, // Deprecated - CommitmentStats: &CommitmentStats{ + CommitmentStats: &grpc.CommitmentStats{ NbPublicCommitted: uint32(0), NbPrivateCommitted: uint32(0), }, }, nil } -func (p *proverServer) Prove(ctx context.Context, req *ProveRequest) (*ProveResponse, error) { +// Deprecated in favor of the Poll api +func (p *proverServer) Prove(ctx context.Context, req *grpc.ProveRequest) (*grpc.ProveResponse, error) { for true { - pollRes, err := p.Poll(ctx, &PollRequest{ + pollRes, err := p.Poll(ctx, &grpc.PollRequest{ Request: req, }) if err != nil { @@ -478,7 +489,7 @@ func (p *proverServer) Prove(ctx context.Context, req *ProveRequest) (*ProveResp if failed := pollRes.GetFailed(); failed != nil { return nil, fmt.Errorf("%v", failed.Message) } - time.Sleep(2 * time.Second) + time.Sleep(1 * time.Second) } panic("impossible; qed;") diff --git a/galoisd/pkg/bls/api.go b/galoisd/pkg/bls/api.go index 24b860f00e..dd1c6127db 100644 --- a/galoisd/pkg/bls/api.go +++ b/galoisd/pkg/bls/api.go @@ -22,9 +22,12 @@ func NewBlsAPI(api frontend.API) (*BlsAPI, error) { return nil, err } _, _, g1Gen, _ := curve.Generators() + var g1GenNeg curve.G1Affine + g1GenNeg.Neg(&g1Gen) + return &BlsAPI{ api: api, - negG1Gen: gadget.NewG1Affine(*g1Gen.Neg(&g1Gen)), + negG1Gen: gadget.NewG1Affine(g1GenNeg), Nonnative: nonnative, }, nil } @@ -76,6 +79,10 @@ func (b *BlsAPI) VerifySignature(publicKey *gadget.G1Affine, message *gadget.G2A if err != nil { return fmt.Errorf("new pairing: %w", err) } + pairing.AssertIsOnG1(&b.negG1Gen) + pairing.AssertIsOnG1(publicKey) + pairing.AssertIsOnG2(message) + pairing.AssertIsOnG2(signature) // Verify that the aggregated signature is correct err = pairing.PairingCheck( []*gadget.G1Affine{&b.negG1Gen, publicKey}, diff --git a/galoisd/pkg/emulated/g2.go b/galoisd/pkg/emulated/g2.go index fd40e16334..f653a785ce 100644 --- a/galoisd/pkg/emulated/g2.go +++ b/galoisd/pkg/emulated/g2.go @@ -9,18 +9,23 @@ import ( "github.com/consensys/gnark/frontend" "github.com/consensys/gnark/std/algebra/emulated/fields_bn254" gadget "github.com/consensys/gnark/std/algebra/emulated/sw_bn254" + "github.com/consensys/gnark/std/hash/mimc" "github.com/consensys/gnark/std/math/emulated" ) -// Constant not public in gnark crypto... -var bCurveCoeff fp.Element - -// twist -var twist bn254.E2 +const ( + MiMCBlockSize = 256 +) -// bTwistCurveCoeff b coeff of the twist (defined over 𝔽p²) curve -var bTwistCurveCoeff bn254.E2 -var B fields_bn254.E2 +var ( + // Constant not public in gnark crypto... + bCurveCoeff fp.Element + // twist + twist bn254.E2 + // bTwistCurveCoeff b coeff of the twist (defined over 𝔽p²) curve + bTwistCurveCoeff bn254.E2 + B fields_bn254.E2 +) func init() { bCurveCoeff.SetUint64(3) @@ -54,6 +59,7 @@ func hintSqrt(nativeMod *big.Int, nativeInputs, nativeOutputs []*big.Int) error } // Hint legendre, caller must check that the result is valid, i.e. sqrt and verify root or no root +// Return 1 if square, 0 otherwise func hintLegendre(nativeMod *big.Int, nativeInputs, nativeOutputs []*big.Int) error { return emulated.UnwrapHint(nativeInputs, nativeOutputs, func(mod *big.Int, inputs, outputs []*big.Int) error { @@ -142,10 +148,9 @@ func (e *EmulatedAPI) g2Sgn0Circuit(z *fields_bn254.E2) frontend.Variable { return sign } -// https://www.ietf.org/archive/id/draft-irtf-cfrg-hash-to-curve-16.html#name-shallue-van-de-woestijne-met -// F.1. Shallue-van de Woestijne method +// https://datatracker.ietf.org/doc/html/rfc9380#straightline-svdw func (e *EmulatedAPI) MapToCurve(u *fields_bn254.E2) *gadget.G2Affine { - // Legendre must be called before calling sqrt + // NOTE: up to the caller to call legendre if the root is not guarantee to exist sqrt := func(x *fields_bn254.E2) *fields_bn254.E2 { roots, err := e.field.NewHint(hintSqrt, 2, &x.A0, &x.A1) if err != nil { @@ -455,15 +460,160 @@ func (e *EmulatedAPI) ScalarMulBySeed(q *gadget.G2Affine) *gadget.G2Affine { } // http://cacr.uwaterloo.ca/techreports/2011/cacr2011-26.pdf, 6.1 -// Q -> xQ + psi(3xQ) + psi^2(xQ) + psi^3(Q) -func (e *EmulatedAPI) ClearCofactor(p *gadget.G2Affine) *gadget.G2Affine { - p0 := e.ScalarMulBySeed(p) - p1 := e.Psi(e.Add(e.Double(p0), p0)) - p2 := e.Psi(e.Psi(p0)) - p3 := e.Psi(e.Psi(e.Psi(p))) - return e.Add(e.Add(e.Add(p0, p1), p2), p3) +func (e *EmulatedAPI) ClearCofactor(Q *gadget.G2Affine) *gadget.G2Affine { + // xQ + xQ := e.ScalarMulBySeed(Q) + // psi(3xQ) + psi_3xQ := e.Psi(e.Add(e.Double(xQ), xQ)) + // psi^2(xQ) + psi2_xQ := e.Psi(e.Psi(xQ)) + // psi^3(Q) + psi3_Q := e.Psi(e.Psi(e.Psi(Q))) + // xQ + psi(3xQ) + psi^2(xQ) + psi^3(Q) + return e.Add(e.Add(e.Add(xQ, psi_3xQ), psi2_xQ), psi3_Q) } func (e *EmulatedAPI) MapToG2(u *fields_bn254.E2) *gadget.G2Affine { return e.ClearCofactor(e.MapToCurve(u)) } + +func (e *EmulatedAPI) HashToG2(message frontend.Variable, dst frontend.Variable) (*gadget.G2Affine, error) { + u, err := e.HashToField(message, dst) + if err != nil { + return nil, err + } + Q0 := e.MapToCurve(&fields_bn254.E2{ + A0: *u[0], + A1: *u[1], + }) + Q1 := e.MapToCurve(&fields_bn254.E2{ + A0: *u[2], + A1: *u[3], + }) + return e.ClearCofactor(e.Add(Q0, Q1)), nil +} + +// Hash msg to 4 field elements (actually scalar field). +// https://datatracker.ietf.org/doc/html/rfc9380#name-hash_to_field-implementatio +func (e *EmulatedAPI) HashToField(message frontend.Variable, dst frontend.Variable) ([]*emulated.Element[emulated.BN254Fp], error) { + pseudoRandomBits, err := e.ExpandMsgXmd(message, dst) + if err != nil { + return nil, err + } + elements := make([]*emulated.Element[emulated.BN254Fp], 4) + for i := 0; i < 4; i++ { + elemBits := pseudoRandomBits[i*48*8 : (i+1)*48*8] + // sadly this result is >limbs than expected and looks like gnark don't like it + // elements[i] = e.field.FromBits(elemBits...) + l := e.field.FromBits(elemBits[:17*8]...) + r := e.field.FromBits(elemBits[17*8:]...) + c := emulated.ValueOf[emulated.BN254Fp](new(big.Int).Lsh(big.NewInt(1), 136)) + elements[i] = e.field.Add(l, e.field.Mul(r, &c)) + } + return elements, nil +} + +// This is not a general implementation as the input/output length are fixed. +// It is a tailor-made for BN254G2_XMD:MiMC-256_SVDW hash_to_curve implementation. +// https://datatracker.ietf.org/doc/html/rfc9380#name-expand_message_xmd +// https://datatracker.ietf.org/doc/html/rfc9380#name-utility-functions (I2OSP/O2ISP) +// https://eprint.iacr.org/2016/492.pdf +// Input: message, dst scalar field elements +// Output: 192*8 bits +// Note: we use a 256 bit block (mod scalar field) hashing +func (e *EmulatedAPI) ExpandMsgXmd(message frontend.Variable, dst frontend.Variable) ([]frontend.Variable, error) { + h, err := mimc.NewMiMC(e.api) + if err != nil { + return nil, err + } + + block := []frontend.Variable{} + write := func(b ...frontend.Variable) { + block = append(block, b...) + } + repeat := func(b frontend.Variable, count int) { + bs := make([]frontend.Variable, count) + for i := 0; i < count; i++ { + bs[i] = b + } + write(bs...) + } + sum := func() []frontend.Variable { + // fill block + if len(block)%MiMCBlockSize != 0 { + repeat(0, MiMCBlockSize-len(block)%MiMCBlockSize) + } + for i := 0; i < len(block); i += MiMCBlockSize { + h.Write(e.api.FromBinary(block[i : i+MiMCBlockSize]...)) + } + block = []frontend.Variable{} + s := h.Sum() + h.Reset() + return e.api.ToBinary(s, 256) + } + + writeU8 := func(x frontend.Variable) { + write(e.api.ToBinary(x, 8)...) + } + + write_message := func() { + write(e.api.ToBinary(message, 256)...) + } + + // Z_pad = I2OSP(0, r_in_bytes) + write_Z_pad := func() { + repeat(0, 256) + } + + // l_i_b_str = I2OSP(len_in_bytes, 2) + write_l_i_b_str := func() { + writeU8(192 >> 8) + writeU8(192) + } + + // DST_prime = DST ∥ I2OSP(len(DST), 1) + write_DST_prime := func() { + write(e.api.ToBinary(dst, 256)...) + writeU8(32) + } + + // Z_pad = I2OSP(0, r_in_bytes) + // l_i_b_str = I2OSP(len_in_bytes, 2) + // DST_prime = DST ∥ I2OSP(len(DST), 1) + // b₀ = H(Z_pad ∥ msg ∥ l_i_b_str ∥ I2OSP(0, 1) ∥ DST_prime) + write_Z_pad() + write_message() + write_l_i_b_str() + writeU8(0) + write_DST_prime() + b0 := sum() + + // b₁ = H(b₀ ∥ I2OSP(1, 1) ∥ DST_prime) + write(b0...) + writeU8(1) + write_DST_prime() + b1 := sum() + + res := make([]frontend.Variable, 192*8) + for i := 0; i < len(res); i++ { + res[i] = 0 + } + copy(res, b1) + + for i := 1; i <= 5; i++ { + strxor := make([]frontend.Variable, 256) + for j := 0; j < 256; j++ { + strxor[j] = e.api.Xor(b0[j], b1[j]) + } + + // b_i = H(strxor(b₀, b_(i - 1)) ∥ I2OSP(i, 1) ∥ DST_prime) + write(strxor...) + writeU8(i + 1) + write_DST_prime() + b1 = sum() + + copy(res[i*256:(i+1)*256], b1) + } + + return res, nil +} diff --git a/galoisd/pkg/emulated/g2_test.go b/galoisd/pkg/emulated/g2_test.go index 4494d7033d..3f58ad50ae 100644 --- a/galoisd/pkg/emulated/g2_test.go +++ b/galoisd/pkg/emulated/g2_test.go @@ -1,9 +1,6 @@ package g2 import ( - "crypto/rand" - "fmt" - "math/big" "testing" cometbft_bn254 "github.com/cometbft/cometbft/crypto/bn254" @@ -12,8 +9,11 @@ import ( "github.com/consensys/gnark/frontend" "github.com/consensys/gnark/std/algebra/emulated/fields_bn254" gadget "github.com/consensys/gnark/std/algebra/emulated/sw_bn254" + "github.com/consensys/gnark/std/math/emulated" "github.com/consensys/gnark/test" "github.com/stretchr/testify/assert" + + bn254fr "github.com/consensys/gnark-crypto/ecc/bn254/fr" ) type MapToCurve struct { @@ -30,45 +30,17 @@ func (c *MapToCurve) Define(api frontend.API) error { return nil } -func TestMapToCurve(t *testing.T) { - t.Parallel() - for i := 0; i < 100; i++ { - k := i - t.Run(fmt.Sprintf("%d", k), func(t *testing.T) { - t.Parallel() - message := make([]byte, 256) - _, err := rand.Read(message) - assert.NoError(t, err) - messageX, messageY := cometbft_bn254.HashToField2(message) - var messagePoint curve.E2 - messagePoint.A0.SetBigInt(messageX.BigInt(new(big.Int))) - messagePoint.A1.SetBigInt(messageY.BigInt(new(big.Int))) - - err = test.IsSolved( - &MapToCurve{}, - &MapToCurve{ - Preimage: fields_bn254.FromE2(&messagePoint), - Image: gadget.NewG2Affine(curve.MapToCurve2(&messagePoint)), - }, - ecc.BN254.ScalarField(), - ) - assert.NoError(t, err) - }) - } -} - func FuzzMapToCurve(f *testing.F) { - f.Fuzz(func(t *testing.T, message []byte) { + f.Fuzz(func(t *testing.T, x []byte, y []byte) { t.Parallel() - messageX, messageY := cometbft_bn254.HashToField2(message) - var messagePoint curve.E2 - messagePoint.A0.SetBigInt(messageX.BigInt(new(big.Int))) - messagePoint.A1.SetBigInt(messageY.BigInt(new(big.Int))) + var preimage curve.E2 + preimage.A0.SetBytes(x) + preimage.A1.SetBytes(y) err := test.IsSolved( &MapToCurve{}, &MapToCurve{ - Preimage: fields_bn254.FromE2(&messagePoint), - Image: gadget.NewG2Affine(curve.MapToCurve2(&messagePoint)), + Preimage: fields_bn254.FromE2(&preimage), + Image: gadget.NewG2Affine(curve.MapToCurve2(&preimage)), }, ecc.BN254.ScalarField(), ) @@ -90,44 +62,168 @@ func (c *MapToG2) Define(api frontend.API) error { return nil } -func TestMapToG2(t *testing.T) { - t.Parallel() - for i := 0; i < 100; i++ { - k := i - t.Run(fmt.Sprintf("%d", k), func(t *testing.T) { - t.Parallel() - message := make([]byte, 256) - _, err := rand.Read(message) - assert.NoError(t, err) - messageX, messageY := cometbft_bn254.HashToField2(message) - var messagePoint curve.E2 - messagePoint.A0.SetBigInt(messageX.BigInt(new(big.Int))) - messagePoint.A1.SetBigInt(messageY.BigInt(new(big.Int))) - err = test.IsSolved( - &MapToG2{}, - &MapToG2{ - Preimage: fields_bn254.FromE2(&messagePoint), - Image: gadget.NewG2Affine(curve.MapToG2(messagePoint)), - }, - ecc.BN254.ScalarField(), - ) - assert.NoError(t, err) - }) - } -} - func FuzzMapToG2(f *testing.F) { - f.Fuzz(func(t *testing.T, message []byte) { + f.Fuzz(func(t *testing.T, x []byte, y []byte) { t.Parallel() - messageX, messageY := cometbft_bn254.HashToField2(message) - var messagePoint curve.E2 - messagePoint.A0.SetBigInt(messageX.BigInt(new(big.Int))) - messagePoint.A1.SetBigInt(messageY.BigInt(new(big.Int))) + var preimage curve.E2 + preimage.A0.SetBytes(x) + preimage.A1.SetBytes(y) err := test.IsSolved( &MapToG2{}, &MapToG2{ - Preimage: fields_bn254.FromE2(&messagePoint), - Image: gadget.NewG2Affine(curve.MapToG2(messagePoint)), + Preimage: fields_bn254.FromE2(&preimage), + Image: gadget.NewG2Affine(curve.MapToG2(preimage)), + }, + ecc.BN254.ScalarField(), + ) + assert.NoError(t, err) + }) +} + +type ExpandMsgXmd struct { + Preimage frontend.Variable + Domain frontend.Variable + Image [192]frontend.Variable +} + +func (c *ExpandMsgXmd) Define(api frontend.API) error { + emulated, err := NewEmulatedAPI(api) + if err != nil { + return err + } + image, err := emulated.ExpandMsgXmd(c.Preimage, c.Domain) + if err != nil { + return err + } + api.AssertIsEqual(192*8, len(image)) + for i := 0; i < 192; i++ { + imageBits := api.ToBinary(c.Image[i], 8) + for j := 0; j < 8; j++ { + api.AssertIsEqual(image[i*8+j], imageBits[j]) + } + } + return nil +} + +func FuzzExpandMsgXmd(f *testing.F) { + f.Fuzz(func(t *testing.T, msgIn []byte, dstIn []byte) { + t.Parallel() + var msg bn254fr.Element + msg.SetBytes(msgIn) + var dst bn254fr.Element + dst.SetBytes(dstIn) + var msgBytes [32]byte + bn254fr.LittleEndian.PutElement(&msgBytes, msg) + var dstBytes [32]byte + bn254fr.LittleEndian.PutElement(&dstBytes, dst) + v, err := cometbft_bn254.ExpandMsgXmdMiMC(msgBytes[:], dstBytes[:], 192) + assert.NoError(t, err) + var image [192]frontend.Variable + for i := 0; i < 192; i++ { + image[i] = v[i] + } + err = test.IsSolved( + &ExpandMsgXmd{}, + &ExpandMsgXmd{ + Preimage: msg, + Domain: dst, + Image: image, + }, + ecc.BN254.ScalarField(), + ) + assert.NoError(t, err) + }) +} + +type HashToFieldC struct { + Preimage frontend.Variable + Domain frontend.Variable + Image [4]emulated.Element[emulated.BN254Fp] +} + +func (c *HashToFieldC) Define(api frontend.API) error { + e, err := NewEmulatedAPI(api) + if err != nil { + return err + } + elements, err := e.HashToField(c.Preimage, c.Domain) + if err != nil { + return err + } + for i := 0; i < 4; i++ { + e.field.AssertIsEqual(&c.Image[i], elements[i]) + } + return nil +} + +func FuzzHashMiMC(f *testing.F) { + f.Fuzz(func(t *testing.T, msgIn []byte, dstIn []byte) { + t.Parallel() + var msg bn254fr.Element + msg.SetBytes(msgIn) + var dst bn254fr.Element + dst.SetBytes(dstIn) + var msgBytes [32]byte + bn254fr.LittleEndian.PutElement(&msgBytes, msg) + var dstBytes [32]byte + bn254fr.LittleEndian.PutElement(&dstBytes, dst) + v, err := cometbft_bn254.HashToFieldMiMC(msgBytes[:], dstBytes[:]) + assert.NoError(t, err) + var image [4]emulated.Element[emulated.BN254Fp] + for i := 0; i < 4; i++ { + image[i] = emulated.ValueOf[emulated.BN254Fp](v[i]) + } + err = test.IsSolved( + &HashToFieldC{}, + &HashToFieldC{ + Preimage: msg, + Domain: dst, + Image: image, + }, + ecc.BN254.ScalarField(), + ) + assert.NoError(t, err) + }) +} + +type HashToG2 struct { + Preimage frontend.Variable + Domain frontend.Variable + Image gadget.G2Affine +} + +func (c *HashToG2) Define(api frontend.API) error { + emulated, err := NewEmulatedAPI(api) + if err != nil { + return err + } + image, err := emulated.HashToG2(c.Preimage, c.Domain) + if err != nil { + return err + } + emulated.AssertIsEqual(image, &c.Image) + return nil +} + +func FuzzHashToG2(f *testing.F) { + f.Fuzz(func(t *testing.T, msgIn []byte, dstIn []byte) { + t.Parallel() + var msg bn254fr.Element + msg.SetBytes(msgIn) + var dst bn254fr.Element + dst.SetBytes(dstIn) + var msgBytes [32]byte + bn254fr.LittleEndian.PutElement(&msgBytes, msg) + var dstBytes [32]byte + bn254fr.LittleEndian.PutElement(&dstBytes, dst) + image, err := cometbft_bn254.HashToG2MiMC(msgBytes[:], dstBytes[:]) + assert.NoError(t, err) + err = test.IsSolved( + &HashToG2{}, + &HashToG2{ + Preimage: msg, + Domain: dst, + Image: gadget.NewG2Affine(image), }, ecc.BN254.ScalarField(), ) diff --git a/galoisd/pkg/lightclient/adjacent/circuit.go b/galoisd/pkg/lightclient/adjacent/circuit.go deleted file mode 100644 index 1c41bdf4e4..0000000000 --- a/galoisd/pkg/lightclient/adjacent/circuit.go +++ /dev/null @@ -1,27 +0,0 @@ -package adjacent - -import ( - "galois/pkg/emulated" - "galois/pkg/lightclient" - "github.com/consensys/gnark/frontend" - "github.com/consensys/gnark/std/algebra/emulated/fields_bn254" -) - -type Circuit struct { - Input lightclient.TendermintLightClientInput - ExpectedValRoot frontend.Variable `gnark:",public"` - Message [2]frontend.Variable `gnark:",public"` -} - -func (circuit *Circuit) Define(api frontend.API) error { - emulatedAPI, err := g2.NewEmulatedAPI(api) - if err != nil { - return err - } - var message fields_bn254.E2 - message.A0.Limbs = lightclient.Unpack(api, circuit.Message[0], 256, 64) - message.A1.Limbs = lightclient.Unpack(api, circuit.Message[1], 256, 64) - messagePoint := emulatedAPI.MapToG2(&message) - lc := lightclient.NewTendermintLightClientAPI(api, &circuit.Input) - return lc.Verify(messagePoint, circuit.ExpectedValRoot, 2, 3) -} diff --git a/galoisd/pkg/lightclient/nonadjacent/circuit.go b/galoisd/pkg/lightclient/nonadjacent/circuit.go index 6eeffe6822..8359af44b3 100644 --- a/galoisd/pkg/lightclient/nonadjacent/circuit.go +++ b/galoisd/pkg/lightclient/nonadjacent/circuit.go @@ -5,7 +5,6 @@ import ( "galois/pkg/lightclient" "github.com/consensys/gnark/frontend" - "github.com/consensys/gnark/std/algebra/emulated/fields_bn254" gadget "github.com/consensys/gnark/std/algebra/emulated/sw_bn254" ) @@ -26,11 +25,13 @@ type TendermintNonAdjacentLightClientInput struct { } type Circuit struct { + DomainSeparationTag frontend.Variable TrustedInput TendermintNonAdjacentLightClientInput UntrustedInput TendermintNonAdjacentLightClientInput - ExpectedTrustedValRoot frontend.Variable `gnark:",public"` - ExpectedUntrustedValRoot frontend.Variable `gnark:",public"` - Message [2]frontend.Variable `gnark:",public"` + ExpectedTrustedValRoot frontend.Variable `gnark:",public"` + ExpectedUntrustedValRoot frontend.Variable `gnark:",public"` + Message frontend.Variable `gnark:",public"` + HashedMessage gadget.G2Affine } func (circuit *Circuit) Define(api frontend.API) error { @@ -38,10 +39,11 @@ func (circuit *Circuit) Define(api frontend.API) error { if err != nil { return err } - var message fields_bn254.E2 - message.A0.Limbs = lightclient.Unpack(api, circuit.Message[0], 256, 64) - message.A1.Limbs = lightclient.Unpack(api, circuit.Message[1], 256, 64) - messagePoint := emulatedAPI.MapToG2(&message) + hashedMessage, err := emulatedAPI.HashToG2(circuit.Message, circuit.DomainSeparationTag) + if err != nil { + return err + } + emulatedAPI.AssertIsEqual(hashedMessage, &circuit.HashedMessage) lc := lightclient.NewTendermintLightClientAPI(api, &lightclient.TendermintLightClientInput{ Sig: circuit.TrustedInput.Sig, Validators: circuit.TrustedInput.Validators, @@ -49,7 +51,7 @@ func (circuit *Circuit) Define(api frontend.API) error { NbOfSignature: circuit.TrustedInput.NbOfSignature, Bitmap: circuit.TrustedInput.Bitmap, }) - res := lc.Verify(messagePoint, circuit.ExpectedTrustedValRoot, TrustedRatioNum, TrustedRatioDen) + res := lc.Verify(&circuit.HashedMessage, circuit.ExpectedTrustedValRoot, TrustedRatioNum, TrustedRatioDen) if res != nil { return res } @@ -60,5 +62,5 @@ func (circuit *Circuit) Define(api frontend.API) error { NbOfSignature: circuit.UntrustedInput.NbOfSignature, Bitmap: circuit.UntrustedInput.Bitmap, }) - return lc.Verify(messagePoint, circuit.ExpectedUntrustedValRoot, UntrustedRatioNum, UntrustedRatioDen) + return lc.Verify(&circuit.HashedMessage, circuit.ExpectedUntrustedValRoot, UntrustedRatioNum, UntrustedRatioDen) } diff --git a/galoisd/pkg/lightclient/nonadjacent/circuit_test.go b/galoisd/pkg/lightclient/nonadjacent/circuit_test.go index b6fb77e303..38c459ab5d 100644 --- a/galoisd/pkg/lightclient/nonadjacent/circuit_test.go +++ b/galoisd/pkg/lightclient/nonadjacent/circuit_test.go @@ -1,17 +1,17 @@ package nonadjacent import ( - "crypto/rand" + "encoding/hex" "fmt" "galois/pkg/lightclient" "math/big" + "math/rand" "cosmossdk.io/math" cometbn254 "github.com/cometbft/cometbft/crypto/bn254" "github.com/cometbft/cometbft/proto/tendermint/types" - "github.com/consensys/gnark/backend" - "github.com/consensys/gnark/frontend" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/assert" ce "github.com/cometbft/cometbft/crypto/encoding" "github.com/cometbft/cometbft/crypto/merkle" @@ -19,6 +19,7 @@ import ( "github.com/consensys/gnark-crypto/ecc" curve "github.com/consensys/gnark-crypto/ecc/bn254" + "github.com/consensys/gnark/frontend" gadget "github.com/consensys/gnark/std/algebra/emulated/sw_bn254" "testing" @@ -26,117 +27,102 @@ import ( "github.com/consensys/gnark/test" ) -func Test(t *testing.T) { - nbOfValidators := lightclient.MaxVal - - // Nb of tokens for each val in devnet - toValidator := func(pubKey []byte) (*types.SimpleValidator, error) { - protoPK, err := ce.PubKeyToProto(cometbn254.PubKey(pubKey)) - if err != nil { - return &types.SimpleValidator{}, err - } - power, err := rand.Int(rand.Reader, big.NewInt(922337203685477586)) - if err != nil { - return &types.SimpleValidator{}, err - } - return &types.SimpleValidator{ - PubKey: &protoPK, - VotingPower: sdk.TokensToConsensusPower(math.NewInt(power.Int64()), sdk.DefaultPowerReduction), - }, nil - } - - blockHash := make([]byte, 32) - _, err := rand.Read(blockHash) - if err != nil { - t.Fatal(err) - } +type Pairing struct { + PK gadget.G1Affine + Sig gadget.G2Affine + Msg gadget.G2Affine +} - partSetHeaderHash := make([]byte, 32) - _, err = rand.Read(partSetHeaderHash) +func (c *Pairing) Define(api frontend.API) error { + pairing, err := gadget.NewPairing(api) if err != nil { - t.Fatal(err) + return fmt.Errorf("new pairing: %w", err) } + _, _, g1Gen, _ := curve.Generators() + g1GenNeg := gadget.NewG1Affine(*g1Gen.Neg(&g1Gen)) - height, err := rand.Int(rand.Reader, new(big.Int).SetUint64(^uint64(0))) + err = pairing.PairingCheck( + []*gadget.G1Affine{&g1GenNeg, &c.PK}, + []*gadget.G2Affine{&c.Sig, &c.Msg}, + ) if err != nil { - t.Fatal(err) + return fmt.Errorf("pairing check: %w", err) } + return nil +} - round, err := rand.Int(rand.Reader, new(big.Int).SetUint64(^uint64(0))) - if err != nil { - t.Fatal(err) - } +func TestPairingVirtual(t *testing.T) { + t.Parallel() - chainId, err := rand.Int(rand.Reader, new(big.Int).SetUint64(^uint64(0))) - if err != nil { - t.Fatal(err) + hex := func(h string) []byte { + b, err := hex.DecodeString(h) + assert.NoError(t, err) + return b } - vote := types.CanonicalVote{ - Type: types.PrecommitType, - Height: height.Int64(), - Round: round.Int64(), - BlockID: &types.CanonicalBlockID{ - Hash: blockHash, - PartSetHeader: types.CanonicalPartSetHeader{ - Total: 1, - Hash: partSetHeaderHash, - }, + _, _, g1Gen, _ := curve.Generators() + var g1GenNeg curve.G1Affine + g1GenNeg.Neg(&g1Gen) + + var pk curve.G1Affine + _, err := pk.SetBytes(hex("83D016646DF946E887CD36AE6C10BED9C4A49D675CCC072E5AAF496AA4B2D50D")) + assert.NoError(t, err) + var sig curve.G2Affine + _, err = sig.SetBytes(hex("C4B626B703FACBFA5A5071B8254E4A4B78BB45C6A534FF5822BA806730BCE9522707DBF7D689759DFB5CE8DA3A99E04219DDC1CBB8F94481876B1F24FFA5A73E")) + assert.NoError(t, err) + var msg curve.G2Affine + _, err = msg.SetBytes(hex("8591C93118F5A406886C558BEA365D249D881BBC7FCD68673307CC8350BA9C49000ABE5E44150F1E98196B088D4A3A60AFE27E49BA4D4411E528320022D324CF")) + assert.NoError(t, err) + + err = test.IsSolved( + &Pairing{}, + &Pairing{ + PK: gadget.NewG1Affine(pk), + Sig: gadget.NewG2Affine(sig), + Msg: gadget.NewG2Affine(msg), }, - ChainID: fmt.Sprintf("union-devnet-%d", chainId.Uint64()), - } - - privKeys := make([]cometbn254.PrivKey, nbOfValidators) - validators := make([]*types.SimpleValidator, nbOfValidators) - totalPower := int64(0) - for i := 0; i < len(validators); i++ { - privKeys[i] = cometbn254.GenPrivKey() - val, err := toValidator(privKeys[i].PubKey().Bytes()) - if err != nil { - t.Fatal(err) - } - totalPower += val.VotingPower - validators[i] = val - } - - signedBytes, err := protoio.MarshalDelimited(&vote) - if err != nil { - t.Fatal(err) - } + ecc.BN254.ScalarField(), + ) + assert.NoError(t, err) +} - var signatures [][]byte - var bitmap big.Int - votingPower := 0 +func TestPairingNative(t *testing.T) { + t.Parallel() - for true { - if votingPower >= int(totalPower)/3*2 { - break - } - index, err := rand.Int(rand.Reader, big.NewInt(int64(nbOfValidators))) - if err != nil { - t.Fatal(err) - } - i := index.Int64() - if bitmap.Bit(int(i)) == 0 { - votingPower += int(validators[i].VotingPower) - bitmap.SetBit(&bitmap, int(i), 1) - sig, err := privKeys[i].Sign(signedBytes) - if err != nil { - t.Fatal(err) - } - signatures = append(signatures, sig) - } + hex := func(h string) []byte { + b, err := hex.DecodeString(h) + assert.NoError(t, err) + return b } - trustedValidators := validators - untrustedValidators := validators - - trustedSignatures := signatures - untrustedSignatures := signatures - - trustedBitmap := bitmap - untrustedBitmap := bitmap + _, _, g1Gen, _ := curve.Generators() + var g1GenNeg curve.G1Affine + g1GenNeg.Neg(&g1Gen) + + var pk curve.G1Affine + _, err := pk.SetBytes(hex("83D016646DF946E887CD36AE6C10BED9C4A49D675CCC072E5AAF496AA4B2D50D")) + assert.NoError(t, err) + var sig curve.G2Affine + _, err = sig.SetBytes(hex("C4B626B703FACBFA5A5071B8254E4A4B78BB45C6A534FF5822BA806730BCE9522707DBF7D689759DFB5CE8DA3A99E04219DDC1CBB8F94481876B1F24FFA5A73E")) + assert.NoError(t, err) + var msg curve.G2Affine + _, err = msg.SetBytes(hex("8591C93118F5A406886C558BEA365D249D881BBC7FCD68673307CC8350BA9C49000ABE5E44150F1E98196B088D4A3A60AFE27E49BA4D4411E528320022D324CF")) + assert.NoError(t, err) + + ok, err := curve.PairingCheck( + []curve.G1Affine{ + g1GenNeg, + pk, + }, + []curve.G2Affine{ + sig, + msg, + }) + assert.NoError(t, err) + assert.True(t, ok) +} +func FuzzNonadjacent(f *testing.F) { marshalValidators := func(validators []*types.SimpleValidator) ([lightclient.MaxVal]lightclient.Validator, []byte, error) { lcValidators := [lightclient.MaxVal]lightclient.Validator{} // Make sure we zero initialize @@ -188,59 +174,158 @@ func Test(t *testing.T) { } return aggregatedSignature, nil } - - trustedValidatorsInput, trustedValidatorsRoot, err := marshalValidators(trustedValidators) - if err != nil { - t.Fatal(err) + // Nb of tokens for each val in devnet + toValidator := func(pubKey []byte, power int64) (*types.SimpleValidator, error) { + protoPK, err := ce.PubKeyToProto(cometbn254.PubKey(pubKey)) + if err != nil { + return &types.SimpleValidator{}, err + } + return &types.SimpleValidator{ + PubKey: &protoPK, + VotingPower: sdk.TokensToConsensusPower(math.NewInt(power), sdk.DefaultPowerReduction), + }, nil } - trustedAggregatedSignature, err := aggregateSignatures(trustedSignatures) - if err != nil { - t.Fatal(err) - } + f.Fuzz(func(t *testing.T, seed int64) { + t.Parallel() + r := rand.New(rand.NewSource(seed)) - untrustedValidatorsInput, untrustedValidatorsRoot, err := marshalValidators(untrustedValidators) - if err != nil { - t.Fatal(err) - } + nbOfValidators := 1 + r.Uint32()%lightclient.MaxVal - untrustedAggregatedSignature, err := aggregateSignatures(untrustedSignatures) - if err != nil { - t.Fatal(err) - } + blockHash := make([]byte, 32) + _, err := r.Read(blockHash) + if err != nil { + t.Fatal(err) + } - trustedInput := TendermintNonAdjacentLightClientInput{ - Sig: gadget.NewG2Affine(trustedAggregatedSignature), - Validators: trustedValidatorsInput, - NbOfVal: len(trustedValidators), - NbOfSignature: len(trustedSignatures), - Bitmap: trustedBitmap, - } + partSetHeaderHash := make([]byte, 32) + _, err = r.Read(partSetHeaderHash) + if err != nil { + t.Fatal(err) + } - untrustedInput := TendermintNonAdjacentLightClientInput{ - Sig: gadget.NewG2Affine(untrustedAggregatedSignature), - Validators: untrustedValidatorsInput, - NbOfVal: len(untrustedValidators), - NbOfSignature: len(untrustedSignatures), - Bitmap: untrustedBitmap, - } + vote := types.CanonicalVote{ + Type: types.PrecommitType, + Height: r.Int63(), + Round: r.Int63(), + BlockID: &types.CanonicalBlockID{ + Hash: blockHash, + PartSetHeader: types.CanonicalPartSetHeader{ + Total: 1, + Hash: partSetHeaderHash, + }, + }, + ChainID: fmt.Sprintf("union-devnet-%d", r.Uint64()), + } + + privKeys := make([]cometbn254.PrivKey, nbOfValidators) + validators := make([]*types.SimpleValidator, nbOfValidators) + totalPower := int64(0) + for i := 0; i < len(validators); i++ { + privKeys[i] = cometbn254.GenPrivKey() + val, err := toValidator(privKeys[i].PubKey().Bytes(), 100000000+r.Int63n(100000000)) + if err != nil { + t.Fatal(err) + } + totalPower += val.VotingPower + validators[i] = val + } - hmX, hmY := cometbn254.HashToField2(signedBytes) + signedBytes, err := protoio.MarshalDelimited(&vote) + if err != nil { + t.Fatal(err) + } - circuit := Circuit{ - TrustedInput: trustedInput, - UntrustedInput: untrustedInput, - ExpectedTrustedValRoot: trustedValidatorsRoot, - ExpectedUntrustedValRoot: untrustedValidatorsRoot, - Message: [2]frontend.Variable{hmX, hmY}, - } + var signatures [][]byte + var bitmap big.Int + votingPower := 0 - assert := test.NewAssert(t) - assert.CheckCircuit( - &Circuit{}, - test.WithValidAssignment(&circuit), - test.WithCurves(ecc.BN254), - test.WithBackends(backend.GROTH16), - test.NoFuzzing(), - ) + for true { + if votingPower > int(totalPower)/3*2+1 { + break + } + index := uint32(rand.Int31n(int32(nbOfValidators) - 1)) + i := index + for bitmap.Bit(int(i)) == 1 { + i = (i + 1) % nbOfValidators + } + votingPower += int(validators[i].VotingPower) + bitmap.SetBit(&bitmap, int(i), 1) + sig, err := privKeys[i].Sign(signedBytes) + if err != nil { + t.Fatal(err) + } + signatures = append(signatures, sig) + } + + trustedValidators := validators + untrustedValidators := validators + + trustedSignatures := signatures + untrustedSignatures := signatures + + trustedBitmap := bitmap + untrustedBitmap := bitmap + + trustedValidatorsInput, trustedValidatorsRoot, err := marshalValidators(trustedValidators) + if err != nil { + t.Fatal(err) + } + + trustedAggregatedSignature, err := aggregateSignatures(trustedSignatures) + if err != nil { + t.Fatal(err) + } + + untrustedValidatorsInput, untrustedValidatorsRoot, err := marshalValidators(untrustedValidators) + if err != nil { + t.Fatal(err) + } + + untrustedAggregatedSignature, err := aggregateSignatures(untrustedSignatures) + if err != nil { + t.Fatal(err) + } + + if !trustedAggregatedSignature.IsInSubGroup() || !trustedAggregatedSignature.IsOnCurve() || trustedAggregatedSignature.IsInfinity() { + panic("") + } + + trustedInput := TendermintNonAdjacentLightClientInput{ + Sig: gadget.NewG2Affine(trustedAggregatedSignature), + Validators: trustedValidatorsInput, + NbOfVal: nbOfValidators, + NbOfSignature: len(trustedSignatures), + Bitmap: trustedBitmap, + } + + untrustedInput := TendermintNonAdjacentLightClientInput{ + Sig: gadget.NewG2Affine(untrustedAggregatedSignature), + Validators: untrustedValidatorsInput, + NbOfVal: nbOfValidators, + NbOfSignature: len(untrustedSignatures), + Bitmap: untrustedBitmap, + } + + message := cometbn254.HashToField(signedBytes) + + hashedMessage := cometbn254.HashToG2(signedBytes) + + circuit := Circuit{ + DomainSeparationTag: []byte(cometbn254.CometblsSigDST), + TrustedInput: trustedInput, + UntrustedInput: untrustedInput, + ExpectedTrustedValRoot: trustedValidatorsRoot, + ExpectedUntrustedValRoot: untrustedValidatorsRoot, + Message: message, + HashedMessage: gadget.NewG2Affine(hashedMessage), + } + + err = test.IsSolved( + &Circuit{}, + &circuit, + ecc.BN254.ScalarField(), + ) + assert.NoError(t, err) + }) } diff --git a/galoisd/proto/api/v2/galois.proto b/galoisd/proto/api/v2/galois.proto new file mode 100644 index 0000000000..28166e3378 --- /dev/null +++ b/galoisd/proto/api/v2/galois.proto @@ -0,0 +1,120 @@ +syntax = "proto3"; + +package union.galois.api.v2; + +import "tendermint/types/validator.proto"; +import "tendermint/types/canonical.proto"; + +option go_package = "union/galois/rpc/grpc"; + +message FrElement { + bytes value = 1; +} + +message ZeroKnowledgeProof { + bytes content = 1; + bytes compressed_content = 2; + bytes evm_proof = 3; + bytes public_inputs = 4; +} + +message ValidatorSetCommit { + repeated .tendermint.types.SimpleValidator validators = 1; + repeated bytes signatures = 2; + bytes bitmap = 3; +} + +message ProveRequest { + .tendermint.types.CanonicalVote vote = 1; + ValidatorSetCommit trusted_commit = 2; + ValidatorSetCommit untrusted_commit = 3; +} + +message ProveResponse { + ZeroKnowledgeProof proof = 1; + bytes trusted_validator_set_root = 2; + bytes untrusted_validator_set_root = 3; +} + +message VerifyRequest { + ZeroKnowledgeProof proof = 1; + bytes trusted_validator_set_root = 2; + bytes untrusted_validator_set_root = 3; + FrElement hashed_message = 4; +} + +message VerifyResponse { + bool valid = 1; +} + +message GenerateContractRequest {} + +message GenerateContractResponse { + bytes content = 1; +} + +message QueryStatsRequest {} + +message VariableStats { + uint32 nb_internal_variables = 1; + uint32 nb_secret_variables = 2; + uint32 nb_public_variables = 3; + uint32 nb_constraints = 4; + uint32 nb_coefficients = 5; +} + +message ProvingKeyStats { + uint32 nb_g1 = 1; + uint32 nb_g2 = 2; +} + +message VerifyingKeyStats { + uint32 nb_g1 = 1; + uint32 nb_g2 = 2; + uint32 nb_public_witness = 3; +} + +message CommitmentStats { + uint32 nb_public_committed = 1; + uint32 nb_private_committed = 2; +} + +message QueryStatsResponse { + VariableStats variable_stats = 1; + ProvingKeyStats proving_key_stats = 2; + VerifyingKeyStats verifying_key_stats = 3; + CommitmentStats commitment_stats = 4; +} + +message PollRequest { + ProveRequest request = 1; +} + +message ProveRequestPending { +} + +message ProveRequestFailed { + string message = 1; +} + +message ProveRequestDone { + ProveResponse response = 1; +} + +message PollResponse { + oneof result { + ProveRequestPending pending = 1; + ProveRequestFailed failed = 2; + ProveRequestDone done = 3; + } +} + +service UnionProverAPI { + rpc Prove(ProveRequest) returns (ProveResponse); + rpc Verify(VerifyRequest) returns (VerifyResponse); + rpc GenerateContract(GenerateContractRequest) returns (GenerateContractResponse); + rpc QueryStats(QueryStatsRequest) returns (QueryStatsResponse); + + rpc Poll(PollRequest) returns (PollResponse); +} + diff --git a/galoisd/vendor/github.com/cometbft/cometbft/crypto/bn254/bn254.go b/galoisd/vendor/github.com/cometbft/cometbft/crypto/bn254/bn254.go index 1f641e7efe..597ba014f0 100644 --- a/galoisd/vendor/github.com/cometbft/cometbft/crypto/bn254/bn254.go +++ b/galoisd/vendor/github.com/cometbft/cometbft/crypto/bn254/bn254.go @@ -13,7 +13,6 @@ import ( "github.com/consensys/gnark-crypto/ecc/bn254" "github.com/consensys/gnark-crypto/ecc/bn254/fp" "github.com/consensys/gnark-crypto/ecc/bn254/fr" - "github.com/consensys/gnark-crypto/ecc/bn254/fr/mimc" bls254 "github.com/consensys/gnark-crypto/ecc/bn254/signature/bls" "github.com/cometbft/cometbft/crypto" @@ -28,18 +27,20 @@ const ( sizeFp = fp.Bytes sizePublicKey = sizeFp sizePrivateKey = sizeFr + sizePublicKey - XHashToScalarFieldPrefix = 0 - YHashToScalarFieldPrefix = 1 PrivKeyName = "tendermint/PrivKeyBn254" PubKeyName = "tendermint/PubKeyBn254" KeyType = "bn254" + CometblsSigDST = "COMETBLS_SIG_BN254G2_XMD:MIMC256" + CometblsHMACKey = "CometBLS" ) -var G1Gen bn254.G1Affine -var G2Gen bn254.G2Affine -var G2Cofactor big.Int +var ( + G1Gen bn254.G1Affine + G1GenNeg bn254.G1Affine + G2Gen bn254.G2Affine -var Hash = sha3.NewLegacyKeccak256 + Hash = sha3.NewLegacyKeccak256 +) func init() { cjson.RegisterType(PubKey{}, PubKeyName) @@ -47,13 +48,7 @@ func init() { _, _, G1Gen, G2Gen = bn254.Generators() - // BN254 cofactor - value, err := new(big.Int).SetString("30644e72e131a029b85045b68181585e06ceecda572a2489345f2299c0f9fa8d", 16) - if !err { - panic("Cannot build cofactor") - } - - G2Cofactor.Set(value) + G1GenNeg.Neg(&G1Gen) } var _ crypto.PrivKey = PrivKey{} @@ -67,20 +62,20 @@ func (privKey PrivKey) Bytes() []byte { } func (privKey PrivKey) Sign(msg []byte) ([]byte, error) { - s := new(big.Int) - s = s.SetBytes(privKey) + var s big.Int + s.SetBytes(privKey) hm := HashToG2(msg) var p bn254.G2Affine - p.ScalarMultiplication(&hm, s) + p.ScalarMultiplication(&hm, &s) compressedSig := p.Bytes() return compressedSig[:], nil } func (privKey PrivKey) PubKey() crypto.PubKey { - s := new(big.Int) + var s big.Int s.SetBytes(privKey) var pk bn254.G1Affine - pk.ScalarMultiplication(&G1Gen, s) + pk.ScalarMultiplication(&G1Gen, &s) pkBytes := pk.Bytes() return PubKey(pkBytes[:]) } @@ -123,13 +118,13 @@ func (pubKey PubKey) Bytes() []byte { } func (pubKey PubKey) VerifySignature(msg []byte, sig []byte) bool { - hashedMessage := HashToG2(msg) - var public bn254.G1Affine - _, err := public.SetBytes(pubKey) + hm := HashToG2(msg) + var pk bn254.G1Affine + _, err := pk.SetBytes(pubKey) if err != nil { return false } - if public.IsInfinity() { + if pk.IsInfinity() { return false } @@ -142,10 +137,15 @@ func (pubKey PubKey) VerifySignature(msg []byte, sig []byte) bool { return false } - var G1BaseNeg bn254.G1Affine - G1BaseNeg.Neg(&G1Gen) - - valid, err := bn254.PairingCheck([]bn254.G1Affine{G1BaseNeg, public}, []bn254.G2Affine{signature, hashedMessage}) + valid, err := bn254.PairingCheck( + []bn254.G1Affine{ + G1GenNeg, + pk, + }, + []bn254.G2Affine{ + signature, + hm, + }) if err != nil { return false } @@ -167,35 +167,27 @@ func (pubKey PubKey) Equals(other crypto.PubKey) bool { return false } -func GenPrivKey() PrivKey { - secret, err := bls254.GenerateKey(rand.Reader) +func GenPrivKeyFromSeed(seed []byte) PrivKey { + reader := bytes.NewReader(seed) + + secret, err := bls254.GenerateKey(reader) if err != nil { panic(err) } return PrivKey(secret.Bytes()) } -// Naive scalar multiplication used for cofactor clearing, basic double-and-add -func nativeNaiveScalarMul(p bn254.G2Affine, s *big.Int) bn254.G2Affine { - // initialize result point to infinity - var result bn254.G2Affine - result.X.SetZero() - result.Y.SetZero() - bits := s.BitLen() - // iterate over binary digits of s and double the current result point at each iteration - for i := bits - 1; i >= 0; i-- { - result.Add(&result, &result) - // if current binary digit is 1, add the original point p to the result - if s.Bit(i) == 1 { - result.Add(&result, &p) - } +func GenPrivKey() PrivKey { + secret, err := bls254.GenerateKey(rand.Reader) + if err != nil { + panic(err) } - return result + return PrivKey(secret.Bytes()) } -// TODO: link union whitepaper 4.1.1, equation (1), H_p +// TODO: link union whitepaper 4.1.1, equation (1), H_r func HashToField(msg []byte) fr.Element { - hmac := hmac.New(Hash, []byte("CometBLS")) + hmac := hmac.New(Hash, []byte(CometblsHMACKey)) hmac.Write(msg) modMinusOne := new(big.Int).Sub(fr.Modulus(), big.NewInt(1)) num := new(big.Int).SetBytes(hmac.Sum(nil)) @@ -214,93 +206,21 @@ func HashToField(msg []byte) fr.Element { return element } -// TODO: link union whitepaper 4.1.1, H_{p^2} -func HashToField2(msg []byte) (fr.Element, fr.Element) { - x := HashToField(append([]byte{XHashToScalarFieldPrefix}, msg...)) - y := HashToField(append([]byte{YHashToScalarFieldPrefix}, msg...)) - return x, y -} - // TODO: link union whitepaper 4.1.1, M func HashToG2(msg []byte) bn254.G2Affine { - x, y := HashToField2(msg) - point := bn254.MapToG2(bn254.E2{ - A0: *new(fp.Element).SetBigInt(x.BigInt(new(big.Int))), - A1: *new(fp.Element).SetBigInt(y.BigInt(new(big.Int))), - }) - // Must not be zero - if point.IsInfinity() { - panic("Point is zero") - } - return point -} - -type MerkleLeaf struct { - VotingPower int64 - ShiftedX fr.Element - ShiftedY fr.Element - MsbX uint8 - MsbY uint8 -} - -func NewMerkleLeaf(pubKey bn254.G1Affine, votingPower int64) (MerkleLeaf, error) { - x := pubKey.X.BigInt(new(big.Int)) - y := pubKey.Y.BigInt(new(big.Int)) - msbX := x.Bit(253) - msbY := y.Bit(253) - var frX, frY fr.Element - x.SetBit(x, 253, 0) - var padded [32]byte - x.FillBytes(padded[:]) - err := frX.SetBytesCanonical(padded[:]) - if err != nil { - return MerkleLeaf{}, err - } - y.SetBit(y, 253, 0) - y.FillBytes(padded[:]) - err = frY.SetBytesCanonical(padded[:]) - if err != nil { - return MerkleLeaf{}, err - } - return MerkleLeaf{ - VotingPower: votingPower, - ShiftedX: frX, - ShiftedY: frY, - MsbX: uint8(msbX), - MsbY: uint8(msbY), - }, nil -} - -// mimc(X, Xmsb, Y, Ymsb, power) -func (l MerkleLeaf) Hash() ([]byte, error) { - frXBytes := l.ShiftedX.Bytes() - frYBytes := l.ShiftedY.Bytes() - mimc := mimc.NewMiMC() - _, err := mimc.Write(frXBytes[:]) + img := HashToField(msg) + var imgBytes [32]byte + fr.LittleEndian.PutElement(&imgBytes, img) + var dst fr.Element + dst.SetBytes([]byte(CometblsSigDST)) + var dstBytes [32]byte + fr.LittleEndian.PutElement(&dstBytes, dst) + point, err := HashToG2MiMC(imgBytes[:], dstBytes[:]) if err != nil { - return nil, err - } - _, err = mimc.Write(frYBytes[:]) - if err != nil { - return nil, err - } - var padded [32]byte - big.NewInt(int64(l.MsbX)).FillBytes(padded[:]) - _, err = mimc.Write(padded[:]) - if err != nil { - return nil, err - } - big.NewInt(int64(l.MsbY)).FillBytes(padded[:]) - _, err = mimc.Write(padded[:]) - if err != nil { - return nil, err + panic("impossible; qed;") } - var powerBytes big.Int - powerBytes.SetUint64(uint64(l.VotingPower)) - powerBytes.FillBytes(padded[:]) - _, err = mimc.Write(padded[:]) - if err != nil { - return nil, err + if point.IsInfinity() || !point.IsOnCurve() || !point.IsInSubGroup() { + panic("impossible; qed;") } - return mimc.Sum(nil), nil + return point } diff --git a/galoisd/vendor/github.com/cometbft/cometbft/crypto/bn254/g2.go b/galoisd/vendor/github.com/cometbft/cometbft/crypto/bn254/g2.go new file mode 100644 index 0000000000..26c618dc09 --- /dev/null +++ b/galoisd/vendor/github.com/cometbft/cometbft/crypto/bn254/g2.go @@ -0,0 +1,184 @@ +package bn254 + +import ( + "errors" + "math/big" + "slices" + + curve "github.com/consensys/gnark-crypto/ecc/bn254" + bn254fp "github.com/consensys/gnark-crypto/ecc/bn254/fp" + bn254fr "github.com/consensys/gnark-crypto/ecc/bn254/fr" + "github.com/consensys/gnark-crypto/ecc/bn254/fr/mimc" + "github.com/tunabay/go-bitarray" +) + +// BN254G2_XMD:MIMC-256_SVDW +// HashToG2 hashes a message to a point on the G2 curve using the SVDW map. +// Slower than EncodeToG2, but usable as a random oracle. +// dst stands for "domain separation tag", a string unique to the construction using the hash function +// https://www.ietf.org/archive/id/draft-irtf-cfrg-hash-to-curve-16.html#roadmap +func HashToG2MiMC(msg, dst []byte) (curve.G2Affine, error) { + u, err := HashToFieldMiMC(msg, dst) + if err != nil { + return curve.G2Affine{}, err + } + Q0 := curve.MapToCurve2(&curve.E2{ + A0: u[0], + A1: u[1], + }) + Q1 := curve.MapToCurve2(&curve.E2{ + A0: u[2], + A1: u[3], + }) + var _Q0, _Q1 curve.G2Jac + _Q0.FromAffine(&Q0) + _Q1.FromAffine(&Q1).AddAssign(&_Q0) + _Q1.ClearCofactor(&_Q1) + Q1.FromJacobian(&_Q1) + if !Q1.IsOnCurve() || Q1.IsInfinity() || !Q1.IsInSubGroup() { + panic("impossible") + } + return Q1, nil +} + +// Hash msg to 4 prime field elements (actually bound to scalar elements). +// https://tools.ietf.org/html/draft-irtf-cfrg-hash-to-curve-06#section-5.2 +func HashToFieldMiMC(msg, dst []byte) ([4]bn254fp.Element, error) { + // 128 bits of security + // L = ceil((ceil(log2(p)) + k) / 8), where k is the security parameter = 128 + const Bytes = 1 + (254-1)/8 + const L = 16 + Bytes + + pseudoRandomBytes, err := ExpandMsgXmdMiMC(msg, dst, 4*L) + if err != nil { + return [4]bn254fp.Element{}, err + } + + var res [4]bn254fp.Element + for i := 0; i < 4; i++ { + elemBytes := pseudoRandomBytes[i*L : (i+1)*L] + slices.Reverse(elemBytes) + res[i].SetBytes(elemBytes) + } + + return res, nil +} + +// BN254G2_XMD +// This is not a general implementation as the input/output length are fixed. +// https://tools.ietf.org/html/draft-irtf-cfrg-hash-to-curve-06#section-5 +// https://tools.ietf.org/html/rfc8017#section-4.1 (I2OSP/O2ISP) +// NOTE: block size is 256 bits, we could use 253 bits block to avoid the modulus, not sure if this would increase security +func ExpandMsgXmdMiMC(msg, dst []byte, lenInBytes int) ([]byte, error) { + h := mimc.NewMiMC() + + ell := (lenInBytes + h.Size() - 1) / h.Size() // ceil(len_in_bytes / b_in_bytes) + if ell > 255 { + return nil, errors.New("invalid lenInBytes") + } + if len(dst) > 255 { + return nil, errors.New("invalid domain size (>255 bytes)") + } + + block := bitarray.New() + writeU8 := func(b byte) { + block = block.Append(bitarray.NewBufferFromByteSlice([]byte{b}).BitArray().Reverse()) + } + write := func(bs []byte) { + for _, b := range bs { + writeU8(b) + } + } + sum := func() []byte { + // zero pad block + if block.Len()%256 != 0 { + block = block.Append(bitarray.NewZeroFilled(256 - block.Len()%256)) + } + data := []byte{} + for i := 0; i < block.Len(); i += 256 { + slice := block.Slice(i, i+256) + bits := big.NewInt(0) + c := big.NewInt(1) + for j := 0; j < 256; j++ { + bits = bits.Add(bits, new(big.Int).Mul(c, big.NewInt(int64(slice.BitAt(j))))) + c.Lsh(c, 1) + } + bits.Mod(bits, bn254fr.Modulus()) + bitsB := make([]byte, 32) + bits.FillBytes(bitsB) + data = append(data, bitsB...) + } + _, err := h.Write(data) + if err != nil { + panic(err) + } + block = bitarray.New() + s := h.Sum(nil) + h.Reset() + slices.Reverse(s) + return s + } + + // Z_pad = I2OSP(0, r_in_bytes) + write_Z_pad := func() { + write(make([]byte, h.BlockSize())) + } + + write_msg := func() { + write(msg) + } + + // l_i_b_str = I2OSP(len_in_bytes, 2) + write_l_i_b_str := func() { + writeU8(uint8(lenInBytes >> 8)) + writeU8(uint8(lenInBytes)) + } + + // DST_prime = DST ∥ I2OSP(len(DST), 1) + write_DST_prime := func() { + write(dst) + writeU8(uint8(len(dst))) + } + + // Z_pad = I2OSP(0, r_in_bytes) + // l_i_b_str = I2OSP(len_in_bytes, 2) + // DST_prime = DST ∥ I2OSP(len(DST), 1) + // b₀ = H(Z_pad ∥ msg ∥ l_i_b_str ∥ I2OSP(0, 1) ∥ DST_prime) + write_Z_pad() + write_msg() + write_l_i_b_str() + writeU8(byte(0)) + write_DST_prime() + b0 := sum() + + // b₁ = H(b₀ ∥ I2OSP(1, 1) ∥ DST_prime) + write(b0) + writeU8(byte(1)) + write_DST_prime() + b1 := sum() + + res := make([]byte, lenInBytes) + copy(res[:h.Size()], b1) + + for i := 2; i <= ell; i++ { + // b_i = H(strxor(b₀, b_(i - 1)) ∥ I2OSP(i, 1) ∥ DST_prime) + strxor := make([]byte, h.Size()) + for j := 0; j < h.Size(); j++ { + strxor[j] = b0[j] ^ b1[j] + } + + write(strxor) + writeU8(byte(i)) + write_DST_prime() + b1 = sum() + copy(res[h.Size()*(i-1):min(h.Size()*i, len(res))], b1) + } + return res, nil +} + +func min(a, b int) int { + if a < b { + return a + } + return b +} diff --git a/galoisd/vendor/github.com/cometbft/cometbft/crypto/bn254/merkle.go b/galoisd/vendor/github.com/cometbft/cometbft/crypto/bn254/merkle.go new file mode 100644 index 0000000000..b5c16cd0fe --- /dev/null +++ b/galoisd/vendor/github.com/cometbft/cometbft/crypto/bn254/merkle.go @@ -0,0 +1,78 @@ +package bn254 + +import ( + "github.com/consensys/gnark-crypto/ecc/bn254" + "github.com/consensys/gnark-crypto/ecc/bn254/fr" + "github.com/consensys/gnark-crypto/ecc/bn254/fr/mimc" + "math/big" +) + +type MerkleLeaf struct { + VotingPower int64 + ShiftedX fr.Element + ShiftedY fr.Element + MsbX uint8 + MsbY uint8 +} + +func NewMerkleLeaf(pubKey bn254.G1Affine, votingPower int64) (MerkleLeaf, error) { + x := pubKey.X.BigInt(new(big.Int)) + y := pubKey.Y.BigInt(new(big.Int)) + msbX := x.Bit(253) + msbY := y.Bit(253) + var frX, frY fr.Element + x.SetBit(x, 253, 0) + var padded [32]byte + x.FillBytes(padded[:]) + err := frX.SetBytesCanonical(padded[:]) + if err != nil { + return MerkleLeaf{}, err + } + y.SetBit(y, 253, 0) + y.FillBytes(padded[:]) + err = frY.SetBytesCanonical(padded[:]) + if err != nil { + return MerkleLeaf{}, err + } + return MerkleLeaf{ + VotingPower: votingPower, + ShiftedX: frX, + ShiftedY: frY, + MsbX: uint8(msbX), + MsbY: uint8(msbY), + }, nil +} + +// mimc(X, Y, XMSB, YMSB) +func (l MerkleLeaf) Hash() ([]byte, error) { + frXBytes := l.ShiftedX.Bytes() + frYBytes := l.ShiftedY.Bytes() + mimc := mimc.NewMiMC() + _, err := mimc.Write(frXBytes[:]) + if err != nil { + return nil, err + } + _, err = mimc.Write(frYBytes[:]) + if err != nil { + return nil, err + } + var padded [32]byte + big.NewInt(int64(l.MsbX)).FillBytes(padded[:]) + _, err = mimc.Write(padded[:]) + if err != nil { + return nil, err + } + big.NewInt(int64(l.MsbY)).FillBytes(padded[:]) + _, err = mimc.Write(padded[:]) + if err != nil { + return nil, err + } + var powerBytes big.Int + powerBytes.SetUint64(uint64(l.VotingPower)) + powerBytes.FillBytes(padded[:]) + _, err = mimc.Write(padded[:]) + if err != nil { + return nil, err + } + return mimc.Sum(nil), nil +} diff --git a/galoisd/vendor/github.com/cometbft/cometbft/types/validator_set.go b/galoisd/vendor/github.com/cometbft/cometbft/types/validator_set.go index 58e6c17108..a46c6a7c76 100644 --- a/galoisd/vendor/github.com/cometbft/cometbft/types/validator_set.go +++ b/galoisd/vendor/github.com/cometbft/cometbft/types/validator_set.go @@ -351,8 +351,9 @@ func (vals *ValidatorSet) Hash() []byte { for i, val := range vals.Validators { var pubKey bn254.G1Affine _, err := pubKey.SetBytes(val.PubKey.Bytes()) + fmt.Printf("Len: %d\n", len(val.PubKey.Bytes())) if err != nil { - panic(fmt.Errorf("ValidatorSet.Hash(): impossible invalid validator: %v", val)) + panic(fmt.Errorf("ValidatorSet.Hash(): impossible invalid validator: %v: Err %s", val, err)) } leaf, err := cometbn254.NewMerkleLeaf(pubKey, val.VotingPower) if err != nil { diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/LICENSE b/galoisd/vendor/github.com/tunabay/go-bitarray/LICENSE new file mode 100644 index 0000000000..363586f463 --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/LICENSE @@ -0,0 +1,18 @@ +Copyright (c) 2021 Hirotsuna Mizuno - https://github.com/tunabay + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/README.md b/galoisd/vendor/github.com/tunabay/go-bitarray/README.md new file mode 100644 index 0000000000..077f5dc620 --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/README.md @@ -0,0 +1,100 @@ +# go-bitarray + +[![Go Reference](https://pkg.go.dev/badge/github.com/tunabay/go-bitarray.svg)](https://pkg.go.dev/github.com/tunabay/go-bitarray) +[![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](LICENSE) + +## Overview + +Package bitarray provides data types and functions for manipulating bit arrays, +aka bit strings, of arbitrary length. + +This is designed to handle bit arrays across byte boundaries naturally, without +error-prone bitwise operation code such as shifting, masking, and ORing. It may +be useful when dealing with Huffman coding, raw packet of various protocols, and +binary file formats, etc. + +## Usage + +### Manipulate bitarrays using the `BitArray` type. +```go +import ( + "fmt" + "github.com/tunabay/go-bitarray" +) + +func main() { + // Parse string representation + ba1, err := bitarray.Parse("111000") + if err != nil { + panic(err) + } + fmt.Println(ba1) // 111000 + + // Slice and Repeat + ba2 := ba1.Slice(2, 5).Repeat(2) + fmt.Println(ba2) // 100100 + + // Append + ba3 := ba2.Append(bitarray.MustParse("101011")) + // alternative formatting + fmt.Printf("% b\n", ba3) // 10010010 1011 + + // Extract bits from []byte across byte boundary + buf := []byte{0xff, 0x00} + ba4 := bitarray.NewFromBytes(buf, 4, 7) + fmt.Println(ba4) // 1111000 +} +``` +[Run in Go Playground](https://play.golang.org/p/qm4fpMCPdWa) + +### Use the `Buffer` type for bitwise access to byte slices. +```go +import ( + "fmt" + "github.com/tunabay/go-bitarray" +) + +// This example assumes 8-byte data with the following bit layout, and +// accesses the 5-bit integer X and the 50-bit integer Y in it. +// +// |0 |1 |2 |3 | +// |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| +// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// | 9-bit flag area | 5-bit X | Upper 18 bits of the 50-bit int Y | +// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// | Lower 32 bits of the 50-bit int Y | +// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +func main() { + data := make([]byte, 8) + buf := bitarray.NewBufferFromByteSlice(data) + + // set 9-bit flag area to 110000011 + buf.PutBitAt(0, 1) + buf.PutBitAt(1, 1) + buf.PutBitAt(7, 1) + buf.PutBitAt(8, 1) + + // set 5-bit integer X + buf.Slice(9, 14).PutUint8(25) // = 0b_11001 + + // set 50-bit integer Y + buf.Slice(14, 64).PutUint64(0x_3_f0ff_f0f0_ff0f) + + // raw bytes updated + fmt.Printf("%08b\n%08b\n", data[:4], data[4:]) + + // read fields + fmt.Printf("F = %b\n", buf.Slice(0, 9)) + fmt.Printf("X = %d\n", buf.Slice(9, 14).Uint8()) + fmt.Printf("Y = %x\n", buf.SliceToEnd(14).Uint64()) +} +``` +[Run in Go Playground](https://play.golang.org/p/INosZRfZsuR) + +## Documentation and more examples + +- Read the [documentation](https://pkg.go.dev/github.com/tunabay/go-bitarray). + +## License + +go-bitarray is available under the MIT license. See the [LICENSE](LICENSE) file for more information. diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/alignment.go b/galoisd/vendor/github.com/tunabay/go-bitarray/alignment.go new file mode 100644 index 0000000000..b7dee084ee --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/alignment.go @@ -0,0 +1,22 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +// Alignment is used in some bitwise operations to specify whether the bits are +// left-aligned or right-aligned. The zero value is AlignLeft. +type Alignment bool + +const ( + AlignLeft Alignment = false + AlignRight Alignment = true +) + +// String returns the string representation of Alignment. +func (a Alignment) String() string { + if a == AlignLeft { + return "align-left" + } + return "align-right" +} diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray.go b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray.go new file mode 100644 index 0000000000..7a4b6f8e9c --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray.go @@ -0,0 +1,363 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "hash" + "math/bits" +) + +// BitArray represents an immutable bit array, or a sequence of bits, of +// arbitrary length. Unlike the builtin []byte, BitArray can properly hold and +// handle fractional bits less than 8 bits. The zero value for BitArray +// represents an empty bit array of zero length. Since it is immutable, it can +// be shared, copied and is safe for concurrent use by multiple goroutines. +type BitArray struct { + b []byte // nil for zero filled bit array including zero length + nBits int // number of bits contained +} + +// zeroBitArray is a shared instance representing an empty bit array. +var zeroBitArray = &BitArray{} + +// New creates and returns a new BitArray instance from the bits passed as +// parameters. Each parameter should be 0 or 1, but if any other value is +// passed, no error is reported and only the LSB of each is silently used. In +// most cases it is more convenient to use Parse, NewFromBytes or other +// functions instead of New. +func New(bits ...byte) *BitArray { + if len(bits) == 0 { + return zeroBitArray + } + var zfb byte + buf := allocByteSlice((len(bits) + 7) >> 3) + for i, bit := range bits { + bit &= 1 + zfb |= bit + buf[i>>3] |= bit << (7 - i&7) + } + if zfb == 0 { + return &BitArray{nBits: len(bits)} + } + + return &BitArray{b: buf, nBits: len(bits)} +} + +// NewFromBytes reads bits from a byte slice b, creates a new BitArray instance +// and returns it. It skips off bits from the beginning of p and reads nBits +// bits from the next bit. +func NewFromBytes(p []byte, off, nBits int) *BitArray { + switch { + case nBits < 0: + panicf("NewFromBytes: negative nBits %d.", nBits) + case off < 0: + panicf("NewFromBytes: negative off %d.", off) + case len(p)<<3 < off+nBits: + panicf("NewFromBytes: out of range off=%d + nBits=%d > p.len=%d.", off, nBits, len(p)<<3) + case nBits == 0: + return zeroBitArray + } + buf := allocByteSlice((nBits + 7) >> 3) + if copyBits(buf, p, 0, off, nBits) { + return &BitArray{nBits: nBits} + } + + return &BitArray{b: buf, nBits: nBits} +} + +// NewFromByteBits creates a new BitArray from a []byte in which each element +// represents 1 bit as 0 or 1. If an element is neighter 0 nor 1, only its LSB +// is silently used. +func NewFromByteBits(bits []byte) *BitArray { + if len(bits) == 0 { + return zeroBitArray + } + var zfb byte + buf := allocByteSlice((len(bits) + 7) >> 3) + for i, bit := range bits { + bit &= 1 + zfb |= bit + buf[i>>3] |= bit << (7 - i&7) + } + if zfb == 0 { + return &BitArray{nBits: len(bits)} + } + + return &BitArray{b: buf, nBits: len(bits)} +} + +// NewZeroFilled creates a BitArray with all digits filled with 0. An all zero +// filled bit array does not allocate memory for 0 bits. If all bits in a bit +// array are guaranteed to be 0, using this function saves memory usage and +// optimizes some bitwise operations. +func NewZeroFilled(nBits int) *BitArray { + switch { + case nBits < 0: + panicf("NewZeroFilled: negative nBits %d.", nBits) + case nBits == 0: + return zeroBitArray + } + + return &BitArray{nBits: nBits} +} + +// NewOneFilled creates a BitArray with all digits filled with 1. +func NewOneFilled(nBits int) *BitArray { + switch { + case nBits < 0: + panicf("NewOneFilled: negative nBits %d.", nBits) + case nBits == 0: + return zeroBitArray + } + buf := allocByteSlice((nBits + 7) >> 3) + fillFF(buf) + if f := nBits & 7; f != 0 { + buf[len(buf)-1] &= byte(0xff) << (8 - f) + } + + return &BitArray{b: buf, nBits: nBits} +} + +// NewByRunLength creates a BitArray with the argument that represents the +// number of consecutive 0 and 1 bits. The (2n+1)th arguments including the +// first specifies the length of 0s, and the (2n)th arguments including the +// second specifies the length of 1s. Passing 0 as the first argument allows to +// create a bit array starting with 1. It is suitable for making simple bit +// masks. +func NewByRunLength(lengths ...int) *BitArray { + max1Len, sumLen := 0, 0 + for i := 0; i < len(lengths); i++ { + sumLen += lengths[i] + if i&1 != 0 && max1Len < lengths[i] { + max1Len = lengths[i] + } + } + switch { + case sumLen == 0: + return zeroBitArray + case max1Len == 0: + return &BitArray{nBits: sumLen} + } + + buf1 := make([]byte, (max1Len+7)>>3) + fillFF(buf1) + + bb := NewBuilder() + for i, length := range lengths { + switch { + case length == 0: + case i&1 == 0: + bb.append(nil, 0, length, true) + default: + bb.append(buf1, 0, length, false) + } + } + + return bb.BitArray() +} + +// IsZero returns whether the BitArray is empty, zero length. +func (ba *BitArray) IsZero() bool { + return ba == nil || ba.nBits == 0 +} + +// Len returns the number of bits contained in the BitArray. +func (ba *BitArray) Len() int { + if ba == nil { + return 0 + } + + return ba.nBits +} + +// NumPadding returns the number of LSBs padded when expressing the bit array as +// []byte type, that is, the number of bits to be added to make it a multiple of +// 8 bits. +func (ba *BitArray) NumPadding() int { + if ba == nil { + return 0 + } + + return (8 - ba.nBits&7) & 7 +} + +// String returns the string representation of the BitArray. +func (ba BitArray) String() string { + if ba.IsZero() { + return "" + } + sb := make([]byte, ba.nBits) + if ba.b == nil { + fill30(sb) + } else { + for i := 0; i < ba.nBits; i++ { + sb[i] = '0' + ba.b[i>>3]>>(7-i&7)&1 + } + } + + return string(sb) +} + +// Bytes returns the byte slice containing the bit array. It also returns the +// number of the padded LSBs. +func (ba *BitArray) Bytes() ([]byte, int) { + n := ba.Len() //nolint:ifshort // false positive + if n == 0 { + return []byte{}, 0 + } + b := make([]byte, (n+7)>>3) + copy(b, ba.b) // works with ba.b == nil + + return b, (8 - ba.nBits&7) & 7 +} + +// BitArray implements the BitArrayer interface returning itself. +func (ba *BitArray) BitArray() *BitArray { + return ba +} + +// BitAt returns a single bit at the specified offset as 0 or 1. It panics if +// the off is negative or greater than ba.Len()-1. +func (ba *BitArray) BitAt(off int) byte { + switch { + case off < 0: + panicf("BitAt: negative off %d.", off) + case ba.Len() <= off: + panicf("BitAt: out of range: off=%d >= len=%d.", off, ba.Len()) + case ba.b == nil: + return 0 + } + + return ba.b[off>>3] >> (7 - off&7) & 1 +} + +// Hash calculates the hash of the bit array using the hash function h. The +// hash.Hash is designed to accept input in bytes instead of bits. This causes +// problems with bit arrays that have padding LSBs at the end. For example, the +// two bit arrays "1111" and "1111000" would both be represented as the same +// single byte 0xf0. In order to prevent these from being mapped to the same +// hash value, the hash is calculated after appending a 3 bits marker +// indicating the number of padding LSBs at the end of the original bit array. +// +// Deprecated: Most hash functions can handle bit-oriented messages as-is by +// design, and it is not appropriate to use the byte-oriented standard hash.Hash +// with padding bits. The result does not comply with the specifications. Not +// all hash functions are available, but for SHA-1 and SHA-2, which can handle +// bit-oriented messages correctly, dedicated methods such as SHA512, SHA256, +// and SHA1 are now available. It is better to use them instead. +func (ba *BitArray) Hash(h hash.Hash) []byte { + b, _ := ba.MarshalBinary() + h.Write(b) + + return h.Sum(nil) +} + +// MapKey returns a string that can be used as a key for the Go built-in map. +// Only the same bit array returns the same string. The String method can also +// be used for the same purpose, but MapKey is faster. Note that it can be used +// as a map key, but it may contain non-printable characters. +func (ba *BitArray) MapKey() string { + if ba.IsZero() { + return "" + } + nBytes := (ba.nBits + 7) >> 3 + sb := make([]byte, nBytes+1) + sb[0] = byte(ba.nBits & 7) + copy(sb[1:], ba.b) // works with ba.b == nil + + return string(sb) +} + +// ToPadded8 returns a new BitArray with a length that is a multiple of 8 bits +// by apending 0 to 7 padding bits at the end. For the returned bit array, +// NumPadding() returns 0. +func (ba *BitArray) ToPadded8() *BitArray { + switch { + case ba.IsZero(): + return zeroBitArray + case ba.nBits&7 == 0: + return ba + } + nBits := (ba.nBits + 7) & ^7 + if ba.b == nil { + return &BitArray{nBits: nBits} + } + + return &BitArray{b: ba.b, nBits: nBits} +} + +// ToPadded64 returns a new BitArray with a length that is a multiple of 64 bits +// by apending 0 to 63 padding bits at the end. For the returned bit array, +// NumPadding() returns 0, and Len() returns a multiple of 8. +func (ba *BitArray) ToPadded64() *BitArray { + switch { + case ba.IsZero(): + return zeroBitArray + case ba.nBits&63 == 0: + return ba + } + nBits := (ba.nBits + 63) & ^63 + if ba.b == nil { + return &BitArray{nBits: nBits} + } + + return &BitArray{b: ba.b[:nBits>>3], nBits: nBits} +} + +// ToByteBits returns a byte slice that represents the bit array with 1 byte +// per bit. Each byte element of the returned slice represents a single bit with +// 0 or 1. It is a memory-wasting data type, but for the purpose of repeating +// searches and matching using the same bit array, converting to this format +// allows the standard bytes package to be used. +func (ba *BitArray) ToByteBits() []byte { + if ba.IsZero() { + return []byte{} + } + return ba.bits8() +} + +// ParityBit calculates the odd parity bit of the bit array. +func (ba *BitArray) ParityBit() int { + if ba.IsZero() || ba.b == nil { + return 1 + } + + // TODO: use an optimized algorithm + var sum uint64 + for _, b := range asUint64Slice(ba.b) { + sum ^= b + } + + return (bits.OnesCount64(sum) + 1) & 1 +} + +// RepeatEach returns a new BitArray in which each bit is repeated the specified +// number of times. It is an operation like "scaling" a bit pattern. +func (ba *BitArray) RepeatEach(count int) *BitArray { + switch { + case count < 0: + panicf("RepeatEach: negative count %d.", count) + case ba.IsZero(), count == 0: + return zeroBitArray + case count == 1: + return ba + case ba.b == nil: + return &BitArray{nBits: ba.nBits * count} + } + + buf1 := make([]byte, (count+7)>>3) + fillFF(buf1) + + bb := NewBuilder() + for i := 0; i < ba.nBits; i++ { + if ba.b[i>>3]>>(7-i&7)&1 == 0 { + bb.append(nil, 0, count, true) + } else { + bb.append(buf1, 0, count, false) + } + } + + return bb.BitArray() +} diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_bitwise.go b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_bitwise.go new file mode 100644 index 0000000000..4430404038 --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_bitwise.go @@ -0,0 +1,301 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "math/bits" +) + +// LeadingZeros returns the number of leading zero bits in the BitArray. +func (ba *BitArray) LeadingZeros() int { + switch { + case ba.IsZero(): + return 0 + case ba.b == nil: + return ba.nBits + } + n := 0 + nb := ba.nBits >> 3 + for i := 0; i < nb; i++ { + z := bits.LeadingZeros8(ba.b[i]) + n += z + if z != 8 { + return n + } + } + + fb := ba.nBits & 7 + if fb == 0 { + return n + } + z := bits.LeadingZeros8(ba.b[nb]) + if fb < z { + z = fb + } + + return n + z +} + +// TrailingZeros returns the number of trailing zero bits in the BitArray. +func (ba *BitArray) TrailingZeros() int { + switch { + case ba.IsZero(): + return 0 + case ba.b == nil: + return ba.nBits + } + n := 0 + for i := len(ba.b) - 1; 0 <= i; i-- { + z := bits.TrailingZeros8(ba.b[i]) + n += z + if z != 8 { + return n - ba.NumPadding() + } + } + + return n - ba.NumPadding() +} + +func (ba *BitArray) hasTrailingZeros(n int) bool { + if n == 0 { + return true + } + n += ba.NumPadding() + + for i := len(ba.b) - 1; 0 <= i; i-- { + z := bits.TrailingZeros8(ba.b[i]) + n -= z + switch { + case n <= 0: + return true + case z != 8: + return false + } + } + return false +} + +// OnesCount returns the number of one bits, population count, in the BitArray. +func (ba *BitArray) OnesCount() int { + if ba.IsZero() || ba.b == nil { + return 0 + } + n := 0 + for _, u64 := range asUint64Slice(ba.b) { + n += bits.OnesCount64(u64) + } + + return n +} + +// And returns a new BitArray as a result of a bitwise AND with x. The ba and x +// must be the same length, otherwise And will panic. Use AndAt instead to apply +// a partial AND with a short bit array. +func (ba *BitArray) And(x BitArrayer) *BitArray { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + baLen, xLen := ba.Len(), bax.Len() + switch { + case baLen != xLen: + panicf("And: length is not the same: %d != %d.", baLen, xLen) + case baLen == 0: + return zeroBitArray + case ba.b == nil: + return ba + case bax.b == nil: + return bax + } + zv := uint64(0) + buf := allocByteSlice(len(ba.b)) + buf64 := asUint64Slice(buf) + x64 := asUint64Slice(bax.b) + for i, u64 := range asUint64Slice(ba.b) { + buf64[i] = u64 & x64[i] + zv |= buf64[i] + } + if zv == 0 { + return &BitArray{nBits: ba.nBits} + } + return &BitArray{b: buf, nBits: ba.nBits} +} + +// Or returns a new BitArray as a result of a bitwise OR with x. The ba and x +// must be the same length, otherwise Or will panic. Use OrAt instead to apply a +// partial OR with a short bit array. +func (ba *BitArray) Or(x BitArrayer) *BitArray { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + baLen, xLen := ba.Len(), bax.Len() + switch { + case baLen != xLen: + panicf("Or: length is not the same: %d != %d.", baLen, xLen) + case baLen == 0: + return zeroBitArray + case ba.b == nil: + return bax + case bax.b == nil: + return ba + } + zv := uint64(0) + buf := allocByteSlice(len(ba.b)) + buf64 := asUint64Slice(buf) + x64 := asUint64Slice(bax.b) + for i, u64 := range asUint64Slice(ba.b) { + buf64[i] = u64 | x64[i] + zv |= buf64[i] + } + if zv == 0 { + return &BitArray{nBits: ba.nBits} + } + return &BitArray{b: buf, nBits: ba.nBits} +} + +// Xor returns a new BitArray as a result of a bitwise XOR with x. The ba and x +// must be the same length, otherwise Xor will panic. Use XorAt instead to apply +// a partial XOR with a short bit array. +func (ba *BitArray) Xor(x BitArrayer) *BitArray { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + baLen, xLen := ba.Len(), bax.Len() + switch { + case baLen != xLen: + panicf("Xor: length is not the same: %d != %d.", baLen, xLen) + case baLen == 0: + return zeroBitArray + case ba.b == nil: + return bax + case bax.b == nil: + return ba + } + zv := uint64(0) + buf := allocByteSlice(len(ba.b)) + buf64 := asUint64Slice(buf) + x64 := asUint64Slice(bax.b) + for i, u64 := range asUint64Slice(ba.b) { + buf64[i] = u64 ^ x64[i] + zv |= buf64[i] + } + if zv == 0 { + return &BitArray{nBits: ba.nBits} + } + return &BitArray{b: buf, nBits: ba.nBits} +} + +// Not returns a new BitArray that is the result of inverting all the bits. +func (ba *BitArray) Not() *BitArray { + switch { + case ba.IsZero(): + return zeroBitArray + case ba.b == nil: + return NewOneFilled(ba.nBits) + } + // TODO: use asUint64Slice() + zv := byte(0) + buf := allocByteSlice(len(ba.b)) + for i := 0; i < len(buf)-1; i++ { + buf[i] = ^ba.b[i] + zv |= buf[i] + } + buf[len(buf)-1] = ^ba.b[len(ba.b)-1] & (byte(0xff) << ba.NumPadding()) + zv |= buf[len(buf)-1] + if zv == 0 { + return &BitArray{nBits: ba.nBits} + } + return &BitArray{b: buf, nBits: ba.nBits} +} + +// AndAt returns a new BitArray resulting from applying a bitwise AND operation +// with x at the offset off. AND is applied only to the range from off to +// off+x.Len(), and other bits are preserved. +func (ba *BitArray) AndAt(off int, x BitArrayer) *BitArray { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + baLen, xLen := ba.Len(), bax.Len() + switch { + case off < 0: + panicf("AndAt: negative off %d.", off) + case baLen < off+xLen: + panicf("AndAt: out of range: off=%d + x.len=%d > len=%d.", off, xLen, baLen) + case baLen == 0: + return zeroBitArray + case ba.b == nil: + return ba + case bax.b == nil: + buf := allocByteSlice(len(ba.b)) + copy(buf, ba.b) + clearBits(buf, off, xLen) + return &BitArray{b: buf, nBits: baLen} + } + buf := allocByteSlice(len(ba.b)) + copy(buf, ba.b) + andBits(buf, bax.b, off, 0, xLen) + return &BitArray{b: buf, nBits: baLen} +} + +// OrAt returns a new BitArray resulting from applying a bitwise OR operation +// with x at the offset off. OR is applied only to the range from off to +// off+x.Len(), and other bits are preserved. +func (ba *BitArray) OrAt(off int, x BitArrayer) *BitArray { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + baLen, xLen := ba.Len(), bax.Len() + switch { + case off < 0: + panicf("OrAt: negative off %d.", off) + case baLen < off+xLen: + panicf("OrAt: out of range: off=%d + x.len=%d > len=%d.", off, xLen, baLen) + case baLen == 0: + return zeroBitArray + case bax.b == nil: + return ba + case ba.b == nil: + buf := allocByteSlice((baLen + 7) >> 3) + _ = copyBits(buf, bax.b, off, 0, xLen) + return &BitArray{b: buf, nBits: baLen} + } + buf := allocByteSlice(len(ba.b)) + copy(buf, ba.b) + orBits(buf, bax.b, off, 0, xLen) + return &BitArray{b: buf, nBits: baLen} +} + +// XorAt returns a new BitArray resulting from applying a bitwise XOR operation +// with x at the offset off. XOR is applied only to the range from off to +// off+x.Len(), and other bits are preserved. +func (ba *BitArray) XorAt(off int, x BitArrayer) *BitArray { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + baLen, xLen := ba.Len(), bax.Len() + switch { + case off < 0: + panicf("XorAt: negative off %d.", off) + case baLen < off+xLen: + panicf("XorAt: out of range: off=%d + x.len=%d > len=%d", off, xLen, baLen) + case baLen == 0: + return zeroBitArray + case bax.b == nil: + return ba + case ba.b == nil: + buf := allocByteSlice((baLen + 7) >> 3) + _ = copyBits(buf, bax.b, off, 0, xLen) + return &BitArray{b: buf, nBits: baLen} + } + buf := allocByteSlice(len(ba.b)) + copy(buf, ba.b) + xorBits(buf, bax.b, off, 0, xLen) + return &BitArray{b: buf, nBits: baLen} +} diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_compare.go b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_compare.go new file mode 100644 index 0000000000..bb9ade6caa --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_compare.go @@ -0,0 +1,97 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "bytes" +) + +// Compare returns an integer comparing two bit arrays lexicographically. The +// result will be 0 if x == y, -1 if x < y, and +1 if y < x. A nil argument is +// equivalent to an empty bit array. +func Compare(x, y BitArrayer) int { + var bax, bay *BitArray + if x != nil { + bax = x.BitArray() + } + if y != nil { + bay = y.BitArray() + } + xLen, yLen, xlty := bax.Len(), bay.Len(), -1 + if yLen < xLen { + bax, bay, xLen, yLen, xlty = bay, bax, yLen, xLen, +1 + } + + switch { + case yLen == 0: + return 0 + case xLen == 0: + return xlty + case bax.b == nil: + if xLen == yLen && (bay.b == nil || allBytesZero(bay.b)) { + return 0 + } + return xlty + case bay.b == nil: + if allBytesZero(bax.b) { + if xLen == yLen { + return 0 + } + return xlty + } + return -xlty + } + + ce := bax.nBits >> 3 // end index of common bytes + cc := bytes.Compare(bax.b[:ce], bay.b[:ce]) + switch { + case 0 < cc: + return -xlty + case cc < 0: + return xlty + } + + if bax.nBits&7 == 0 { // no more x bits + if xLen == yLen { + return 0 + } + return xlty + } + + // compare the fractional bits in the last byte + cs := 8 - bax.nBits&7 + xl, yl := bax.b[ce]>>cs, bay.b[ce]>>cs + switch { + case yl < xl: + return -xlty + case xl < yl, xLen != yLen: + return xlty + } + + return 0 +} + +// Equal returns whether the bit array is the same as specified one. +// nil and zero length bit array are considered to be equal. +func (ba *BitArray) Equal(x BitArrayer) bool { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + switch { + case ba.IsZero(): + return bax.IsZero() + case bax.IsZero(): + return false + case ba.nBits != bax.nBits: + return false + case ba.b == nil: + return bax.b == nil || allBytesZero(bax.b) + case bax.b == nil: + return allBytesZero(ba.b) + } + + return bytes.Equal(ba.b, bax.b) +} diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_concat.go b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_concat.go new file mode 100644 index 0000000000..80b2eb64e2 --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_concat.go @@ -0,0 +1,138 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +// Join concatenates the elements of its first parameter to create a single +// bit array. The separator sep is placed between elements in the result. +func Join(elems []*BitArray, sep BitArrayer) *BitArray { + var basep *BitArray + if sep != nil { + basep = sep.BitArray() + } + switch len(elems) { + case 0: + return zeroBitArray + case 1: + return elems[0] + } + bb := NewBuilder() + for i, elem := range elems { + if i != 0 && basep != nil { + _, _ = bb.WriteBitArray(basep) + } + _, _ = bb.WriteBitArray(elem) + } + + return bb.BitArray() +} + +// JoinBitArrayer is identical to Join except that it accepts elems in +// []BitArrayer type instead of []*BitArray type. +func JoinBitArrayer(elems []BitArrayer, sep BitArrayer) *BitArray { + var basep *BitArray + if sep != nil { + basep = sep.BitArray() + } + switch len(elems) { + case 0: + return zeroBitArray + case 1: + if elems[0] == nil { + return zeroBitArray + } + return elems[0].BitArray() + } + bb := NewBuilder() + for i, elem := range elems { + if i != 0 && basep != nil { + _, _ = bb.WriteBitArray(basep) + } + if elem != nil { + _, _ = bb.WriteBitArray(elem) + } + } + + return bb.BitArray() +} + +// Append returns the new BitArray resulting from appending the passed elements +// to the current bit array. +func (ba *BitArray) Append(bas ...BitArrayer) *BitArray { + switch len(bas) { + case 0: + if ba.IsZero() { + return zeroBitArray + } + return ba + case 1: + if bas[0] == nil { + return ba + } + return ba.append1(bas[0]) + } + + bb := NewBuilder(ba) + for _, bai := range bas { + _, _ = bb.WriteBitArray(bai) + } + + return bb.BitArray() +} + +func (ba *BitArray) append1(x BitArrayer) *BitArray { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + switch { + case ba.IsZero(): + if bax.IsZero() { + return zeroBitArray + } + return bax + case bax.IsZero(): + return ba + } + if bax.b == nil { + nBits := ba.nBits + bax.nBits + if ba.b == nil { + return &BitArray{nBits: nBits} + } + nBytes := (nBits + 7) >> 3 + if nBytes <= cap(ba.b) { + return &BitArray{b: ba.b[:nBytes], nBits: nBits} + } + buf := allocByteSlice(nBytes) + copy(buf, ba.b) + return &BitArray{b: buf, nBits: nBits} + } + nBits := ba.nBits + bax.nBits + buf := allocByteSlice((nBits + 7) >> 3) + copy(buf, ba.b) + if copyBits(buf, bax.b, ba.nBits, 0, bax.nBits) && ba.b == nil { + return &BitArray{nBits: nBits} + } + return &BitArray{b: buf, nBits: nBits} +} + +// Repeat returns a bit array consisting of count copies of the bit array ba. +func (ba *BitArray) Repeat(count int) *BitArray { + switch { + case count < 0: + panicf("invalid count: %d < 0", count) + case ba.IsZero(), count == 0: + return zeroBitArray + case count == 1: + return ba + case ba.b == nil: + return &BitArray{nBits: ba.nBits * count} + } + bb := NewBuilder() + for i := 0; i < count; i++ { + _, _ = bb.WriteBitArray(ba) + } + + return bb.BitArray() +} diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_convert.go b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_convert.go new file mode 100644 index 0000000000..208ccb78b5 --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_convert.go @@ -0,0 +1,53 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "encoding/binary" + "math/big" +) + +// NewFromInt creates a BitArray from big.Int. The returned bit array represents +// the absolute value of v in big-endian byte order. For big.Int(0), it returns +// a "0" instead of an empty bit array. +func NewFromInt(v *big.Int) *BitArray { + nBits := v.BitLen() + if nBits == 0 { + return &BitArray{nBits: 1} + } + + return NewFromBytes(v.Bytes(), (8-nBits&7)&7, nBits) +} + +// ToInt parses the bit array as a big-endian representation, and convert it to +// an unsigned integer value. The leading 0s have no effect on the result. +func (ba *BitArray) ToInt() *big.Int { + v := big.NewInt(0) + if ba.IsZero() || ba.b == nil { + return v + } + v.SetBytes(ba.b) + + return v.Rsh(v, uint(ba.NumPadding())) +} + +// ToUint64 is the same as ToInt except that it returns uint64 instead of +// *big.Int. If the bit array length exceeds 64 bits, only the last 64 bits +// will be used. +func (ba *BitArray) ToUint64() uint64 { + if ba.IsZero() || ba.b == nil { + return 0 + } + switch { + case ba.nBits < 64: + buf := make([]byte, 8) + copy(buf[8-len(ba.b):], ba.b) + return binary.BigEndian.Uint64(buf) >> ba.NumPadding() + case 64 < ba.nBits: + ba = ba.Slice(ba.nBits-64, ba.nBits) + } + + return binary.BigEndian.Uint64(ba.b) +} diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_encoding.go b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_encoding.go new file mode 100644 index 0000000000..217060f6ab --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_encoding.go @@ -0,0 +1,93 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +// import () + +// MarshalBinary implements the standard encoding.BinaryMarshaler interface to +// marshal a BitArray into a binary form. +// +// This appends 0 to 7 bits padding followed by 3 bits marker indicating the +// actual number of padding LSBs at the end of the original bit array. +// +// | nBits&7 | last two bytes mark | pad | +// +---------+-----------+------------+-----+ +// | 5 | 1111 1111 | 1111 1:000 | 3 | +// | 4 | 1111 1111 | 1111 -:001 | 4 | +// | 3 | 1111 1111 | 111- -:010 | 5 | +// | 2 | 1111 1111 | 11-- -:011 | 6 | +// | 1 | 1111 1111 | 1--- -:100 | 7 | +// | 0 | 1111 1111 | ---- -:101 | 8 | +// | 7 | 1111 111- | ---- -:110 | 9 | +// | 6 | 1111 11-- | ---- -:111 | 10 | +func (ba *BitArray) MarshalBinary() ([]byte, error) { + if ba.IsZero() { + return []byte{}, nil + } + nBytes := (ba.nBits + 7) >> 3 + nfrac := ba.nBits & 7 + marker := byte((13 - nfrac) & 7) + if nfrac == 0 || nfrac>>1 == 3 { + buf := make([]byte, nBytes+1) + if ba.b != nil { + copy(buf, ba.b) + } + buf[nBytes] = marker + return buf, nil + } + buf := make([]byte, nBytes) + if ba.b != nil { + copy(buf, ba.b) + } + buf[nBytes-1] |= marker + + return buf, nil +} + +// MarshalText implements the standard encoding.TextMarshaler interface to +// marshal a BitArray into a textual form. This always returns a nil error. +func (ba *BitArray) MarshalText() ([]byte, error) { + if ba.IsZero() { + return []byte{}, nil + } + sb := make([]byte, ba.nBits) + if ba.b == nil { + fill30(sb) + } else { + for i := 0; i < ba.nBits; i++ { + sb[i] = '0' + ba.b[i>>3]>>(7-i&7)&1 + } + } + + return sb, nil +} + +// MarshalJSON implements the standard json.Marshaler interface to marshal a +// BitArray into a JSON form. This always returns a nil error. +func (ba *BitArray) MarshalJSON() ([]byte, error) { + if ba.IsZero() { + return []byte(`""`), nil + } + sb := make([]byte, ba.nBits+2) + if ba.b == nil { + fill30(sb) + } else { + for i := 0; i < ba.nBits; i++ { + sb[i+1] = '0' + ba.b[i>>3]>>(7-i&7)&1 + } + } + sb[0] = '"' + sb[ba.nBits+1] = '"' + + return sb, nil +} + +// MarshalYAML implements the yaml.Marshaler. +func (ba *BitArray) MarshalYAML() (interface{}, error) { + if ba == nil { + return nil, nil + } + return ba.String(), nil +} diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_format.go b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_format.go new file mode 100644 index 0000000000..25d120a674 --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_format.go @@ -0,0 +1,342 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "bytes" + "fmt" + "io" +) + +// Format implements the fmt.Formatter interface to format BitArray values using +// the standard fmt.Printf family functions. +// +// Verbs: +// %b, %s binary, 1 digit represents 1 bit. +// %q quoted version of %b. +// %v default format, same as %b. +// %o octal, 1 digit represents 3 bits. +// %x, %X hexadecimal, 1 digit represents 4 bits. +// +// Flags: +// ' ' (space) print a separator space every 8 digits. +// # more separators, ' ' and/or '-' every 4 digits. +// - left-justify +// + print the number of padding bits at the end, for %o, %x, %X +func (ba BitArray) Format(s fmt.State, verb rune) { + switch verb { + case 'b', 's', 'q': + wid, widOK := s.Width() + if !widOK { + wid = 0 + } + if s.Flag(int('0')) { + fmt.Fprintf(s, "%%!%c(ERROR: unsupported flag 0)", verb) + break + } + if err := ba.writeBinStr( + s, wid, s.Flag(int(' ')), s.Flag(int('#')), + verb == 'q', s.Flag(int('-')), + ); err != nil { + fmt.Fprintf(s, "%%!%c(ERROR: %v)", verb, err) + break + } + + case 'v': + if s.Flag(int('#')) { + fmt.Fprintf(s, "%%!%c(ERROR: unsupported flag #)", verb) + break + } + if err := ba.writeBinStr(s, 0, false, false, false, false); err != nil { + fmt.Fprintf(s, "%%!%c(ERROR: %v)", verb, err) + break + } + + case 'o': + wid, widOK := s.Width() + if !widOK { + wid = 0 + } + if s.Flag(int('0')) { + fmt.Fprintf(s, "%%!%c(ERROR: unsupported flag 0)", verb) + break + } + if err := ba.writeOctStr( + s, wid, + s.Flag(int(' ')), s.Flag(int('#')), + s.Flag(int('+')), s.Flag(int('-')), + ); err != nil { + fmt.Fprintf(s, "%%!%c(ERROR: %v)", verb, err) + break + } + + case 'x', 'X': + wid, widOK := s.Width() + if !widOK { + wid = 0 + } + if s.Flag(int('0')) { + fmt.Fprintf(s, "%%!%c(ERROR: unsupported flag 0)", verb) + break + } + if err := ba.writeHexStr( + s, wid, verb == 'X', + s.Flag(int(' ')), s.Flag(int('#')), + s.Flag(int('+')), s.Flag(int('-')), + ); err != nil { + fmt.Fprintf(s, "%%!%c(ERROR: %v)", verb, err) + break + } + + default: + fmt.Fprintf(s, "%%!%c(BitArray=", verb) + if err := ba.writeBinStr(s, 0, true, true, true, false); err != nil { + fmt.Fprintf(s, "(ERROR: %v)", err) + } + fmt.Fprint(s, ")") + } +} + +func (ba *BitArray) writeBinStr(wr io.Writer, wid int, sep8, sep4, quote, left bool) error { + sep8 = sep8 || sep4 + sLen := ba.Len() + if 0 < ba.nBits && sep8 { + n4d := (ba.nBits + 3) >> 2 // num of 1111 + n8d := (n4d + 1) >> 1 // num of 11111111 + if sep4 { + sLen += n4d - 1 + } else { + sLen += n8d - 1 + } + } + if quote { + sLen += 2 + } + if wid < sLen { + wid = sLen + } + if !left { + if pad := wid - sLen; 0 < pad { + if _, err := wr.Write(bytes.Repeat([]byte{' '}, pad)); err != nil { + return fmt.Errorf("pad-l: %w", err) + } + } + } + if quote { + if _, err := wr.Write([]byte{'"'}); err != nil { + return fmt.Errorf("quote-l: %w", err) + } + } + octbuf := make([]byte, 9) + for i := 0; i < (ba.nBits+7)>>3; i++ { + var wb byte + if ba.b != nil { + wb = ba.b[i] + } + if sep8 && i != 0 { + if _, err := wr.Write([]byte{' '}); err != nil { + return fmt.Errorf("oct-sep: %w", err) + } + } + cLSB := 0 // num of LSBs to be cleared + if i+1 == (ba.nBits+7)>>3 { // last byte + cLSB = ba.NumPadding() + } + bi := 0 + for j := 7; cLSB <= j; j-- { + if sep4 && j == 3 { + octbuf[bi] = byte('-') + bi++ + } + octbuf[bi] = '0' + wb>>j&1 + bi++ + } + if _, err := wr.Write(octbuf[:bi]); err != nil { + return fmt.Errorf("byte: %d(%d): %w", i, cLSB, err) + } + } + if quote { + if _, err := wr.Write([]byte{'"'}); err != nil { + return fmt.Errorf("quote-r: %w", err) + } + } + if left { + if pad := wid - sLen; 0 < pad { + if _, err := wr.Write(bytes.Repeat([]byte{' '}, pad)); err != nil { + return fmt.Errorf("pad-r: %w", err) + } + } + } + + return nil +} + +func (ba *BitArray) writeOctStr(wr io.Writer, wid int, sep8, sep4, rpad, left bool) error { + sep8 = sep8 || sep4 + ntri, nfrc := ba.nBits/3, ba.nBits%3 // num of 777, and remaining bits + if nfrc != 0 { + ntri++ + } + npad := (3 - nfrc) % 3 // num of last padding bits + + sLen := ntri + if 0 < ba.nBits && sep8 { + n4d := (ntri + 3) >> 2 // num of 7777 + n8d := (n4d + 1) >> 1 // num of 77777777 + if sep4 { + sLen += n4d - 1 + } else { + sLen += n8d - 1 + } + } + if rpad && npad != 0 { // (pad=2) + if sep8 { + sLen++ + } + sLen += 7 + } + if wid < sLen { + wid = sLen + } + if !left { + if pad := wid - sLen; 0 < pad { + if _, err := wr.Write(bytes.Repeat([]byte{' '}, pad)); err != nil { + return fmt.Errorf("pad-l: %w", err) + } + } + } + + iby, ibi := 0, 0 // source cursor on ba.b, byte and bit + for i := 0; i < ntri; i++ { + if sep8 && i != 0 && i&3 == 0 { + if i&7 == 0 { + if _, err := wr.Write([]byte{' '}); err != nil { + return fmt.Errorf("sep8: %w", err) + } + } else if sep4 { + if _, err := wr.Write([]byte{'-'}); err != nil { + return fmt.Errorf("sep4: %w", err) + } + } + } + var b byte + if ba.b != nil { + b = ba.b[iby] + } + rsf := (5 - ibi) + if 0 < rsf { + b >>= rsf + } else { + b <<= -rsf + } + b &= 7 + ibi += 3 + if 7 < ibi { + iby++ + if iby < (ba.nBits+7)>>3 { + ibi &= 7 + if ba.b != nil { + b |= ba.b[iby] >> (8 - ibi) & byte(ibi|1) + } + } + } + if _, err := wr.Write([]byte{'0' + b}); err != nil { + return fmt.Errorf("oct: %w", err) + } + } + if rpad && npad != 0 { // (pad=2) + b := []byte{' ', '(', 'p', 'a', 'd', '=', '0' + byte(npad), ')'} + if !sep8 { + b = b[1:] + } + if _, err := wr.Write(b); err != nil { + return fmt.Errorf("npad: %w", err) + } + } + if left { + if pad := wid - sLen; 0 < pad { + if _, err := wr.Write(bytes.Repeat([]byte{' '}, pad)); err != nil { + return fmt.Errorf("pad-r: %w", err) + } + } + } + + return nil +} + +func (ba *BitArray) writeHexStr(wr io.Writer, wid int, upper, sep8, sep4, rpad, left bool) error { + const ( + hexCharsL = "0123456789abcdef" + hexCharsU = "0123456789ABCDEF" + ) + sep8 = sep8 || sep4 + nnbl := (ba.nBits + 3) >> 2 // num of f + npad := ba.NumPadding() & 3 + sLen := nnbl + if 0 < ba.nBits && sep8 { + n4d := (nnbl + 3) >> 2 // num of ffff + n8d := (n4d + 1) >> 1 // num of ffffffff + if sep4 { + sLen += n4d - 1 + } else { + sLen += n8d - 1 + } + } + if rpad && npad != 0 { // (pad=3) + if sep8 { + sLen++ + } + sLen += 7 + } + if wid < sLen { + wid = sLen + } + if !left { + if pad := wid - sLen; 0 < pad { + if _, err := wr.Write(bytes.Repeat([]byte{' '}, pad)); err != nil { + return fmt.Errorf("pad-l: %w", err) + } + } + } + hexc := hexCharsL + if upper { + hexc = hexCharsU + } + for i := 0; i < nnbl; i++ { + if i != 0 && sep8 && i&3 == 0 { + if sep4 || i&7 == 0 { + if _, err := wr.Write([]byte{' '}); err != nil { + return fmt.Errorf("sep: %w", err) + } + } + } + boff := 4 ^ i&1<<2 + var b byte + if ba.b != nil { + b = ba.b[i>>1] + } + if _, err := wr.Write([]byte{hexc[b>>boff&0xf]}); err != nil { + return fmt.Errorf("nibble: %w", err) + } + } + if rpad && npad != 0 { // (pad=3) + b := []byte{' ', '(', 'p', 'a', 'd', '=', '0' + byte(npad), ')'} + if !sep8 { + b = b[1:] + } + if _, err := wr.Write(b); err != nil { + return fmt.Errorf("npad: %w", err) + } + } + if left { + if pad := wid - sLen; 0 < pad { + if _, err := wr.Write(bytes.Repeat([]byte{' '}, pad)); err != nil { + return fmt.Errorf("pad-r: %w", err) + } + } + } + + return nil +} diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_iterate.go b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_iterate.go new file mode 100644 index 0000000000..05a040af47 --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_iterate.go @@ -0,0 +1,55 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "errors" +) + +// BreakIteration is used as a return value from IterateFunc to indicate the +// current iteration is to be terminated without error. +//nolint:revive,stylecheck,errname // this is not an error +var BreakIteration = errors.New("break iteration") + +// IterateFunc is the type of the function called by Iterate to process each bit +// of a BitArray. The i argument contains the offset from the beginning. The b +// argument is the actual bit value, 0 or 1. +// +// If the function returns the special error BreakIteration, Iterate breaks the +// current iteration without error. Otherwise, if the function returns a non-nil +// error, Iterate stops the current iteration and returns that error. +type IterateFunc func(i, b int) error + +// Iterate iterates calling the function fn for each bit in order from the +// beginning of the bit array. Iterate returns an error only if the function fn +// returns an error that is not BreakIteration. Otherwise, it returns nil after +// calling fn for the last bit. +func (ba *BitArray) Iterate(fn IterateFunc) error { + switch { + case ba.IsZero(): + return nil + case ba.b == nil: + for i := 0; i < ba.nBits; i++ { + if err := fn(i, 0); err != nil { + if errors.Is(err, BreakIteration) { + return nil + } + return err + } + } + return nil + } + for i := 0; i < ba.nBits; i++ { + b := int(ba.b[i>>3] >> (7 - i&7) & 1) + if err := fn(i, b); err != nil { + if errors.Is(err, BreakIteration) { + return nil + } + return err + } + } + + return nil +} diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_parse.go b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_parse.go new file mode 100644 index 0000000000..c73d1681cd --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_parse.go @@ -0,0 +1,221 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "fmt" + "regexp" + "strings" + "unicode" +) + +var ( + parsePSepRE = regexp.MustCompile(`\s*[+]\s*`) + parseScanRE = regexp.MustCompile( + `^\s*(0([box]))?([-_:0-9a-fA-F]+)( ?[(](pad=|!)([0-3])[)])?\s*(.*)$`, + ) + parseBaseExpr = map[byte]byte{'b': 2, 'o': 8, 'x': 16} + parseDigits = map[rune]byte{ + '0': 0, '1': 1, '2': 2, '3': 3, '4': 4, + '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, + 'a': 0xa, 'b': 0xb, 'c': 0xc, 'd': 0xd, 'e': 0xe, 'f': 0xf, + 'A': 0xa, 'B': 0xb, 'C': 0xc, 'D': 0xd, 'E': 0xe, 'F': 0xf, + } +) + +// MustParse is like Parse but panics if the expression can not be parsed. It +// simplifies safe initialization of global variables holding bit arrays. +func MustParse(s string) *BitArray { + ba, err := Parse(s) + if err != nil { + panicf("MustParse(%q): %d", s, err) + } + return ba +} + +// Parse parses a string as a bit array representation, like "01010". +// +// Multiple tokens can be presented, which are separated by one or more spaces +// and/or a single "+" sign. All bits contained in tokens will be simply +// concatenated. Each token can be binary, octal, or hexademical, and the type +// is specified by the prefixes "0b", "0o" or "0x". Tokens without a prefix are +// always parsed as binary representation. Each token also can contain any +// number of separators "-", "_", and ":". These separators are safely ignored. +// +// Note that spaces between digits are parsed as token delimiters, not +// separators within tokens. This is not a problem for binary representations, +// but "0o" and "0x" prefixes have no effect beyond the spaces. For example, +// "0b0000 1111" is legal, but "0x0000 ffff" is illegal. Because the "ffff" is +// interpreted as a second token without a prefix, so "f" cannot be parsed as +// binary representation. Use other separators instead: e.g. "0x0000_ffff". +// +// bitarray = *WSP [ token *( token-sep token ) ] *WSP +// token-sep = *WSP ( WSP / "+" ) *WSP +// token = bin-token / oct-token / hex-token +// bin-token = [ "0b" [ char-sep ] ] bin-char *( [ char-sep ] bin-char ) +// oct-token = "0o" 1*( [ char-sep ] oct-char ) [ oct-pad ] +// hex-token = "0x" 1*( [ char-sep ] hex-char ) [ hex-pad ] +// char-sep = "-" / "_" / ":" +// bin-char = "0" / "1" +// oct-char = bin-char / "2" / "3" / "4" / "5" / "6" / "7" +// hex-char = oct-char / "8" / "9" +// / "a" / "b" / "c" / "d" / "e" / "f" +// / "A" / "B" / "C" / "D" / "E" / "F" +// oct-pad = [ " " ] "(" pad-ind ( "0" / "1" / "2" ) ")" +// hex-pad = [ " " ] "(" pad-ind ( "0" / "1" / "2" / "3" ) ")" +// pad-ind = "pad=" / "!" +func Parse(s string) (*BitArray, error) { + s = strings.Map(parseMapSpaces, s) + zf := true + bb := NewBuilder() + lines := parsePSepRE.Split(s, -1) + for _, line := range lines { + line = strings.TrimSpace(line) + if len(line) == 0 && 1 < len(lines) { + return nil, fmt.Errorf("%q: %w: empty token", s, ErrIllegalExpression) + } + for 0 < len(line) { + m := parseScanRE.FindStringSubmatch(line) + if len(m) != parseScanRE.NumSubexp()+1 { + return nil, fmt.Errorf("%q: %w: malformed input", line, ErrIllegalExpression) + } + tzf, err := parseToken(bb, m[2], m[3], m[6]) + if err != nil { + return nil, fmt.Errorf("%q: malformed token: %w", m[0], err) + } + zf = zf && tzf + line = m[7] + } + } + if zf { + return &BitArray{nBits: bb.nBits}, nil + } + + return bb.BitArray(), nil +} + +func parseMapSpaces(r rune) rune { + if unicode.IsSpace(r) { + return ' ' + } + return r +} + +func parseToken(bb *Builder, baseStr, bodyStr, npadStr string) (bool, error) { + base := byte(2) + if len(baseStr) != 0 { + b, ok := parseBaseExpr[baseStr[0]] + if !ok { + return false, fmt.Errorf(`%w: base %q`, ErrIllegalExpression, baseStr) + } + base = b + } + + // digits + var zfb byte + digits := make([]byte, 0, len(bodyStr)) + allowSep := baseStr != "" + var lastSep rune + for _, r := range bodyStr { + if dv, ok := parseDigits[r]; ok { + if base <= dv { + return false, fmt.Errorf(`%w: digit '%x' for base %d`, ErrIllegalExpression, dv, base) + } + zfb |= dv + digits = append(digits, dv) + allowSep = true + continue + } + if strings.ContainsRune("-_:", r) { + if !allowSep { + return false, fmt.Errorf(`%w: separator '%c'`, ErrIllegalExpression, r) + } + allowSep = false + lastSep = r + continue + } + return false, fmt.Errorf("%w: unexpected '%c'", ErrIllegalExpression, r) + } + if !allowSep { + return false, fmt.Errorf(`%w: token ends with a separator '%c'`, ErrIllegalExpression, lastSep) + } + + // padding + npad := 0 + if npadStr != "" { + npad = int(npadStr[0]) - int('0') + } + switch base { + case 2: + if npadStr != "" { + return false, fmt.Errorf("%w: pad=%s for bin token", ErrIllegalExpression, npadStr) + } + bb.WriteByteBits(digits) + case 8: + if 2 < npad { + return false, fmt.Errorf("%w: pad=%s for oct token", ErrIllegalExpression, npadStr) + } + for i, digit := range digits { + switch { + case i+1 < len(digits) || npad == 0: + bb.WriteByteBits([]byte{ + digit >> 2, + digit >> 1, + digit, + }) + case npad == 1: + bb.WriteByteBits([]byte{ + digit >> 2, + digit >> 1, + }) + case npad == 2: + bb.WriteByteBits([]byte{ + digit >> 2, + }) + } + } + case 16: + if 3 < npad { // this case should have been eliminated by regex + return false, fmt.Errorf( + "%w: pad=%s for hex token", + ErrIllegalExpression, npadStr, + ) + } + for i, digit := range digits { + switch { + case i+1 < len(digits) || npad == 0: + bb.WriteByteBits([]byte{ + digit >> 3, + digit >> 2, + digit >> 1, + digit, + }) + case npad == 1: + bb.WriteByteBits([]byte{ + digit >> 3, + digit >> 2, + digit >> 1, + }) + case npad == 2: + bb.WriteByteBits([]byte{ + digit >> 3, + digit >> 2, + }) + case npad == 3: + bb.WriteByteBits([]byte{ + digit >> 3, + }) + } + } + default: + // this should never happen + return false, fmt.Errorf( + "%w: base %d(%s)", + ErrIllegalExpression, base, baseStr, + ) + } + + return zfb == 0, nil +} diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_rand.go b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_rand.go new file mode 100644 index 0000000000..fa571e247f --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_rand.go @@ -0,0 +1,60 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + crand "crypto/rand" + "fmt" + "math/rand" +) + +// Rand generates a random bit array with nBits length. +// +// This is based on the crypto/rand package and cryptographically secure. +func Rand(nBits int) (*BitArray, error) { + if nBits == 0 { + return zeroBitArray, nil + } + + buf := allocByteSlice((nBits + 7) >> 3) + if _, err := crand.Read(buf); err != nil { + return &BitArray{nBits: nBits}, fmt.Errorf("failed to read random: %w", err) + } + if npad := (8 - nBits&7) & 7; npad != 0 { + buf[len(buf)-1] &= byte(0xff) << npad + } + + return &BitArray{b: buf, nBits: nBits}, nil +} + +// PseudoRand generates a random bit array with nBits length. If gen is non-nil, +// it will be used as the source instead of the default source. In this case, it +// is not safe for concurrent use by multiple goroutines. Only the default +// source is safe for concurrent use. +// +// This is based on math/rand package, and not cryptographically secure. Use +// Rand for security-sensitive data. +// +// Note that even generating less than 8 bits consumes 1 byte from the source. +// Therefore, the results are different between the case where 4 bits are +// generated twice and concatenated, and the case where 8 bits are generated at +// once, even in the same source state. +func PseudoRand(nBits int, gen *rand.Rand) *BitArray { + if nBits == 0 { + return zeroBitArray + } + + buf := allocByteSlice((nBits + 7) >> 3) + if gen == nil { + _, _ = rand.Read(buf) //nolint:gosec // intentionally provided option + } else { + _, _ = gen.Read(buf) + } + if npad := (8 - nBits&7) & 7; npad != 0 { + buf[len(buf)-1] &= byte(0xff) << npad + } + + return &BitArray{b: buf, nBits: nBits} +} diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_search.go b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_search.go new file mode 100644 index 0000000000..b1bfe498c7 --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_search.go @@ -0,0 +1,144 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "bytes" +) + +// HasPrefix reports whether the bit array starts with prefix. +func (ba *BitArray) HasPrefix(prefix BitArrayer) bool { + var baPrefix *BitArray + if prefix != nil { + baPrefix = prefix.BitArray() + } + switch { + case baPrefix.IsZero(): + return true + case ba.IsZero(), ba.nBits < baPrefix.nBits: + return false + case ba.b == nil: + return baPrefix.b == nil || allBytesZero(baPrefix.b) + } + if baPrefix.nBits < ba.nBits { + ba = ba.Slice(0, baPrefix.nBits) + } + switch { + case baPrefix.b == nil: + return ba.b == nil || allBytesZero(ba.b) + case ba.b == nil: + return allBytesZero(baPrefix.b) + } + + return bytes.Equal(ba.b, baPrefix.b) +} + +// HasSuffix reports whether the bit array ends with suffix. +func (ba *BitArray) HasSuffix(suffix BitArrayer) bool { + var baSuffix *BitArray + if suffix != nil { + baSuffix = suffix.BitArray() + } + switch { + case baSuffix.IsZero(): + return true + case ba.IsZero(), ba.nBits < baSuffix.nBits: + return false + case ba.b == nil: + return baSuffix.b == nil || allBytesZero(baSuffix.b) + } + if baSuffix.nBits < ba.nBits { + ba = ba.Slice(ba.nBits-baSuffix.nBits, ba.nBits) + } + switch { + case baSuffix.b == nil: + return ba.b == nil || allBytesZero(ba.b) + case ba.b == nil: + return allBytesZero(baSuffix.b) + } + + return bytes.Equal(ba.b, baSuffix.b) +} + +// Index returns the index of the first instance of x in the bit array ba, or -1 +// if x is not present in ba. +func (ba *BitArray) Index(x BitArrayer) int { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + switch { + case ba.Len() < bax.Len(): + return -1 + case bax.IsZero(): + return 0 + case ba.b == nil && bax.b == nil: + return 0 + } + ba8 := ba.bits8() + bax8 := bax.bits8() + + return bytes.Index(ba8, bax8) +} + +// LastIndex returns the index of the last instance of x in the bit array ba, or +// -1 if x is not present in ba. +func (ba *BitArray) LastIndex(x BitArrayer) int { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + switch { + case ba.Len() < bax.Len(): + return -1 + case bax.IsZero(): + return ba.Len() + case ba.b == nil && bax.b == nil: + return ba.nBits - bax.nBits + } + ba8 := ba.bits8() + bax8 := bax.bits8() + + return bytes.LastIndex(ba8, bax8) +} + +// AllIndex returns the indexes of the all instance of x in the bit array ba, or +// empty slice if x is not present in ba. +func (ba *BitArray) AllIndex(x BitArrayer) []int { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + switch { + case ba.Len() < bax.Len(): + return []int{} + case bax.IsZero(): + idxs := make([]int, ba.Len()+1) + for i := range idxs { + idxs[i] = i + } + return idxs + case ba.b == nil && bax.b == nil: + idxs := make([]int, ba.nBits-bax.nBits+1) + for i := range idxs { + idxs[i] = i + } + return idxs + } + ba8 := ba.bits8() + bax8 := bax.bits8() + var idxs []int + i := 0 + for i < ba.nBits-bax.nBits+1 { + idx := bytes.Index(ba8[i:], bax8) + if idx < 0 { + break + } + idx += i + idxs = append(idxs, idx) + i = idx + 1 + } + return idxs +} diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_sha1.go b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_sha1.go new file mode 100644 index 0000000000..71c8c25376 --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_sha1.go @@ -0,0 +1,48 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + //nolint:gosec // intentionally provided option + _ "crypto/sha1" // block() + "encoding/binary" + _ "unsafe" // linkname +) + +// SHA1 returns the SHA-1 checksum of the bit array. It treats the bit array as +// a bit-oriented message to compute the checksum as defined in RFC 3174. +func (ba *BitArray) SHA1() [20]byte { + nBits := ba.Len() + buf := NewBuffer((nBits + 1 + 64 + 511) &^ 511) + buf.PutBitArrayAt(0, ba) + buf.PutBitAt(nBits, 1) + binary.BigEndian.PutUint64(buf.b[len(buf.b)-8:], uint64(nBits)) + + d := &sha1Digest{} + sha1Reset(d) + sha1Block(d, buf.b) + + var sha1 [20]byte + for i := 0; i < 5; i++ { + binary.BigEndian.PutUint32(sha1[i<<2:], d.h[i]) + } + + return sha1 +} + +// crypto/sha1.digest +// TODO: if possible, use crypto/sha1.digest directly +type sha1Digest struct { + h [5]uint32 + x [64]byte //nolint:structcheck,unused // for Reset() + nx int //nolint:structcheck,unused // for Reset() + len uint64 //nolint:structcheck,unused // for Reset() +} + +//go:linkname sha1Block crypto/sha1.block +func sha1Block(*sha1Digest, []byte) + +//go:linkname sha1Reset crypto/sha1.(*digest).Reset +func sha1Reset(*sha1Digest) diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_sha256.go b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_sha256.go new file mode 100644 index 0000000000..4b5f0536f5 --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_sha256.go @@ -0,0 +1,64 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + _ "crypto/sha256" // block() + "encoding/binary" + _ "unsafe" // linkname +) + +// SHA256 returns the SHA-256 checksum of the bit array. It treats the bit array +// as a bit-oriented message to compute the checksum as defined in FIPS 180-4. +func (ba *BitArray) SHA256() (d256 [32]byte) { + return ba.sha256CheckSum(false) +} + +// SHA224 returns the SHA-224 checksum of the bit array. It treats the bit array +// as a bit-oriented message to compute the checksum as defined in FIPS 180-4. +func (ba *BitArray) SHA224() (d224 [28]byte) { + d256 := ba.sha256CheckSum(true) + copy(d224[:], d256[:]) + return +} + +func (ba *BitArray) sha256CheckSum(is224 bool) [32]byte { + nBits := ba.Len() + buf := NewBuffer((nBits + 1 + 64 + 511) &^ 511) + buf.PutBitArrayAt(0, ba) + buf.PutBitAt(nBits, 1) + binary.BigEndian.PutUint64(buf.b[len(buf.b)-8:], uint64(nBits)) + + d := &sha256Digest{is224: is224} + sha256Reset(d) + sha256Block(d, buf.b) + + n := 8 + if is224 { + n = 7 + } + var d256 [32]byte + for i := 0; i < n; i++ { + binary.BigEndian.PutUint32(d256[i<<2:], d.h[i]) + } + + return d256 +} + +// crypto/sha256.digest +// TODO: if possible, use crypto/sha256.digest directly +type sha256Digest struct { + h [8]uint32 + x [64]byte //nolint:structcheck,unused // for Reset() + nx int //nolint:structcheck,unused // for Reset() + len uint64 //nolint:structcheck,unused // for Reset() + is224 bool +} + +//go:linkname sha256Block crypto/sha256.block +func sha256Block(*sha256Digest, []byte) + +//go:linkname sha256Reset crypto/sha256.(*digest).Reset +func sha256Reset(*sha256Digest) diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_sha512.go b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_sha512.go new file mode 100644 index 0000000000..da6ee6be1f --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_sha512.go @@ -0,0 +1,86 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "crypto" + _ "crypto/sha512" // block() + "encoding/binary" + _ "unsafe" // linkname +) + +// SHA512 returns the SHA-512 checksum of the bit array. It treats the bit array +// as a bit-oriented message to compute the checksum as defined in FIPS 180-4. +func (ba *BitArray) SHA512() (d512 [64]byte) { + return ba.sha512CheckSum(crypto.SHA512) +} + +// SHA384 returns the SHA-384 checksum of the bit array. It treats the bit array +// as a bit-oriented message to compute the checksum as defined in FIPS 180-4. +func (ba *BitArray) SHA384() (d384 [48]byte) { + d512 := ba.sha512CheckSum(crypto.SHA384) + copy(d384[:], d512[:]) + return +} + +// SHA512_256 returns the SHA-512/256 checksum of the bit array. It treats the +// bit array as a bit-oriented message to compute the checksum as defined in +// FIPS 180-4. +//nolint:revive,stylecheck // not an ALL_CAPS +func (ba *BitArray) SHA512_256() (d256 [32]byte) { + d512 := ba.sha512CheckSum(crypto.SHA512_256) + copy(d256[:], d512[:]) + return +} + +// SHA512_224 returns the SHA-512/224 checksum of the bit array. It treats the +// bit array as a bit-oriented message to compute the digest as defined in FIPS +// 180-4. +//nolint:revive,stylecheck // not an ALL_CAPS +func (ba *BitArray) SHA512_224() (d224 [28]byte) { + d512 := ba.sha512CheckSum(crypto.SHA512_224) + copy(d224[:], d512[:]) + return +} + +func (ba *BitArray) sha512CheckSum(hash crypto.Hash) [64]byte { + nBits := ba.Len() + buf := NewBuffer((nBits + 1 + 128 + 1023) &^ 1023) + buf.PutBitArrayAt(0, ba) + buf.PutBitAt(nBits, 1) + // binary.BigEndian.PutUint64(buf.b[len(buf.b)-16:], uint64(hi)) // for nBits > max-uint64 + binary.BigEndian.PutUint64(buf.b[len(buf.b)-8:], uint64(nBits)) + + d := &sha512Digest{function: hash} + sha512Reset(d) + sha512Block(d, buf.b) + + n := 8 + if hash == crypto.SHA384 { + n = 6 + } + var d512 [64]byte + for i := 0; i < n; i++ { + binary.BigEndian.PutUint64(d512[i<<3:], d.h[i]) + } + + return d512 +} + +// crypto/sha512.digest +// TODO: if possible, use crypto/sha512.digest directly +type sha512Digest struct { + h [8]uint64 + x [128]byte //nolint:structcheck,unused // for Reset() + nx int //nolint:structcheck,unused // for Reset() + len uint64 //nolint:structcheck,unused // for Reset() + function crypto.Hash +} + +//go:linkname sha512Block crypto/sha512.block +func sha512Block(*sha512Digest, []byte) + +//go:linkname sha512Reset crypto/sha512.(*digest).Reset +func sha512Reset(*sha512Digest) diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_shift.go b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_shift.go new file mode 100644 index 0000000000..2c6a5058a8 --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_shift.go @@ -0,0 +1,117 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "math/bits" +) + +// Reverse returns the bit array with its bits in reversed order. +func (ba *BitArray) Reverse() *BitArray { + switch { + case ba.IsZero(): + return zeroBitArray + case ba.Len() == 1, ba.b == nil: + return ba + } + buf := make([]byte, len(ba.b)) + for i, o := range ba.b { + buf[len(ba.b)-1-i] = bits.Reverse8(o) + } + + return NewFromBytes(buf, ba.NumPadding(), ba.nBits) +} + +// ShiftLeft returns the bit array of shifted left by k bits. +// To shift to right, call ShiftLeft(-k). +func (ba *BitArray) ShiftLeft(k int) *BitArray { + switch { + case ba.IsZero(): + return zeroBitArray + case ba.b == nil: + return ba + case ba.nBits <= k, ba.nBits <= -k: + return &BitArray{nBits: ba.nBits} + case 0 < k: + return ba.shiftLeft(k) + case k < 0: + return ba.shiftRight(-k) + } + + return ba +} + +func (ba *BitArray) shiftLeft(k int) *BitArray { + if k&7 == 0 { + buf := allocByteSlice(len(ba.b)) + copy(buf, ba.b[k>>3:]) + return &BitArray{b: buf, nBits: ba.nBits} + } + + return ba.Slice(k, ba.nBits).append1(&BitArray{nBits: k}) +} + +func (ba *BitArray) shiftRight(k int) *BitArray { + if k&7 == 0 { + buf := allocByteSlice(len(ba.b)) + copy(buf[k>>3:], ba.b) + if npad := ba.NumPadding(); npad != 0 { + mask := byte(0xff) << npad + buf[len(buf)-1] &= mask + } + return &BitArray{b: buf, nBits: ba.nBits} + } + + return (&BitArray{nBits: k}).append1(ba.Slice(0, ba.nBits-k)) +} + +// RotateLeft returns the bit array of rotated left by k bits. +// To rotate to right, call RotateLeft(-k). +func (ba *BitArray) RotateLeft(k int) *BitArray { + switch { + case ba.IsZero(): + return zeroBitArray + case ba.b == nil: + return ba + case 0 < k: + return ba.rotateLeft(k) + case k < 0: + return ba.rotateRight(-k) + } + + return ba +} + +func (ba *BitArray) rotateLeft(k int) *BitArray { + k %= ba.nBits + switch { + case k == 0: + return ba + case k&7 == 0 && ba.nBits&7 == 0: + buf := allocByteSlice(len(ba.b)) + nbs := k >> 3 + copy(buf, ba.b[nbs:]) + copy(buf[len(buf)-nbs:], ba.b) + return &BitArray{b: buf, nBits: ba.nBits} + } + + return ba.Slice(k, ba.nBits).append1(ba.Slice(0, k)) +} + +func (ba *BitArray) rotateRight(k int) *BitArray { + k %= ba.nBits + switch { + case k == 0: + return ba + case k&7 == 0 && ba.nBits&7 == 0: + buf := allocByteSlice(len(ba.b)) + nbs := k >> 3 + copy(buf[nbs:], ba.b) + copy(buf, ba.b[len(ba.b)-nbs:]) + return &BitArray{b: buf, nBits: ba.nBits} + } + + return ba.Slice(ba.nBits-k, ba.nBits).append1(ba.Slice(0, ba.nBits-k)) +} diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_slice.go b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_slice.go new file mode 100644 index 0000000000..7a77b151a1 --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_slice.go @@ -0,0 +1,122 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +// Slice returns a new BitArray extracted as a subpart from the bit array in +// the same manner as Go's native slices. The two arguments start and end +// specify the indexes of the bits to select. 0 points to the first bit and +// ba.Len()-1 points to the last bit. The start and end select a half-open +// range which includes the start, but excludes the end. If the index is +// outside the range of the bit array, Slice will panic. +func (ba *BitArray) Slice(start, end int) *BitArray { + switch { + case start < 0, ba.Len() < start: + panicf("Slice: start %d out of range: 0..%d.", start, ba.Len()) + case end < 0, ba.Len() < end: + panicf("Slice: end %d out of range: 0..%d.", end, ba.Len()) + case end < start: + panicf("Slice: invalid range start=%d > end=%d.", start, end) + } + nBits := end - start + switch { + case nBits == 0: + return zeroBitArray + case start == 0 && end == ba.nBits: + return ba + case ba.b == nil: + return &BitArray{nBits: nBits} + case start == 0 && ba.hasTrailingZeros(ba.nBits-end): + return &BitArray{b: ba.b[:(end+7)>>3], nBits: nBits} + } + buf := allocByteSlice((nBits + 7) >> 3) + if copyBits(buf, ba.b, 0, start, nBits) { + return &BitArray{nBits: nBits} + } + + return &BitArray{b: buf, nBits: nBits} +} + +// SliceToEnd is shorthand for Slice(start, ba.Len()) and returns the subpart +// from the position specified start to the last bit. +func (ba *BitArray) SliceToEnd(start int) *BitArray { return ba.Slice(start, ba.Len()) } + +// ToWidth returns a new BitArray resized to wid bits with its contents +// preserved. If wid is less than ba.Len(), some bits will be lost. If wid is +// greater than be.Len(), the expanded space will be filled with 0s. In both +// cases, the MSBs or LSBs are fixed according to the specified align. +func (ba *BitArray) ToWidth(wid int, align Alignment) *BitArray { + switch { + case wid < 0: + panicf("ToWidth: negative wid %d.", wid) + case wid == 0: + return zeroBitArray + case ba.IsZero(), ba.b == nil: + return &BitArray{nBits: wid} + case wid == ba.nBits: + return ba + case wid < ba.nBits: + if align == AlignLeft { + return ba.Slice(0, wid) + } + return ba.Slice(ba.nBits-wid, ba.nBits) + } + add := &BitArray{nBits: wid - ba.nBits} + if align == AlignLeft { + return ba.append1(add) + } + return add.append1(ba) +} + +// TrimPrefix returns a new BitArray with the leading prefix removed. If the bit +// array does not start with prefix, ba itself is returned unchanged. +func (ba *BitArray) TrimPrefix(prefix BitArrayer) *BitArray { + var baPrefix *BitArray + if prefix != nil { + baPrefix = prefix.BitArray() + } + switch { + case ba.IsZero(): + return zeroBitArray + case !ba.HasPrefix(baPrefix), baPrefix.IsZero(): + return ba + } + + return ba.Slice(baPrefix.nBits, ba.nBits) +} + +// TrimSuffix returns a new BitArray with the trailing suffix removed. If the +// bit array does not end with prefix, ba itself is returned unchanged. +func (ba *BitArray) TrimSuffix(suffix BitArrayer) *BitArray { + var baSuffix *BitArray + if suffix != nil { + baSuffix = suffix.BitArray() + } + switch { + case ba.IsZero(): + return zeroBitArray + case !ba.HasSuffix(baSuffix), baSuffix.IsZero(): + return ba + } + + return ba.Slice(0, ba.nBits-baSuffix.nBits) +} + +// TrimLeadingZeros returns a new BitArray with the leading zeros removed. +func (ba *BitArray) TrimLeadingZeros() *BitArray { + if ba.IsZero() || ba.b == nil { + return zeroBitArray + } + + return ba.Slice(ba.LeadingZeros(), ba.nBits) +} + +// TrimTrailingZeros returns a new BitArray with the trailing zeros removed. +func (ba *BitArray) TrimTrailingZeros() *BitArray { + if ba.IsZero() || ba.b == nil { + return zeroBitArray + } + + return ba.Slice(0, ba.nBits-ba.TrailingZeros()) +} diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_sort.go b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_sort.go new file mode 100644 index 0000000000..bfd6019bfd --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarray_sort.go @@ -0,0 +1,27 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "sort" +) + +// Slice attaches the methods of sort.Interface to []*BitArray, sorting in +// increasing order. +type Slice []*BitArray + +func (s Slice) Len() int { return len(s) } +func (s Slice) Less(i, j int) bool { return Compare(s[i], s[j]) < 0 } +func (s Slice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +// Sort is a convenience method: s.Sort() calls sort.Sort(s). +func (s Slice) Sort() { sort.Sort(s) } + +// Search searches for x in the sorted slice s using binary search and returns +// the index. The return value is the index to insert x if x is not present (it +// could be s.Len()). The slice must be sorted in ascending order. +func (s Slice) Search(x BitArrayer) int { + return sort.Search(len(s), func(i int) bool { return 0 <= Compare(s[i], x) }) +} diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/bitarrayer.go b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarrayer.go new file mode 100644 index 0000000000..9bdb843624 --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/bitarrayer.go @@ -0,0 +1,17 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +// BitArrayer is an interface implemented by any type that can be treated as a +// BitArray. Within this package, BitArray itself, Builder and Buffer implement +// this interface. +// +// BitArray returns the value of itself converted to a BitArray. Note that for +// non-immutable types, multiple calls may return different values. It is legal +// to return nil to represent an empty BitArray, and it should be treated the +// same as a zero-length BitArray. +type BitArrayer interface { + BitArray() *BitArray +} diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/buffer.go b/galoisd/vendor/github.com/tunabay/go-bitarray/buffer.go new file mode 100644 index 0000000000..4b616405b1 --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/buffer.go @@ -0,0 +1,184 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "fmt" +) + +// Buffer is a bit array buffer whose contents can be updated by partial reading +// and writing with an offset. It is not safe for concurrent use by multiple +// goroutines. The zero value for Buffer represents a zero length buffer that +// can be resized and used. +type Buffer struct { + b []byte // nil only for zero length + nBits int + off int +} + +// NewBuffer creates a Buffer with the specified bit length. +func NewBuffer(nBits int) *Buffer { + switch { + case nBits < 0: + panicf("NewBuffer: negative nBits %d.", nBits) + case nBits == 0: + return &Buffer{} + } + + return &Buffer{ + b: allocByteSlice((nBits + 7) >> 3), + nBits: nBits, + } +} + +// NewBufferFromBitArray creates a new Buffer with the same bit length and +// initial content as the specified BitArray. +func NewBufferFromBitArray(ba BitArrayer) *Buffer { + if ba == nil { + return &Buffer{} + } + bab := ba.BitArray() + buf := NewBuffer(bab.Len()) + if 0 < buf.nBits { + copy(buf.b, bab.b) + } + return buf +} + +// NewBufferFromByteSlice creates a new Buffer that references an existing byte +// slice b. The created Buffer references b without copying it, therefore, +// changes to the buffer affect b and vice versa. The length of the buffer +// created will be len(b) * 8. NewBufferFromByteSlice is useful when reading or +// writing a subpart of a byte slice as a bit array without copying or +// bit-shifting. +func NewBufferFromByteSlice(b []byte) *Buffer { + return NewBufferFromByteSlicePartial(b, 0, len(b)<<3) +} + +// NewBufferFromByteSlicePartial is identical to NewBufferFromByteSlice except +// that it creates a buffer with the first bit specified by off, and the length +// specified by nBits. +func NewBufferFromByteSlicePartial(b []byte, off, nBits int) *Buffer { + switch { + case off < 0: + panicf("NewBufferFromByteSlice: negative off %d.", nBits) + case nBits < 0: + panicf("NewBufferFromByteSlice: negative nBits %d.", nBits) + case len(b)<<3 < off+nBits: + panicf("NewBufferFromByteSlice: out of range: off=%d, nBits=%d > len=%d.", off, nBits, len(b)) + case nBits == 0: + return &Buffer{} + } + return &Buffer{b: b[off>>3:], nBits: nBits, off: off & 7} +} + +// IsZero returns whether the Buffer is zero length. +func (buf *Buffer) IsZero() bool { + return buf.Len() == 0 +} + +// Len returns the number of bits contained in the buffer. +func (buf *Buffer) Len() int { + if buf == nil { + return 0 + } + return buf.nBits +} + +// Clone clones the Buffer with its content. +func (buf *Buffer) Clone() *Buffer { + if buf.Len() == 0 { + return &Buffer{} + } + b := make([]byte, len(buf.b)) + copy(b, buf.b) + + return &Buffer{b: b, nBits: buf.nBits, off: buf.off} +} + +// BitArray creates an imuurable BitArray from the current content. +func (buf *Buffer) BitArray() *BitArray { + return NewFromBytes(buf.b, buf.off, buf.nBits) +} + +// String returns the string representation of the current content. +func (buf Buffer) String() string { + sb := make([]byte, buf.nBits) + for i := 0; i < buf.nBits; i++ { + sb[i] = '0' + buf.b[(buf.off+i)>>3]>>(7-(buf.off+i)&7)&1 + } + return string(sb) +} + +// Resize resizes the Buffer to the size specified by nBits. When expanding, all +// bits in the new range to be extended are initialized with 0. When shrinking, +// the extra bits are truncated. In either case, the align specifies whether to +// fix the MSBs or the LSBs. +// +// Resize always reallocates internal memory. That is, the buffers created by +// Slice method or NewBufferFromByteSlice break their relationship with the +// parent buffer or slice by calling this Resize, even if nBits is equivalent to +// or less than its current size. +func (buf *Buffer) Resize(nBits int, align Alignment) { + switch { + case nBits < 0: + panicf("Resize: negative nBits %d.", nBits) + case nBits == 0: + buf.b = nil + buf.nBits = 0 + buf.off = 0 + return + } + + b := allocByteSlice((nBits + 7) >> 3) + if buf.nBits == 0 { + buf.b = b + buf.nBits = nBits + buf.off = 0 + return + } + if align == AlignLeft { + if nBits < buf.nBits { // shrink + copyBits(b, buf.b, 0, buf.off, nBits) + } else { // extend + copyBits(b, buf.b, 0, buf.off, buf.nBits) + } + } else { + if nBits < buf.nBits { // shrink + copyBits(b, buf.b, 0, buf.off+buf.nBits-nBits, nBits) + } else { // extend + copyBits(b, buf.b, nBits-buf.nBits, buf.off, buf.nBits) + } + } + + buf.b = b + buf.nBits = nBits + buf.off = 0 +} + +// FillBits sets all the bits in the buffer to the value bit, 0 or 1. +func (buf *Buffer) FillBits(bit byte) { + buf.FillBitsAt(0, buf.nBits, bit) +} + +// FillBitsAt sets the nBits bits starting at off to the value bit. +func (buf *Buffer) FillBitsAt(off, nBits int, bit byte) { + switch { + case off < 0: + panicf("FillBitsAt: negative off %d.", off) + case nBits < 0: + panicf("FillBitsAt: negative nBits %d.", nBits) + case buf.nBits < off+nBits: + panicf("FillBitsAt: out of range: off=%d + nBits=%d > len=%d.", off, nBits, buf.nBits) + case bit&1 == 0: + clearBits(buf.b, buf.off+off, nBits) + default: + setBits(buf.b, buf.off+off, nBits) + } +} + +// Format implements the fmt.Formatter interface to format Buffer value using +// the standard fmt.Printf family functions. +func (buf Buffer) Format(s fmt.State, verb rune) { buf.BitArray().Format(s, verb) } diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/buffer_bitwise.go b/galoisd/vendor/github.com/tunabay/go-bitarray/buffer_bitwise.go new file mode 100644 index 0000000000..661455c551 --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/buffer_bitwise.go @@ -0,0 +1,104 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +// ToggleBitAt flips a single bit at the position specified by off in the +// buffer. +func (buf *Buffer) ToggleBitAt(off int) { + switch { + case off < 0: + panicf("ToggleBitAt: negative off %d.", off) + case buf.nBits <= off: + panicf("ToggleBitAt: out of range: off=%d >= len=%d.", off, buf.nBits) + } + off += buf.off + buf.b[off>>3] ^= byte(0x80) >> (off & 7) +} + +// ToggleBitsAt inverts the nBits bits starting at off. +func (buf *Buffer) ToggleBitsAt(off, nBits int) { + switch { + case off < 0: + panicf("ToggleBitsAt: negative off %d.", off) + case nBits < 0: + panicf("ToggleBitsAt: negative nBits %d.", nBits) + case buf.nBits < off+nBits: + panicf("ToggleBitsAt: out of range: off=%d + nBits=%d > len=%d.", off, nBits, buf.nBits) + case nBits == 0: + // no-op + default: + toggleBits(buf.b, buf.off+off, nBits) + } +} + +// AndAt applies a bitwise AND operation with x at the offset off. AND is +// applied only to the range from off to off+x.Len(), and other bits are +// preserved. +func (buf *Buffer) AndAt(off int, x BitArrayer) { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + switch { + case off < 0: + panicf("AndAt: negative off %d.", off) + case buf.nBits < off+bax.Len(): + panicf("AndAt: out of range: off=%d + x.len=%d > len=%d.", off, bax.Len(), buf.nBits) + case bax.IsZero(): + // no-op + case bax.b == nil: + clearBits(buf.b, buf.off+off, bax.nBits) + default: + andBits(buf.b, bax.b, buf.off+off, 0, bax.nBits) + } +} + +// OrAt applies a bitwise OR operation with x at the offset off. OR is applied +// only to the range from off to off+x.Len(), and other bits are preserved. +func (buf *Buffer) OrAt(off int, x BitArrayer) { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + switch { + case off < 0: + panicf("OrAt: negative off %d.", off) + case buf.nBits < off+bax.Len(): + panicf("OrAt: out of range: off=%d + x.len=%d > len=%d.", off, bax.Len(), buf.nBits) + case bax.IsZero(), bax.b == nil: + // no-op + default: + orBits(buf.b, bax.b, buf.off+off, 0, bax.nBits) + } +} + +// XorAt applies a bitwise XOR operation with x at the offset off. XOR is +// applied only to the range from off to off+x.Len(), and other bits are +// preserved. +func (buf *Buffer) XorAt(off int, x BitArrayer) { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + switch { + case off < 0: + panicf("XorAt: negative off %d.", off) + case buf.nBits < off+bax.Len(): + panicf("XorAt: out of range: off=%d + x.len=%d > len=%d.", off, bax.Len(), buf.nBits) + case bax.IsZero(), bax.b == nil: + // no-op + default: + xorBits(buf.b, bax.b, buf.off+off, 0, bax.nBits) + } +} + +// LeadingZeros returns the number of leading zero bits in the Buffer. +func (buf *Buffer) LeadingZeros() int { return buf.BitArray().LeadingZeros() } + +// TrailingZeros returns the number of trailing zero bits in the Buffer. +func (buf *Buffer) TrailingZeros() int { return buf.BitArray().TrailingZeros() } + +// OnesCount returns the number of one bits, population count, in the Buffer. +func (buf *Buffer) OnesCount() int { return buf.BitArray().OnesCount() } diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/buffer_copy.go b/galoisd/vendor/github.com/tunabay/go-bitarray/buffer_copy.go new file mode 100644 index 0000000000..7728f673d6 --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/buffer_copy.go @@ -0,0 +1,78 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +// CopyBitsFromBytes reads nBits bits from b at the offset bOff, and write them +// into the buffer at the offset off. +func (buf *Buffer) CopyBitsFromBytes(off int, b []byte, bOff, nBits int) { + switch { + case off < 0: + panicf("CopyBitsFromBytes: negative off %d.", off) + case buf.nBits < off+nBits: + panicf("CopyBitsFromBytes: out of range: off=%d + nBits=%d > len=%d.", off, nBits, buf.nBits) + case nBits == 0: + return + } + copyBits(buf.b, b, buf.off+off, bOff, nBits) +} + +// CopyBitsToBytes reads nBits bits of the buffer starting at the offset off, +// and write them into the byte slice b at the offset bOff. +func (buf *Buffer) CopyBitsToBytes(off int, b []byte, bOff, nBits int) { + switch { + case off < 0: + panicf("CopyBitsToBytes: negative off %d.", off) + case buf.nBits < off+nBits: + panicf("CopyBitsToBytes: out of range: off=%d + nBits=%d > len=%d.", off, nBits, buf.nBits) + case nBits == 0: + return + } + copyBits(b, buf.b, bOff, buf.off+off, nBits) +} + +// CopyBits copies bits from src into dst. CopyBits returns the number of bits +// copied, which will be the minimum of src.Len() and dst.Len(). +func CopyBits(dst, src *Buffer) int { + nBits := dst.Len() + if sLen := src.Len(); sLen < nBits { + nBits = sLen + } + if nBits != 0 { + copyBits(dst.b, src.b, dst.off, src.off, nBits) + } + + return nBits +} + +// CopyBitsN is identical to CopyBits except that it copies up to nBits bits. +func CopyBitsN(dst, src *Buffer, nBits int) int { + if dLen := dst.Len(); dLen < nBits { + nBits = dLen + } + if sLen := src.Len(); sLen < nBits { + nBits = sLen + } + if nBits != 0 { + copyBits(dst.b, src.b, dst.off, src.off, nBits) + } + + return nBits +} + +// CopyBitsPartial is identical to CopyBitsN except that it reads and writes +// bits starting at specified offsets rather than the first bits. +func CopyBitsPartial(dst, src *Buffer, dstOff, srcOff, nBits int) int { + if dLen := dst.Len() - dstOff; dLen < nBits { + nBits = dLen + } + if sLen := src.Len() - srcOff; sLen < nBits { + nBits = sLen + } + if nBits != 0 { + copyBits(dst.b, src.b, dst.off+dstOff, src.off+srcOff, nBits) + } + + return nBits +} diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/buffer_integer.go b/galoisd/vendor/github.com/tunabay/go-bitarray/buffer_integer.go new file mode 100644 index 0000000000..e97a163209 --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/buffer_integer.go @@ -0,0 +1,148 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "encoding/binary" +) + +// Uint8 returns up to 8 bits from the beginning of the buffer as a uint8 value. +// If buf.Len() is greater than 8, only the first 8 bits are used. If buf.Len() +// is less than 8, it is treated as an integer with that number of bits. For +// example, if buf.Len() == 5, it returns a 5-bit integer, 0 to 31(=0b11111), as +// a uint8 value. +func (buf *Buffer) Uint8() uint8 { + if buf.nBits == 0 { + return 0 + } + n, off := 8, 0 + if buf.nBits < 8 { + n, off = buf.nBits, 8-buf.nBits + } + b := make([]byte, 1) + copyBits(b, buf.b, off, buf.off, n) + + return b[0] +} + +// PutUint8 sets a uint8 value v within up to 8 bits from the beginning of the +// buffer. If buf.Len() is greater than 8, only the first 8 bits are updated. If +// buf.Len() is less than 8, only the LSBs of v are written. +func (buf *Buffer) PutUint8(v uint8) { + if buf.nBits == 0 { + return + } + n, off := 8, 0 + if buf.nBits < 8 { + n, off = buf.nBits, 8-buf.nBits + } + b := []byte{v} + copyBits(buf.b, b, buf.off, off, n) +} + +// Uint16 returns up to 16 bits from the beginning of the buffer as a uint16 +// value. If buf.Len() is greater than 16, only the first 16 bits are used. If +// buf.Len() is less than 16, it is treated as an integer with that number of +// bits. For example, if buf.Len() == 5, it returns a 5-bit integer, 0 to +// 31(=0b11111), as a uint16 value. +func (buf *Buffer) Uint16() uint16 { + if buf.nBits == 0 { + return 0 + } + n, off := 16, 0 + if buf.nBits < 16 { + n, off = buf.nBits, 16-buf.nBits + } + b := make([]byte, 2) + copyBits(b, buf.b, off, buf.off, n) + + return binary.BigEndian.Uint16(b) +} + +// PutUint16 sets a uint16 value v within up to 16 bits from the beginning of +// the buffer. If buf.Len() is greater than 16, only the first 16 bits are +// updated. If buf.Len() is less than 16, only the LSBs of v are written. +func (buf *Buffer) PutUint16(v uint16) { + if buf.nBits == 0 { + return + } + n, off := 16, 0 + if buf.nBits < 16 { + n, off = buf.nBits, 16-buf.nBits + } + b := make([]byte, 2) + binary.BigEndian.PutUint16(b, v) + copyBits(buf.b, b, buf.off, off, n) +} + +// Uint32 returns up to 32 bits from the beginning of the buffer as a uint32 +// value. If buf.Len() is greater than 32, only the first 32 bits are used. If +// buf.Len() is less than 32, it is treated as an integer with that number of +// bits. For example, if buf.Len() == 5, it returns a 5-bit integer, 0 to +// 31(=0b11111), as a uint32 value. +func (buf *Buffer) Uint32() uint32 { + if buf.nBits == 0 { + return 0 + } + n, off := 32, 0 + if buf.nBits < 32 { + n, off = buf.nBits, 32-buf.nBits + } + b := make([]byte, 4) + copyBits(b, buf.b, off, buf.off, n) + + return binary.BigEndian.Uint32(b) +} + +// PutUint32 sets a uint32 value v within up to 32 bits from the beginning of +// the buffer. If buf.Len() is greater than 32, only the first 32 bits are +// updated. If buf.Len() is less than 32, only the LSBs of v are written. +func (buf *Buffer) PutUint32(v uint32) { + if buf.nBits == 0 { + return + } + n, off := 32, 0 + if buf.nBits < 32 { + n, off = buf.nBits, 32-buf.nBits + } + b := make([]byte, 4) + binary.BigEndian.PutUint32(b, v) + copyBits(buf.b, b, buf.off, off, n) +} + +// Uint64 returns up to 64 bits from the beginning of the buffer as a uint64 +// value. If buf.Len() is greater than 64, only the first 64 bits are used. If +// buf.Len() is less than 64, it is treated as an integer with that number of +// bits. For example, if buf.Len() == 5, it returns a 5-bit integer, 0 to +// 31(=0b11111), as a uint64 value. +func (buf *Buffer) Uint64() uint64 { + if buf.nBits == 0 { + return 0 + } + n, off := 64, 0 + if buf.nBits < 64 { + n, off = buf.nBits, 64-buf.nBits + } + b := make([]byte, 8) + copyBits(b, buf.b, off, buf.off, n) + + return binary.BigEndian.Uint64(b) +} + +// PutUint64 sets a uint64 value v within up to 64 bits from the beginning of +// the buffer. If buf.Len() is greater than 64, only the first 64 bits are +// updated. If buf.Len() is less than 64, only the LSBs of v are written. +func (buf *Buffer) PutUint64(v uint64) { + if buf.nBits == 0 { + return + } + n, off := 64, 0 + if buf.nBits < 64 { + n, off = buf.nBits, 64-buf.nBits + } + b := make([]byte, 8) + binary.BigEndian.PutUint64(b, v) + copyBits(buf.b, b, buf.off, off, n) +} diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/buffer_rw.go b/galoisd/vendor/github.com/tunabay/go-bitarray/buffer_rw.go new file mode 100644 index 0000000000..98f3c2dca8 --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/buffer_rw.go @@ -0,0 +1,160 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +// BitAt returns a single bit at the specified offset as 0 or 1. It panics if +// the off is out of range. +func (buf *Buffer) BitAt(off int) byte { + switch { + case off < 0: + panicf("BitAt: negative off %d.", off) + case buf.nBits <= off: + panicf("BitAt: out of range: off=%d >= len=%d.", off, buf.nBits) + } + + off += buf.off + return buf.b[off>>3] >> (7 - off&7) & 1 +} + +// PutBitAt writes a single bit at the position specified by off in the buffer. +// The bit should be 0 or 1, otherwise its LSB is silently used. +func (buf *Buffer) PutBitAt(off int, bit byte) { + switch { + case off < 0: + panicf("PutBitAt: negative off %d.", off) + case buf.nBits <= off: + panicf("PutBitAt: out of range: off=%d >= len=%d.", off, buf.nBits) + } + + off += buf.off + buf.b[off>>3] = buf.b[off>>3] & ^(byte(0x80)>>(off&7)) | ((bit & 1) << (7 - off&7)) +} + +// BitArrayAt returns bits within the specified range as a BitArray. +func (buf *Buffer) BitArrayAt(off, nBits int) *BitArray { + switch { + case off < 0: + panicf("BitArrayAt: negative off %d.", off) + case nBits < 0: + panicf("BitArrayAt: negative nBits %d.", nBits) + case buf.nBits < off+nBits: + panicf("BitArrayAt: out of range: off=%d + nBits=%d > len=%d.", off, nBits, buf.nBits) + case nBits == 0: + return zeroBitArray + } + + return NewFromBytes(buf.b, buf.off+off, nBits) +} + +// PutBitArrayAt writes bits from a BitArray onto the specified offset off. +func (buf *Buffer) PutBitArrayAt(off int, ba BitArrayer) { + switch { + case off < 0: + panicf("PutBitArrayAt: negative off %d.", off) + case ba == nil: + return + } + bab := ba.BitArray() + switch { + case buf.nBits < off+bab.nBits: + panicf("PutBitArrayAt: out of range: off=%d + ba.len=%d > len=%d.", off, bab.nBits, buf.nBits) + case bab.IsZero(): + return + case bab.b == nil: + clearBits(buf.b, buf.off+off, bab.nBits) + return + } + _ = copyBits(buf.b, bab.b, buf.off+off, 0, bab.nBits) +} + +// ByteAt reads 8 bits starting at the offset off and returns them as a single +// byte. Note that off is in bits, not bytes. If the off is not a multiple of 8, +// 8 bits across a byte boundary are returned. +func (buf *Buffer) ByteAt(off int) byte { + switch { + case off < 0: + panicf("ByteAt: negative off %d.", off) + case buf.nBits < off+8: + panicf("ByteAt: out of range: off=%d + 8 > len=%d.", off, buf.nBits) + } + off += buf.off + i, f := off>>3, off&7 + if f == 0 { + return buf.b[i] + } + return buf.b[i]<>(8-f) +} + +// PutByteAt writes 8 bits of b to the position specified by off in the buffer. +// Note that off is in bits, not bytes. If the off is not a multiple of 8, it +// writes 8 bits across a byte boundary. +func (buf *Buffer) PutByteAt(off int, b byte) { + switch { + case off < 0: + panicf("PutByteAt: negative off %d.", off) + case buf.nBits < off+8: + panicf("PutByteAt: out of range: off=%d + 8 > len=%d.", off, buf.nBits) + } + copyBits(buf.b, []byte{b}, buf.off+off, 0, 8) +} + +// RawBytes returns all the bits of the buffer as a byte slice. The caller must +// not change the contents of the returned byte slice. The slice returned may or +// may not reference to the internal buffer itself of buf, depending on whether +// bit-shifting is needed of not. Also, if buf.Len() is not a multiple of 8, the +// bits after the last bit in the slice returned are undefined. The main purpose +// of RawBytes is to efficiently pass bit data to other byte-oriented APIs. In +// general, it is recommended to use the safer Bytes() instead. +func (buf *Buffer) RawBytes() []byte { + if buf.off&7 == 0 { + return buf.b[buf.off>>3 : (buf.off+buf.nBits+7)>>3] + } + return buf.Bytes() +} + +// Bytes returns all the bits of the buffer as a byte slice. If buf.Len() is not +// a multiple of 8, it will be padded with 0. +func (buf *Buffer) Bytes() []byte { + b := make([]byte, (buf.nBits+7)>>3) + copyBits(b, buf.b, 0, buf.off, buf.nBits) + return b +} + +// BytesAt reads 8 * nBytes bits starting at the offset off and returns them as +// a byte slice. Note that off is in bits, not bytes. If the off is not a +// multiple of 8, it returns a properly shifted byte slice. +func (buf *Buffer) BytesAt(off, nBytes int) []byte { + nBits := nBytes << 3 + switch { + case off < 0: + panicf("ByteAt: negative off %d.", off) + case nBytes < 0: + panicf("ByteAt: negative nBytes %d.", nBytes) + case buf.nBits < off+nBits: + panicf("BytesAt: out of range: off=%d + 8 * nBytes=%d > len=%d.", off, nBytes, buf.nBits) + case nBytes == 0: + return []byte{} + } + ret := make([]byte, nBytes) + copyBits(ret, buf.b, 0, buf.off+off, nBits) + + return ret +} + +// PutBytesAt writes 8 * len(b) bits of b to the position specified by off in +// the buffer. Note that off is in bits, not bytes. If the off is not a multiple +// of 8, it writes bytes across byte boundaries of the buffer. +func (buf *Buffer) PutBytesAt(off int, b []byte) { + nBits := len(b) << 3 + switch { + case off < 0: + panicf("PutByteAt: negative off %d.", off) + case buf.nBits < off+nBits: + panicf("PutByteAt: out of range: off=%d + 8 * b.len=%d > len=%d.", off, len(b), buf.nBits) + case len(b) == 0: + return + } + copyBits(buf.b, b, buf.off+off, 0, nBits) +} diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/buffer_slice.go b/galoisd/vendor/github.com/tunabay/go-bitarray/buffer_slice.go new file mode 100644 index 0000000000..fb73f92a86 --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/buffer_slice.go @@ -0,0 +1,39 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +// Slice extracts a subpart from the buffer and returns it as a new Buffer in +// the same manner as Go's native slices. Note that like Go's native slices, the +// sliced buffers share memory with the original buffer. Changes to the original +// buffer affect slices and vice versa. Slice does not perform bit-shifting, +// even when creating slices that are not aligned to byte boundaries. It just +// records the offset and length for reference. +// +// The two arguments start and end specify the indexes of the bits to select. 0 +// points to the first bit and buf.Len()-1 points to the last bit. The start and +// end select a half-open range which includes the start, but excludes the end. +// If the index is outside the range of the buffer, Slice will panic. +func (buf *Buffer) Slice(start, end int) *Buffer { + switch { + case start < 0, buf.Len() < start: + panicf("Slice: start %d out of range: 0..%d.", start, buf.Len()) + case end < 0, buf.Len() < end: + panicf("Slice: end %d out of range: 0..%d.", end, buf.Len()) + case end < start: + panicf("Slice: invalid range start=%d > end=%d.", start, end) + case start == end: + return &Buffer{} + } + off := buf.off + start + return &Buffer{ + b: buf.b[off>>3 : (buf.off+end+7)>>3], + nBits: end - start, + off: off & 7, + } +} + +// SliceToEnd is shorthand for Slice(start, buf.Len()) and returns the subpart +// from the position specified start to the last bit. +func (buf *Buffer) SliceToEnd(start int) *Buffer { return buf.Slice(start, buf.Len()) } diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/builder.go b/galoisd/vendor/github.com/tunabay/go-bitarray/builder.go new file mode 100644 index 0000000000..ee0137b6af --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/builder.go @@ -0,0 +1,229 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "bytes" + "fmt" + "io" +) + +// Builder is used to efficiently build a BitArray using Write methods. It +// minimizes memory copying and bit shifting. +// +// The zero value for Builder is already to use. Do not copy a non-zero Builder. +// It is not safe for concurrent use by multiple goroutines. +type Builder struct { + head, tail *builderChunk + nBits int +} + +// NewBuilder creates a Builder with bit arrays as the initial contents. +func NewBuilder(bas ...BitArrayer) *Builder { + b := &Builder{} + for _, bai := range bas { + if bai == nil { + continue + } + ba := bai.BitArray() + if !ba.IsZero() { + b.append(ba.b, 0, ba.nBits, ba.b == nil) + } + } + + return b +} + +type builderChunk struct { + b []byte // can be nil when zf == true + nBits int // 0 < nBits + off int // off must be canonicalized to 0..7 + zf bool // zero-filled and immutable + next *builderChunk +} + +// BitArray builds an immutable BitArray from accumulated bits. References to +// the accumulated byte slices are copied when this BitArray method is called. +func (b *Builder) BitArray() *BitArray { + if b.nBits == 0 { + return zeroBitArray + } + buf := allocByteSlice((b.nBits + 7) >> 3) + idx, zf := 0, true + for c := b.head; c != nil; c = c.next { + if c.zf { + idx += c.nBits + continue + } + zf2 := copyBits(buf, c.b, idx, c.off, c.nBits) + zf = zf && zf2 + idx += c.nBits + } + if zf { + return &BitArray{nBits: b.nBits} + } + + return &BitArray{b: buf, nBits: b.nBits} +} + +// String returns the string representation of the bit array being built. The +// result is the same as b.BitArray().String(). +func (b *Builder) String() string { + sb := make([]byte, b.nBits) + idx := 0 + for c := b.head; c != nil; c = c.next { + if c.zf { + s := idx + idx += c.nBits + fill30(sb[s:idx]) + continue + } + for i := c.off; i < c.off+c.nBits; i++ { + sb[idx] = '0' + c.b[i>>3]>>(7-i&7)&1 + idx++ + } + } + return string(sb) +} + +func (b *Builder) append(buf []byte, off, nBits int, zf bool) { + if nBits == 0 { + return + } + c := &builderChunk{b: buf, nBits: nBits, off: off, zf: zf} + if b.head == nil { + b.head, b.tail = c, c + } else { + b.tail.next = c + b.tail = c + } + b.nBits += nBits +} + +// Reset resets the builder state to empty. All the bits accumulated by writing +// methods are discarded. +func (b *Builder) Reset() { + b.head, b.tail, b.nBits = nil, nil, 0 +} + +// Len returns the current number of bits accumurated. +func (b *Builder) Len() int { + return b.nBits +} + +// WriteBitsFromBytes adds the number of bits specified by nBits from the byte +// slice p to the Builder. It skips the off bits from the beginning of p and +// reads up to 8 bits from each byte from the MSB to the LSB. +// +// WriteBitsFromBytes only references the slice and offset of p, and does not +// copy the contents of p. Therefore, any changes to the contents of p before +// calling the BitArray() or String() methods are affected. Be especially +// careful when using a same buffer for iterations. +func (b *Builder) WriteBitsFromBytes(p []byte, off, nBits int) { + if len(p) == 0 || nBits == 0 { + return + } + p = p[off>>3:] + off &= 7 + b.append(p[:(off+nBits+7)>>3], off, nBits, false) +} + +// Write implements io.Writer by writing 8 * len(p) bits read from a byte slice +// p. Write copies p once because the io.Writer prohibits the implementation to +// retain p. Use WriteBitsFromBytes to avoid copying. Write always returns +// len(p), nil. +func (b *Builder) Write(p []byte) (int, error) { + buf := make([]byte, len(p)) + copy(buf, p) + b.append(buf, 0, len(p)<<3, false) + + return len(p), nil +} + +// WriteByte implements io.ByteWriter by writing 8 bits read from a byte c. +// WriteByte always returns a nil error. +func (b *Builder) WriteByte(c byte) error { + b.append([]byte{c}, 0, 8, c == 0) + + return nil +} + +// ReadFrom implements io.ReaderFrom. It reads bytes from r until io.EOF or an +// error, and appends the bits read to the builder. Even if an error occurs, the +// bits that could be read before the error are appended to the builder. +func (b *Builder) ReadFrom(r io.Reader) (int64, error) { + var buf bytes.Buffer + n, err := buf.ReadFrom(r) + if 0 < n { + b.append(buf.Bytes(), 0, int(n)<<3, false) + } + if err != nil { + return n, fmt.Errorf("read failure: %w", err) + } + + return n, nil +} + +// WriteBit writes a single bit to the builder. The bit should be 0 or 1, +// otherwise its LSB is silently used. It always returns a nil error. +func (b *Builder) WriteBit(bit byte) error { + b.append([]byte{bit}, 7, 1, bit&1 == 0) + + return nil +} + +// WriteBitArray writes a bit array to the builder. It always returns the length +// of the bit array and a nil error. +func (b *Builder) WriteBitArray(x BitArrayer) (int, error) { + if x == nil { + return 0, nil + } + bax := x.BitArray() + if bax.IsZero() { + return 0, nil + } + + b.append(bax.b, 0, bax.nBits, bax.b == nil) + + return bax.Len(), nil +} + +// WriteByteBits adds to the Builder the bits read from a byte slice where each +// element contains individual bits. Each element of bits should be 0 or 1, +// otherwise only its LSB is used silently. WriteByteBits copies the bits from +// bits, so any future changes to bits will not affect the contents of Builder. +func (b *Builder) WriteByteBits(bits []byte) { + if len(bits) == 0 { + return + } + var zfb byte + buf := make([]byte, (len(bits)+7)>>3) + for i, bit := range bits { + bit &= 1 + zfb |= bit + buf[i>>3] |= bit << (7 - i&7) + } + b.append(buf, 0, len(bits), zfb == 0) +} + +// WriteBits write the bits read from a Buffer p. WriteBits copies p and is +// unaffected by changes to p after the call. It always returns p.Len() and nil +// error. +func (b *Builder) WriteBits(p *Buffer) (int, error) { + if p.IsZero() { + return 0, nil + } + p = p.Clone() + b.append(p.b, p.off, p.nBits, false) + + return p.nBits, nil +} + +/* +// Unwrite discards the last nBits bits of the bits already written. It is +// useful for removing trailing padding bits after writing using a +// byte-oriented method. +func (b *Builder) Unwrite(nBits int) {} +*/ diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/doc.go b/galoisd/vendor/github.com/tunabay/go-bitarray/doc.go new file mode 100644 index 0000000000..e68beae45e --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/doc.go @@ -0,0 +1,9 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +/* +Package bitarray provides data types and functions for manipurating bit arrays, +aka bit strings, of arbitrary number of bits. +*/ +package bitarray diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/error.go b/galoisd/vendor/github.com/tunabay/go-bitarray/error.go new file mode 100644 index 0000000000..d41b0bb3d3 --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/error.go @@ -0,0 +1,18 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "errors" +) + +// ErrIllegalExpression is an error thrown when a string representation of +// bit array is not a legal format. +var ErrIllegalExpression = errors.New("illegal bit array expression") + +// ErrFractionalBitsBeforeEOF is an error thrown when a byte-oriented reading +// method reaches io.EOF but there are still fractional bits less than 8 bits +// that cannot be read in bytes. +var ErrFractionalBitsBeforeEOF = errors.New("fractional bits before EOF") diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/reader.go b/galoisd/vendor/github.com/tunabay/go-bitarray/reader.go new file mode 100644 index 0000000000..8fc8508545 --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/reader.go @@ -0,0 +1,159 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "io" +) + +// Reader implements io.Reader and io.ByteReader interfaces by reading from a +// BitArray. +// +// The standard io.Reader family interfaces define byte-oriented reading +// methods, rather than bit-oriented. And they always read in bytes and cannot +// read fractional bits less than 8 bits. When the number of remaining available +// bits is not a multiple of 8, the io.EOF may be reached with fractional bits +// remaining. In this case, the padding bits are not added automatically and an +// ErrFractionalBitsBeforeEOF is returned. To handle these trailing fractional +// bits, use bit-oriented reads together, or use ToPadded8 etc in advance to +// make sure that the number of bits in the source is a multiple of 8 bits. +type Reader struct { + ba *BitArray + i int +} + +// NewReader returns a new Reader reading from the bit array ba. For mutable +// types of ba, the value at the time NewReader is called is copied and +// subsequent changes will not be reflected in future readings. +func NewReader(ba BitArrayer) *Reader { + if ba == nil { + return &Reader{ba: zeroBitArray} + } + + return &Reader{ba: ba.BitArray()} +} + +// Reset resets the Reader to be reading from ba. +func (r *Reader) Reset(ba BitArrayer) { + if ba == nil { + r.ba = zeroBitArray + } else { + r.ba = ba.BitArray() + } + r.i = 0 +} + +// Read implements the io.Reader interface. It reads up to 8 * len(p) bits from +// the underlying BitArray, writes them to p as bytes, and returns the number of +// bytes read. It always reads in bytes, and if only fractional bits less than 8 +// bits are available, it returns an ErrFractionalBitsBeforeEOF. +func (r *Reader) Read(p []byte) (int, error) { + switch { + case r.ba.IsZero(), r.ba.nBits <= r.i: + return 0, io.EOF + case r.ba.nBits-8 < r.i: + return 0, ErrFractionalBitsBeforeEOF + } + nBytes := len(p) + if n := (r.ba.Len() - r.i) >> 3; n < nBytes { + nBytes = n + } + switch { + case nBytes == 0: + return 0, nil + case r.ba.b == nil: + fill00(p[:nBytes]) + r.i += nBytes << 3 + return nBytes, nil + } + _ = copyBits(p[:nBytes], r.ba.b, 0, r.i, nBytes<<3) + r.i += nBytes << 3 + return nBytes, nil +} + +// ReadByte implements the io.ByteReader interface. It reads 8 bits from the +// underlying BitArray and returns them as a byte. If only fractional bits less +// than 8 bits are available, it returns an ErrFractionalBitsBeforeEOF. +func (r *Reader) ReadByte() (byte, error) { + switch { + case r.ba.IsZero(), r.ba.nBits <= r.i: + return 0, io.EOF + case r.ba.nBits-8 < r.i: + return 0, ErrFractionalBitsBeforeEOF + } + if r.ba.b == nil { + r.i += 8 + return 0, nil + } + b := make([]byte, 1) + _ = copyBits(b, r.ba.b, 0, r.i, 8) + r.i += 8 + return b[0], nil +} + +// ReadBitArray reads up to nBits bits as a BitArray. The returned BitArray may +// be shorter than nBits. The caller should check the length of the returned +// bit array and handle it. +func (r *Reader) ReadBitArray(nBits int) (*BitArray, error) { + switch { + case nBits < 0: + panicf("ReadBitArray: negative nBits %d.", nBits) + case nBits == 0: + return zeroBitArray, nil + case r.ba.IsZero(), r.ba.nBits <= r.i: + return zeroBitArray, io.EOF + } + if n := r.ba.nBits - r.i; n < nBits { + nBits = n + } + ba := r.ba.Slice(r.i, r.i+nBits) + r.i += nBits + + return ba, nil +} + +// ReadBit reads a single bit as 0 or 1. +func (r *Reader) ReadBit() (byte, error) { + if r.ba.IsZero() || r.ba.nBits <= r.i { + return 0, io.EOF + } + if r.ba.b == nil { + r.i++ + return 0, nil + } + b := r.ba.b[r.i>>3] >> (7 - r.i&7) & 1 + r.i++ + return b, nil +} + +// ReadBits reads up to p.Len() bits into p. It returns the number of bits read +// (0 <= n <= p.Len()) and any error encountered. The data in the buffer beyond +// the returned length is undefined. +func (r *Reader) ReadBits(p *Buffer) (int, error) { + nBits := p.Len() + switch { + case nBits == 0: + return 0, nil + case r.ba.IsZero(), r.ba.nBits <= r.i: + return 0, io.EOF + } + if n := r.ba.nBits - r.i; n < nBits { + nBits = n + } + if r.ba.b == nil { + clearBits(p.b, 0, nBits) + } else { + _ = copyBits(p.b, r.ba.b, 0, r.i, nBits) + } + r.i += nBits + + return nBits, nil +} + +/* +// TODO: +// WriteTo implements the io.WriterTo interface. +func (r *Reader) WriteTo(w io.Writer) (int64, error) {} +*/ diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA1LongMsg.rsp.bz2 b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA1LongMsg.rsp.bz2 new file mode 100644 index 0000000000..fbd01a10bd Binary files /dev/null and b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA1LongMsg.rsp.bz2 differ diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA1ShortMsg.rsp.bz2 b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA1ShortMsg.rsp.bz2 new file mode 100644 index 0000000000..f3ad99b954 Binary files /dev/null and b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA1ShortMsg.rsp.bz2 differ diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA224LongMsg.rsp.bz2 b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA224LongMsg.rsp.bz2 new file mode 100644 index 0000000000..9e66bfb664 Binary files /dev/null and b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA224LongMsg.rsp.bz2 differ diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA224ShortMsg.rsp.bz2 b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA224ShortMsg.rsp.bz2 new file mode 100644 index 0000000000..84c4193f72 Binary files /dev/null and b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA224ShortMsg.rsp.bz2 differ diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA256LongMsg.rsp.bz2 b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA256LongMsg.rsp.bz2 new file mode 100644 index 0000000000..a808f68d04 Binary files /dev/null and b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA256LongMsg.rsp.bz2 differ diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA256ShortMsg.rsp.bz2 b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA256ShortMsg.rsp.bz2 new file mode 100644 index 0000000000..ab354d4fad Binary files /dev/null and b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA256ShortMsg.rsp.bz2 differ diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA384LongMsg.rsp.bz2 b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA384LongMsg.rsp.bz2 new file mode 100644 index 0000000000..7c8f6e1ae9 Binary files /dev/null and b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA384LongMsg.rsp.bz2 differ diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA384ShortMsg.rsp.bz2 b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA384ShortMsg.rsp.bz2 new file mode 100644 index 0000000000..e833ca6d4c Binary files /dev/null and b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA384ShortMsg.rsp.bz2 differ diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA512LongMsg.rsp.bz2 b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA512LongMsg.rsp.bz2 new file mode 100644 index 0000000000..f39ea1b9db Binary files /dev/null and b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA512LongMsg.rsp.bz2 differ diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA512ShortMsg.rsp.bz2 b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA512ShortMsg.rsp.bz2 new file mode 100644 index 0000000000..fa9c23e2bf Binary files /dev/null and b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA512ShortMsg.rsp.bz2 differ diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA512_224LongMsg.rsp.bz2 b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA512_224LongMsg.rsp.bz2 new file mode 100644 index 0000000000..1bf4e2d367 Binary files /dev/null and b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA512_224LongMsg.rsp.bz2 differ diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA512_224ShortMsg.rsp.bz2 b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA512_224ShortMsg.rsp.bz2 new file mode 100644 index 0000000000..b8199de241 Binary files /dev/null and b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA512_224ShortMsg.rsp.bz2 differ diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA512_256LongMsg.rsp.bz2 b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA512_256LongMsg.rsp.bz2 new file mode 100644 index 0000000000..a43eb68bbf Binary files /dev/null and b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA512_256LongMsg.rsp.bz2 differ diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA512_256ShortMsg.rsp.bz2 b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA512_256ShortMsg.rsp.bz2 new file mode 100644 index 0000000000..f5bec40cc2 Binary files /dev/null and b/galoisd/vendor/github.com/tunabay/go-bitarray/testdata/SHA512_256ShortMsg.rsp.bz2 differ diff --git a/galoisd/vendor/github.com/tunabay/go-bitarray/util.go b/galoisd/vendor/github.com/tunabay/go-bitarray/util.go new file mode 100644 index 0000000000..85b8d6ada9 --- /dev/null +++ b/galoisd/vendor/github.com/tunabay/go-bitarray/util.go @@ -0,0 +1,384 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "fmt" + "unsafe" +) + +// dstOff < 8, srcOff < 8, nBits < 8, dstOff + nBits <= 8 +func copyBits7(dst *byte, src []byte, dstOff, srcOff, nBits int) bool { + nBits0, srcBits0 := nBits, 8-srcOff + if srcBits0 < nBits { + nBits0 = srcBits0 + } + mask := byte(0xff) << (8 - nBits0) >> dstOff + *dst &= ^mask + *dst |= mask & (src[0] << srcOff >> dstOff) + + zf := src[0] == 0 + if nBits0 < nBits { + zf2 := copyBits7(dst, src[1:], dstOff+nBits0, 0, nBits-nBits0) + zf = zf && zf2 + } + + return zf +} + +func copyBits(dst, src []byte, dstOff, srcOff, nBits int) bool { + dst, src = dst[dstOff>>3:], src[srcOff>>3:] + dstOff, srcOff = dstOff&7, srcOff&7 + + zf := true + if dstOff != 0 { + nBits0 := 8 - dstOff + if nBits <= nBits0 { + zf2 := copyBits7(&dst[0], src, dstOff, srcOff, nBits) + return zf2 + } + zf2 := copyBits7(&dst[0], src, dstOff, srcOff, nBits0) + zf = zf && zf2 + + nBits -= nBits0 + dst = dst[1:] + srcOff += nBits0 + src = src[srcOff>>3:] + srcOff &= 7 + } + + if nBytes1 := nBits >> 3; 0 < nBytes1 { + if srcOff == 0 { + copy(dst, src[:nBytes1]) + zf = false + } else { + rsh := 8 - srcOff + for i := 0; i < nBytes1; i++ { + dst[i] = src[i]<>rsh + zf = zf && dst[i] == 0 + } + } + nBits &= 7 + if nBits == 0 { + return zf + } + dst = dst[nBytes1:] + src = src[nBytes1:] + } + + zf2 := copyBits7(&dst[0], src, 0, srcOff, nBits) + + return zf && zf2 +} + +func clearBits(b []byte, off, nBits int) { + b = b[off>>3:] + off &= 7 + + if off != 0 { + nBits0 := 8 - off + if nBits <= nBits0 { + b[0] &^= byte(0xff) << (8 - nBits) >> off + return + } + b[0] &= byte(0xff) << nBits0 + nBits -= nBits0 + b = b[1:] + } + + if nBytes1 := nBits >> 3; 0 < nBytes1 { + for i := 0; i < nBits>>3; i++ { + b[i] = 0 + } + nBits &= 7 + b = b[nBytes1:] + } + + if nBits != 0 { + b[0] &= byte(0xff) >> nBits + } +} + +func setBits(b []byte, off, nBits int) { + b = b[off>>3:] + off &= 7 + + if off != 0 { + nBits0 := 8 - off + if nBits <= nBits0 { + b[0] |= byte(0xff) << (8 - nBits) >> off + return + } + b[0] |= byte(0xff) >> off + nBits -= nBits0 + b = b[1:] + } + + if nBytes1 := nBits >> 3; 0 < nBytes1 { + for i := 0; i < nBits>>3; i++ { + b[i] = 0xff + } + nBits &= 7 + b = b[nBytes1:] + } + + if nBits != 0 { + b[0] |= byte(0xff) << (8 - nBits) + } +} + +func toggleBits(b []byte, off, nBits int) { + b = b[off>>3:] + off &= 7 + + if off != 0 { + nBits0 := 8 - off + if nBits <= nBits0 { + b[0] ^= byte(0xff) << (8 - nBits) >> off + return + } + b[0] ^= byte(0xff) >> off + nBits -= nBits0 + b = b[1:] + } + + if nBytes1 := nBits >> 3; 0 < nBytes1 { + for i := 0; i < nBits>>3; i++ { + b[i] ^= 0xff + } + nBits &= 7 + b = b[nBytes1:] + } + + if nBits != 0 { + b[0] ^= byte(0xff) << (8 - nBits) + } +} + +// dstOff < 8, srcOff < 8, nBits < 8, dstOff + nBits <= 8 +func andBits7(dst *byte, src []byte, dstOff, srcOff, nBits int) { + nBits0, srcBits0 := nBits, 8-srcOff + if srcBits0 < nBits { + nBits0 = srcBits0 + } + mask := byte(0xff) << (8 - nBits0) >> dstOff + *dst &= ^mask | (src[0] << srcOff >> dstOff) + + if nBits0 < nBits { + andBits7(dst, src[1:], dstOff+nBits0, 0, nBits-nBits0) + } +} + +func andBits(dst, src []byte, dstOff, srcOff, nBits int) { + dst, src = dst[dstOff>>3:], src[srcOff>>3:] + dstOff, srcOff = dstOff&7, srcOff&7 + + if dstOff != 0 { + nBits0 := 8 - dstOff + if nBits <= nBits0 { + andBits7(&dst[0], src, dstOff, srcOff, nBits) + return + } + andBits7(&dst[0], src, dstOff, srcOff, nBits0) + + nBits -= nBits0 + dst = dst[1:] + srcOff += nBits0 + src = src[srcOff>>3:] + srcOff &= 7 + } + + // TODO: maybe can be optimized using asUint64Slice() + if nBytes1 := nBits >> 3; 0 < nBytes1 { + if srcOff == 0 { + for i := 0; i < nBytes1; i++ { + dst[i] &= src[i] + } + } else { + rsh := 8 - srcOff + for i := 0; i < nBytes1; i++ { + dst[i] &= src[i]<>rsh + } + } + nBits &= 7 + if nBits == 0 { + return + } + dst = dst[nBytes1:] + src = src[nBytes1:] + } + + andBits7(&dst[0], src, 0, srcOff, nBits) +} + +// dstOff < 8, srcOff < 8, nBits < 8, dstOff + nBits <= 8 +func orBits7(dst *byte, src []byte, dstOff, srcOff, nBits int) { + nBits0, srcBits0 := nBits, 8-srcOff + if srcBits0 < nBits { + nBits0 = srcBits0 + } + mask := byte(0xff) << (8 - nBits0) >> dstOff + *dst |= mask & (src[0] << srcOff >> dstOff) + + if nBits0 < nBits { + orBits7(dst, src[1:], dstOff+nBits0, 0, nBits-nBits0) + } +} + +func orBits(dst, src []byte, dstOff, srcOff, nBits int) { + dst, src = dst[dstOff>>3:], src[srcOff>>3:] + dstOff, srcOff = dstOff&7, srcOff&7 + + if dstOff != 0 { + nBits0 := 8 - dstOff + if nBits <= nBits0 { + orBits7(&dst[0], src, dstOff, srcOff, nBits) + return + } + orBits7(&dst[0], src, dstOff, srcOff, nBits0) + + nBits -= nBits0 + dst = dst[1:] + srcOff += nBits0 + src = src[srcOff>>3:] + srcOff &= 7 + } + + // TODO: maybe can be optimized using asUint64Slice() + if nBytes1 := nBits >> 3; 0 < nBytes1 { + if srcOff == 0 { + for i := 0; i < nBytes1; i++ { + dst[i] |= src[i] + } + } else { + rsh := 8 - srcOff + for i := 0; i < nBytes1; i++ { + dst[i] |= src[i]<>rsh + } + } + nBits &= 7 + if nBits == 0 { + return + } + dst = dst[nBytes1:] + src = src[nBytes1:] + } + + orBits7(&dst[0], src, 0, srcOff, nBits) +} + +// dstOff < 8, srcOff < 8, nBits < 8, dstOff + nBits <= 8 +func xorBits7(dst *byte, src []byte, dstOff, srcOff, nBits int) { + nBits0, srcBits0 := nBits, 8-srcOff + if srcBits0 < nBits { + nBits0 = srcBits0 + } + mask := byte(0xff) << (8 - nBits0) >> dstOff + *dst ^= mask & (src[0] << srcOff >> dstOff) + + if nBits0 < nBits { + xorBits7(dst, src[1:], dstOff+nBits0, 0, nBits-nBits0) + } +} + +func xorBits(dst, src []byte, dstOff, srcOff, nBits int) { + dst, src = dst[dstOff>>3:], src[srcOff>>3:] + dstOff, srcOff = dstOff&7, srcOff&7 + + if dstOff != 0 { + nBits0 := 8 - dstOff + if nBits <= nBits0 { + xorBits7(&dst[0], src, dstOff, srcOff, nBits) + return + } + xorBits7(&dst[0], src, dstOff, srcOff, nBits0) + + nBits -= nBits0 + dst = dst[1:] + srcOff += nBits0 + src = src[srcOff>>3:] + srcOff &= 7 + } + + // TODO: maybe can be optimized using asUint64Slice() + if nBytes1 := nBits >> 3; 0 < nBytes1 { + if srcOff == 0 { + for i := 0; i < nBytes1; i++ { + dst[i] ^= src[i] + } + } else { + rsh := 8 - srcOff + for i := 0; i < nBytes1; i++ { + dst[i] ^= src[i]<>rsh + } + } + nBits &= 7 + if nBits == 0 { + return + } + dst = dst[nBytes1:] + src = src[nBytes1:] + } + + xorBits7(&dst[0], src, 0, srcOff, nBits) +} + +func allBytesZero(b []byte) bool { + for _, u64 := range asUint64Slice(b) { + if u64 != 0 { + return false + } + } + return true +} + +func panicf(format string, v ...interface{}) { + panic("bitarray: " + fmt.Sprintf(format, v...)) +} + +func allocByteSlice(nBytes int) []byte { + return make([]byte, nBytes, (nBytes+7) & ^7) +} + +func asUint64Slice(b []byte) []uint64 { + return unsafe.Slice((*uint64)(unsafe.Pointer(&b[0])), (len(b)+7)>>3) +} + +func fill00(b []byte) { + // This seems to get optimized into a memclr. + for i := range b { + b[i] = 0 + } + // copy(b, []byte{0, 0, 0, 0, 0, 0, 0, 0}) + // for n := 8; n < len(b); n <<= 1 { + // copy(b[n:], b[:n]) + // } +} + +func fillFF(b []byte) { + copy(b, []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}) + for n := 8; n < len(b); n <<= 1 { + copy(b[n:], b[:n]) + } +} + +func fill30(b []byte) { + copy(b, []byte{0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}) + for n := 8; n < len(b); n <<= 1 { + copy(b[n:], b[:n]) + } +} + +// ba != nil +func (ba *BitArray) bits8() []byte { + b8 := make([]byte, ba.nBits) + if ba.b == nil { + return b8 + } + for i := 0; i < ba.nBits; i++ { + b8[i] = ba.b[i>>3] >> (7 - i&7) & 1 + } + return b8 +} diff --git a/galoisd/vendor/modules.txt b/galoisd/vendor/modules.txt index d05a9d93aa..b25d04e587 100644 --- a/galoisd/vendor/modules.txt +++ b/galoisd/vendor/modules.txt @@ -155,7 +155,7 @@ github.com/cockroachdb/redact/internal/rfmt/fmtsort # github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 ## explicit; go 1.19 github.com/cockroachdb/tokenbucket -# github.com/cometbft/cometbft v0.38.2 => github.com/unionlabs/cometbls v0.0.0-20240111183309-e159e964fa07 +# github.com/cometbft/cometbft v0.38.2 => github.com/unionlabs/cometbls v0.0.0-20240125180347-5b33e3460932 ## explicit; go 1.21 github.com/cometbft/cometbft/abci/types github.com/cometbft/cometbft/config @@ -418,7 +418,7 @@ github.com/cosmos/cosmos-db github.com/cosmos/cosmos-proto github.com/cosmos/cosmos-proto/anyutil github.com/cosmos/cosmos-proto/runtime -# github.com/cosmos/cosmos-sdk v0.50.2 => github.com/unionlabs/cosmos-sdk v0.0.0-20240111183419-b58f90f260ce +# github.com/cosmos/cosmos-sdk v0.50.2 => github.com/unionlabs/cosmos-sdk v0.0.0-20240125200611-e1b8b82c712b ## explicit; go 1.21 github.com/cosmos/cosmos-sdk/codec github.com/cosmos/cosmos-sdk/codec/types @@ -699,6 +699,9 @@ github.com/syndtr/goleveldb/leveldb/util # github.com/tendermint/go-amino v0.16.0 ## explicit; go 1.12 github.com/tendermint/go-amino +# github.com/tunabay/go-bitarray v1.3.1 +## explicit; go 1.17 +github.com/tunabay/go-bitarray # github.com/x448/float16 v0.8.4 ## explicit; go 1.11 github.com/x448/float16 @@ -867,8 +870,8 @@ rsc.io/tmplfunc/internal/parse # sigs.k8s.io/yaml v1.3.0 ## explicit; go 1.12 sigs.k8s.io/yaml -# github.com/cometbft/cometbft => github.com/unionlabs/cometbls v0.0.0-20240111183309-e159e964fa07 +# github.com/cometbft/cometbft => github.com/unionlabs/cometbls v0.0.0-20240125180347-5b33e3460932 # github.com/consensys/gnark => github.com/consensys/gnark v0.9.2-0.20240115131420-34fdb0391653 # github.com/consensys/gnark-crypto => github.com/unionlabs/gnark-crypto v0.0.0-20240112093739-635c1b6963c6 -# github.com/cosmos/cosmos-sdk => github.com/unionlabs/cosmos-sdk v0.0.0-20240111183419-b58f90f260ce +# github.com/cosmos/cosmos-sdk => github.com/unionlabs/cosmos-sdk v0.0.0-20240125200611-e1b8b82c712b # github.com/cosmos/gogoproto => github.com/cosmos/gogoproto v1.4.11 diff --git a/generated/contracts/Cargo.toml b/generated/contracts/Cargo.toml index 3b8aebcb64..7e2be09080 100755 --- a/generated/contracts/Cargo.toml +++ b/generated/contracts/Cargo.toml @@ -1,3 +1,4 @@ + [package] edition = { workspace = true } name = "contracts" diff --git a/generated/contracts/src/devnet_ownable_ibc_handler.rs b/generated/contracts/src/devnet_ownable_ibc_handler.rs index 610e26cf5b..7d02bedaf6 100644 --- a/generated/contracts/src/devnet_ownable_ibc_handler.rs +++ b/generated/contracts/src/devnet_ownable_ibc_handler.rs @@ -56,6 +56,26 @@ pub mod devnet_ownable_ibc_handler { ], }), functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("COMMITMENT_PREFIX"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("COMMITMENT_PREFIX"), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), ( ::std::borrow::ToOwned::to_owned("acknowledgePacket"), ::std::vec![ @@ -141,18 +161,9 @@ pub mod devnet_ownable_ibc_handler { inputs: ::std::vec![ ::ethers::core::abi::ethabi::Param { name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::Bytes, - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("bytes"), - ), - }, - ::ethers::core::abi::ethabi::Param { - name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::Uint( - 256usize, - ), + kind: ::ethers::core::abi::ethabi::ParamType::String, internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint256"), + ::std::borrow::ToOwned::to_owned("string"), ), }, ], @@ -196,9 +207,9 @@ pub mod devnet_ownable_ibc_handler { outputs: ::std::vec![ ::ethers::core::abi::ethabi::Param { name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + kind: ::ethers::core::abi::ethabi::ParamType::String, internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("bytes"), + ::std::borrow::ToOwned::to_owned("string"), ), }, ], @@ -380,7 +391,7 @@ pub mod devnet_ownable_ibc_handler { ], outputs: ::std::vec![ ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("channelId"), + name: ::std::string::String::new(), kind: ::ethers::core::abi::ethabi::ParamType::String, internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned("string"), @@ -440,7 +451,7 @@ pub mod devnet_ownable_ibc_handler { ], outputs: ::std::vec![ ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("channelId"), + name: ::std::string::String::new(), kind: ::ethers::core::abi::ethabi::ParamType::String, internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned("string"), @@ -755,7 +766,7 @@ pub mod devnet_ownable_ibc_handler { ], outputs: ::std::vec![ ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("connectionId"), + name: ::std::string::String::new(), kind: ::ethers::core::abi::ethabi::ParamType::String, internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned("string"), @@ -829,7 +840,7 @@ pub mod devnet_ownable_ibc_handler { ], outputs: ::std::vec![ ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("connectionId"), + name: ::std::string::String::new(), kind: ::ethers::core::abi::ethabi::ParamType::String, internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned("string"), @@ -926,7 +937,7 @@ pub mod devnet_ownable_ibc_handler { ], outputs: ::std::vec![ ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("clientId"), + name: ::std::string::String::new(), kind: ::ethers::core::abi::ethabi::ParamType::String, internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned("string"), @@ -938,28 +949,6 @@ pub mod devnet_ownable_ibc_handler { }, ], ), - ( - ::std::borrow::ToOwned::to_owned("expectedTimePerBlock"), - ::std::vec![ - ::ethers::core::abi::ethabi::Function { - name: ::std::borrow::ToOwned::to_owned( - "expectedTimePerBlock", - ), - inputs: ::std::vec![], - outputs: ::std::vec![ - ::ethers::core::abi::ethabi::Param { - name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint64"), - ), - }, - ], - constant: ::core::option::Option::None, - state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, - }, - ], - ), ( ::std::borrow::ToOwned::to_owned("getChannel"), ::std::vec![ @@ -1201,28 +1190,6 @@ pub mod devnet_ownable_ibc_handler { }, ], ), - ( - ::std::borrow::ToOwned::to_owned("getExpectedTimePerBlock"), - ::std::vec![ - ::ethers::core::abi::ethabi::Function { - name: ::std::borrow::ToOwned::to_owned( - "getExpectedTimePerBlock", - ), - inputs: ::std::vec![], - outputs: ::std::vec![ - ::ethers::core::abi::ethabi::Param { - name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint64"), - ), - }, - ], - constant: ::core::option::Option::None, - state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, - }, - ], - ), ( ::std::borrow::ToOwned::to_owned( "getHashedPacketAcknowledgementCommitment", @@ -1658,9 +1625,9 @@ pub mod devnet_ownable_ibc_handler { outputs: ::std::vec![ ::ethers::core::abi::ethabi::Param { name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + kind: ::ethers::core::abi::ethabi::ParamType::String, internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("bytes"), + ::std::borrow::ToOwned::to_owned("string"), ), }, ], @@ -1806,31 +1773,15 @@ pub mod devnet_ownable_ibc_handler { ), }, ], - outputs: ::std::vec![], - constant: ::core::option::Option::None, - state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("setExpectedTimePerBlock"), - ::std::vec![ - ::ethers::core::abi::ethabi::Function { - name: ::std::borrow::ToOwned::to_owned( - "setExpectedTimePerBlock", - ), - inputs: ::std::vec![ + outputs: ::std::vec![ ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned( - "expectedTimePerBlock_", - ), + name: ::std::string::String::new(), kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned("uint64"), ), }, ], - outputs: ::std::vec![], constant: ::core::option::Option::None, state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, }, @@ -2088,453 +2039,89 @@ pub mod devnet_ownable_ibc_handler { ]), events: ::core::convert::From::from([ ( - ::std::borrow::ToOwned::to_owned("AcknowledgePacket"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("AcknowledgePacket"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("packet"), - kind: ::ethers::core::abi::ethabi::ParamType::Tuple( - ::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ::ethers::core::abi::ethabi::ParamType::String, - ::ethers::core::abi::ethabi::ParamType::String, - ::ethers::core::abi::ethabi::ParamType::String, - ::ethers::core::abi::ethabi::ParamType::String, - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Tuple( - ::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ], - ), - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ], - ), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("acknowledgement"), - kind: ::ethers::core::abi::ethabi::ParamType::Bytes, - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("ChannelCloseConfirm"), + ::std::borrow::ToOwned::to_owned("OwnershipTransferred"), ::std::vec![ ::ethers::core::abi::ethabi::Event { name: ::std::borrow::ToOwned::to_owned( - "ChannelCloseConfirm", + "OwnershipTransferred", ), inputs: ::std::vec![ ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("channelId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("portId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("ChannelCloseInit"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("ChannelCloseInit"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("channelId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, + name: ::std::borrow::ToOwned::to_owned("previousOwner"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, }, ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("portId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, + name: ::std::borrow::ToOwned::to_owned("newOwner"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: true, }, ], anonymous: false, }, ], ), + ]), + errors: ::core::convert::From::from([ ( - ::std::borrow::ToOwned::to_owned("ChannelOpenAck"), + ::std::borrow::ToOwned::to_owned("ErrCapabilityAlreadyClaimed"), ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("ChannelOpenAck"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("channelId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("portId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ], - anonymous: false, + ::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned( + "ErrCapabilityAlreadyClaimed", + ), + inputs: ::std::vec![], }, ], ), ( - ::std::borrow::ToOwned::to_owned("ChannelOpenConfirm"), + ::std::borrow::ToOwned::to_owned("ErrClientNotFound"), ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("ChannelOpenConfirm"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("channelId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("portId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ], - anonymous: false, + ::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrClientNotFound"), + inputs: ::std::vec![], }, ], ), ( - ::std::borrow::ToOwned::to_owned("ChannelOpenInit"), + ::std::borrow::ToOwned::to_owned("OwnableInvalidOwner"), ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("ChannelOpenInit"), + ::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned( + "OwnableInvalidOwner", + ), inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("channelId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("connectionId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("portId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned( - "counterpartyPortId", + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("owner"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), ), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, }, ], - anonymous: false, }, ], ), ( - ::std::borrow::ToOwned::to_owned("ChannelOpenTry"), + ::std::borrow::ToOwned::to_owned("OwnableUnauthorizedAccount"), ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("ChannelOpenTry"), + ::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned( + "OwnableUnauthorizedAccount", + ), inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("channelId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("connectionId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("portId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned( - "counterpartyPortId", + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), ), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("version"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("ConnectionOpenAck"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("ConnectionOpenAck"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("connectionId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, }, ], - anonymous: false, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("ConnectionOpenConfirm"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned( - "ConnectionOpenConfirm", - ), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("connectionId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("ConnectionOpenInit"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("ConnectionOpenInit"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("connectionId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("ConnectionOpenTry"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("ConnectionOpenTry"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("connectionId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("GeneratedClientIdentifier"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned( - "GeneratedClientIdentifier", - ), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("OwnershipTransferred"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned( - "OwnershipTransferred", - ), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("previousOwner"), - kind: ::ethers::core::abi::ethabi::ParamType::Address, - indexed: true, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("newOwner"), - kind: ::ethers::core::abi::ethabi::ParamType::Address, - indexed: true, - }, - ], - anonymous: false, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("RecvPacket"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("RecvPacket"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("packet"), - kind: ::ethers::core::abi::ethabi::ParamType::Tuple( - ::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ::ethers::core::abi::ethabi::ParamType::String, - ::ethers::core::abi::ethabi::ParamType::String, - ::ethers::core::abi::ethabi::ParamType::String, - ::ethers::core::abi::ethabi::ParamType::String, - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Tuple( - ::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ], - ), - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ], - ), - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("SendPacket"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("SendPacket"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("sequence"), - kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("sourcePort"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("sourceChannel"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("timeoutHeight"), - kind: ::ethers::core::abi::ethabi::ParamType::Tuple( - ::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ], - ), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("timeoutTimestamp"), - kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("data"), - kind: ::ethers::core::abi::ethabi::ParamType::Bytes, - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("TimeoutPacket"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("TimeoutPacket"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("packet"), - kind: ::ethers::core::abi::ethabi::ParamType::Tuple( - ::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ::ethers::core::abi::ethabi::ParamType::String, - ::ethers::core::abi::ethabi::ParamType::String, - ::ethers::core::abi::ethabi::ParamType::String, - ::ethers::core::abi::ethabi::ParamType::String, - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Tuple( - ::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ], - ), - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ], - ), - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("WriteAcknowledgement"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned( - "WriteAcknowledgement", - ), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("destinationPortId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned( - "destinationChannel", - ), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("sequence"), - kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("acknowledgement"), - kind: ::ethers::core::abi::ethabi::ParamType::Bytes, - indexed: false, - }, - ], - anonymous: false, }, ], ), ]), - errors: ::std::collections::BTreeMap::new(), receive: false, fallback: false, } @@ -2545,14 +2132,14 @@ pub mod devnet_ownable_ibc_handler { ::ethers::contract::Lazy::new(__abi); #[rustfmt::skip] #[cfg(feature = "providers")] - const __BYTECODE: &[u8] = b"a\x01\0`@\x90\x80\x82R4b\0\x01\xE5WP\x80Q\x90`\x1Fb\0U\xFD8\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x84\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x85\x84\x10\x17b\0\x01\xCFW\x80\x85\x92`\xA0\x94\x86R\x839\x81\x01\x03\x12b\0\x01\x81Wb\0\0W\x82b\0\x022V[\x91b\0\0f` \x82\x01b\0\x022V[b\0\0s\x83\x83\x01b\0\x022V[\x90b\0\0\x90`\x80b\0\0\x88``\x86\x01b\0\x022V[\x94\x01b\0\x022V[`\x80\x95\x90\x95R`\xA0R`\xC0R`\xE0R`\x0C\x80T`\x01`\x01`\xA0\x1B\x03\x19\x80\x82\x163\x90\x81\x17\x90\x93U\x92Q\x93`\x01`\x01`\xA0\x1B\x03\x92\x90\x91\x83\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0`\0\x80\xA3\x16\x90`\rT\x16\x17`\rUaS\xB0\x90\x81b\0\x02M\x829`\x80Q\x81\x81\x81a\x11@\x01Ra37\x01R`\xA0Q\x81\x81\x81a\x066\x01R\x81\x81a\x08\x9C\x01R\x81\x81a';\x01Ra0\x17\x01R`\xC0Q\x81\x81\x81a\x0B\xAD\x01R\x81\x81a\x16\xBF\x01R\x81\x81a\x18\xE0\x01R\x81\x81a$\xC6\x01R\x81\x81a+\xD3\x01Ra4s\x01R`\xE0Q\x81\x81\x81a\x13`\x01R\x81\x81a\"\xC8\x01R\x81\x81a-\x83\x01R\x81\x81a1`\x01RaI\xDF\x01R\xF3[QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FABI decoding: tuple data too sho`D\x82\x01Ra\x1C\x9D`\xF2\x1B`d\x82\x01R`\x84\x90\xFD[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[bF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FEther sent to non-payable functi`D\x82\x01Ra7\xB7`\xF1\x1B`d\x82\x01R`\x84\x90\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03b\0\x02GWV[`\0\x80\xFD\xFE`\x80`@R`\x046\x10a8\xDCW`\x005`\xE0\x1C\x80c\x01\xC6@\x0F\x14a\x037W\x80c\x04\xF6\x8E\\\x14a\x032W\x80c\x11~\x88j\x14a\x03-W\x80c\x11\xB8\x8A\x15\x14a\x03(W\x80c\x13\x90\xD2\x8D\x14a\x03#W\x80c\x18\xC1\x98p\x14a\x03\x1EW\x80c#@*3\x14a\x03\x19W\x80c#n\xBDp\x14a\x03\x14W\x80c%lA\x99\x14a\x03\x0FW\x80c%p\xDA\xE0\x14a\x03\nW\x80c%\xCB\xC3\xA6\x14a\x03\x05W\x80c&\x07\x847\x14a\x03\0W\x80c'\x18L\x13\x14a\x02\xFBW\x80c'q\x1Ai\x14a\x02\xF6W\x80c0\0!z\x14a\x02\xF1W\x80c1\x97?\0\x14a\x02\xECW\x80c;\xC33\x9F\x14a\x02\xE7W\x80cX$\x18\xB6\x14a\x02\xE2W\x80cY\xF3yv\x14a\x02\xDDW\x80cZ\x9A\xFA\xC3\x14a\x02\xD8W\x80c[=\xE2`\x14a\x02\xD3W\x80c[\xD5\x1Bb\x14a\x02\xCEW\x80c[\xE1d\xEE\x14a\x02\xC9W\x80cjr\x8F,\x14a\x02\xC4W\x80cl\xF4K\xF4\x14a\x02\xBFW\x80cqP\x18\xA6\x14a\x02\xBAW\x80cv\xC8\x1CB\x14a\x02\xB5W\x80cy&\xB8\xA9\x14a\x02\xB0W\x80c~\xB7\x892\x14a\x02\xABW\x80c\x82\x1C\xB5\xD0\x14a\x02\xA6W\x80c\x83\x9D\xF9E\x14a\x02\xA1W\x80c\x8D\xA5\xCB[\x14a\x02\x9CW\x80c\x99\x04\x91\xA5\x14a\x02\x97W\x80c\xA0I\xE6w\x14a\x02\x92W\x80c\xA0l\xB3\xA2\x14a\x02\x8DW\x80c\xAA\x18\xC8\xB1\x14a\x02\x88W\x80c\xAEL\xD2\x01\x14a\x02\x83W\x80c\xB51\x86\x1F\x14a\x02~W\x80c\xB5ny\xDE\x14a\x02yW\x80c\xC28\x01\x05\x14a\x02tW\x80c\xC90\xB1\xB0\x14a\x02oW\x80c\xD1){\x8D\x14a\x02jW\x80c\xD3\x14\x07\xFE\x14a\x02GW\x80c\xD5\xA2D\x81\x14a\x02eW\x80c\xDAl\xEAU\x14a\x02`W\x80c\xDD4i\xFC\x14a\x02[W\x80c\xDD[\x9FM\x14a\x02VW\x80c\xE1\xB1{C\x14a\x02QW\x80c\xE6\x05_7\x14a\x02LW\x80c\xECu\xD8)\x14a\x02GWc\xF2\xFD\xE3\x8B\x03a8\xDCWa7\xDBV[a2bV[a74V[a7\tV[a6{V[a4!V[a3\xABV[a2\x8AV[a25V[a2\x05V[a1\xD3V[a0yV[a.\x87V[a.\0V[a,\xBBV[a+~V[a+!V[a*\xE4V[a*\xB0V[a*\x84V[a*TV[a*#V[a*\x02V[a)\x84V[a)\x03V[a'\xF1V[a&\xA0V[a%\xAEV[a$qV[a#\xDBV[a#SV[a!\xC8V[a!\x8EV[a!tV[a \xDBV[a\x1E\xEBV[a\x1D\x1BV[a\x1A\x97V[a\x19\xDBV[a\x18\x8BV[a\x18*V[a\x16DV[a\x13PV[a\x11\xE3V[a\x10\x83V[a\x104V[a\x0B5V[a\n\xB3V[a\x06\xEAV[a\x05\x81V[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FEther sent to non-payable functi`D\x82\x01R\x7Fon\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FABI decoding: tuple data too sho`D\x82\x01R\x7Frt\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FABI decoding: invalid tuple offs`D\x82\x01R\x7Fet\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`'`$\x82\x01R\x7FABI decoding: struct calldata to`D\x82\x01R\x7Fo short\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x03\x19\x90` \x82\x82\x01\x12a\x05 W`\x045\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x05\x1BW\x82``\x92\x03\x01\x12a\x05\x16W`\x04\x01\x90V[a\x04zV[a\x04\x10V[a\x03\xA6V[`\0[\x83\x81\x10a\x058WPP`\0\x91\x01RV[\x81\x81\x01Q\x83\x82\x01R` \x01a\x05(V[\x90`\x1F\x19`\x1F` \x93a\x05f\x81Q\x80\x92\x81\x87R\x87\x80\x88\x01\x91\x01a\x05%V[\x01\x16\x01\x01\x90V[\x90` a\x05~\x92\x81\x81R\x01\x90a\x05HV[\x90V[4a\x06\xE5W`\0\x80a\x05\x926a\x04\xE4V[`@Qa\x062\x81` \x81\x01\x93\x7F\x01\xC6@\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85R` `$\x83\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@a\x06\x12a\x05\xF4a\x05\xE3\x85\x80a;vV[```D\x89\x01R`\xA4\x88\x01\x91a;\xD5V[a\x06\x01` \x86\x01\x86aG:V[`C\x19\x87\x83\x03\x01`d\x88\x01RaGlV[\x92\x015a\x06\x1E\x81a\x11qV[\x16`\x84\x83\x01R\x03`\x1F\x19\x81\x01\x83R\x82a\x0F\x0EV[Q\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\xF4a\x06_a>%V[\x90\x15a\x06\xBDWa\x06{\x81` \x80a\x06\xB9\x94Q\x83\x01\x01\x91\x01a>\x8AV[\x7F\xE0 :F\x1F\x16\xC0\xA8\xA8\xDD\xEA\x13\xBB\xE0\xF9\xBB\x1EO\xDF\xEA<\x0E\xC4$\n52`\xFD\x0F\x88\x8A`@Q\x80a\x06\xAA\x84\x82a\x05mV[\x03\x90\xA1`@Q\x91\x82\x91\x82a\x05mV[\x03\x90\xF3[a\x06\xC9a\x06\xE1\x91aB\xA0V[`@Q\x91\x82\x91bF\x1B\xCD`\xE5\x1B\x83R`\x04\x83\x01a\x05mV[\x03\x90\xFD[a\x03%V[\x90\x15a\x06\xBDWa\x08\xE1\x81` \x80a\x06\xB9\x94Q\x83\x01\x01\x91\x01a>\x8AV[\x7Fz4\x06\xDFm\xA8`\x0F\x12{\t4\xD0G/\x87?\x8F\xE3M\xBF\x9C;<\xB9\xAD\xF5\x99\x1C\xC9\x1DJ`@Q\x80a\x06\xAA\x84\x82a\x05mV[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`+`$\x82\x01R\x7FABI decoding: invalid calldata a`D\x82\x01R\x7Frray offset\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x91\x81`\x1F\x84\x01\x12\x15a\n|W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\n\x12W` \x83\x81\x86\x01\x95\x01\x01\x11a\t\xA8WV[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`+`$\x82\x01R\x7FABI decoding: invalid calldata a`D\x82\x01R\x7Frray stride\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`+`$\x82\x01R\x7FABI decoding: invalid calldata a`D\x82\x01R\x7Frray length\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[a\t\x10V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x03a\n\x9FWV[`\0\x80\xFD[`\xA45\x90a\n\xB1\x82a\n\x81V[V[4a\x06\xE5W`@`\x03\x196\x01\x12a\x05 W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x1BWa\n\xE4\x906\x90`\x04\x01a\tzV[\x90`$5\x90a\n\xF2\x82a\n\x81V[a\n\xFAa9FV[0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x14a\n\x9FWa\x0B)a\x0B.\x91a\x0B3\x946\x91a\x0FMV[a9\xABV[aCDV[\0[4a\x06\xE5W`\x03\x19` \x816\x01\x12a\x05 W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x1BW`\xC0\x81`\x04\x01\x92\x826\x03\x01\x12a\x05\x16W`@`\0\x80\x82Q` \x81\x01\x90\x7F\x11\xB8\x8A\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82Ra\x0B\xA9\x81a\x08\x8A\x89`$\x83\x01aD^V[Q\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\xF4a\x0B\xD6a>%V[\x90\x15a\r\xC8W\x80` \x80a\x0B\xEF\x93Q\x83\x01\x01\x91\x01a>\x8AV[\x91a\x0C(a\x0C\x0Fa\x0C\na\x0C\x03\x87\x80a?\x8DV[6\x91a\x0FMV[aA\xEDV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x90\x84`$\x82\x01\x91a\x0CD` a\x0C>\x85\x85a?\xEDV[\x01a@ V[\x90a\x0C\\a\x0CR\x85\x85a?\xEDV[``\x81\x01\x90a@*V[\x92a\x0Cg\x85\x80a?\x8DV[\x90\x93a\x0C\x7Fa\x0Cv\x89\x89a?\xEDV[\x8B\x81\x01\x90a@~V[`Da\x0C\xA6a\x0C\x9Ba\x0C\x91\x8C\x8Ca?\xEDV[`\x80\x81\x01\x90a?\x8DV[\x92\x90\x94\x01\x80\x9Aa?\x8DV[\x93\x90\x92\x8C;\x15a\r\xC3W\x8Ea\x0C\xEC\x96\x8F\x9A`\0\x9BQ\x9C\x8D\x9B\x8C\x9B\x7F\x98\x13\x89\xF2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8DR`\x04\x8D\x01aD\xF5V[\x03\x81\x83\x88Z\xF1\x96\x87\x15a\r\xBEWa\rB\x7FZ\xD8A\xB35\xEC\xEFa\x1D\xECd\x01\xE9$\xA4\x9D/\xFCUv\xBE\xEA;J\xE2\xCF\x0F*n\x14*\xB6\x95a\r\x98\x93a\x06\xB9\x9Aa\r\xA5W[Pa\x0B.\x89a\r=a\x0C\x03\x86\x80a?\x8DV[a9\xD4V[a\x0Cva\r^a\x0C\x03a\rXa\x0CR\x88\x86a?\xEDV[\x90aA\x92V[\x93a\r\x89a\r\x81a\r{a\rr\x86\x80a?\x8DV[\x95\x90\x99\x87a?\xEDV[\x80a?\x8DV[\x92\x90\x94a?\x8DV[\x93\x90\x92\x89Q\x97\x88\x97\x8C\x89aEsV[\x03\x90\xA1Q\x91\x82\x91\x82a\x05mV[\x80a\r\xB2a\r\xB8\x92a\x0E\x85V[\x80a(\xF8V[8a\r+V[aA\x86V[a@\xB1V[\x90a\r\xD5a\x06\xE1\x92aB\xA0V[\x90Q\x91\x82\x91bF\x1B\xCD`\xE5\x1B\x83R`\x04\x83\x01a\x05mV[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`'`$\x82\x01R\x7FABI decoding: invalid byte array`D\x82\x01R\x7F length\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`A`\x04R`$`\0\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0E\x99W`@RV[a\x0EVV[`\xA0\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x0E\x99W`@RV[``\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x0E\x99W`@RV[` \x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x0E\x99W`@RV[`@\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x0E\x99W`@RV[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x0E\x99W`@RV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0E\x99W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x92\x91\x92a\x0FY\x82a\x0F1V[\x91a\x0Fg`@Q\x93\x84a\x0F\x0EV[\x82\x94\x81\x84R\x81\x83\x01\x11a\x0F\x84W\x82\x81` \x93\x84`\0\x96\x017\x01\x01RV[a\r\xECV[\x90\x80`\x1F\x83\x01\x12\x15a\n|W\x81` a\x05~\x935\x91\x01a\x0FMV[\x90`@`\x03\x19\x83\x01\x12a\x05 Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x05\x1BW\x83a\x0F\xD1\x91`\x04\x01a\x0F\x89V[\x92`$5\x91\x82\x11a\x05\x1BWa\x05~\x91`\x04\x01a\x0F\x89V[` a\x10\x01\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x05%V[\x81\x01`\x03\x81R\x03\x01\x90 \x90V[` \x90a\x10(\x92\x82`@Q\x94\x83\x86\x80\x95Q\x93\x84\x92\x01a\x05%V[\x82\x01\x90\x81R\x03\x01\x90 \x90V[4a\x06\xE5W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x10y\x82a\x10ia\x10T6a\x0F\xA4V[\x92\x90\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x05%V[\x81\x01`\x08\x81R\x03\x01\x90 \x90a\x10\x0EV[T\x16`@Q\x90\x81R\xF3[4a\x06\xE5W`@`\x03\x196\x01\x12a\x05 W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x1BW`\0a\x11%V[\x90\x15a\x06\xBDW\0[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x03a\n\x9FWV[5\x90a\n\xB1\x82a\x11qV[```\x03\x19\x82\x01\x12a\x05 Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91`\x045\x83\x81\x11a\x05\x1BW\x82a\x11\xBB\x91`\x04\x01a\tzV[\x93\x90\x93\x92`$5\x91\x82\x11a\x05\x1BWa\x11\xD5\x91`\x04\x01a\tzV[\x90\x91`D5a\x05~\x81a\x11qV[4a\x06\xE5Wa\x06\xB9a\x13\x05a\x12\x1Ba\x12#a\x12\xF2`Ga\x12*g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x12\x0E6a\x11\x8EV[\x98\x93\x90\x99\x91\x926\x91a\x0FMV[\x976\x91a\x0FMV[\x94\x16aQPV[\x92`@Q\x93\x84\x91` \x83\x01\x96\x7Fcommitments/ports/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x88Ra\x12m\x81Q\x80\x92` `2\x88\x01\x91\x01a\x05%V[\x83\x01\x7F/channels/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`2\x82\x01Ra\x12\xA9\x82Q\x80\x93` `<\x85\x01\x91\x01a\x05%V[\x01\x7F/sequences/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`<\x82\x01Ra\x12\xE3\x82Q\x80\x93` \x87\x85\x01\x91\x01a\x05%V[\x01\x03`'\x81\x01\x84R\x01\x82a\x0F\x0EV[Q\x90 `\0R`\0` R`@`\0 \x90V[T`@\x80Q\x82\x81R\x91\x15\x15` \x83\x01R\x90\x91\x82\x91\x82\x01\x90V[`\x03\x19\x90` \x82\x82\x01\x12a\x05 W`\x045\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x05\x1BW\x82`\x80\x92\x03\x01\x12a\x05\x16W`\x04\x01\x90V[4a\x06\xE5Wa\x13^6a\x13\x1EV[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90`@\x90\x81Q` \x81\x01\x93\x7F#n\xBDp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85R\x81a\x13\xBB\x84`$\x83\x01aK\xECV[\x03\x91a\x13\xCF`\x1F\x19\x93\x84\x81\x01\x83R\x82a\x0F\x0EV[`\0\x80\x96\x81\x92Q\x90\x84Z\xF4a\x13\xE2a>%V[\x90\x15a\x167WPa\x144a\x0C\x0Fa\x14.a\x14\ta\x13\xFF\x87\x80aL8V[``\x81\x01\x90a?\x8DV[a\x14&a\x14\x1Ca\x0C\x91\x8A\x80\x96\x95\x96aL8V[\x94\x90\x926\x91a\x0FMV[\x926\x91a\x0FMV[\x90aM3V[\x90a\x14?\x84\x80aL8V[\x91\x80;\x15a\r\xC3Wa\x14\x85\x87\x93\x91\x84\x92\x88Q\x95\x86\x80\x94\x81\x93\x7F#\x01\xC6\xF5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R3\x90`\x04\x84\x01aL\xABV[\x03\x92Z\xF1\x92\x83\x15a\r\xBEW\x86\x92\x83\x94a\x16\x13W[P\x83Qa\x14\xE2W[\x82\x7F4oCQ\xEE\x86]\x86\xA6y\xD0\x0F9\x95\xF0R\x0F\x80=:\"v\x04\xAF\x08C\x0E&\xE94Zza\x14\xDC\x88a\x14\xD1\x89\x80aL8V[\x90Q\x91\x82\x91\x82aM\"V[\x03\x90\xA1\x80\xF3[\x90\x82\x91\x85a\x15aa\x14\xF6a\x13\xFF\x83\x80aL8V[a\x15U\x89\x8Ca\x15\x1Aa\x15\x1Fa\x15\x11a\x0C\x91\x8A\x80\x9C\x99\x9CaL8V[\x92\x90\x99\x80aL8V[aL\xDFV[\x91Q\x97\x88\x95` \x87\x01\x9A\x7F\xB5ny\xDE\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8CR`$\x88\x01aL\xE9V[\x03\x90\x81\x01\x83R\x82a\x0F\x0EV[Q\x91Z\xF4a\x15ma>%V[\x90\x15a\x16\x06WP\x91a\x14\xD1\x82\x7F9\xB1Fh\x93\x0C\x81o$O@s\xC0\xFD\xF4Y\xD3\xDDs\xAEW\x1BW\xB3\xEF\xE8 Y\x19G-*a\x15\xF8\x7F4oCQ\xEE\x86]\x86\xA6y\xD0\x0F9\x95\xF0R\x0F\x80=:\"v\x04\xAF\x08C\x0E&\xE94Zz\x96a\x15\xCFa\x13\xFF\x85a\x14\xDC\x99aL8V[\x92\x90\x91a\x15\xDFa\x0C\x91\x87\x80aL8V[a\x15\xECa\x15\x1A\x89\x80aL8V[\x91\x8AQ\x96\x87\x96\x87aL\xE9V[\x03\x90\xA1\x92\x82\x94\x86\x92Pa\x14\xA1V[\x83a\r\xD5a\x06\xE1\x92aB\xA0V[a\x160\x91\x94P=\x80\x85\x83>a\x16(\x81\x83a\x0F\x0EV[\x81\x01\x90aL\x85V[\x928a\x14\x99V[\x84a\r\xD5a\x06\xE1\x92aB\xA0V[4a\x06\xE5W`\x03\x19` \x816\x01\x12a\x05 W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x1BW`\xE0\x81`\x04\x01\x92\x826\x03\x01\x12a\x05\x16W`@Q\x90` \x82\x01\x91\x7F%lA\x99\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83Ra\x16\xB5\x81a\x08\x8A\x86`$\x83\x01aE\xD0V[`\0\x80\x93\x81\x92Q\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\xF4\x92a\x16\xE9a>%V[\x93\x15a\x17\xF3W\x90\x81a\x17\x06a\x0C\x0Fa\x0C\na\x0C\x03\x84`D\x97a?\x8DV[\x91a\x17\x11\x82\x80a?\x8DV[\x93`$\x83\x01\x94a\x17!\x86\x86a?\x8DV[\x97\x90\x93a\x17>a\x174`d\x88\x01\x89a?\x8DV[\x93\x90\x97\x01\x88a?\x8DV[\x85\x97\x91\x97;\x15a\r\xC3W\x8B\x97\x88\x94a\x17\x86\x93`@Q\x9D\x8E\x9A\x8B\x99\x8A\x98\x7FO\x01\xE5.\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8AR`\x04\x8A\x01aFrV[\x03\x92Z\xF1\x92\x83\x15a\r\xBEWa\x17\xCAa\x17\xD3\x93a\x14\xDC\x92\x7FG\x191\xE9\xCC\xDF\x90\x8B\xFF\xCFl\xB1\xF0\"\x17u\xFA\x8BE\xF2\xE6*\xE5~\xDD\x10K!\xD2;\xAB1\x96a\x17\xE0W[P\x83a?\x8DV[\x93\x90\x92\x80a?\x8DV[\x90`@Q\x94\x85\x94\x85aF\xA2V[\x80a\r\xB2a\x17\xED\x92a\x0E\x85V[\x87a\x17\xC3V[a\x06\xE1a\x06\xC9\x85aB\xA0V[` `\x03\x19\x82\x01\x12a\x05 W`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x05\x1BWa\x05~\x91`\x04\x01a\x0F\x89V[4a\x06\xE5Wa\x06\xB9a\x18>a\x0B)6a\x17\xFFV[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x05HV[\x90\x81`\xA0\x91\x03\x12a\x05\x16W\x90V[` `\x03\x19\x82\x01\x12a\x05 W`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x05\x1BWa\x05~\x91`\x04\x01a\x18RV[4a\x06\xE5Wa\x18\x996a\x18`V[`@Q\x90` \x82\x01\x91\x7F%\xCB\xC3\xA6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83Ra\x18\xD6\x81a\x08\x8A\x84`$\x83\x01aF\xC9V[`\0\x80\x93\x81\x92Q\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\xF4a\x19\ta>%V[\x90\x15a\x06\xBDWPa\x19#a\x0C\x0Fa\x0C\na\x0C\x03\x84\x80a?\x8DV[\x90a\x19.\x81\x80a?\x8DV[\x91\x90` \x82\x01\x92a\x19?\x84\x84a?\x8DV[\x95\x90\x91\x81;\x15a\r\xC3W\x87\x80\x94a\x19\x85`@Q\x99\x8A\x96\x87\x95\x86\x94\x7F\xEFGv\xD2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86R`\x04\x86\x01aF\xA2V[\x03\x92Z\xF1\x92\x83\x15a\r\xBEWa\x17\xCAa\x17\xD3\x93a\x14\xDC\x92\x7F\xF4t\xFCXP\x88@GO\xD7\x94\x07^Vu\xD2\x0B/\xDD\x9C\xA1\xD5\x85X\xBF\xF9ps\x05\xE09\xCF\x96a\x19\xC8WP\x83a?\x8DV[\x80a\r\xB2a\x19\xD5\x92a\x0E\x85V[8a\x17\xC3V[4a\x06\xE5W```\x03\x196\x01\x12a\x05 Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x05\x1BWa\x1A\r\x906\x90`\x04\x01a\x0F\x89V[`$5\x91\x82\x11a\x05\x1BWa\x1A\x7F`\xFF\x91a\x1Afa\x1A1a\x06\xB9\x956\x90`\x04\x01a\x0F\x89V[a\x1AV` `D5\x94a\x1AC\x86a\x11qV[\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x05%V[\x81\x01`\t\x81R\x03\x01\x90 \x90a\x10\x0EV[\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\0R` R`@`\0 \x90V[T\x16`@Q\x91\x82\x91\x82\x91\x90\x91`\xFF` \x82\x01\x93\x16\x90RV[4a\x06\xE5W` `\x03\x196\x01\x12a\x05 Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045a\x1A\xBD\x81a\x11qV[a\x1A\xC5a9FV[\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0`\x0BT\x16\x17`\x0BU`\0\x80\xF3[` `\x03\x19\x82\x01\x12a\x05 W`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x05\x1BWa\x1B\x1F\x91`\x04\x01a\tzV[\x90\x91V[\x90\x81Q\x80\x82R` \x80\x92\x01\x91\x82\x81\x83`\x05\x1B\x82\x01\x95\x01\x93`\0\x91[\x84\x83\x10a\x1BNWPPPPPP\x90V[\x90\x91\x92\x93\x94\x95\x84\x80a\x1Bh\x83\x85`\x01\x95\x03\x87R\x8AQa\x05HV[\x98\x01\x93\x01\x93\x01\x91\x94\x93\x92\x90a\x1B>V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`!`\x04R`$`\0\xFD[`\x04\x11\x15a\x1B\xB1WV[a\x1BxV[\x90`\x04\x82\x10\x15a\x1B\xB1WRV[` a\x05~\x92`@a\x1B\xF1a\x1B\xE1\x85Q``\x85R``\x85\x01\x90a\x05HV[\x84\x86\x01Q\x84\x82\x03\x86\x86\x01Ra\x05HV[\x93\x01Q\x90`@\x81\x85\x03\x91\x01RQ\x91\x81\x81R\x01\x90a\x05HV[\x91\x92\x90\x92`@\x80\x84Ra\x1C'\x85Q`\xA0\x83\x87\x01R`\xE0\x86\x01\x90a\x05HV[\x94` \x91\x82\x82\x01Q\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\x90\x81\x88\x8A\x03\x01``\x89\x01R\x82Q\x80\x8AR\x85\x8A\x01\x90\x86\x80\x82`\x05\x1B\x8D\x01\x01\x95\x01\x91`\0\x90[\x82\x82\x10a\x1C\xD2WPPPPa\n\xB1\x96\x97\x98Pa\x1C\xC9\x92`\x80\x92a\x1C\xA1a\x1C\xB5\x93\x87\x01Q\x85\x8D\x01\x90a\x1B\xB6V[``\x86\x01Q\x90\x8B\x83\x03\x01`\xA0\x8C\x01Ra\x1B\xC3V[\x92\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\xC0\x88\x01RV[\x94\x01\x90\x15\x15\x90RV[\x90\x91\x92\x95\x88\x80a\x1D\r\x8F\x93`\x1F\x19`\x01\x95\x82\x03\x01\x86R\x8AQ\x90\x83a\x1C\xFD\x83Q\x8C\x84R\x8C\x84\x01\x90a\x05HV[\x92\x01Q\x90\x84\x81\x84\x03\x91\x01Ra\x1B#V[\x98\x01\x92\x01\x92\x01\x90\x92\x91a\x1CuV[4a\x06\xE5Wa\x1D)6a\x1A\xF4V[` `@\x92`\0`\x80\x85Qa\x1D=\x81a\x0E\x9EV[``\x80\x82R\x80\x86\x83\x01R\x83\x88\x83\x01R\x87Q\x90a\x1DX\x82a\x0E\xBAV[\x80\x82R\x80\x87\x83\x01R\x88Qa\x1Dk\x81a\x0E\xD6V[\x81\x81R\x89\x83\x01R\x82\x01R\x01R\x82\x84Q\x93\x84\x92\x837\x81\x01`\x04\x81R\x03\x01\x90 a\x06\xB9a\x1D\xACa\x1D\x9D`\x02\x84\x01T`\xFF\x16\x90V[\x92a\x1D\xA7\x84a\x1B\xA7V[aO\xF1V[\x92Q\x92\x83\x92\x15\x15\x90\x83a\x1C\tV[`@`\x03\x19\x82\x01\x12a\x05 Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91`\x045\x83\x81\x11a\x05\x1BW\x82a\x1D\xE7\x91`\x04\x01a\tzV[\x93\x90\x93\x92`$5\x91\x82\x11a\x05\x1BWa\x1B\x1F\x91`\x04\x01a\tzV[`\x05\x11\x15a\x1B\xB1WV[\x90`\x05\x82\x10\x15a\x1B\xB1WRV[\x90`\x03\x82\x10\x15a\x1B\xB1WRV[a\x05~\x91` a\x1E>\x83Q`@\x84R`@\x84\x01\x90a\x05HV[\x92\x01Q\x90` \x81\x84\x03\x91\x01Ra\x05HV[\x90a\x1E\xE3` \x91\x94\x93\x94`@\x84Ra\x1Ek`@\x85\x01\x82Qa\x1E\x0BV[a\x1E|\x83\x82\x01Q``\x86\x01\x90a\x1E\x18V[a\x1E\x95`@\x82\x01Q`\xA0`\x80\x87\x01R`\xE0\x86\x01\x90a\x1E%V[`\x80a\x1E\xD1``\x84\x01Q\x92\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\x93\x84\x89\x83\x03\x01`\xA0\x8A\x01Ra\x1B#V[\x92\x01Q\x90\x85\x83\x03\x01`\xC0\x86\x01Ra\x05HV[\x93\x15\x15\x91\x01RV[4a\x06\xE5Wa\x1FU` a\x1E\xFE6a\x1D\xBAV[\x92```\x80`@\x96\x93\x96Qa\x1F\x12\x81a\x0E\x9EV[`\0\x81R`\0\x85\x82\x01R`@Qa\x1F(\x81a\x0E\xF2V[\x83\x81R\x83\x86\x82\x01R`@\x82\x01R\x82\x80\x82\x01R\x01R\x82`@Q\x93\x84\x92\x837\x81\x01`\x05\x81R\x03\x01\x90 \x91aOOV[a\x1Fl`\xFF\x82T\x16\x91a\x1Fg\x83a\x1E\x01V[aP\xDEV[\x90a\x06\xB9`@Q\x92\x83\x92\x15\x15\x90\x83a\x1EOV[\x80T`\0\x93\x92`\x01\x80\x83\x16\x93\x83\x82\x1C\x93\x85\x15a iW[` \x95\x86\x86\x10\x81\x14a :W\x85\x85R\x90\x81\x15a\x1F\xFDWP`\x01\x14a\x1F\xBCW[PPPPPV[\x90\x93\x94\x95P`\0\x92\x91\x92R\x83`\0 \x92\x84`\0\x94[\x83\x86\x10a\x1F\xE9WPPPP\x01\x01\x908\x80\x80\x80\x80a\x1F\xB5V[\x80T\x85\x87\x01\x83\x01R\x94\x01\x93\x85\x90\x82\x01a\x1F\xD1V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16\x86\x85\x01RPPP\x90\x15\x15`\x05\x1B\x01\x01\x91P8\x80\x80\x80\x80a\x1F\xB5V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\"`\x04R`$`\0\xFD[\x93`\x7F\x16\x93a\x1F\x96V[\x90`@\x91\x82Q\x92a \x83\x84a\x0E\xBAV[\x83\x81Qa \x9B\x81a \x94\x81\x87a\x1F\x7FV[\x03\x82a\x0F\x0EV[\x81R\x81Qa \xB0\x81a \x94\x81`\x01\x88\x01a\x1F\x7FV[` \x82\x01R`\x02a \xD5\x83Q\x94a \xC6\x86a\x0E\xD6V[a \x94\x85Q\x80\x94\x81\x93\x01a\x1F\x7FV[\x83R\x01RV[4a\x06\xE5Wa!Ra \xF1` a\x1AC6a\x17\xFFV[\x81\x01`\x04\x81R\x03\x01\x90 `@Q\x90a!\x14\x82a!\r\x81\x84a\x1F\x7FV[\x03\x83a\x0F\x0EV[a!j`\xFF`\x02\x83\x01T\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x06a!6`\x03\x86\x01a sV[\x94\x01T\x16\x92a!]`@Q\x96\x87\x96`\x80\x88R`\x80\x88\x01\x90a\x05HV[\x92` \x87\x01\x90a\x1B\xB6V[\x84\x82\x03`@\x86\x01Ra\x1B\xC3V[\x90``\x83\x01R\x03\x90\xF3[4a\x06\xE5Wa\x06\xB9a\x18>a!\x886a\x0F\xA4V[\x90a9\xD4V[4a\x06\xE5W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x10y\x82a!\xAB6a\x1D\xBAV[\x92\x82`@\x95\x92\x95Q\x93\x84\x92\x837\x81\x01`\x06\x81R\x03\x01\x90 \x91aOOV[4a\x06\xE5Wa!\xD66a\x18`V[a\"\x13a\x0C\x0Fa\x14.a!\xF6a!\xEC\x85\x80aL8V[` \x81\x01\x90a?\x8DV[a\x14&a\x14\x1Ca\"\t\x88\x80\x96\x95\x96aL8V[`@\x81\x01\x90a?\x8DV[\x90a\"\x1E\x81\x80aL8V[\x91` \x82\x01\x90a\".\x82\x84a?\x8DV[\x90\x82;\x15a\r\xC3W`@Q\x92\x83\x80\x92\x7F\xFB\x8BS.\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R\x81a\"v`\0\x9A\x8B\x97\x88\x943\x92`\x04\x86\x01aN\x1DV[\x03\x92Z\xF1\x80\x15a\r\xBEWa#@W[P\x82\x80`@Q` \x81\x01\x90\x7FY\xF3yv\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82Ra\"\xC4\x81a\x08\x8A\x88`$\x83\x01aN]V[Q\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\xF4a\"\xF1a>%V[\x90\x15a\x06\xBDWP\x81a#1a\x14\xDC\x92a#+\x83\x7FGG\x14Pv^n\x1B\x0B\x05[\xA2\xA1\xDE\x04\xD4\xCEq\xF7x\xC9+0nrP\x83\xEB\x12\r\xFD\x89\x96aL8V[\x92a?\x8DV[`@\x93\x91\x93Q\x93\x84\x93\x84aN\x8BV[\x80a\r\xB2a#M\x92a\x0E\x85V[8a\"\x85V[4a\x06\xE5W` `\x01`\xFFa#\x8C\x83a\x1Afa#n6a\x11\x8EV[\x95\x90\x92\x91\x93\x82`@Q\x93\x84\x92\x837\x81\x01`\t\x81R\x03\x01\x90 \x91aOOV[T\x16\x14`@Q\x90\x81R\xF3[\x90`\x01` `@Qa#\xA8\x81a\x0E\xF2V[a#\xD7\x81\x95`@Qa#\xBE\x81a \x94\x81\x85a\x1F\x7FV[\x83Ra#\xD0`@Q\x80\x96\x81\x93\x01a\x1F\x7FV[\x03\x84a\x0F\x0EV[\x01RV[4a\x06\xE5Wa$Ra$\x04` a#\xF4a\x10T6a\x0F\xA4V[\x81\x01`\x05\x81R\x03\x01\x90 \x90a\x10\x0EV[a\x06\xB9`\x04a$c\x83T\x93a$/a$\x1E`\x01\x83\x01a#\x97V[\x91a#\xD0`@Q\x80\x96\x81\x93\x01a\x1F\x7FV[`@Q\x95\x85a$B\x88`\xFF\x81\x99\x16a\x1E\x0BV[`\xFF` \x88\x01\x91`\x08\x1C\x16a\x1E\x18V[`\x80`@\x86\x01R`\x80\x85\x01\x90a\x1E%V[\x90\x83\x82\x03``\x85\x01Ra\x05HV[4a\x06\xE5Wa$\x7F6a\x18`V[`@Q\x90` \x82\x01\x91\x7F[\xD5\x1Bb\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83Ra$\xBC\x81a\x08\x8A\x84`$\x83\x01aF\xC9V[`\0\x80\x93\x81\x92Q\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\xF4a$\xEFa>%V[\x90\x15a\x06\xBDWPa%\ta\x0C\x0Fa\x0C\na\x0C\x03\x84\x80a?\x8DV[\x90a%\x14\x81\x80a?\x8DV[\x91\x90` \x82\x01\x92a%%\x84\x84a?\x8DV[\x95\x90\x91\x81;\x15a\r\xC3W\x87\x80\x94a%k`@Q\x99\x8A\x96\x87\x95\x86\x94\x7F\xA1\x13\xE4\x11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86R`\x04\x86\x01aF\xA2V[\x03\x92Z\xF1\x92\x83\x15a\r\xBEWa\x17\xCAa\x17\xD3\x93a\x14\xDC\x92\x7F:2\xA2\xEF$\x99\x03\x18\xA42\xF4t\xA6\\\xA0\x04\xFAy\xB3\xD7\xB8\xF5\xB0=\xC2>\xD4\x1FJF\xA2\xE5\x96a\x19\xC8WP\x83a?\x8DV[4a\x06\xE5Wa\x06\xB9a\x13\x05a\x12\x1Ba\x12#a\x12\xF2`@a%\xD9g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x12\x0E6a\x11\x8EV[\x92\x81Q\x93\x84\x91` \x83\x01\x96\x7Facks/ports/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x88Ra&\x1B\x81Q\x80\x92` `+\x88\x01\x91\x01a\x05%V[\x83\x01\x7F/channels/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`+\x82\x01Ra&W\x82Q\x80\x93` `5\x85\x01\x91\x01a\x05%V[\x01\x7F/sequences/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`5\x82\x01Ra&\x91\x82Q\x80\x93` \x87\x85\x01\x91\x01a\x05%V[\x01\x03` \x81\x01\x84R\x01\x82a\x0F\x0EV[4a\x06\xE5Wa&\xAE6a\x13\x1EV[`\0\x80`@Q` \x81\x01\x90\x7Fjr\x8F,\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R` `$\x82\x01Ra'7\x81a''a'\x08a&\xF7\x89\x80a;vV[`\x80`D\x86\x01R`\xC4\x85\x01\x91a;\xD5V[a'\x15` \x8A\x01\x8Aa;vV[\x90`C\x19\x85\x84\x03\x01`d\x86\x01Ra;\xD5V[a\x08\x8A`\x84\x83\x01`@\x8A\x01aD5V[Q\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\xF4a'da>%V[\x90\x15a\x06\xBDW\x7F\x9B\x91\x99#D@\xA2\xEE\x894\xBA\x890\x03\xCB\xA9\x94)Qm\xF8\xF1]\xDA\x11\xBA\x90k\xC7\x07d\xE4a'\x95\x83\x80a?\x8DV[\x90a'\xA5`@Q\x92\x83\x92\x83aH\x8EV[\x03\x90\xA1\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC`@\x91\x01\x12a\x05\x16W`$\x90V[\x90a\x1E\xE3` \x91\x94\x93\x94`@\x84R`@\x84\x01\x90a\x05HV[4a\x06\xE5W```\x03\x196\x01\x12a\x05 W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x1BWa(\"\x906\x90`\x04\x01a\tzV[a(+6a'\xAAV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa(Sa(N6\x85\x87a\x0FMV[a:=V[\x16\x80;\x15a\r\xC3Wa(\xAF\x93`\0\x93a(\xA4\x93`@Q\x96\x87\x95\x86\x94\x85\x94\x7Fl\xF4K\xF4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86R```\x04\x87\x01R`d\x86\x01\x91a;\xD5V[\x91`$\x84\x01\x90aD5V[\x03\x91Z\xFA\x90\x81\x15a\r\xBEW`\0\x90\x81\x92a(\xD4W[Pa\x06\xB9`@Q\x92\x83\x92\x83a'\xD9V[\x90a(\xF1\x92P=\x80\x91\x83>a(\xE9\x81\x83a\x0F\x0EV[\x81\x01\x90aO\x15V[\x908a(\xC4V[`\0\x91\x03\x12a\x05 WV[4a\x06\xE5W`\0\x80`\x03\x196\x01\x12a\x05 Wa)\x1Da9FV[\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0CT\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16`\x0CU\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\x80\xF3[4a\x06\xE5Wa)\x926a\x1A\xF4V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa)\xB5a(N6\x84\x86a\x0FMV[\x16\x91\x82;\x15a\r\xC3Wa(\xAF\x92`\0\x92`@Q\x80\x95\x81\x94\x82\x93\x7Fv\xC8\x1CB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R` `\x04\x85\x01R`$\x84\x01\x91a;\xD5V[4a\x06\xE5W`\0`\x03\x196\x01\x12a\x05 W` `\x0BT`\xC0\x1C`@Q\x90\x81R\xF3[4a\x06\xE5W` a*6a(N6a\x17\xFFV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[4a\x06\xE5W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x10y\x82a*ta\x10T6a\x0F\xA4V[\x81\x01`\x06\x81R\x03\x01\x90 \x90a\x10\x0EV[4a\x06\xE5W` `\x03\x196\x01\x12a\x05 W`\x045`\0R`\0` R` `@`\0 T`@Q\x90\x81R\xF3[4a\x06\xE5W`\0`\x03\x196\x01\x12a\x05 W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0CT\x16`@Q\x90\x81R\xF3[4a\x06\xE5W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa+\r\x82a\x1AC6a\x17\xFFV[\x81\x01`\x01\x81R\x03\x01\x90 T\x16`@Q\x90\x81R\xF3[4a\x06\xE5W`\0`\x03\x196\x01\x12a\x05 W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT`\x80\x1C\x16`@Q\x90\x81R\xF3[`\x03\x19\x90` \x82\x82\x01\x12a\x05 W`\x045\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x05\x1BW\x82`@\x92\x03\x01\x12a\x05\x16W`\x04\x01\x90V[4a\x06\xE5Wa+\x8C6a+LV[`@Q\x90` \x82\x01\x91\x7F\xA0l\xB3\xA2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83Ra+\xC9\x81a\x08\x8A\x84`$\x83\x01aG)V[`\0\x80\x93\x81\x92Q\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\xF4a+\xFCa>%V[\x90\x15a\x06\xBDWPa,\x16a\x0C\x0Fa\x0C\na\x0C\x03\x84\x80a?\x8DV[\x90a,!\x81\x80a?\x8DV[\x91\x90` \x82\x01\x92a,2\x84\x84a?\x8DV[\x95\x90\x91\x81;\x15a\r\xC3W\x87\x80\x94a,x`@Q\x99\x8A\x96\x87\x95\x86\x94\x7F\xE7J\x1A\xC2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86R`\x04\x86\x01aF\xA2V[\x03\x92Z\xF1\x92\x83\x15a\r\xBEWa\x17\xCAa\x17\xD3\x93a\x14\xDC\x92\x7F\x1CHi\xAAT\xEA\xF3\xD7\x93{b>\x04\x12\x80\xEF\xC3 \xF6\xC8\x03(\n\x84\x8E\x13\x98\x8BL\xFC2Z\x96a\x19\xC8WP\x83a?\x8DV[4a\x06\xE5Wa,\xC96a\x18`V[a,\xDFa\x0C\x0Fa\x14.a!\xF6a!\xEC\x85\x80aL8V[\x90a,\xEA\x81\x80aL8V[\x82;\x15a\r\xC3Wa-1`@Q\x80\x94\x81\x80\x94\x7FR\xC7\x15}\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R`\0\x97\x88\x95\x86\x923\x90`\x04\x84\x01aL\xABV[\x03\x92Z\xF1\x80\x15a\r\xBEWa-\xEDW[P\x81\x80`@Q` \x81\x01\x90\x7F\xAA\x18\xC8\xB1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82Ra-\x7F\x81a\x08\x8A\x87`$\x83\x01aN\xA2V[Q\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\xF4a-\xACa>%V[\x90\x15a\x06\xBDWPa\x14\xDCa-\xE1\x82\x7F\xA6\xCC\xDF\xD0b\x94\xBB\xB4\x81\xB7\xB0\x8A\xB1p\xC17|\xCC\xDC\xAA\x9E5\xB2\xE3F\xA3n\xE3*\x1F\x8F\x06\x93aL8V[`@Q\x91\x82\x91\x82aM\"V[\x80a\r\xB2a-\xFA\x92a\x0E\x85V[8a-@V[4a\x06\xE5W`\xC0`\x03\x196\x01\x12a\x05 Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x05\x1BWa.2\x906\x90`\x04\x01a\tzV[\x90`$5\x83\x81\x11a\x05\x1BWa.K\x906\x90`\x04\x01a\tzV[`@`C\x196\x01\x12a\x05\x16W`\x845\x91a.d\x83a\x11qV[`\xA45\x95\x86\x11a\x05\x1BWa.\x7Fa\x0B3\x966\x90`\x04\x01a\tzV[\x95\x90\x94aIhV[4a\x06\xE5W`\x03\x19` \x816\x01\x12a\x05 W`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x05\x1BW\x81`\x04\x01\x91a\x01`\x80\x92\x826\x03\x01\x12a\x05\x16W`@Q\x80\x91` \x82\x01\x93\x7F\xB51\x86\x1F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85R`$\x83\x01` \x90Ra.\xFE\x86\x80a;vV[\x90\x91`D\x85\x01Ra\x01\xA4\x84\x01\x90a/\x14\x92a;\xD5V[a/!`$\x83\x01\x87a;vV[\x91`C\x19\x92\x83\x86\x83\x03\x01`d\x87\x01Ra/9\x92a;\xD5V[a/F`D\x84\x01\x88a<2V[\x90\x82\x85\x82\x03\x01`\x84\x86\x01Ra/Z\x91aG\xFFV[a/g`d\x84\x01\x88a;vV[\x85\x83\x03\x84\x01`\xA4\x87\x01Ra/{\x92\x91a;\xD5V[a/\x88`\x84\x84\x01\x88a;vV[\x85\x83\x03\x84\x01`\xC4\x87\x01Ra/\x9C\x92\x91a;\xD5V[a/\xA9`\xA4\x84\x01\x88a;vV[\x85\x83\x03\x84\x01`\xE4\x87\x01Ra/\xBD\x92\x91a;\xD5V[a/\xCA`\xC4\x84\x01\x88a;vV[\x90\x92\x85\x83\x03\x01a\x01\x04\x86\x01Ra/\xDF\x92a;\xD5V[\x90a\x01$a/\xF2\x84\x82\x01`\xE4\x84\x01aD5V[a0\x02\x91a\x01d\x85\x01\x91\x01aD5V[\x03`\x1F\x19\x81\x01\x82Ra0\x14\x90\x82a\x0F\x0EV[Q\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90Z\x92`\0\x93\x92\x84\x93\xF4a0Ha>%V[\x90\x15a\x06\xBDW\x7F\xF8\xF9MW\x9E\x8F\x94\xB2\x11\x11B\xA3\x97\xC6\x1F\xBA\xBC\x0B\xC6d\xD4\xF8p\x05\x0E\xBE\xCCB\n\xFA\xA1\x94a'\x95\x83\x80a?\x8DV[4a\x06\xE5W`\x80`\x03\x196\x01\x12a\x05 Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x05\x1BWa0\xAB\x906\x90`\x04\x01a\tzV[\x90`$5\x83\x81\x11a\x05\x1BWa0\xC4\x906\x90`\x04\x01a\tzV[`D\x94\x91\x945\x91a0\xD4\x83a\x11qV[`d5\x90\x81\x11a\x05\x1BWa0\xEC\x906\x90`\x04\x01a\tzV[\x92\x90\x91a1\x10a1\x0Ba1\x006\x89\x89a\x0FMV[a!\x886\x85\x8Ca\x0FMV[aJjV[\x15a\n\x9FW`\0\x80\x86\x89a1\\\x8Aa\x08\x8A\x8A\x8A\x8A\x8A`@Q\x97\x88\x96` \x88\x01\x9A\x7F\xB5ny\xDE\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8CR`$\x89\x01aM\xE2V[Q\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\xF4\x96a1\x8Aa>%V[\x97\x15a1\xC7W\x7F9\xB1Fh\x93\x0C\x81o$O@s\xC0\xFD\xF4Y\xD3\xDDs\xAEW\x1BW\xB3\xEF\xE8 Y\x19G-*\x97P\x90a'\xA5\x94\x93\x92\x91`@Q\x97\x88\x97\x88aM\xE2V[a\x06\xE1a\x06\xC9\x89aB\xA0V[4a\x06\xE5Wa\x06\xB9a \x94a\x18>a1\xEF` a\x1AC6a\x17\xFFV[\x81\x01`\x02\x81R\x03\x01\x90 `@Q\x92\x83\x80\x92a\x1F\x7FV[4a\x06\xE5W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x10y\x82a2%a\x10T6a\x0F\xA4V[\x81\x01`\x07\x81R\x03\x01\x90 \x90a\x10\x0EV[4a\x06\xE5W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x10ya2]6a\x17\xFFV[a\x0F\xE8V[4a\x06\xE5W`\0`\x03\x196\x01\x12a\x05 W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT\x16`@Q\x90\x81R\xF3[4a\x06\xE5W`\0\x80a2\x9B6a\x04\xE4V[`@Qa33\x81a\x08\x8A` \x82\x01\x94\x7F\xD5\xA2D\x81\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86R` `$\x84\x01Ra2\xF2a2\xE1\x82\x80a;vV[```D\x87\x01R`\xA4\x86\x01\x91a;\xD5V[a3$a3\x19a3\x05` \x85\x01\x85a;vV[`C\x19\x94\x91\x85\x89\x84\x03\x01`d\x8A\x01Ra;\xD5V[\x92`@\x81\x01\x90a;vV[\x91\x85\x84\x03\x01`\x84\x86\x01Ra;\xD5V[Q\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\xF4a3`a>%V[\x90\x15a\x06\xBDWa3|\x81` \x80a\x06\xB9\x94Q\x83\x01\x01\x91\x01a>\x8AV[\x7F`\x1B\xFC\xC4U\xD5\xD4\xD7s\x8F\x8Cj\xC22\xE0\xD7\xCC\x9C1\xDA\xB8\x11\xF1\xD8|\x10\n\xF0\xB7\xFC: `@Q\x80a\x06\xAA\x84\x82a\x05mV[4a\x06\xE5W`\0\x80a3\xBC6a+LV[`@Qa\x11<\x81a\x08\x8A` \x82\x01\x94\x7F\xDAl\xEAU\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86R` `$\x84\x01Ra'\x15a4\x16a4\x05\x83\x80a;vV[`@`D\x88\x01R`\x84\x87\x01\x91a;\xD5V[\x91` \x81\x01\x90a;vV[4a\x06\xE5Wa4/6a+LV[`@`\0\x80\x82Q` \x81\x01\x90\x7F\xDD4i\xFC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82Ra4o\x81a\x08\x8A\x88`$\x83\x01a=\xDEV[Q\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\xF4a4\x9Ca>%V[\x90\x15a\r\xC8W\x80` \x80a4\xB5\x93Q\x83\x01\x01\x91\x01a>\x8AV[\x90a4\xC9a\x0C\x0Fa\x0C\na\x0C\x03\x86\x80a?\x8DV[\x92` \x81\x01\x90a4\xDE` a\x0C>\x84\x84a?\xEDV[\x91a4\xECa\x0CR\x82\x84a?\xEDV[\x93\x90a4\xF8\x84\x80a?\x8DV[a5\x11a5\x08\x86\x88\x96\x94\x96a?\xEDV[\x89\x81\x01\x90a@~V[a5\x1Ea\x0C\x91\x87\x89a?\xEDV[\x91\x8C;\x15a\r\xC3W\x8Ba5a\x94`\0\x98\x8DQ\x9C\x8D\x99\x8A\x99\x7FD\xDD\x968\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8BR`\x04\x8B\x01aA\x1BV[\x03\x81\x83\x8AZ\xF1\x80\x15a\r\xBEWa\x06\xB9\x96\x7F\xE9xM\xBF\x97\xF9p\xE7\xF0\x98\xB5\xA3\xE7\xE3\xBE\xBD\xDDu\xC1K\xD6\xBET\x142>\xEE\xDF!\x06\x1B\n\x94a5\xAE\x92a5\xF6W[Pa\x0B.\x87a\r=a\x0C\x03\x87\x80a?\x8DV[a\r\x98a5\xC4a\x0C\x03a\rXa\x0CR\x85\x87a?\xEDV[\x91a5\xE9a\r{a5\xE0a5\xD8\x87\x80a?\x8DV[\x94\x90\x97a?\xEDV[\x88\x81\x01\x90a@~V[\x91\x87Q\x95\x86\x95\x8A\x87aA\xA2V[\x80a\r\xB2a6\x03\x92a\x0E\x85V[8a5\x9CV[` a6\"\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x05%V[\x81\x01`\n\x81R\x03\x01\x90 \x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`2`\x04R`$`\0\xFD[\x80T\x82\x10\x15a6vW`\0R` `\0 \x01\x90`\0\x90V[a6/V[4a\x06\xE5W`@`\x03\x196\x01\x12a\x05 W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x1BW6`#\x82\x01\x12\x15a\n|Wa6\xBD\x906\x90`$\x81`\x04\x015\x91\x01a\x0FMV[a6\xC9`$5\x91a6\tV[\x90\x81T\x81\x10\x15a\n\x9FWa6\xDC\x91a6^V[\x90T`@Q`\x03\x92\x90\x92\x1B\x1Cs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R\x80` \x81\x01\x03\x90\xF3[4a\x06\xE5W`\0`\x03\x196\x01\x12a\x05 W` `\x0BTg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91`@\x1C\x16\x81R\xF3[4a\x06\xE5W`\xC0`\x03\x196\x01\x12a\x05 W`\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x815\x81\x81\x11a\x05\x1BWa7f\x906\x90\x84\x01a\tzV[\x90\x91`$5\x81\x81\x11a\x05\x1BWa7\x7F\x906\x90\x86\x01a\x18RV[\x90`D5\x81\x81\x11a\x05\x1BWa7\x97\x906\x90\x87\x01a\tzV[\x90`d5\x83\x81\x11a\x05\x1BWa7\xAF\x906\x90\x89\x01a\tzV[\x94\x90\x93`\x845\x90\x81\x11a\x05\x1BWa\x0B3\x98a7\xCC\x916\x91\x01a\x18RV[\x95a7\xD5a\n\xA4V[\x97aQ\xD5V[4a\x06\xE5W` `\x03\x196\x01\x12a\x05 W`\x045a7\xF8\x81a\n\x81V[a8\0a9FV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x91\x16\x90\x81\x15a8rW`\x0CT\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17`\x0CU\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0`\0\x80\xA3\0[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FOwnable: new owner is the zero a`D\x82\x01R\x7Fddress\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`5`$\x82\x01R\x7FContract does not have fallback `D\x82\x01R\x7Fnor receive functions\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0CT\x163\x03a9gWV[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R` `$\x82\x01R\x7FOwnable: caller is not the owner`D\x82\x01R\xFD[a\x05~` `@Q\x83a9\xC7\x82\x95Q\x80\x92\x85\x80\x86\x01\x91\x01a\x05%V[\x81\x01\x03\x80\x84R\x01\x82a\x0F\x0EV[`!a\x05~\x91`@Q\x93\x81a9\xF3\x86\x93Q\x80\x92` \x80\x87\x01\x91\x01a\x05%V[\x82\x01\x7F/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01Ra:.\x82Q\x80\x93` \x87\x85\x01\x91\x01a\x05%V[\x01\x03`\x01\x81\x01\x84R\x01\x82a\x0F\x0EV[a:[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91a\x0F\xE8V[T\x16\x80\x15a:fW\x90V[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1A`$\x82\x01R\x7FIBCStore: client not found\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1E`$\x82\x01R\x7FInvalid calldata access length\0\0`D\x82\x01R\xFD[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1E`$\x82\x01R\x7FInvalid calldata access stride\0\0`D\x82\x01R\xFD[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1E`$\x82\x01R\x7FInvalid calldata access offset\0\0`D\x82\x01R\xFD[\x905\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x826\x03\x01\x81\x12\x15a;\xD0W\x01` \x815\x91\x01\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a;\xCBW\x816\x03\x83\x13a;\xC6WV[a:\xEEV[a:\xAAV[a;2V[`\x1F\x82` \x94\x93`\x1F\x19\x93\x81\x86R\x86\x86\x017`\0\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x905\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x826\x03\x01\x81\x12\x15a;\xD0W\x01\x90V[`\x03\x11\x15a\n\x9FWV[\x905\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC1\x826\x03\x01\x81\x12\x15a;\xD0W\x01\x90V[a\x05~\x91a<\x91a<\x86a\x83\x85`\x01\x95\x03\x88Ra=8\x8C\x88a;vV[\x90a;\xD5V[\x99\x01\x94\x01\x94\x01\x92\x95\x94\x93\x91\x90a=\tV[\x805\x91`\x05\x83\x10\x15a\n\x9FWa=h\x81a\x05~\x94a\x1E\x0BV[a=\x83` \x83\x015a=y\x81a<(V[` \x83\x01\x90a\x1E\x18V[a=\xD0a=\xC5a=\xAAa=\x99`@\x86\x01\x86a<2V[`\xA0`@\x86\x01R`\xA0\x85\x01\x90a\x13a>\x08a=\xF7\x84\x80a;vV[`@` \x86\x01R``\x85\x01\x91a;\xD5V[\x92` \x81\x01\x90a;\xF6V[\x90`@`\x1F\x19\x82\x85\x03\x01\x91\x01Ra=OV[=\x15a>PW=\x90a>6\x82a\x0F1V[\x91a>D`@Q\x93\x84a\x0F\x0EV[\x82R=`\0` \x84\x01>V[``\x90V[\x90\x92\x91\x92a>b\x81a\x0F1V[\x91a>p`@Q\x93\x84a\x0F\x0EV[\x82\x94\x82\x84R\x82\x82\x01\x11a\x0F\x84W` a\n\xB1\x93\x01\x90a\x05%V[` \x81\x83\x03\x12a\x05 W\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x05\x1BW\x01\x90\x80`\x1F\x83\x01\x12\x15a\n|W\x81Qa\x05~\x92` \x01a>UV[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FInvalid calldata tail offset\0\0\0\0`D\x82\x01R\xFD[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FInvalid calldata tail length\0\0\0\0`D\x82\x01R\xFD[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FCalldata tail too short\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a?\xE8W\x01\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a?\xE3W` \x01\x91\x816\x03\x83\x13a?\xDEWV[a?IV[a?\x05V[a>\xC1V[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x816\x03\x01\x82\x12\x15a?\xE8W\x01\x90V[5a\x05~\x81a<(V[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a?\xE8W\x01\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a?\xE3W` \x01\x91\x81`\x05\x1B6\x03\x83\x13a?\xDEWV[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC1\x816\x03\x01\x82\x12\x15a?\xE8W\x01\x90V[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FTarget contract does not contain`D\x82\x01R\x7F code\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x97\x95\x91\x93aAx\x95aANa\x05~\x9B\x99\x96aAj\x96`\xC0` \x8EaAB\x81aA\\\x9Aa\x1E\x18V[\x01R`\xC0\x8D\x01\x91a<\xF2V[\x91\x8A\x83\x03`@\x8C\x01Ra;\xD5V[\x90\x87\x82\x03``\x89\x01Ra\x05HV[\x90\x85\x82\x03`\x80\x87\x01Ra=\x90\xFD[\x90\x15a6vW\x80a\x1B\x1F\x91a?\x8DV[\x94\x92\x90\x93aA\xD1aA\xDF\x93aA\xC3a\x05~\x99\x97`\x80\x8AR`\x80\x8A\x01\x90a\x05HV[\x90\x88\x82\x03` \x8A\x01Ra\x05HV[\x91\x86\x83\x03`@\x88\x01Ra;\xD5V[\x92``\x81\x85\x03\x91\x01Ra;\xD5V[aA\xF6\x90a9\xABV[aB\x08aB\x02\x82a6\tV[\x91a6\tV[T\x15aB7W\x80T\x15a6vW`\0Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF` `\0 T\x16\x90V[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`$\x80\x82\x01R\x7FlookupModuleByPort: module not f`D\x82\x01R\x7Found\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`D\x81Q\x10aB\xBFW\x80`$\x80`\x04a\x05~\x94\x01Q\x83\x01\x01\x91\x01a>\x8AV[P`@QaB\xCC\x81a\x0E\xF2V[`\x1D\x81R\x7FTransaction reverted silently\0\0\0` \x82\x01R\x90V[c\xFF\xFF\xFF\xFF\x80\x91\x16\x90\x81\x14aC\x0EW`\x01\x01\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\x11`\x04R`$`\0\xFD[\x15a\n\x9FWV[\x91\x90`\0\x92\x83[aCT\x82a6\tV[Tc\xFF\xFF\xFF\xFF\x82\x16\x10\x15aC\xACWaCt\x81aCo\x84a6\tV[a6^V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90T\x81\x86\x16\x92`\x03\x1B\x1C\x16\x14aC\xA8WaC\xA3\x90aB\xF9V[aCKV[\x84\x80\xFD[PaC\xB9\x91\x92\x93Pa6\tV[\x80Th\x01\0\0\0\0\0\0\0\0\x81\x10\x15a\x0E\x99WaC\xDB\x91`\x01\x82\x01\x81Ua6^V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x91\x92\x80\x84T\x92`\x03\x1B\x93\x16\x83\x1B\x92\x1B\x19\x16\x17\x90UV[` `D5aD\x15\x81a\x11qV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x91\x16\x83R`d5aD/\x81a\x11qV[\x16\x91\x01RV[` \x90\x81\x815\x91aDE\x83a\x11qV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x93\x16\x85R\x015aD/\x81a\x11qV[\x90a\x05~\x90` \x83R`\x80`\xA0aD\xECaD\x8CaD{\x85\x80a;vV[`\xC0` \x8A\x01R`\xE0\x89\x01\x91a;\xD5V[aD\xD0aD\xB3aD\x9F` \x88\x01\x88a;\xF6V[\x92`\x1F\x19\x93\x84\x8B\x83\x03\x01`@\x8C\x01Ra=OV[aD\xC0`@\x88\x01\x88a;vV[\x90\x84\x8B\x84\x03\x01``\x8C\x01Ra;\xD5V[\x90aD\xDE``\x87\x01\x87a;vV[\x91\x89\x84\x03\x01\x86\x8A\x01Ra;\xD5V[\x94\x01\x91\x01aD5V[\x99\x97\x95\x90aEW\x94a\x05~\x9C\x9A\x96aE-aEI\x95aEe\x9B\x97\x8F\x80aE `\xE0\x92aE;\x99a\x1E\x18V[\x81` \x82\x01R\x01\x91a<\xF2V[\x8D\x81\x03`@\x8F\x01R\x91a;\xD5V[\x90\x8A\x82\x03``\x8C\x01Ra\x05HV[\x90\x88\x82\x03`\x80\x8A\x01Ra%V[\x98\x15aJ^W\x90aJY\x94\x93\x92\x91aJL\x8A` \x80\x7F*\x89\xCA\x0E\x96*a\xB8\x11Uu\xDAc\xF5K\xB2I\xCF\x017\x94\x7F\xC9\xAB\x01j\xC9\xDF\x88\xAA4~\x9C\x9DQ\x83\x01\x01\x91\x01aH\xF4V[\x96`@Q\x98\x89\x98\x89aI\tV[\x03\x90\xA1V[a\x06\xE1a\x06\xC9\x8AaB\xA0V[`\0[aJv\x82a6\tV[Tc\xFF\xFF\xFF\xFF\x82\x16\x10\x15aJ\xCAWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFaJ\xA6\x82aCo\x85a6\tV[\x91\x90T3\x92`\x03\x1B\x1C\x16\x14aJ\xC3WaJ\xBE\x90aB\xF9V[aJmV[PP`\x01\x90V[PP`\0\x90V[\x905\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFE\xE1\x826\x03\x01\x81\x12\x15a;\xD0W\x01\x90V[\x90a\x05~\x90aK\xBEaK\xA3aK\x88aKmaKRa\x01 aK5\x87aK'\x8Ba\x11\x83V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90RV[aKB` \x8A\x01\x8Aa;vV[\x90\x91\x80` \x8A\x01R\x88\x01\x91a;\xD5V[aK_`@\x89\x01\x89a;vV[\x90\x87\x83\x03`@\x89\x01Ra;\xD5V[aKz``\x88\x01\x88a;vV[\x90\x86\x83\x03``\x88\x01Ra;\xD5V[aK\x95`\x80\x87\x01\x87a;vV[\x90\x85\x83\x03`\x80\x87\x01Ra;\xD5V[aK\xB0`\xA0\x86\x01\x86a;vV[\x90\x84\x83\x03`\xA0\x86\x01Ra;\xD5V[\x92aK\xCF`\xC0\x83\x01`\xC0\x83\x01aD5V[aK\xDDa\x01\0\x80\x92\x01a\x11\x83V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x91\x01RV[\x90a\x05~\x90` \x83R`@``aD\xECaL\x1AaL\t\x85\x80aJ\xD1V[`\x80` \x89\x01R`\xA0\x88\x01\x90aK\x03V[aL'` \x86\x01\x86a;vV[\x90`\x1F\x19\x89\x84\x03\x01\x86\x8A\x01Ra;\xD5V[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFE\xE1\x816\x03\x01\x82\x12\x15a?\xE8W\x01\x90V[\x90\x80`\x1F\x83\x01\x12\x15a\n|W\x81Qa\x05~\x92` \x01a>UV[\x90` \x82\x82\x03\x12a\x05 W\x81Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x1BWa\x05~\x92\x01aLkV[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFaL\xD8` \x92\x95\x94\x95`@\x85R`@\x85\x01\x90aK\x03V[\x94\x16\x91\x01RV[5a\x05~\x81a\x11qV[\x92a\x05~\x96\x94aH\xC6aM\x0E\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x95`\x80\x88R`\x80\x88\x01\x91a;\xD5V[\x93\x16`@\x82\x01R``\x81\x84\x03\x91\x01Ra\x05HV[\x90` a\x05~\x92\x81\x81R\x01\x90aK\x03V[\x90aM=\x91a9\xD4V[aMIaB\x02\x82a6\tV[T\x15aMxW\x80T\x15a6vW`\0Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF` `\0 T\x16\x90V[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`'`$\x82\x01R\x7FlookupModuleByChannel: module no`D\x82\x01R\x7Ft found\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x92a\x05~\x97\x95\x96\x94aH\xC6aN\t\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x95`\x80\x88R`\x80\x88\x01\x91a;\xD5V[\x94\x16`@\x82\x01R``\x81\x85\x03\x91\x01Ra;\xD5V[\x92`@\x92aL\xD8\x91aNOs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94\x98\x97\x98``\x88R``\x88\x01\x90aK\x03V[\x91\x86\x83\x03` \x88\x01Ra;\xD5V[\x90a\x05~\x90` \x83R```\x80aD\xECaF\xF7aNz\x85\x80aJ\xD1V[`\xA0` \x89\x01R`\xC0\x88\x01\x90aK\x03V[\x91aF\xBBa\x05~\x94\x92`@\x85R`@\x85\x01\x90aK\x03V[` \x81R`\xA0g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x80aN\xF2aN\xD3aN\xC3\x87\x80aJ\xD1V[\x85` \x88\x01R`\xC0\x87\x01\x90aK\x03V[aN\xE0` \x88\x01\x88a;vV[\x90`\x1F\x19\x88\x84\x03\x01`@\x89\x01Ra;\xD5V[\x94aO\x03``\x86\x01`@\x83\x01aD5V[\x015aO\x0E\x81a\x11qV[\x16\x91\x01R\x90V[\x91\x90`@\x83\x82\x03\x12a\x05 W\x82Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x1BW` \x91aO@\x91\x85\x01aLkV[\x92\x01Q\x80\x15\x15\x81\x03a\n\x9FW\x90V[` \x91\x92\x83`@Q\x94\x85\x93\x847\x82\x01\x90\x81R\x03\x01\x90 \x90V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0E\x99W`\x05\x1B` \x01\x90V[\x90\x81TaO\x8C\x81aOhV[\x92`@\x93aO\x9C\x85Q\x91\x82a\x0F\x0EV[\x82\x81R\x80\x94` \x80\x92\x01\x92`\0R\x81`\0 \x90`\0\x93[\x85\x85\x10aO\xC2WPPPPPPV[`\x01\x84\x81\x92\x84QaO\xD7\x81a \x94\x81\x8Aa\x1F\x7FV[\x81R\x01\x93\x01\x94\x01\x93\x91aO\xB3V[`\x04\x82\x10\x15a\x1B\xB1WRV[\x90`@\x91\x82Q\x90aP\x01\x82a\x0E\x9EV[\x81\x93\x80QaP\x13\x81a \x94\x81\x86a\x1F\x7FV[\x83R`\x01\x80\x83\x01\x80T\x91aP&\x83aOhV[\x92aP3\x85Q\x94\x85a\x0F\x0EV[\x80\x84R` \x92\x83\x85\x01\x90`\0R\x83`\0 `\0\x91[\x83\x83\x10aP\x9FWPPPPP\x84\x93aP\x7F`\x80\x94aK\xDD\x94`\x06\x94a\n\xB1\x99\x01RaPw`\x02\x84\x01T`\xFF\x16\x90V[\x90\x87\x01aO\xE5V[aP\x8B`\x03\x82\x01a sV[``\x86\x01R\x01Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[`\x02\x86\x86\x92\x8AQaP\xAF\x81a\x0E\xF2V[\x8BQaP\xBF\x81a \x94\x81\x8Aa\x1F\x7FV[\x81RaP\xCC\x85\x87\x01aO\x80V[\x83\x82\x01R\x81R\x01\x92\x01\x92\x01\x91\x90aPHV[\x90`@QaP\xEB\x81a\x0E\x9EV[\x80\x92\x80T`\xFF\x81\x16\x90`\x05\x82\x10\x15a\x1B\xB1W`\xFF\x91\x84R`\x08\x1C\x16\x91`\x03\x83\x10\x15a\x1B\xB1Wa#\xD7`\x80\x92`\x04\x94` \x84\x01RaQ*`\x01\x82\x01a#\x97V[`@\x84\x01RaQ;`\x03\x82\x01aO\x80V[``\x84\x01Ra#\xD0`@Q\x80\x96\x81\x93\x01a\x1F\x7FV[\x90`@Q\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x80\x82\x01\x93`\xA0\x83\x01`@R`\0\x85R\x93[\x01\x92`\n\x90\x81\x81\x06`0\x01\x85S\x04\x92\x83\x15aQ\xC3W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90aQ\x87V[\x92P`\x80\x83`\x1F\x19\x92\x03\x01\x92\x01\x91\x82RV[\x93\x91\x92\x97\x90\x94\x96\x95\x97aQ\xE6a9FV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\rT\x16\x96aR@`@Q\x96` \x88\x01\x98\x7F\xE6\x05_7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8AR`\xC0`$\x8A\x01R`\xE4\x89\x01\x91a;\xD5V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC\x90\x81\x88\x84\x03\x01`D\x89\x01RaR\xA6aR\x8BaR}\x89\x80a;vV[`\xA0\x87R`\xA0\x87\x01\x91a;\xD5V[aR\x98` \x8A\x01\x8Aa<\x9FV[\x90\x86\x83\x03` \x88\x01RaH,V[`@\x88\x015\x9B`\x04\x8D\x10\x15a\n\x9FW`\0\x9DaS'\x8F\x9E\x9A\x8C\x9Aa\x08\x8A\x99\x89`\x80aSe\x9F\x81aS\x08aS7\x9BaSF\x9Fg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94`@aR\xEE\x92\x01\x90a\x1B\xB6V[aR\xFB``\x8A\x01\x8AaG:V[\x86\x82\x03``\x88\x01RaGlV[\x96\x015aS\x14\x81a\x11qV[\x16\x91\x01R\x8C\x83\x03\x89\x01`d\x8E\x01Ra;\xD5V[\x91\x85\x8A\x84\x03\x01`\x84\x8B\x01Ra;\xD5V[\x91\x86\x83\x03\x01`\xA4\x87\x01Ra=OV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x92\x16`\xC4\x84\x01RV[Q\x91Z\xF4aSqa>%V[\x90\x15a\x06\xBDWPV\xFE\xA2dipfsX\"\x12 \x93\0\xEE\xB8\x9B\xEC\xD8\xF6\xCA>\x87a\xC1\xEE\x16\x13\x03\x0B\x02\xA8\xA7\xF0\x9E$\xEE\xBB\xA6\xEBq\x87!\x14dsolcC\0\x08\x15\x003"; + const __BYTECODE: &[u8] = b"a\x01\x004b\0\x01nW`\x1Fb\0(\xDD8\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17b\0\x01sW\x80\x84\x92`\xA0\x94`@R\x839\x81\x01\x03\x12b\0\x01nWb\0\0N\x81b\0\x01\x89V[\x90b\0\0]` \x82\x01b\0\x01\x89V[b\0\0k`@\x83\x01b\0\x01\x89V[\x90b\0\0\x88`\x80b\0\0\x80``\x86\x01b\0\x01\x89V[\x94\x01b\0\x01\x89V[\x93`\x80R`\xA0R`\xC0R`\xE0R3\x15b\0\x01UW`\x0C\x80T`\x01`\x01`\xA0\x1B\x03\x19\x80\x82\x163\x90\x81\x17\x90\x93U`@Q\x93\x90\x92`\x01`\x01`\xA0\x1B\x03\x92\x83\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0`\0\x80\xA3\x16\x90`\rT\x16\x17`\rUa'>\x90\x81b\0\x01\x9F\x829`\x80Q\x81\x81\x81a\td\x01Ra l\x01R`\xA0Q\x81\x81\x81a\x03\xE9\x01R\x81\x81a\x04^\x01Ra\x1E\xF3\x01R`\xC0Q\x81\x81\x81a\x06C\x01R\x81\x81a\x0CX\x01Ra\rR\x01R`\xE0Q\x81\x81\x81a\x0B\xE4\x01R\x81\x81a\x1F\xA8\x01Ra\"\x8D\x01R\xF3[`@Qc\x1EO\xBD\xF7`\xE0\x1B\x81R`\0`\x04\x82\x01R`$\x90\xFD[`\0\x80\xFD[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03b\0\x01nWV\xFE`\x80`@R`\x046\x10\x15a\0\x12W`\0\x80\xFD[`\x005`\xE0\x1C\x80c\x01\xC6@\x0F\x14a\x03\x18W\x80c\x04\xF6\x8E\\\x14a\x03\x13W\x80c\x11~\x88j\x14a\x03\x0EW\x80c\x11\xB8\x8A\x15\x14a\x03\tW\x80c\x13\x90\xD2\x8D\x14a\x03\x04W\x80c\x18\xC1\x98p\x14a\x02\xFFW\x80c#@*3\x14a\x02\xFAW\x80c#n\xBDp\x14a\x02\xF5W\x80c%lA\x99\x14a\x02\xF0W\x80c%p\xDA\xE0\x14a\x02\xEBW\x80c%\xCB\xC3\xA6\x14a\x02\xB9W\x80c&\x07\x847\x14a\x02\xE6W\x80c'q\x1Ai\x14a\x02\xE1W\x80c0\0!z\x14a\x02\xDCW\x80c1\x97?\0\x14a\x02\xD7W\x80c;\xC33\x9F\x14a\x02\xD2W\x80cW\x17\xBC\xF5\x14a\x02\xCDW\x80cX$\x18\xB6\x14a\x02\xC8W\x80cY\xF3yv\x14a\x02sW\x80cZ\x9A\xFA\xC3\x14a\x02\xC3W\x80c[=\xE2`\x14a\x02\xBEW\x80c[\xD5\x1Bb\x14a\x02\xB9W\x80c[\xE1d\xEE\x14a\x02\xB4W\x80cjr\x8F,\x14a\x02\xAFW\x80cl\xF4K\xF4\x14a\x02\xAAW\x80cqP\x18\xA6\x14a\x02\xA5W\x80cv\xC8\x1CB\x14a\x02\xA0W\x80cy&\xB8\xA9\x14a\x02\x9BW\x80c~\xB7\x892\x14a\x02\x96W\x80c\x82\x1C\xB5\xD0\x14a\x02\x91W\x80c\x83\x9D\xF9E\x14a\x02\x8CW\x80c\x8D\xA5\xCB[\x14a\x02\x87W\x80c\x99\x04\x91\xA5\x14a\x02\x82W\x80c\xA0I\xE6w\x14a\x02}W\x80c\xA0l\xB3\xA2\x14a\x02FW\x80c\xA9U\r\xAC\x14a\x02xW\x80c\xAA\x18\xC8\xB1\x14a\x02sW\x80c\xAEL\xD2\x01\x14a\x02nW\x80c\xB51\x86\x1F\x14a\x02iW\x80c\xB5ny\xDE\x14a\x02dW\x80c\xC28\x01\x05\x14a\x02_W\x80c\xC90\xB1\xB0\x14a\x02ZW\x80c\xD1){\x8D\x14a\x02UW\x80c\xD5\xA2D\x81\x14a\x02PW\x80c\xDAl\xEAU\x14a\x02KW\x80c\xDD4i\xFC\x14a\x02FW\x80c\xE1\xB1{C\x14a\x02AW\x80c\xE6\x05_7\x14a\x02V[a\x1A\xA4V[a\x1A\x02V[a\x18\xC8V[a\x18sV[a\x17\x81V[a\rAV[a\x16\xEBV[a\x16cV[a\x16\x1BV[a\x15\xEEV[a\x15dV[a\x14\xB8V[a\x12\xC8V[a\x10\xDAV[a\rvV[a\x0C\xC5V[a\x0C\x08V[a\x0B\xD3V[a\nDV[a\x08\xFEV[a\x08\xAFV[a\x05\xF3V[a\x04\xDDV[a\x04\rV[a\x03\xD8V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x90` \x82\x82\x01\x12a\x03mW`\x045\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03mW\x82``\x92\x03\x01\x12a\x03mW`\x04\x01\x90V[`\0\x80\xFD[`\0[\x83\x81\x10a\x03\x85WPP`\0\x91\x01RV[\x81\x81\x01Q\x83\x82\x01R` \x01a\x03uV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x93a\x03\xD1\x81Q\x80\x92\x81\x87R\x87\x80\x88\x01\x91\x01a\x03rV[\x01\x16\x01\x01\x90V[4a\x03mWa\x03\xE66a\x03\x1DV[P\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a%\xF5V[4a\x03mW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC` \x816\x01\x12a\x03mW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03mWa\x01\x80\x916\x03\x01\x12a\x03mW\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a%\xF5V[\x91\x81`\x1F\x84\x01\x12\x15a\x03mW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03mW` \x83\x81\x86\x01\x95\x01\x01\x11a\x03mWV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x03a\x03mWV[`\xA45\x90a\x04\xDB\x82a\x04\xB0V[V[4a\x03mW`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03mWa\x05,\x906\x90`\x04\x01a\x04\x82V[`$5\x90a\x059\x82a\x04\xB0V[a\x05Aa&\x14V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x920\x84\x84\x16\x14a\x03mWa\x05k\x916\x91a\x07\x86V[\x91a\x05u\x83a\x08=V[T\x16a\x05\xC9Wa\x05\x87a\x05\xC7\x92a\x08=V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[\0[`\x04`@Q\x7FF>\xEC\x90\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[4a\x03mW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC` \x816\x01\x12a\x03mW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03mW`\xC0\x916\x03\x01\x12a\x03mW\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a%\xF5V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`A`\x04R`$`\0\xFD[`\xA0\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06\xB2W`@RV[a\x06gV[``\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06\xB2W`@RV[` \x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06\xB2W`@RV[`@\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06\xB2W`@RV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06\xB2W`@RV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06\xB2W`\x1F\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x16` \x01\x90V[\x92\x91\x92a\x07\x92\x82a\x07LV[\x91a\x07\xA0`@Q\x93\x84a\x07\x0BV[\x82\x94\x81\x84R\x81\x83\x01\x11a\x03mW\x82\x81` \x93\x84`\0\x96\x017\x01\x01RV[\x90\x80`\x1F\x83\x01\x12\x15a\x03mW\x81` a\x07\xD8\x935\x91\x01a\x07\x86V[\x90V[\x90`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x83\x01\x12a\x03mWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x03mW\x83a\x08&\x91`\x04\x01a\x07\xBDV[\x92`$5\x91\x82\x11a\x03mWa\x07\xD8\x91`\x04\x01a\x07\xBDV[` a\x08V\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x03rV[\x81\x01`\n\x81R\x03\x01\x90 \x90V[` a\x08|\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x03rV[\x81\x01`\x03\x81R\x03\x01\x90 \x90V[` \x90a\x08\xA3\x92\x82`@Q\x94\x83\x86\x80\x95Q\x93\x84\x92\x01a\x03rV[\x82\x01\x90\x81R\x03\x01\x90 \x90V[4a\x03mW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x08\xF4\x82a\x08\xE4a\x08\xCF6a\x07\xDBV[\x92\x90\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x03rV[\x81\x01`\x08\x81R\x03\x01\x90 \x90a\x08\x89V[T\x16`@Q\x90\x81R\xF3[4a\x03mW`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03mWa\tM\x906\x90`\x04\x01a\x04\x82V[PPa\tZ`$5a\x04\xB0V[a\tba&\x14V[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a%\xF5V[`D5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x03mWV[`\x845\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x03mWV[5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x03mWV[``\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x82\x01\x12a\x03mWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91`\x045\x83\x81\x11a\x03mW\x82a\n\x16\x91`\x04\x01a\x04\x82V[\x93\x90\x93\x92`$5\x90\x82\x82\x11a\x03mWa\n1\x91`\x04\x01a\x04\x82V[\x92\x90\x92\x91`D5\x90\x81\x16\x81\x03a\x03mW\x90V[4a\x03mWa\x0B\x7Fa\x0Bfa\n|a\n\x84a\x0BS`Ga\n\x8Bg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\no6a\t\xCBV[\x98\x93\x90\x99\x91\x926\x91a\x07\x86V[\x976\x91a\x07\x86V[\x94\x16a&eV[\x92`@Q\x93\x84\x91` \x83\x01\x96\x7Fcommitments/ports/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x88Ra\n\xCE\x81Q\x80\x92` `2\x88\x01\x91\x01a\x03rV[\x83\x01\x7F/channels/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`2\x82\x01Ra\x0B\n\x82Q\x80\x93` `<\x85\x01\x91\x01a\x03rV[\x01\x7F/sequences/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`<\x82\x01Ra\x0BD\x82Q\x80\x93` \x87\x85\x01\x91\x01a\x03rV[\x01\x03`'\x81\x01\x84R\x01\x82a\x07\x0BV[Q\x90 `\0R`\0` R`@`\0 \x90V[T`@\x80Q\x82\x81R\x91\x15\x15` \x83\x01R\x90\x91\x82\x91\x82\x01\x90V[\x03\x90\xF3[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x90` \x82\x82\x01\x12a\x03mW`\x045\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03mW\x82`\x80\x92\x03\x01\x12a\x03mW`\x04\x01\x90V[4a\x03mWa\x0B\xE16a\x0B\x83V[P\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a%\xF5V[4a\x03mW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC` \x816\x01\x12a\x03mW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03mW`\xE0\x916\x03\x01\x12a\x03mW\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a%\xF5V[` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x82\x01\x12a\x03mW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03mWa\x07\xD8\x91`\x04\x01a\x07\xBDV[4a\x03mWa\x0B\x7Fa\x0C\xD66a\x0C|V[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x03\x95V[\x90\x81`\xA0\x91\x03\x12a\x03mW\x90V[` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x82\x01\x12a\x03mW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03mWa\x07\xD8\x91`\x04\x01a\x0C\xEAV[4a\x03mWa\rO6a\x0C\xF8V[P\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a%\xF5V[4a\x03mW``\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x03mWa\r\xC6\x906\x90`\x04\x01a\x07\xBDV[`$5\x91\x82\x11a\x03mWa\x0E4`\xFF\x91a\x0E\x1Ba\r\xEAa\x0B\x7F\x956\x90`\x04\x01a\x07\xBDV[a\x0E\x0B` a\r\xF7a\t\x88V[\x94\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x03rV[\x81\x01`\t\x81R\x03\x01\x90 \x90a\x08\x89V[\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\0R` R`@`\0 \x90V[T\x16`@Q\x91\x82\x91\x82\x91\x90\x91`\xFF` \x82\x01\x93\x16\x90RV[` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x82\x01\x12a\x03mW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03mWa\x0E\x95\x91`\x04\x01a\x04\x82V[\x90\x91V[\x90\x80\x82Q\x90\x81\x81R` \x80\x91\x01\x92` \x80\x84`\x05\x1B\x83\x01\x01\x95\x01\x93`\0\x91[\x84\x83\x10a\x0E\xC8WPPPPPP\x90V[\x90\x91\x92\x93\x94\x95\x84\x80a\x0F\x04\x83\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x86`\x01\x96\x03\x01\x87R\x8AQa\x03\x95V[\x98\x01\x93\x01\x93\x01\x91\x94\x93\x92\x90a\x0E\xB8V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`!`\x04R`$`\0\xFD[`\x04\x11\x15a\x0FMWV[a\x0F\x14V[\x90`\x04\x82\x10\x15a\x0FMWRV[` a\x07\xD8\x92`@a\x0F\x8Da\x0F}\x85Q``\x85R``\x85\x01\x90a\x03\x95V[\x84\x86\x01Q\x84\x82\x03\x86\x86\x01Ra\x03\x95V[\x93\x01Q\x90`@\x81\x85\x03\x91\x01RQ\x91\x81\x81R\x01\x90a\x03\x95V[\x91\x92\x90\x92`@\x80\x84Ra\x0F\xC4\x85Q`\xA0`@\x87\x01R`\xE0\x86\x01\x90a\x03\x95V[\x94` \x91\x82\x82\x01Q\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\x90\x81\x88\x8A\x03\x01``\x89\x01R\x82Q\x80\x8AR\x85\x8A\x01\x91\x86\x80\x83`\x05\x1B\x8D\x01\x01\x95\x01\x92`\0\x91[\x83\x83\x10a\x10qWPPPPPa\x04\xDB\x95\x96\x97Pa\x10Ta\x10h\x92`\x80\x92a\x10@`@\x87\x01Q\x85\x8D\x01\x90a\x0FRV[``\x86\x01Q\x90\x8B\x83\x03\x01`\xA0\x8C\x01Ra\x0F_V[\x92\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\xC0\x88\x01RV[\x94\x01\x90\x15\x15\x90RV[\x90\x91\x92\x93\x95\x88\x80a\x10\xCB\x8F\x93\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x01\x95\x82\x03\x01\x87R\x8AQ\x90\x83a\x10\xBB\x83Q\x89\x84R\x89\x84\x01\x90a\x03\x95V[\x92\x01Q\x90\x84\x81\x84\x03\x91\x01Ra\x0E\x99V[\x98\x01\x93\x01\x93\x01\x91\x93\x92\x90a\x10\x12V[4a\x03mWa\x10\xE86a\x0ELV[` `@\x92`\0`\x80\x85Qa\x10\xFC\x81a\x06\x96V[``\x80\x82R\x80\x86\x83\x01R\x83\x88\x83\x01R\x87Q\x90a\x11\x17\x82a\x06\xB7V[\x80\x82R\x80\x87\x83\x01R\x88Qa\x11*\x81a\x06\xD3V[\x81\x81R\x89\x83\x01R\x82\x01R\x01R\x82\x84Q\x93\x84\x92\x837\x81\x01`\x04\x81R\x03\x01\x90 a\x0B\x7Fa\x11ka\x11\\`\x02\x84\x01T`\xFF\x16\x90V[\x92a\x11f\x84a\x0FCV[a#UV[\x92Q\x92\x83\x92\x15\x15\x90\x83a\x0F\xA5V[`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x82\x01\x12a\x03mWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91`\x045\x83\x81\x11a\x03mW\x82a\x11\xC4\x91`\x04\x01a\x04\x82V[\x93\x90\x93\x92`$5\x91\x82\x11a\x03mWa\x0E\x95\x91`\x04\x01a\x04\x82V[`\x05\x11\x15a\x0FMWV[\x90`\x05\x82\x10\x15a\x0FMWRV[\x90`\x03\x82\x10\x15a\x0FMWRV[a\x07\xD8\x91` a\x12\x1B\x83Q`@\x84R`@\x84\x01\x90a\x03\x95V[\x92\x01Q\x90` \x81\x84\x03\x91\x01Ra\x03\x95V[\x90a\x12\xC0` \x91\x94\x93\x94`@\x84Ra\x12H`@\x85\x01\x82Qa\x11\xE8V[a\x12Y\x83\x82\x01Q``\x86\x01\x90a\x11\xF5V[a\x12r`@\x82\x01Q`\xA0`\x80\x87\x01R`\xE0\x86\x01\x90a\x12\x02V[`\x80a\x12\xAE``\x84\x01Q\x92\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\x93\x84\x89\x83\x03\x01`\xA0\x8A\x01Ra\x0E\x99V[\x92\x01Q\x90\x85\x83\x03\x01`\xC0\x86\x01Ra\x03\x95V[\x93\x15\x15\x91\x01RV[4a\x03mWa\x132` a\x12\xDB6a\x11yV[\x92```\x80`@\x96\x93\x96Qa\x12\xEF\x81a\x06\x96V[`\0\x81R`\0\x85\x82\x01R`@Qa\x13\x05\x81a\x06\xEFV[\x83\x81R\x83\x86\x82\x01R`@\x82\x01R\x82\x80\x82\x01R\x01R\x82`@Q\x93\x84\x92\x837\x81\x01`\x05\x81R\x03\x01\x90 \x91a\"\xB1V[a\x13I`\xFF\x82T\x16\x91a\x13D\x83a\x11\xDEV[a$OV[\x90a\x0B\x7F`@Q\x92\x83\x92\x15\x15\x90\x83a\x12,V[\x80T`\0\x93\x92`\x01\x80\x83\x16\x93\x83\x82\x1C\x93\x85\x15a\x14FW[` \x95\x86\x86\x10\x81\x14a\x14\x17W\x85\x85R\x90\x81\x15a\x13\xDAWP`\x01\x14a\x13\x99W[PPPPPV[\x90\x93\x94\x95P`\0\x92\x91\x92R\x83`\0 \x92\x84`\0\x94[\x83\x86\x10a\x13\xC6WPPPP\x01\x01\x908\x80\x80\x80\x80a\x13\x92V[\x80T\x85\x87\x01\x83\x01R\x94\x01\x93\x85\x90\x82\x01a\x13\xAEV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16\x86\x85\x01RPPP\x90\x15\x15`\x05\x1B\x01\x01\x91P8\x80\x80\x80\x80a\x13\x92V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\"`\x04R`$`\0\xFD[\x93`\x7F\x16\x93a\x13sV[\x90`@\x91\x82Q\x92a\x14`\x84a\x06\xB7V[\x83\x81Qa\x14x\x81a\x14q\x81\x87a\x13\\V[\x03\x82a\x07\x0BV[\x81R\x81Qa\x14\x8D\x81a\x14q\x81`\x01\x88\x01a\x13\\V[` \x82\x01R`\x02a\x14\xB2\x83Q\x94a\x14\xA3\x86a\x06\xD3V[a\x14q\x85Q\x80\x94\x81\x93\x01a\x13\\V[\x83R\x01RV[4a\x03mWa\x15Ba\x14\xE1` a\x14\xCE6a\x0C|V[\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x03rV[\x81\x01`\x04\x81R\x03\x01\x90 `@Q\x90a\x15\x04\x82a\x14\xFD\x81\x84a\x13\\V[\x03\x83a\x07\x0BV[a\x15Z`\xFF`\x02\x83\x01T\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x06a\x15&`\x03\x86\x01a\x14PV[\x94\x01T\x16\x92a\x15M`@Q\x96\x87\x96`\x80\x88R`\x80\x88\x01\x90a\x03\x95V[\x92` \x87\x01\x90a\x0FRV[\x84\x82\x03`@\x86\x01Ra\x0F_V[\x90``\x83\x01R\x03\x90\xF3[4a\x03mWa\x15r6a\x07\xDBV[\x90a\x15\xDA`!`@Q\x80\x94` \x94a\x15\x92\x81Q\x80\x92\x88\x80\x87\x01\x91\x01a\x03rV[\x82\x01\x7F/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86\x82\x01Ra\x15\xCB\x82Q\x80\x93\x88\x87\x85\x01\x91\x01a\x03rV[\x01\x03`\x01\x81\x01\x85R\x01\x83a\x07\x0BV[a\x0B\x7F`@Q\x92\x82\x84\x93\x84R\x83\x01\x90a\x03\x95V[4a\x03mW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x08\xF4a\x16\x166a\x0C|V[a\x08=V[4a\x03mW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x08\xF4\x82a\x1686a\x11yV[\x92\x82`@\x95\x92\x95Q\x93\x84\x92\x837\x81\x01`\x06\x81R\x03\x01\x90 \x91a\"\xB1V[4a\x03mWa\x0B\xE16a\x0C\xF8V[4a\x03mW` `\x01`\xFFa\x16\x9C\x83a\x0E\x1Ba\x16~6a\t\xCBV[\x95\x90\x92\x91\x93\x82`@Q\x93\x84\x92\x837\x81\x01`\t\x81R\x03\x01\x90 \x91a\"\xB1V[T\x16\x14`@Q\x90\x81R\xF3[\x90`\x01` `@Qa\x16\xB8\x81a\x06\xEFV[a\x16\xE7\x81\x95`@Qa\x16\xCE\x81a\x14q\x81\x85a\x13\\V[\x83Ra\x16\xE0`@Q\x80\x96\x81\x93\x01a\x13\\V[\x03\x84a\x07\x0BV[\x01RV[4a\x03mWa\x17ba\x17\x14` a\x17\x04a\x08\xCF6a\x07\xDBV[\x81\x01`\x05\x81R\x03\x01\x90 \x90a\x08\x89V[a\x0B\x7F`\x04a\x17s\x83T\x93a\x17?a\x17.`\x01\x83\x01a\x16\xA7V[\x91a\x16\xE0`@Q\x80\x96\x81\x93\x01a\x13\\V[`@Q\x95\x85a\x17R\x88`\xFF\x81\x99\x16a\x11\xE8V[`\xFF` \x88\x01\x91`\x08\x1C\x16a\x11\xF5V[`\x80`@\x86\x01R`\x80\x85\x01\x90a\x12\x02V[\x90\x83\x82\x03``\x85\x01Ra\x03\x95V[4a\x03mWa\x0B\x7Fa\x0Bfa\n|a\n\x84a\x0BS`@a\x17\xACg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\no6a\t\xCBV[\x92\x81Q\x93\x84\x91` \x83\x01\x96\x7Facks/ports/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x88Ra\x17\xEE\x81Q\x80\x92` `+\x88\x01\x91\x01a\x03rV[\x83\x01\x7F/channels/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`+\x82\x01Ra\x18*\x82Q\x80\x93` `5\x85\x01\x91\x01a\x03rV[\x01\x7F/sequences/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`5\x82\x01Ra\x18d\x82Q\x80\x93` \x87\x85\x01\x91\x01a\x03rV[\x01\x03` \x81\x01\x84R\x01\x82a\x07\x0BV[4a\x03mWa\x03\xE66a\x0B\x83V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC`@\x91\x01\x12a\x03mW`$\x90V[\x90a\x12\xC0` \x91\x94\x93\x94`@\x84R`@\x84\x01\x90a\x03\x95V[4a\x03mW``\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11a\x03mWa\x19\x94`\0\x91a\x19 ` \x946\x90`\x04\x01a\x04\x82V[a\x19)6a\x18\x81V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x19Qa\x19L6\x85\x87a\x07\x86V[a%\x80V[\x16\x93a\x19\xAB`@Q\x98\x89\x97\x88\x96\x87\x96\x7Fl\xF4K\xF4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x88R```\x04\x89\x01R`d\x88\x01\x91a%5V[\x93\x83a\x19\x9F\x82a\t\xB6V[\x16`$\x87\x01R\x01a\t\xB6V[\x16`D\x83\x01R\x03\x91Z\xFA\x90\x81\x15a\x19\xFDW`\0\x90`\0\x92a\x19\xD7W[Pa\x0B\x7F`@Q\x92\x83\x92\x83a\x18\xB0V[\x90Pa\x19\xF6\x91P=\x80`\0\x83>a\x19\xEE\x81\x83a\x07\x0BV[\x81\x01\x90a$\xC1V[\x908a\x19\xC7V[a%tV[4a\x03mW`\0\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x1A\xA1Wa\x1A:a&\x14V[\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0CT\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16`\x0CU\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\x80\xF3[\x80\xFD[4a\x03mWa\x1B\x19`\0a\x1A\xB76a\x0ELV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x1A\xDAa\x19L6\x84\x86a\x07\x86V[\x16\x90`@Q\x80\x95\x81\x94\x82\x93\x7Fv\xC8\x1CB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R` `\x04\x85\x01R`$\x84\x01\x91a%5V[\x03\x91Z\xFA\x90\x81\x15a\x19\xFDW`\0\x90`\0\x92a\x19\xD7WPa\x0B\x7F`@Q\x92\x83\x92\x83a\x18\xB0V[4a\x03mW`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT`\x80\x1C\x16`@Q\x90\x81R\xF3[4a\x03mW` a\x1B\x9Aa\x19L6a\x0C|V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[4a\x03mW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x08\xF4\x82a\x1B\xD8a\x08\xCF6a\x07\xDBV[\x81\x01`\x06\x81R\x03\x01\x90 \x90a\x08\x89V[4a\x03mW` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mW`\x045`\0R`\0` R` `@`\0 T`@Q\x90\x81R\xF3[4a\x03mW`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0CT\x16`@Q\x90\x81R\xF3[4a\x03mW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x1C\xAD\x82a\x14\xCE6a\x0C|V[\x81\x01`\x01\x81R\x03\x01\x90 T\x16`@Q\x90\x81R\xF3[4a\x03mW`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mW` `\x0BTg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91`@\x1C\x16\x81R\xF3[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x90` \x82\x82\x01\x12a\x03mW`\x045\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03mW\x82`@\x92\x03\x01\x12a\x03mW`\x04\x01\x90V[4a\x03mWa\rO6a\x1D\nV[4a\x03mW`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mWa\x0B\x7F`@Qa\x1D\xA6\x81a\x06\xEFV[`\x03\x81R\x7Fibc\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x03\x95V[4a\x03mW`\xC0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x03mWa\x1E4\x906\x90`\x04\x01a\x04\x82V[PP`$5\x81\x81\x11a\x03mWa\x1EN\x906\x90`\x04\x01a\x04\x82V[PP`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xBC6\x01\x12a\x03mWa\x1E\x82a\t\x9FV[P`\xA45\x90\x81\x11a\x03mWa\x1E\x9B\x906\x90`\x04\x01a\x04\x82V[PPa\"\x8BV[4a\x03mW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC` \x816\x01\x12a\x03mW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03mWa\x01`\x916\x03\x01\x12a\x03mW\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a%\xF5V[4a\x03mW`\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x03mWa\x1Fg\x906\x90`\x04\x01a\x04\x82V[PP`$5\x81\x81\x11a\x03mWa\x1F\x81\x906\x90`\x04\x01a\x04\x82V[PPa\x1F\x8Ba\t\x88V[P`d5\x90\x81\x11a\x03mWa\x1F\xA4\x906\x90`\x04\x01a\x04\x82V[PP\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a%\xF5V[4a\x03mWa\x0B\x7Fa\x14qa\x0C\xD6a\x1F\xE8` a\x14\xCE6a\x0C|V[\x81\x01`\x02\x81R\x03\x01\x90 `@Q\x92\x83\x80\x92a\x13\\V[4a\x03mW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x08\xF4\x82a \x1Ea\x08\xCF6a\x07\xDBV[\x81\x01`\x07\x81R\x03\x01\x90 \x90a\x08\x89V[4a\x03mW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x08\xF4a V6a\x0C|V[a\x08cV[4a\x03mWa i6a\x03\x1DV[P\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a%\xF5V[4a\x03mWa i6a\x1D\nV[4a\x03mW`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT\x16`@Q\x90\x81R\xF3[4a\x03mW`\xC0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x04\x805\x82\x81\x11a\x03mWa!4\x906\x90\x83\x01a\x04\x82V[PP`$5\x82\x81\x11a\x03mWa!M\x906\x90\x83\x01a\x0C\xEAV[P`D5\x82\x81\x11a\x03mWa!e\x906\x90\x83\x01a\x04\x82V[PP`d5\x82\x81\x11a\x03mWa!~\x906\x90\x83\x01a\x04\x82V[PP`\x845\x91\x82\x11a\x03mWa!\x96\x916\x91\x01a\x0C\xEAV[Pa!\x9Fa\x04\xCEV[Pa%\xD3V[4a\x03mW` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mW`\x045a!\xE0\x81a\x04\xB0V[a!\xE8a&\x14V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x91\x16\x90\x81\x15a\"ZW`\x0CT\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17`\x0CU\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0`\0\x80\xA3\0[`$`@Q\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\0`\x04\x82\x01R\xFD[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a%\xF5V[` \x91\x92\x83`@Q\x94\x85\x93\x847\x82\x01\x90\x81R\x03\x01\x90 \x90V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06\xB2W`\x05\x1B` \x01\x90V[\x90\x81Ta\"\xEE\x81a\"\xCAV[\x92`@\x93a\"\xFF`@Q\x91\x82a\x07\x0BV[\x82\x81R\x80\x94` \x80\x92\x01\x92`\0R` `\0 \x90`\0\x93[\x85\x85\x10a#&WPPPPPPV[`\x01\x84\x81\x92\x84Qa#;\x81a\x14q\x81\x8Aa\x13\\V[\x81R\x01\x93\x01\x94\x01\x93\x91a#\x17V[`\x04\x82\x10\x15a\x0FMWRV[\x90`@\x91\x82Q\x90a#e\x82a\x06\x96V[\x81\x93\x80Qa#w\x81a\x14q\x81\x86a\x13\\V[\x83R`\x01\x80\x83\x01\x90\x81Ta#\x8A\x81a\"\xCAV[\x92a#\x97\x85Q\x94\x85a\x07\x0BV[\x81\x84R`\0\x90\x81R` \x80\x82 \x81\x86\x01[\x84\x84\x10a$\x10WPPPPPP`\x06\x84\x93a#\xE1`\x80\x94a$\x01\x94` a\x04\xDB\x99\x01Ra#\xD9`\x02\x84\x01T`\xFF\x16\x90V[\x90\x87\x01a#IV[a#\xED`\x03\x82\x01a\x14PV[``\x86\x01R\x01Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x91\x01RV[`\x02\x83\x87\x92\x8AQa$ \x81a\x06\xEFV[\x8BQa$0\x81a\x14q\x81\x8Aa\x13\\V[\x81Ra$=\x85\x87\x01a\"\xE2V[\x83\x82\x01R\x81R\x01\x92\x01\x93\x01\x92\x90a#\xA8V[\x90`@Qa$\\\x81a\x06\x96V[\x80\x92\x80T`\xFF\x81\x16\x90`\x05\x82\x10\x15a\x0FMW`\xFF\x91\x84R`\x08\x1C\x16\x91`\x03\x83\x10\x15a\x0FMWa\x16\xE7`\x80\x92`\x04\x94` \x84\x01Ra$\x9B`\x01\x82\x01a\x16\xA7V[`@\x84\x01Ra$\xAC`\x03\x82\x01a\"\xE2V[``\x84\x01Ra\x16\xE0`@Q\x80\x96\x81\x93\x01a\x13\\V[\x91\x90`@\x83\x82\x03\x12a\x03mW\x82Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03mW\x83\x01\x90\x80`\x1F\x83\x01\x12\x15a\x03mW\x81Q\x91a$\xF8\x83a\x07LV[\x91a%\x06`@Q\x93\x84a\x07\x0BV[\x83\x83R` \x84\x83\x01\x01\x11a\x03mW` \x92a%&\x91\x84\x80\x85\x01\x91\x01a\x03rV[\x92\x01Q\x80\x15\x15\x81\x03a\x03mW\x90V[`\x1F\x82` \x94\x93\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x93\x81\x86R\x86\x86\x017`\0\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[`@Q=`\0\x82>=\x90\xFD[a%\x9Es\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91a\x08cV[T\x16\x80\x15a%\xA9W\x90V[`\x04`@Q\x7F\xB6\xC7\x1F}\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[a%\xDBa&\x14V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\rT\x16[`\0\x80\x80\x926\x82\x807\x816\x91Z\xF4=\x82\x80>\x15a&\x10W=\x90\xF3[=\x90\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0CT\x163\x03a&5WV[`$`@Q\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R3`\x04\x82\x01R\xFD[\x90`@Q\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x80\x82\x01\x93`\xA0\x83\x01`@R`\0\x85R\x93[\x01\x92`\n\x90\x81\x81\x06`0\x01\x85S\x04\x92\x83\x15a&\xD8W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90a&\x9CV[\x92P`\x80\x83\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x92\x03\x01\x92\x01\x91\x82RV\xFE\xA2dipfsX\"\x12 \xCCP\xED}\x1C\x01\xBC\xBC\"\xFD\xFC\xBBr\xD5\xF1\xA7;\x83\xBE\xCA\xAC\x93\xCD;\xA91T\xEAk\xC4\x1F\xCEdsolcC\0\x08\x17\x003"; /// The bytecode of the contract. #[cfg(feature = "providers")] pub static DEVNETOWNABLEIBCHANDLER_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static(__BYTECODE); #[rustfmt::skip] #[cfg(feature = "providers")] - const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R`\x046\x10a8\xDCW`\x005`\xE0\x1C\x80c\x01\xC6@\x0F\x14a\x037W\x80c\x04\xF6\x8E\\\x14a\x032W\x80c\x11~\x88j\x14a\x03-W\x80c\x11\xB8\x8A\x15\x14a\x03(W\x80c\x13\x90\xD2\x8D\x14a\x03#W\x80c\x18\xC1\x98p\x14a\x03\x1EW\x80c#@*3\x14a\x03\x19W\x80c#n\xBDp\x14a\x03\x14W\x80c%lA\x99\x14a\x03\x0FW\x80c%p\xDA\xE0\x14a\x03\nW\x80c%\xCB\xC3\xA6\x14a\x03\x05W\x80c&\x07\x847\x14a\x03\0W\x80c'\x18L\x13\x14a\x02\xFBW\x80c'q\x1Ai\x14a\x02\xF6W\x80c0\0!z\x14a\x02\xF1W\x80c1\x97?\0\x14a\x02\xECW\x80c;\xC33\x9F\x14a\x02\xE7W\x80cX$\x18\xB6\x14a\x02\xE2W\x80cY\xF3yv\x14a\x02\xDDW\x80cZ\x9A\xFA\xC3\x14a\x02\xD8W\x80c[=\xE2`\x14a\x02\xD3W\x80c[\xD5\x1Bb\x14a\x02\xCEW\x80c[\xE1d\xEE\x14a\x02\xC9W\x80cjr\x8F,\x14a\x02\xC4W\x80cl\xF4K\xF4\x14a\x02\xBFW\x80cqP\x18\xA6\x14a\x02\xBAW\x80cv\xC8\x1CB\x14a\x02\xB5W\x80cy&\xB8\xA9\x14a\x02\xB0W\x80c~\xB7\x892\x14a\x02\xABW\x80c\x82\x1C\xB5\xD0\x14a\x02\xA6W\x80c\x83\x9D\xF9E\x14a\x02\xA1W\x80c\x8D\xA5\xCB[\x14a\x02\x9CW\x80c\x99\x04\x91\xA5\x14a\x02\x97W\x80c\xA0I\xE6w\x14a\x02\x92W\x80c\xA0l\xB3\xA2\x14a\x02\x8DW\x80c\xAA\x18\xC8\xB1\x14a\x02\x88W\x80c\xAEL\xD2\x01\x14a\x02\x83W\x80c\xB51\x86\x1F\x14a\x02~W\x80c\xB5ny\xDE\x14a\x02yW\x80c\xC28\x01\x05\x14a\x02tW\x80c\xC90\xB1\xB0\x14a\x02oW\x80c\xD1){\x8D\x14a\x02jW\x80c\xD3\x14\x07\xFE\x14a\x02GW\x80c\xD5\xA2D\x81\x14a\x02eW\x80c\xDAl\xEAU\x14a\x02`W\x80c\xDD4i\xFC\x14a\x02[W\x80c\xDD[\x9FM\x14a\x02VW\x80c\xE1\xB1{C\x14a\x02QW\x80c\xE6\x05_7\x14a\x02LW\x80c\xECu\xD8)\x14a\x02GWc\xF2\xFD\xE3\x8B\x03a8\xDCWa7\xDBV[a2bV[a74V[a7\tV[a6{V[a4!V[a3\xABV[a2\x8AV[a25V[a2\x05V[a1\xD3V[a0yV[a.\x87V[a.\0V[a,\xBBV[a+~V[a+!V[a*\xE4V[a*\xB0V[a*\x84V[a*TV[a*#V[a*\x02V[a)\x84V[a)\x03V[a'\xF1V[a&\xA0V[a%\xAEV[a$qV[a#\xDBV[a#SV[a!\xC8V[a!\x8EV[a!tV[a \xDBV[a\x1E\xEBV[a\x1D\x1BV[a\x1A\x97V[a\x19\xDBV[a\x18\x8BV[a\x18*V[a\x16DV[a\x13PV[a\x11\xE3V[a\x10\x83V[a\x104V[a\x0B5V[a\n\xB3V[a\x06\xEAV[a\x05\x81V[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FEther sent to non-payable functi`D\x82\x01R\x7Fon\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FABI decoding: tuple data too sho`D\x82\x01R\x7Frt\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FABI decoding: invalid tuple offs`D\x82\x01R\x7Fet\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`'`$\x82\x01R\x7FABI decoding: struct calldata to`D\x82\x01R\x7Fo short\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x03\x19\x90` \x82\x82\x01\x12a\x05 W`\x045\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x05\x1BW\x82``\x92\x03\x01\x12a\x05\x16W`\x04\x01\x90V[a\x04zV[a\x04\x10V[a\x03\xA6V[`\0[\x83\x81\x10a\x058WPP`\0\x91\x01RV[\x81\x81\x01Q\x83\x82\x01R` \x01a\x05(V[\x90`\x1F\x19`\x1F` \x93a\x05f\x81Q\x80\x92\x81\x87R\x87\x80\x88\x01\x91\x01a\x05%V[\x01\x16\x01\x01\x90V[\x90` a\x05~\x92\x81\x81R\x01\x90a\x05HV[\x90V[4a\x06\xE5W`\0\x80a\x05\x926a\x04\xE4V[`@Qa\x062\x81` \x81\x01\x93\x7F\x01\xC6@\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85R` `$\x83\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@a\x06\x12a\x05\xF4a\x05\xE3\x85\x80a;vV[```D\x89\x01R`\xA4\x88\x01\x91a;\xD5V[a\x06\x01` \x86\x01\x86aG:V[`C\x19\x87\x83\x03\x01`d\x88\x01RaGlV[\x92\x015a\x06\x1E\x81a\x11qV[\x16`\x84\x83\x01R\x03`\x1F\x19\x81\x01\x83R\x82a\x0F\x0EV[Q\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\xF4a\x06_a>%V[\x90\x15a\x06\xBDWa\x06{\x81` \x80a\x06\xB9\x94Q\x83\x01\x01\x91\x01a>\x8AV[\x7F\xE0 :F\x1F\x16\xC0\xA8\xA8\xDD\xEA\x13\xBB\xE0\xF9\xBB\x1EO\xDF\xEA<\x0E\xC4$\n52`\xFD\x0F\x88\x8A`@Q\x80a\x06\xAA\x84\x82a\x05mV[\x03\x90\xA1`@Q\x91\x82\x91\x82a\x05mV[\x03\x90\xF3[a\x06\xC9a\x06\xE1\x91aB\xA0V[`@Q\x91\x82\x91bF\x1B\xCD`\xE5\x1B\x83R`\x04\x83\x01a\x05mV[\x03\x90\xFD[a\x03%V[\x90\x15a\x06\xBDWa\x08\xE1\x81` \x80a\x06\xB9\x94Q\x83\x01\x01\x91\x01a>\x8AV[\x7Fz4\x06\xDFm\xA8`\x0F\x12{\t4\xD0G/\x87?\x8F\xE3M\xBF\x9C;<\xB9\xAD\xF5\x99\x1C\xC9\x1DJ`@Q\x80a\x06\xAA\x84\x82a\x05mV[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`+`$\x82\x01R\x7FABI decoding: invalid calldata a`D\x82\x01R\x7Frray offset\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x91\x81`\x1F\x84\x01\x12\x15a\n|W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\n\x12W` \x83\x81\x86\x01\x95\x01\x01\x11a\t\xA8WV[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`+`$\x82\x01R\x7FABI decoding: invalid calldata a`D\x82\x01R\x7Frray stride\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`+`$\x82\x01R\x7FABI decoding: invalid calldata a`D\x82\x01R\x7Frray length\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[a\t\x10V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x03a\n\x9FWV[`\0\x80\xFD[`\xA45\x90a\n\xB1\x82a\n\x81V[V[4a\x06\xE5W`@`\x03\x196\x01\x12a\x05 W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x1BWa\n\xE4\x906\x90`\x04\x01a\tzV[\x90`$5\x90a\n\xF2\x82a\n\x81V[a\n\xFAa9FV[0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x14a\n\x9FWa\x0B)a\x0B.\x91a\x0B3\x946\x91a\x0FMV[a9\xABV[aCDV[\0[4a\x06\xE5W`\x03\x19` \x816\x01\x12a\x05 W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x1BW`\xC0\x81`\x04\x01\x92\x826\x03\x01\x12a\x05\x16W`@`\0\x80\x82Q` \x81\x01\x90\x7F\x11\xB8\x8A\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82Ra\x0B\xA9\x81a\x08\x8A\x89`$\x83\x01aD^V[Q\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\xF4a\x0B\xD6a>%V[\x90\x15a\r\xC8W\x80` \x80a\x0B\xEF\x93Q\x83\x01\x01\x91\x01a>\x8AV[\x91a\x0C(a\x0C\x0Fa\x0C\na\x0C\x03\x87\x80a?\x8DV[6\x91a\x0FMV[aA\xEDV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x90\x84`$\x82\x01\x91a\x0CD` a\x0C>\x85\x85a?\xEDV[\x01a@ V[\x90a\x0C\\a\x0CR\x85\x85a?\xEDV[``\x81\x01\x90a@*V[\x92a\x0Cg\x85\x80a?\x8DV[\x90\x93a\x0C\x7Fa\x0Cv\x89\x89a?\xEDV[\x8B\x81\x01\x90a@~V[`Da\x0C\xA6a\x0C\x9Ba\x0C\x91\x8C\x8Ca?\xEDV[`\x80\x81\x01\x90a?\x8DV[\x92\x90\x94\x01\x80\x9Aa?\x8DV[\x93\x90\x92\x8C;\x15a\r\xC3W\x8Ea\x0C\xEC\x96\x8F\x9A`\0\x9BQ\x9C\x8D\x9B\x8C\x9B\x7F\x98\x13\x89\xF2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8DR`\x04\x8D\x01aD\xF5V[\x03\x81\x83\x88Z\xF1\x96\x87\x15a\r\xBEWa\rB\x7FZ\xD8A\xB35\xEC\xEFa\x1D\xECd\x01\xE9$\xA4\x9D/\xFCUv\xBE\xEA;J\xE2\xCF\x0F*n\x14*\xB6\x95a\r\x98\x93a\x06\xB9\x9Aa\r\xA5W[Pa\x0B.\x89a\r=a\x0C\x03\x86\x80a?\x8DV[a9\xD4V[a\x0Cva\r^a\x0C\x03a\rXa\x0CR\x88\x86a?\xEDV[\x90aA\x92V[\x93a\r\x89a\r\x81a\r{a\rr\x86\x80a?\x8DV[\x95\x90\x99\x87a?\xEDV[\x80a?\x8DV[\x92\x90\x94a?\x8DV[\x93\x90\x92\x89Q\x97\x88\x97\x8C\x89aEsV[\x03\x90\xA1Q\x91\x82\x91\x82a\x05mV[\x80a\r\xB2a\r\xB8\x92a\x0E\x85V[\x80a(\xF8V[8a\r+V[aA\x86V[a@\xB1V[\x90a\r\xD5a\x06\xE1\x92aB\xA0V[\x90Q\x91\x82\x91bF\x1B\xCD`\xE5\x1B\x83R`\x04\x83\x01a\x05mV[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`'`$\x82\x01R\x7FABI decoding: invalid byte array`D\x82\x01R\x7F length\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`A`\x04R`$`\0\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0E\x99W`@RV[a\x0EVV[`\xA0\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x0E\x99W`@RV[``\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x0E\x99W`@RV[` \x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x0E\x99W`@RV[`@\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x0E\x99W`@RV[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x0E\x99W`@RV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0E\x99W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x92\x91\x92a\x0FY\x82a\x0F1V[\x91a\x0Fg`@Q\x93\x84a\x0F\x0EV[\x82\x94\x81\x84R\x81\x83\x01\x11a\x0F\x84W\x82\x81` \x93\x84`\0\x96\x017\x01\x01RV[a\r\xECV[\x90\x80`\x1F\x83\x01\x12\x15a\n|W\x81` a\x05~\x935\x91\x01a\x0FMV[\x90`@`\x03\x19\x83\x01\x12a\x05 Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x05\x1BW\x83a\x0F\xD1\x91`\x04\x01a\x0F\x89V[\x92`$5\x91\x82\x11a\x05\x1BWa\x05~\x91`\x04\x01a\x0F\x89V[` a\x10\x01\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x05%V[\x81\x01`\x03\x81R\x03\x01\x90 \x90V[` \x90a\x10(\x92\x82`@Q\x94\x83\x86\x80\x95Q\x93\x84\x92\x01a\x05%V[\x82\x01\x90\x81R\x03\x01\x90 \x90V[4a\x06\xE5W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x10y\x82a\x10ia\x10T6a\x0F\xA4V[\x92\x90\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x05%V[\x81\x01`\x08\x81R\x03\x01\x90 \x90a\x10\x0EV[T\x16`@Q\x90\x81R\xF3[4a\x06\xE5W`@`\x03\x196\x01\x12a\x05 W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x1BW`\0a\x11%V[\x90\x15a\x06\xBDW\0[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x03a\n\x9FWV[5\x90a\n\xB1\x82a\x11qV[```\x03\x19\x82\x01\x12a\x05 Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91`\x045\x83\x81\x11a\x05\x1BW\x82a\x11\xBB\x91`\x04\x01a\tzV[\x93\x90\x93\x92`$5\x91\x82\x11a\x05\x1BWa\x11\xD5\x91`\x04\x01a\tzV[\x90\x91`D5a\x05~\x81a\x11qV[4a\x06\xE5Wa\x06\xB9a\x13\x05a\x12\x1Ba\x12#a\x12\xF2`Ga\x12*g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x12\x0E6a\x11\x8EV[\x98\x93\x90\x99\x91\x926\x91a\x0FMV[\x976\x91a\x0FMV[\x94\x16aQPV[\x92`@Q\x93\x84\x91` \x83\x01\x96\x7Fcommitments/ports/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x88Ra\x12m\x81Q\x80\x92` `2\x88\x01\x91\x01a\x05%V[\x83\x01\x7F/channels/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`2\x82\x01Ra\x12\xA9\x82Q\x80\x93` `<\x85\x01\x91\x01a\x05%V[\x01\x7F/sequences/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`<\x82\x01Ra\x12\xE3\x82Q\x80\x93` \x87\x85\x01\x91\x01a\x05%V[\x01\x03`'\x81\x01\x84R\x01\x82a\x0F\x0EV[Q\x90 `\0R`\0` R`@`\0 \x90V[T`@\x80Q\x82\x81R\x91\x15\x15` \x83\x01R\x90\x91\x82\x91\x82\x01\x90V[`\x03\x19\x90` \x82\x82\x01\x12a\x05 W`\x045\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x05\x1BW\x82`\x80\x92\x03\x01\x12a\x05\x16W`\x04\x01\x90V[4a\x06\xE5Wa\x13^6a\x13\x1EV[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90`@\x90\x81Q` \x81\x01\x93\x7F#n\xBDp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85R\x81a\x13\xBB\x84`$\x83\x01aK\xECV[\x03\x91a\x13\xCF`\x1F\x19\x93\x84\x81\x01\x83R\x82a\x0F\x0EV[`\0\x80\x96\x81\x92Q\x90\x84Z\xF4a\x13\xE2a>%V[\x90\x15a\x167WPa\x144a\x0C\x0Fa\x14.a\x14\ta\x13\xFF\x87\x80aL8V[``\x81\x01\x90a?\x8DV[a\x14&a\x14\x1Ca\x0C\x91\x8A\x80\x96\x95\x96aL8V[\x94\x90\x926\x91a\x0FMV[\x926\x91a\x0FMV[\x90aM3V[\x90a\x14?\x84\x80aL8V[\x91\x80;\x15a\r\xC3Wa\x14\x85\x87\x93\x91\x84\x92\x88Q\x95\x86\x80\x94\x81\x93\x7F#\x01\xC6\xF5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R3\x90`\x04\x84\x01aL\xABV[\x03\x92Z\xF1\x92\x83\x15a\r\xBEW\x86\x92\x83\x94a\x16\x13W[P\x83Qa\x14\xE2W[\x82\x7F4oCQ\xEE\x86]\x86\xA6y\xD0\x0F9\x95\xF0R\x0F\x80=:\"v\x04\xAF\x08C\x0E&\xE94Zza\x14\xDC\x88a\x14\xD1\x89\x80aL8V[\x90Q\x91\x82\x91\x82aM\"V[\x03\x90\xA1\x80\xF3[\x90\x82\x91\x85a\x15aa\x14\xF6a\x13\xFF\x83\x80aL8V[a\x15U\x89\x8Ca\x15\x1Aa\x15\x1Fa\x15\x11a\x0C\x91\x8A\x80\x9C\x99\x9CaL8V[\x92\x90\x99\x80aL8V[aL\xDFV[\x91Q\x97\x88\x95` \x87\x01\x9A\x7F\xB5ny\xDE\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8CR`$\x88\x01aL\xE9V[\x03\x90\x81\x01\x83R\x82a\x0F\x0EV[Q\x91Z\xF4a\x15ma>%V[\x90\x15a\x16\x06WP\x91a\x14\xD1\x82\x7F9\xB1Fh\x93\x0C\x81o$O@s\xC0\xFD\xF4Y\xD3\xDDs\xAEW\x1BW\xB3\xEF\xE8 Y\x19G-*a\x15\xF8\x7F4oCQ\xEE\x86]\x86\xA6y\xD0\x0F9\x95\xF0R\x0F\x80=:\"v\x04\xAF\x08C\x0E&\xE94Zz\x96a\x15\xCFa\x13\xFF\x85a\x14\xDC\x99aL8V[\x92\x90\x91a\x15\xDFa\x0C\x91\x87\x80aL8V[a\x15\xECa\x15\x1A\x89\x80aL8V[\x91\x8AQ\x96\x87\x96\x87aL\xE9V[\x03\x90\xA1\x92\x82\x94\x86\x92Pa\x14\xA1V[\x83a\r\xD5a\x06\xE1\x92aB\xA0V[a\x160\x91\x94P=\x80\x85\x83>a\x16(\x81\x83a\x0F\x0EV[\x81\x01\x90aL\x85V[\x928a\x14\x99V[\x84a\r\xD5a\x06\xE1\x92aB\xA0V[4a\x06\xE5W`\x03\x19` \x816\x01\x12a\x05 W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x1BW`\xE0\x81`\x04\x01\x92\x826\x03\x01\x12a\x05\x16W`@Q\x90` \x82\x01\x91\x7F%lA\x99\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83Ra\x16\xB5\x81a\x08\x8A\x86`$\x83\x01aE\xD0V[`\0\x80\x93\x81\x92Q\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\xF4\x92a\x16\xE9a>%V[\x93\x15a\x17\xF3W\x90\x81a\x17\x06a\x0C\x0Fa\x0C\na\x0C\x03\x84`D\x97a?\x8DV[\x91a\x17\x11\x82\x80a?\x8DV[\x93`$\x83\x01\x94a\x17!\x86\x86a?\x8DV[\x97\x90\x93a\x17>a\x174`d\x88\x01\x89a?\x8DV[\x93\x90\x97\x01\x88a?\x8DV[\x85\x97\x91\x97;\x15a\r\xC3W\x8B\x97\x88\x94a\x17\x86\x93`@Q\x9D\x8E\x9A\x8B\x99\x8A\x98\x7FO\x01\xE5.\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8AR`\x04\x8A\x01aFrV[\x03\x92Z\xF1\x92\x83\x15a\r\xBEWa\x17\xCAa\x17\xD3\x93a\x14\xDC\x92\x7FG\x191\xE9\xCC\xDF\x90\x8B\xFF\xCFl\xB1\xF0\"\x17u\xFA\x8BE\xF2\xE6*\xE5~\xDD\x10K!\xD2;\xAB1\x96a\x17\xE0W[P\x83a?\x8DV[\x93\x90\x92\x80a?\x8DV[\x90`@Q\x94\x85\x94\x85aF\xA2V[\x80a\r\xB2a\x17\xED\x92a\x0E\x85V[\x87a\x17\xC3V[a\x06\xE1a\x06\xC9\x85aB\xA0V[` `\x03\x19\x82\x01\x12a\x05 W`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x05\x1BWa\x05~\x91`\x04\x01a\x0F\x89V[4a\x06\xE5Wa\x06\xB9a\x18>a\x0B)6a\x17\xFFV[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x05HV[\x90\x81`\xA0\x91\x03\x12a\x05\x16W\x90V[` `\x03\x19\x82\x01\x12a\x05 W`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x05\x1BWa\x05~\x91`\x04\x01a\x18RV[4a\x06\xE5Wa\x18\x996a\x18`V[`@Q\x90` \x82\x01\x91\x7F%\xCB\xC3\xA6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83Ra\x18\xD6\x81a\x08\x8A\x84`$\x83\x01aF\xC9V[`\0\x80\x93\x81\x92Q\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\xF4a\x19\ta>%V[\x90\x15a\x06\xBDWPa\x19#a\x0C\x0Fa\x0C\na\x0C\x03\x84\x80a?\x8DV[\x90a\x19.\x81\x80a?\x8DV[\x91\x90` \x82\x01\x92a\x19?\x84\x84a?\x8DV[\x95\x90\x91\x81;\x15a\r\xC3W\x87\x80\x94a\x19\x85`@Q\x99\x8A\x96\x87\x95\x86\x94\x7F\xEFGv\xD2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86R`\x04\x86\x01aF\xA2V[\x03\x92Z\xF1\x92\x83\x15a\r\xBEWa\x17\xCAa\x17\xD3\x93a\x14\xDC\x92\x7F\xF4t\xFCXP\x88@GO\xD7\x94\x07^Vu\xD2\x0B/\xDD\x9C\xA1\xD5\x85X\xBF\xF9ps\x05\xE09\xCF\x96a\x19\xC8WP\x83a?\x8DV[\x80a\r\xB2a\x19\xD5\x92a\x0E\x85V[8a\x17\xC3V[4a\x06\xE5W```\x03\x196\x01\x12a\x05 Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x05\x1BWa\x1A\r\x906\x90`\x04\x01a\x0F\x89V[`$5\x91\x82\x11a\x05\x1BWa\x1A\x7F`\xFF\x91a\x1Afa\x1A1a\x06\xB9\x956\x90`\x04\x01a\x0F\x89V[a\x1AV` `D5\x94a\x1AC\x86a\x11qV[\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x05%V[\x81\x01`\t\x81R\x03\x01\x90 \x90a\x10\x0EV[\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\0R` R`@`\0 \x90V[T\x16`@Q\x91\x82\x91\x82\x91\x90\x91`\xFF` \x82\x01\x93\x16\x90RV[4a\x06\xE5W` `\x03\x196\x01\x12a\x05 Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045a\x1A\xBD\x81a\x11qV[a\x1A\xC5a9FV[\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0`\x0BT\x16\x17`\x0BU`\0\x80\xF3[` `\x03\x19\x82\x01\x12a\x05 W`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x05\x1BWa\x1B\x1F\x91`\x04\x01a\tzV[\x90\x91V[\x90\x81Q\x80\x82R` \x80\x92\x01\x91\x82\x81\x83`\x05\x1B\x82\x01\x95\x01\x93`\0\x91[\x84\x83\x10a\x1BNWPPPPPP\x90V[\x90\x91\x92\x93\x94\x95\x84\x80a\x1Bh\x83\x85`\x01\x95\x03\x87R\x8AQa\x05HV[\x98\x01\x93\x01\x93\x01\x91\x94\x93\x92\x90a\x1B>V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`!`\x04R`$`\0\xFD[`\x04\x11\x15a\x1B\xB1WV[a\x1BxV[\x90`\x04\x82\x10\x15a\x1B\xB1WRV[` a\x05~\x92`@a\x1B\xF1a\x1B\xE1\x85Q``\x85R``\x85\x01\x90a\x05HV[\x84\x86\x01Q\x84\x82\x03\x86\x86\x01Ra\x05HV[\x93\x01Q\x90`@\x81\x85\x03\x91\x01RQ\x91\x81\x81R\x01\x90a\x05HV[\x91\x92\x90\x92`@\x80\x84Ra\x1C'\x85Q`\xA0\x83\x87\x01R`\xE0\x86\x01\x90a\x05HV[\x94` \x91\x82\x82\x01Q\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\x90\x81\x88\x8A\x03\x01``\x89\x01R\x82Q\x80\x8AR\x85\x8A\x01\x90\x86\x80\x82`\x05\x1B\x8D\x01\x01\x95\x01\x91`\0\x90[\x82\x82\x10a\x1C\xD2WPPPPa\n\xB1\x96\x97\x98Pa\x1C\xC9\x92`\x80\x92a\x1C\xA1a\x1C\xB5\x93\x87\x01Q\x85\x8D\x01\x90a\x1B\xB6V[``\x86\x01Q\x90\x8B\x83\x03\x01`\xA0\x8C\x01Ra\x1B\xC3V[\x92\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\xC0\x88\x01RV[\x94\x01\x90\x15\x15\x90RV[\x90\x91\x92\x95\x88\x80a\x1D\r\x8F\x93`\x1F\x19`\x01\x95\x82\x03\x01\x86R\x8AQ\x90\x83a\x1C\xFD\x83Q\x8C\x84R\x8C\x84\x01\x90a\x05HV[\x92\x01Q\x90\x84\x81\x84\x03\x91\x01Ra\x1B#V[\x98\x01\x92\x01\x92\x01\x90\x92\x91a\x1CuV[4a\x06\xE5Wa\x1D)6a\x1A\xF4V[` `@\x92`\0`\x80\x85Qa\x1D=\x81a\x0E\x9EV[``\x80\x82R\x80\x86\x83\x01R\x83\x88\x83\x01R\x87Q\x90a\x1DX\x82a\x0E\xBAV[\x80\x82R\x80\x87\x83\x01R\x88Qa\x1Dk\x81a\x0E\xD6V[\x81\x81R\x89\x83\x01R\x82\x01R\x01R\x82\x84Q\x93\x84\x92\x837\x81\x01`\x04\x81R\x03\x01\x90 a\x06\xB9a\x1D\xACa\x1D\x9D`\x02\x84\x01T`\xFF\x16\x90V[\x92a\x1D\xA7\x84a\x1B\xA7V[aO\xF1V[\x92Q\x92\x83\x92\x15\x15\x90\x83a\x1C\tV[`@`\x03\x19\x82\x01\x12a\x05 Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91`\x045\x83\x81\x11a\x05\x1BW\x82a\x1D\xE7\x91`\x04\x01a\tzV[\x93\x90\x93\x92`$5\x91\x82\x11a\x05\x1BWa\x1B\x1F\x91`\x04\x01a\tzV[`\x05\x11\x15a\x1B\xB1WV[\x90`\x05\x82\x10\x15a\x1B\xB1WRV[\x90`\x03\x82\x10\x15a\x1B\xB1WRV[a\x05~\x91` a\x1E>\x83Q`@\x84R`@\x84\x01\x90a\x05HV[\x92\x01Q\x90` \x81\x84\x03\x91\x01Ra\x05HV[\x90a\x1E\xE3` \x91\x94\x93\x94`@\x84Ra\x1Ek`@\x85\x01\x82Qa\x1E\x0BV[a\x1E|\x83\x82\x01Q``\x86\x01\x90a\x1E\x18V[a\x1E\x95`@\x82\x01Q`\xA0`\x80\x87\x01R`\xE0\x86\x01\x90a\x1E%V[`\x80a\x1E\xD1``\x84\x01Q\x92\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\x93\x84\x89\x83\x03\x01`\xA0\x8A\x01Ra\x1B#V[\x92\x01Q\x90\x85\x83\x03\x01`\xC0\x86\x01Ra\x05HV[\x93\x15\x15\x91\x01RV[4a\x06\xE5Wa\x1FU` a\x1E\xFE6a\x1D\xBAV[\x92```\x80`@\x96\x93\x96Qa\x1F\x12\x81a\x0E\x9EV[`\0\x81R`\0\x85\x82\x01R`@Qa\x1F(\x81a\x0E\xF2V[\x83\x81R\x83\x86\x82\x01R`@\x82\x01R\x82\x80\x82\x01R\x01R\x82`@Q\x93\x84\x92\x837\x81\x01`\x05\x81R\x03\x01\x90 \x91aOOV[a\x1Fl`\xFF\x82T\x16\x91a\x1Fg\x83a\x1E\x01V[aP\xDEV[\x90a\x06\xB9`@Q\x92\x83\x92\x15\x15\x90\x83a\x1EOV[\x80T`\0\x93\x92`\x01\x80\x83\x16\x93\x83\x82\x1C\x93\x85\x15a iW[` \x95\x86\x86\x10\x81\x14a :W\x85\x85R\x90\x81\x15a\x1F\xFDWP`\x01\x14a\x1F\xBCW[PPPPPV[\x90\x93\x94\x95P`\0\x92\x91\x92R\x83`\0 \x92\x84`\0\x94[\x83\x86\x10a\x1F\xE9WPPPP\x01\x01\x908\x80\x80\x80\x80a\x1F\xB5V[\x80T\x85\x87\x01\x83\x01R\x94\x01\x93\x85\x90\x82\x01a\x1F\xD1V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16\x86\x85\x01RPPP\x90\x15\x15`\x05\x1B\x01\x01\x91P8\x80\x80\x80\x80a\x1F\xB5V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\"`\x04R`$`\0\xFD[\x93`\x7F\x16\x93a\x1F\x96V[\x90`@\x91\x82Q\x92a \x83\x84a\x0E\xBAV[\x83\x81Qa \x9B\x81a \x94\x81\x87a\x1F\x7FV[\x03\x82a\x0F\x0EV[\x81R\x81Qa \xB0\x81a \x94\x81`\x01\x88\x01a\x1F\x7FV[` \x82\x01R`\x02a \xD5\x83Q\x94a \xC6\x86a\x0E\xD6V[a \x94\x85Q\x80\x94\x81\x93\x01a\x1F\x7FV[\x83R\x01RV[4a\x06\xE5Wa!Ra \xF1` a\x1AC6a\x17\xFFV[\x81\x01`\x04\x81R\x03\x01\x90 `@Q\x90a!\x14\x82a!\r\x81\x84a\x1F\x7FV[\x03\x83a\x0F\x0EV[a!j`\xFF`\x02\x83\x01T\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x06a!6`\x03\x86\x01a sV[\x94\x01T\x16\x92a!]`@Q\x96\x87\x96`\x80\x88R`\x80\x88\x01\x90a\x05HV[\x92` \x87\x01\x90a\x1B\xB6V[\x84\x82\x03`@\x86\x01Ra\x1B\xC3V[\x90``\x83\x01R\x03\x90\xF3[4a\x06\xE5Wa\x06\xB9a\x18>a!\x886a\x0F\xA4V[\x90a9\xD4V[4a\x06\xE5W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x10y\x82a!\xAB6a\x1D\xBAV[\x92\x82`@\x95\x92\x95Q\x93\x84\x92\x837\x81\x01`\x06\x81R\x03\x01\x90 \x91aOOV[4a\x06\xE5Wa!\xD66a\x18`V[a\"\x13a\x0C\x0Fa\x14.a!\xF6a!\xEC\x85\x80aL8V[` \x81\x01\x90a?\x8DV[a\x14&a\x14\x1Ca\"\t\x88\x80\x96\x95\x96aL8V[`@\x81\x01\x90a?\x8DV[\x90a\"\x1E\x81\x80aL8V[\x91` \x82\x01\x90a\".\x82\x84a?\x8DV[\x90\x82;\x15a\r\xC3W`@Q\x92\x83\x80\x92\x7F\xFB\x8BS.\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R\x81a\"v`\0\x9A\x8B\x97\x88\x943\x92`\x04\x86\x01aN\x1DV[\x03\x92Z\xF1\x80\x15a\r\xBEWa#@W[P\x82\x80`@Q` \x81\x01\x90\x7FY\xF3yv\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82Ra\"\xC4\x81a\x08\x8A\x88`$\x83\x01aN]V[Q\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\xF4a\"\xF1a>%V[\x90\x15a\x06\xBDWP\x81a#1a\x14\xDC\x92a#+\x83\x7FGG\x14Pv^n\x1B\x0B\x05[\xA2\xA1\xDE\x04\xD4\xCEq\xF7x\xC9+0nrP\x83\xEB\x12\r\xFD\x89\x96aL8V[\x92a?\x8DV[`@\x93\x91\x93Q\x93\x84\x93\x84aN\x8BV[\x80a\r\xB2a#M\x92a\x0E\x85V[8a\"\x85V[4a\x06\xE5W` `\x01`\xFFa#\x8C\x83a\x1Afa#n6a\x11\x8EV[\x95\x90\x92\x91\x93\x82`@Q\x93\x84\x92\x837\x81\x01`\t\x81R\x03\x01\x90 \x91aOOV[T\x16\x14`@Q\x90\x81R\xF3[\x90`\x01` `@Qa#\xA8\x81a\x0E\xF2V[a#\xD7\x81\x95`@Qa#\xBE\x81a \x94\x81\x85a\x1F\x7FV[\x83Ra#\xD0`@Q\x80\x96\x81\x93\x01a\x1F\x7FV[\x03\x84a\x0F\x0EV[\x01RV[4a\x06\xE5Wa$Ra$\x04` a#\xF4a\x10T6a\x0F\xA4V[\x81\x01`\x05\x81R\x03\x01\x90 \x90a\x10\x0EV[a\x06\xB9`\x04a$c\x83T\x93a$/a$\x1E`\x01\x83\x01a#\x97V[\x91a#\xD0`@Q\x80\x96\x81\x93\x01a\x1F\x7FV[`@Q\x95\x85a$B\x88`\xFF\x81\x99\x16a\x1E\x0BV[`\xFF` \x88\x01\x91`\x08\x1C\x16a\x1E\x18V[`\x80`@\x86\x01R`\x80\x85\x01\x90a\x1E%V[\x90\x83\x82\x03``\x85\x01Ra\x05HV[4a\x06\xE5Wa$\x7F6a\x18`V[`@Q\x90` \x82\x01\x91\x7F[\xD5\x1Bb\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83Ra$\xBC\x81a\x08\x8A\x84`$\x83\x01aF\xC9V[`\0\x80\x93\x81\x92Q\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\xF4a$\xEFa>%V[\x90\x15a\x06\xBDWPa%\ta\x0C\x0Fa\x0C\na\x0C\x03\x84\x80a?\x8DV[\x90a%\x14\x81\x80a?\x8DV[\x91\x90` \x82\x01\x92a%%\x84\x84a?\x8DV[\x95\x90\x91\x81;\x15a\r\xC3W\x87\x80\x94a%k`@Q\x99\x8A\x96\x87\x95\x86\x94\x7F\xA1\x13\xE4\x11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86R`\x04\x86\x01aF\xA2V[\x03\x92Z\xF1\x92\x83\x15a\r\xBEWa\x17\xCAa\x17\xD3\x93a\x14\xDC\x92\x7F:2\xA2\xEF$\x99\x03\x18\xA42\xF4t\xA6\\\xA0\x04\xFAy\xB3\xD7\xB8\xF5\xB0=\xC2>\xD4\x1FJF\xA2\xE5\x96a\x19\xC8WP\x83a?\x8DV[4a\x06\xE5Wa\x06\xB9a\x13\x05a\x12\x1Ba\x12#a\x12\xF2`@a%\xD9g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x12\x0E6a\x11\x8EV[\x92\x81Q\x93\x84\x91` \x83\x01\x96\x7Facks/ports/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x88Ra&\x1B\x81Q\x80\x92` `+\x88\x01\x91\x01a\x05%V[\x83\x01\x7F/channels/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`+\x82\x01Ra&W\x82Q\x80\x93` `5\x85\x01\x91\x01a\x05%V[\x01\x7F/sequences/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`5\x82\x01Ra&\x91\x82Q\x80\x93` \x87\x85\x01\x91\x01a\x05%V[\x01\x03` \x81\x01\x84R\x01\x82a\x0F\x0EV[4a\x06\xE5Wa&\xAE6a\x13\x1EV[`\0\x80`@Q` \x81\x01\x90\x7Fjr\x8F,\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R` `$\x82\x01Ra'7\x81a''a'\x08a&\xF7\x89\x80a;vV[`\x80`D\x86\x01R`\xC4\x85\x01\x91a;\xD5V[a'\x15` \x8A\x01\x8Aa;vV[\x90`C\x19\x85\x84\x03\x01`d\x86\x01Ra;\xD5V[a\x08\x8A`\x84\x83\x01`@\x8A\x01aD5V[Q\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\xF4a'da>%V[\x90\x15a\x06\xBDW\x7F\x9B\x91\x99#D@\xA2\xEE\x894\xBA\x890\x03\xCB\xA9\x94)Qm\xF8\xF1]\xDA\x11\xBA\x90k\xC7\x07d\xE4a'\x95\x83\x80a?\x8DV[\x90a'\xA5`@Q\x92\x83\x92\x83aH\x8EV[\x03\x90\xA1\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC`@\x91\x01\x12a\x05\x16W`$\x90V[\x90a\x1E\xE3` \x91\x94\x93\x94`@\x84R`@\x84\x01\x90a\x05HV[4a\x06\xE5W```\x03\x196\x01\x12a\x05 W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x1BWa(\"\x906\x90`\x04\x01a\tzV[a(+6a'\xAAV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa(Sa(N6\x85\x87a\x0FMV[a:=V[\x16\x80;\x15a\r\xC3Wa(\xAF\x93`\0\x93a(\xA4\x93`@Q\x96\x87\x95\x86\x94\x85\x94\x7Fl\xF4K\xF4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86R```\x04\x87\x01R`d\x86\x01\x91a;\xD5V[\x91`$\x84\x01\x90aD5V[\x03\x91Z\xFA\x90\x81\x15a\r\xBEW`\0\x90\x81\x92a(\xD4W[Pa\x06\xB9`@Q\x92\x83\x92\x83a'\xD9V[\x90a(\xF1\x92P=\x80\x91\x83>a(\xE9\x81\x83a\x0F\x0EV[\x81\x01\x90aO\x15V[\x908a(\xC4V[`\0\x91\x03\x12a\x05 WV[4a\x06\xE5W`\0\x80`\x03\x196\x01\x12a\x05 Wa)\x1Da9FV[\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0CT\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16`\x0CU\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\x80\xF3[4a\x06\xE5Wa)\x926a\x1A\xF4V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa)\xB5a(N6\x84\x86a\x0FMV[\x16\x91\x82;\x15a\r\xC3Wa(\xAF\x92`\0\x92`@Q\x80\x95\x81\x94\x82\x93\x7Fv\xC8\x1CB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R` `\x04\x85\x01R`$\x84\x01\x91a;\xD5V[4a\x06\xE5W`\0`\x03\x196\x01\x12a\x05 W` `\x0BT`\xC0\x1C`@Q\x90\x81R\xF3[4a\x06\xE5W` a*6a(N6a\x17\xFFV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[4a\x06\xE5W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x10y\x82a*ta\x10T6a\x0F\xA4V[\x81\x01`\x06\x81R\x03\x01\x90 \x90a\x10\x0EV[4a\x06\xE5W` `\x03\x196\x01\x12a\x05 W`\x045`\0R`\0` R` `@`\0 T`@Q\x90\x81R\xF3[4a\x06\xE5W`\0`\x03\x196\x01\x12a\x05 W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0CT\x16`@Q\x90\x81R\xF3[4a\x06\xE5W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa+\r\x82a\x1AC6a\x17\xFFV[\x81\x01`\x01\x81R\x03\x01\x90 T\x16`@Q\x90\x81R\xF3[4a\x06\xE5W`\0`\x03\x196\x01\x12a\x05 W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT`\x80\x1C\x16`@Q\x90\x81R\xF3[`\x03\x19\x90` \x82\x82\x01\x12a\x05 W`\x045\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x05\x1BW\x82`@\x92\x03\x01\x12a\x05\x16W`\x04\x01\x90V[4a\x06\xE5Wa+\x8C6a+LV[`@Q\x90` \x82\x01\x91\x7F\xA0l\xB3\xA2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83Ra+\xC9\x81a\x08\x8A\x84`$\x83\x01aG)V[`\0\x80\x93\x81\x92Q\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\xF4a+\xFCa>%V[\x90\x15a\x06\xBDWPa,\x16a\x0C\x0Fa\x0C\na\x0C\x03\x84\x80a?\x8DV[\x90a,!\x81\x80a?\x8DV[\x91\x90` \x82\x01\x92a,2\x84\x84a?\x8DV[\x95\x90\x91\x81;\x15a\r\xC3W\x87\x80\x94a,x`@Q\x99\x8A\x96\x87\x95\x86\x94\x7F\xE7J\x1A\xC2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86R`\x04\x86\x01aF\xA2V[\x03\x92Z\xF1\x92\x83\x15a\r\xBEWa\x17\xCAa\x17\xD3\x93a\x14\xDC\x92\x7F\x1CHi\xAAT\xEA\xF3\xD7\x93{b>\x04\x12\x80\xEF\xC3 \xF6\xC8\x03(\n\x84\x8E\x13\x98\x8BL\xFC2Z\x96a\x19\xC8WP\x83a?\x8DV[4a\x06\xE5Wa,\xC96a\x18`V[a,\xDFa\x0C\x0Fa\x14.a!\xF6a!\xEC\x85\x80aL8V[\x90a,\xEA\x81\x80aL8V[\x82;\x15a\r\xC3Wa-1`@Q\x80\x94\x81\x80\x94\x7FR\xC7\x15}\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R`\0\x97\x88\x95\x86\x923\x90`\x04\x84\x01aL\xABV[\x03\x92Z\xF1\x80\x15a\r\xBEWa-\xEDW[P\x81\x80`@Q` \x81\x01\x90\x7F\xAA\x18\xC8\xB1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82Ra-\x7F\x81a\x08\x8A\x87`$\x83\x01aN\xA2V[Q\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\xF4a-\xACa>%V[\x90\x15a\x06\xBDWPa\x14\xDCa-\xE1\x82\x7F\xA6\xCC\xDF\xD0b\x94\xBB\xB4\x81\xB7\xB0\x8A\xB1p\xC17|\xCC\xDC\xAA\x9E5\xB2\xE3F\xA3n\xE3*\x1F\x8F\x06\x93aL8V[`@Q\x91\x82\x91\x82aM\"V[\x80a\r\xB2a-\xFA\x92a\x0E\x85V[8a-@V[4a\x06\xE5W`\xC0`\x03\x196\x01\x12a\x05 Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x05\x1BWa.2\x906\x90`\x04\x01a\tzV[\x90`$5\x83\x81\x11a\x05\x1BWa.K\x906\x90`\x04\x01a\tzV[`@`C\x196\x01\x12a\x05\x16W`\x845\x91a.d\x83a\x11qV[`\xA45\x95\x86\x11a\x05\x1BWa.\x7Fa\x0B3\x966\x90`\x04\x01a\tzV[\x95\x90\x94aIhV[4a\x06\xE5W`\x03\x19` \x816\x01\x12a\x05 W`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x05\x1BW\x81`\x04\x01\x91a\x01`\x80\x92\x826\x03\x01\x12a\x05\x16W`@Q\x80\x91` \x82\x01\x93\x7F\xB51\x86\x1F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85R`$\x83\x01` \x90Ra.\xFE\x86\x80a;vV[\x90\x91`D\x85\x01Ra\x01\xA4\x84\x01\x90a/\x14\x92a;\xD5V[a/!`$\x83\x01\x87a;vV[\x91`C\x19\x92\x83\x86\x83\x03\x01`d\x87\x01Ra/9\x92a;\xD5V[a/F`D\x84\x01\x88a<2V[\x90\x82\x85\x82\x03\x01`\x84\x86\x01Ra/Z\x91aG\xFFV[a/g`d\x84\x01\x88a;vV[\x85\x83\x03\x84\x01`\xA4\x87\x01Ra/{\x92\x91a;\xD5V[a/\x88`\x84\x84\x01\x88a;vV[\x85\x83\x03\x84\x01`\xC4\x87\x01Ra/\x9C\x92\x91a;\xD5V[a/\xA9`\xA4\x84\x01\x88a;vV[\x85\x83\x03\x84\x01`\xE4\x87\x01Ra/\xBD\x92\x91a;\xD5V[a/\xCA`\xC4\x84\x01\x88a;vV[\x90\x92\x85\x83\x03\x01a\x01\x04\x86\x01Ra/\xDF\x92a;\xD5V[\x90a\x01$a/\xF2\x84\x82\x01`\xE4\x84\x01aD5V[a0\x02\x91a\x01d\x85\x01\x91\x01aD5V[\x03`\x1F\x19\x81\x01\x82Ra0\x14\x90\x82a\x0F\x0EV[Q\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90Z\x92`\0\x93\x92\x84\x93\xF4a0Ha>%V[\x90\x15a\x06\xBDW\x7F\xF8\xF9MW\x9E\x8F\x94\xB2\x11\x11B\xA3\x97\xC6\x1F\xBA\xBC\x0B\xC6d\xD4\xF8p\x05\x0E\xBE\xCCB\n\xFA\xA1\x94a'\x95\x83\x80a?\x8DV[4a\x06\xE5W`\x80`\x03\x196\x01\x12a\x05 Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x05\x1BWa0\xAB\x906\x90`\x04\x01a\tzV[\x90`$5\x83\x81\x11a\x05\x1BWa0\xC4\x906\x90`\x04\x01a\tzV[`D\x94\x91\x945\x91a0\xD4\x83a\x11qV[`d5\x90\x81\x11a\x05\x1BWa0\xEC\x906\x90`\x04\x01a\tzV[\x92\x90\x91a1\x10a1\x0Ba1\x006\x89\x89a\x0FMV[a!\x886\x85\x8Ca\x0FMV[aJjV[\x15a\n\x9FW`\0\x80\x86\x89a1\\\x8Aa\x08\x8A\x8A\x8A\x8A\x8A`@Q\x97\x88\x96` \x88\x01\x9A\x7F\xB5ny\xDE\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8CR`$\x89\x01aM\xE2V[Q\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\xF4\x96a1\x8Aa>%V[\x97\x15a1\xC7W\x7F9\xB1Fh\x93\x0C\x81o$O@s\xC0\xFD\xF4Y\xD3\xDDs\xAEW\x1BW\xB3\xEF\xE8 Y\x19G-*\x97P\x90a'\xA5\x94\x93\x92\x91`@Q\x97\x88\x97\x88aM\xE2V[a\x06\xE1a\x06\xC9\x89aB\xA0V[4a\x06\xE5Wa\x06\xB9a \x94a\x18>a1\xEF` a\x1AC6a\x17\xFFV[\x81\x01`\x02\x81R\x03\x01\x90 `@Q\x92\x83\x80\x92a\x1F\x7FV[4a\x06\xE5W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x10y\x82a2%a\x10T6a\x0F\xA4V[\x81\x01`\x07\x81R\x03\x01\x90 \x90a\x10\x0EV[4a\x06\xE5W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x10ya2]6a\x17\xFFV[a\x0F\xE8V[4a\x06\xE5W`\0`\x03\x196\x01\x12a\x05 W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT\x16`@Q\x90\x81R\xF3[4a\x06\xE5W`\0\x80a2\x9B6a\x04\xE4V[`@Qa33\x81a\x08\x8A` \x82\x01\x94\x7F\xD5\xA2D\x81\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86R` `$\x84\x01Ra2\xF2a2\xE1\x82\x80a;vV[```D\x87\x01R`\xA4\x86\x01\x91a;\xD5V[a3$a3\x19a3\x05` \x85\x01\x85a;vV[`C\x19\x94\x91\x85\x89\x84\x03\x01`d\x8A\x01Ra;\xD5V[\x92`@\x81\x01\x90a;vV[\x91\x85\x84\x03\x01`\x84\x86\x01Ra;\xD5V[Q\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\xF4a3`a>%V[\x90\x15a\x06\xBDWa3|\x81` \x80a\x06\xB9\x94Q\x83\x01\x01\x91\x01a>\x8AV[\x7F`\x1B\xFC\xC4U\xD5\xD4\xD7s\x8F\x8Cj\xC22\xE0\xD7\xCC\x9C1\xDA\xB8\x11\xF1\xD8|\x10\n\xF0\xB7\xFC: `@Q\x80a\x06\xAA\x84\x82a\x05mV[4a\x06\xE5W`\0\x80a3\xBC6a+LV[`@Qa\x11<\x81a\x08\x8A` \x82\x01\x94\x7F\xDAl\xEAU\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86R` `$\x84\x01Ra'\x15a4\x16a4\x05\x83\x80a;vV[`@`D\x88\x01R`\x84\x87\x01\x91a;\xD5V[\x91` \x81\x01\x90a;vV[4a\x06\xE5Wa4/6a+LV[`@`\0\x80\x82Q` \x81\x01\x90\x7F\xDD4i\xFC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82Ra4o\x81a\x08\x8A\x88`$\x83\x01a=\xDEV[Q\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\xF4a4\x9Ca>%V[\x90\x15a\r\xC8W\x80` \x80a4\xB5\x93Q\x83\x01\x01\x91\x01a>\x8AV[\x90a4\xC9a\x0C\x0Fa\x0C\na\x0C\x03\x86\x80a?\x8DV[\x92` \x81\x01\x90a4\xDE` a\x0C>\x84\x84a?\xEDV[\x91a4\xECa\x0CR\x82\x84a?\xEDV[\x93\x90a4\xF8\x84\x80a?\x8DV[a5\x11a5\x08\x86\x88\x96\x94\x96a?\xEDV[\x89\x81\x01\x90a@~V[a5\x1Ea\x0C\x91\x87\x89a?\xEDV[\x91\x8C;\x15a\r\xC3W\x8Ba5a\x94`\0\x98\x8DQ\x9C\x8D\x99\x8A\x99\x7FD\xDD\x968\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8BR`\x04\x8B\x01aA\x1BV[\x03\x81\x83\x8AZ\xF1\x80\x15a\r\xBEWa\x06\xB9\x96\x7F\xE9xM\xBF\x97\xF9p\xE7\xF0\x98\xB5\xA3\xE7\xE3\xBE\xBD\xDDu\xC1K\xD6\xBET\x142>\xEE\xDF!\x06\x1B\n\x94a5\xAE\x92a5\xF6W[Pa\x0B.\x87a\r=a\x0C\x03\x87\x80a?\x8DV[a\r\x98a5\xC4a\x0C\x03a\rXa\x0CR\x85\x87a?\xEDV[\x91a5\xE9a\r{a5\xE0a5\xD8\x87\x80a?\x8DV[\x94\x90\x97a?\xEDV[\x88\x81\x01\x90a@~V[\x91\x87Q\x95\x86\x95\x8A\x87aA\xA2V[\x80a\r\xB2a6\x03\x92a\x0E\x85V[8a5\x9CV[` a6\"\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x05%V[\x81\x01`\n\x81R\x03\x01\x90 \x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`2`\x04R`$`\0\xFD[\x80T\x82\x10\x15a6vW`\0R` `\0 \x01\x90`\0\x90V[a6/V[4a\x06\xE5W`@`\x03\x196\x01\x12a\x05 W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x1BW6`#\x82\x01\x12\x15a\n|Wa6\xBD\x906\x90`$\x81`\x04\x015\x91\x01a\x0FMV[a6\xC9`$5\x91a6\tV[\x90\x81T\x81\x10\x15a\n\x9FWa6\xDC\x91a6^V[\x90T`@Q`\x03\x92\x90\x92\x1B\x1Cs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R\x80` \x81\x01\x03\x90\xF3[4a\x06\xE5W`\0`\x03\x196\x01\x12a\x05 W` `\x0BTg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91`@\x1C\x16\x81R\xF3[4a\x06\xE5W`\xC0`\x03\x196\x01\x12a\x05 W`\x04g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x815\x81\x81\x11a\x05\x1BWa7f\x906\x90\x84\x01a\tzV[\x90\x91`$5\x81\x81\x11a\x05\x1BWa7\x7F\x906\x90\x86\x01a\x18RV[\x90`D5\x81\x81\x11a\x05\x1BWa7\x97\x906\x90\x87\x01a\tzV[\x90`d5\x83\x81\x11a\x05\x1BWa7\xAF\x906\x90\x89\x01a\tzV[\x94\x90\x93`\x845\x90\x81\x11a\x05\x1BWa\x0B3\x98a7\xCC\x916\x91\x01a\x18RV[\x95a7\xD5a\n\xA4V[\x97aQ\xD5V[4a\x06\xE5W` `\x03\x196\x01\x12a\x05 W`\x045a7\xF8\x81a\n\x81V[a8\0a9FV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x91\x16\x90\x81\x15a8rW`\x0CT\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17`\x0CU\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0`\0\x80\xA3\0[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FOwnable: new owner is the zero a`D\x82\x01R\x7Fddress\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`5`$\x82\x01R\x7FContract does not have fallback `D\x82\x01R\x7Fnor receive functions\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0CT\x163\x03a9gWV[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R` `$\x82\x01R\x7FOwnable: caller is not the owner`D\x82\x01R\xFD[a\x05~` `@Q\x83a9\xC7\x82\x95Q\x80\x92\x85\x80\x86\x01\x91\x01a\x05%V[\x81\x01\x03\x80\x84R\x01\x82a\x0F\x0EV[`!a\x05~\x91`@Q\x93\x81a9\xF3\x86\x93Q\x80\x92` \x80\x87\x01\x91\x01a\x05%V[\x82\x01\x7F/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01Ra:.\x82Q\x80\x93` \x87\x85\x01\x91\x01a\x05%V[\x01\x03`\x01\x81\x01\x84R\x01\x82a\x0F\x0EV[a:[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91a\x0F\xE8V[T\x16\x80\x15a:fW\x90V[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1A`$\x82\x01R\x7FIBCStore: client not found\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1E`$\x82\x01R\x7FInvalid calldata access length\0\0`D\x82\x01R\xFD[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1E`$\x82\x01R\x7FInvalid calldata access stride\0\0`D\x82\x01R\xFD[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1E`$\x82\x01R\x7FInvalid calldata access offset\0\0`D\x82\x01R\xFD[\x905\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x826\x03\x01\x81\x12\x15a;\xD0W\x01` \x815\x91\x01\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a;\xCBW\x816\x03\x83\x13a;\xC6WV[a:\xEEV[a:\xAAV[a;2V[`\x1F\x82` \x94\x93`\x1F\x19\x93\x81\x86R\x86\x86\x017`\0\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x905\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x826\x03\x01\x81\x12\x15a;\xD0W\x01\x90V[`\x03\x11\x15a\n\x9FWV[\x905\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC1\x826\x03\x01\x81\x12\x15a;\xD0W\x01\x90V[a\x05~\x91a<\x91a<\x86a\x83\x85`\x01\x95\x03\x88Ra=8\x8C\x88a;vV[\x90a;\xD5V[\x99\x01\x94\x01\x94\x01\x92\x95\x94\x93\x91\x90a=\tV[\x805\x91`\x05\x83\x10\x15a\n\x9FWa=h\x81a\x05~\x94a\x1E\x0BV[a=\x83` \x83\x015a=y\x81a<(V[` \x83\x01\x90a\x1E\x18V[a=\xD0a=\xC5a=\xAAa=\x99`@\x86\x01\x86a<2V[`\xA0`@\x86\x01R`\xA0\x85\x01\x90a\x13a>\x08a=\xF7\x84\x80a;vV[`@` \x86\x01R``\x85\x01\x91a;\xD5V[\x92` \x81\x01\x90a;\xF6V[\x90`@`\x1F\x19\x82\x85\x03\x01\x91\x01Ra=OV[=\x15a>PW=\x90a>6\x82a\x0F1V[\x91a>D`@Q\x93\x84a\x0F\x0EV[\x82R=`\0` \x84\x01>V[``\x90V[\x90\x92\x91\x92a>b\x81a\x0F1V[\x91a>p`@Q\x93\x84a\x0F\x0EV[\x82\x94\x82\x84R\x82\x82\x01\x11a\x0F\x84W` a\n\xB1\x93\x01\x90a\x05%V[` \x81\x83\x03\x12a\x05 W\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x05\x1BW\x01\x90\x80`\x1F\x83\x01\x12\x15a\n|W\x81Qa\x05~\x92` \x01a>UV[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FInvalid calldata tail offset\0\0\0\0`D\x82\x01R\xFD[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FInvalid calldata tail length\0\0\0\0`D\x82\x01R\xFD[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FCalldata tail too short\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a?\xE8W\x01\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a?\xE3W` \x01\x91\x816\x03\x83\x13a?\xDEWV[a?IV[a?\x05V[a>\xC1V[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x816\x03\x01\x82\x12\x15a?\xE8W\x01\x90V[5a\x05~\x81a<(V[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a?\xE8W\x01\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a?\xE3W` \x01\x91\x81`\x05\x1B6\x03\x83\x13a?\xDEWV[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC1\x816\x03\x01\x82\x12\x15a?\xE8W\x01\x90V[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FTarget contract does not contain`D\x82\x01R\x7F code\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x97\x95\x91\x93aAx\x95aANa\x05~\x9B\x99\x96aAj\x96`\xC0` \x8EaAB\x81aA\\\x9Aa\x1E\x18V[\x01R`\xC0\x8D\x01\x91a<\xF2V[\x91\x8A\x83\x03`@\x8C\x01Ra;\xD5V[\x90\x87\x82\x03``\x89\x01Ra\x05HV[\x90\x85\x82\x03`\x80\x87\x01Ra=\x90\xFD[\x90\x15a6vW\x80a\x1B\x1F\x91a?\x8DV[\x94\x92\x90\x93aA\xD1aA\xDF\x93aA\xC3a\x05~\x99\x97`\x80\x8AR`\x80\x8A\x01\x90a\x05HV[\x90\x88\x82\x03` \x8A\x01Ra\x05HV[\x91\x86\x83\x03`@\x88\x01Ra;\xD5V[\x92``\x81\x85\x03\x91\x01Ra;\xD5V[aA\xF6\x90a9\xABV[aB\x08aB\x02\x82a6\tV[\x91a6\tV[T\x15aB7W\x80T\x15a6vW`\0Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF` `\0 T\x16\x90V[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`$\x80\x82\x01R\x7FlookupModuleByPort: module not f`D\x82\x01R\x7Found\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`D\x81Q\x10aB\xBFW\x80`$\x80`\x04a\x05~\x94\x01Q\x83\x01\x01\x91\x01a>\x8AV[P`@QaB\xCC\x81a\x0E\xF2V[`\x1D\x81R\x7FTransaction reverted silently\0\0\0` \x82\x01R\x90V[c\xFF\xFF\xFF\xFF\x80\x91\x16\x90\x81\x14aC\x0EW`\x01\x01\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\x11`\x04R`$`\0\xFD[\x15a\n\x9FWV[\x91\x90`\0\x92\x83[aCT\x82a6\tV[Tc\xFF\xFF\xFF\xFF\x82\x16\x10\x15aC\xACWaCt\x81aCo\x84a6\tV[a6^V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90T\x81\x86\x16\x92`\x03\x1B\x1C\x16\x14aC\xA8WaC\xA3\x90aB\xF9V[aCKV[\x84\x80\xFD[PaC\xB9\x91\x92\x93Pa6\tV[\x80Th\x01\0\0\0\0\0\0\0\0\x81\x10\x15a\x0E\x99WaC\xDB\x91`\x01\x82\x01\x81Ua6^V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x91\x92\x80\x84T\x92`\x03\x1B\x93\x16\x83\x1B\x92\x1B\x19\x16\x17\x90UV[` `D5aD\x15\x81a\x11qV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x91\x16\x83R`d5aD/\x81a\x11qV[\x16\x91\x01RV[` \x90\x81\x815\x91aDE\x83a\x11qV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x93\x16\x85R\x015aD/\x81a\x11qV[\x90a\x05~\x90` \x83R`\x80`\xA0aD\xECaD\x8CaD{\x85\x80a;vV[`\xC0` \x8A\x01R`\xE0\x89\x01\x91a;\xD5V[aD\xD0aD\xB3aD\x9F` \x88\x01\x88a;\xF6V[\x92`\x1F\x19\x93\x84\x8B\x83\x03\x01`@\x8C\x01Ra=OV[aD\xC0`@\x88\x01\x88a;vV[\x90\x84\x8B\x84\x03\x01``\x8C\x01Ra;\xD5V[\x90aD\xDE``\x87\x01\x87a;vV[\x91\x89\x84\x03\x01\x86\x8A\x01Ra;\xD5V[\x94\x01\x91\x01aD5V[\x99\x97\x95\x90aEW\x94a\x05~\x9C\x9A\x96aE-aEI\x95aEe\x9B\x97\x8F\x80aE `\xE0\x92aE;\x99a\x1E\x18V[\x81` \x82\x01R\x01\x91a<\xF2V[\x8D\x81\x03`@\x8F\x01R\x91a;\xD5V[\x90\x8A\x82\x03``\x8C\x01Ra\x05HV[\x90\x88\x82\x03`\x80\x8A\x01Ra%V[\x98\x15aJ^W\x90aJY\x94\x93\x92\x91aJL\x8A` \x80\x7F*\x89\xCA\x0E\x96*a\xB8\x11Uu\xDAc\xF5K\xB2I\xCF\x017\x94\x7F\xC9\xAB\x01j\xC9\xDF\x88\xAA4~\x9C\x9DQ\x83\x01\x01\x91\x01aH\xF4V[\x96`@Q\x98\x89\x98\x89aI\tV[\x03\x90\xA1V[a\x06\xE1a\x06\xC9\x8AaB\xA0V[`\0[aJv\x82a6\tV[Tc\xFF\xFF\xFF\xFF\x82\x16\x10\x15aJ\xCAWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFaJ\xA6\x82aCo\x85a6\tV[\x91\x90T3\x92`\x03\x1B\x1C\x16\x14aJ\xC3WaJ\xBE\x90aB\xF9V[aJmV[PP`\x01\x90V[PP`\0\x90V[\x905\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFE\xE1\x826\x03\x01\x81\x12\x15a;\xD0W\x01\x90V[\x90a\x05~\x90aK\xBEaK\xA3aK\x88aKmaKRa\x01 aK5\x87aK'\x8Ba\x11\x83V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90RV[aKB` \x8A\x01\x8Aa;vV[\x90\x91\x80` \x8A\x01R\x88\x01\x91a;\xD5V[aK_`@\x89\x01\x89a;vV[\x90\x87\x83\x03`@\x89\x01Ra;\xD5V[aKz``\x88\x01\x88a;vV[\x90\x86\x83\x03``\x88\x01Ra;\xD5V[aK\x95`\x80\x87\x01\x87a;vV[\x90\x85\x83\x03`\x80\x87\x01Ra;\xD5V[aK\xB0`\xA0\x86\x01\x86a;vV[\x90\x84\x83\x03`\xA0\x86\x01Ra;\xD5V[\x92aK\xCF`\xC0\x83\x01`\xC0\x83\x01aD5V[aK\xDDa\x01\0\x80\x92\x01a\x11\x83V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x91\x01RV[\x90a\x05~\x90` \x83R`@``aD\xECaL\x1AaL\t\x85\x80aJ\xD1V[`\x80` \x89\x01R`\xA0\x88\x01\x90aK\x03V[aL'` \x86\x01\x86a;vV[\x90`\x1F\x19\x89\x84\x03\x01\x86\x8A\x01Ra;\xD5V[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFE\xE1\x816\x03\x01\x82\x12\x15a?\xE8W\x01\x90V[\x90\x80`\x1F\x83\x01\x12\x15a\n|W\x81Qa\x05~\x92` \x01a>UV[\x90` \x82\x82\x03\x12a\x05 W\x81Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x1BWa\x05~\x92\x01aLkV[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFaL\xD8` \x92\x95\x94\x95`@\x85R`@\x85\x01\x90aK\x03V[\x94\x16\x91\x01RV[5a\x05~\x81a\x11qV[\x92a\x05~\x96\x94aH\xC6aM\x0E\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x95`\x80\x88R`\x80\x88\x01\x91a;\xD5V[\x93\x16`@\x82\x01R``\x81\x84\x03\x91\x01Ra\x05HV[\x90` a\x05~\x92\x81\x81R\x01\x90aK\x03V[\x90aM=\x91a9\xD4V[aMIaB\x02\x82a6\tV[T\x15aMxW\x80T\x15a6vW`\0Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF` `\0 T\x16\x90V[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`'`$\x82\x01R\x7FlookupModuleByChannel: module no`D\x82\x01R\x7Ft found\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x92a\x05~\x97\x95\x96\x94aH\xC6aN\t\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x95`\x80\x88R`\x80\x88\x01\x91a;\xD5V[\x94\x16`@\x82\x01R``\x81\x85\x03\x91\x01Ra;\xD5V[\x92`@\x92aL\xD8\x91aNOs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94\x98\x97\x98``\x88R``\x88\x01\x90aK\x03V[\x91\x86\x83\x03` \x88\x01Ra;\xD5V[\x90a\x05~\x90` \x83R```\x80aD\xECaF\xF7aNz\x85\x80aJ\xD1V[`\xA0` \x89\x01R`\xC0\x88\x01\x90aK\x03V[\x91aF\xBBa\x05~\x94\x92`@\x85R`@\x85\x01\x90aK\x03V[` \x81R`\xA0g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x80aN\xF2aN\xD3aN\xC3\x87\x80aJ\xD1V[\x85` \x88\x01R`\xC0\x87\x01\x90aK\x03V[aN\xE0` \x88\x01\x88a;vV[\x90`\x1F\x19\x88\x84\x03\x01`@\x89\x01Ra;\xD5V[\x94aO\x03``\x86\x01`@\x83\x01aD5V[\x015aO\x0E\x81a\x11qV[\x16\x91\x01R\x90V[\x91\x90`@\x83\x82\x03\x12a\x05 W\x82Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x1BW` \x91aO@\x91\x85\x01aLkV[\x92\x01Q\x80\x15\x15\x81\x03a\n\x9FW\x90V[` \x91\x92\x83`@Q\x94\x85\x93\x847\x82\x01\x90\x81R\x03\x01\x90 \x90V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0E\x99W`\x05\x1B` \x01\x90V[\x90\x81TaO\x8C\x81aOhV[\x92`@\x93aO\x9C\x85Q\x91\x82a\x0F\x0EV[\x82\x81R\x80\x94` \x80\x92\x01\x92`\0R\x81`\0 \x90`\0\x93[\x85\x85\x10aO\xC2WPPPPPPV[`\x01\x84\x81\x92\x84QaO\xD7\x81a \x94\x81\x8Aa\x1F\x7FV[\x81R\x01\x93\x01\x94\x01\x93\x91aO\xB3V[`\x04\x82\x10\x15a\x1B\xB1WRV[\x90`@\x91\x82Q\x90aP\x01\x82a\x0E\x9EV[\x81\x93\x80QaP\x13\x81a \x94\x81\x86a\x1F\x7FV[\x83R`\x01\x80\x83\x01\x80T\x91aP&\x83aOhV[\x92aP3\x85Q\x94\x85a\x0F\x0EV[\x80\x84R` \x92\x83\x85\x01\x90`\0R\x83`\0 `\0\x91[\x83\x83\x10aP\x9FWPPPPP\x84\x93aP\x7F`\x80\x94aK\xDD\x94`\x06\x94a\n\xB1\x99\x01RaPw`\x02\x84\x01T`\xFF\x16\x90V[\x90\x87\x01aO\xE5V[aP\x8B`\x03\x82\x01a sV[``\x86\x01R\x01Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[`\x02\x86\x86\x92\x8AQaP\xAF\x81a\x0E\xF2V[\x8BQaP\xBF\x81a \x94\x81\x8Aa\x1F\x7FV[\x81RaP\xCC\x85\x87\x01aO\x80V[\x83\x82\x01R\x81R\x01\x92\x01\x92\x01\x91\x90aPHV[\x90`@QaP\xEB\x81a\x0E\x9EV[\x80\x92\x80T`\xFF\x81\x16\x90`\x05\x82\x10\x15a\x1B\xB1W`\xFF\x91\x84R`\x08\x1C\x16\x91`\x03\x83\x10\x15a\x1B\xB1Wa#\xD7`\x80\x92`\x04\x94` \x84\x01RaQ*`\x01\x82\x01a#\x97V[`@\x84\x01RaQ;`\x03\x82\x01aO\x80V[``\x84\x01Ra#\xD0`@Q\x80\x96\x81\x93\x01a\x1F\x7FV[\x90`@Q\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x80\x82\x01\x93`\xA0\x83\x01`@R`\0\x85R\x93[\x01\x92`\n\x90\x81\x81\x06`0\x01\x85S\x04\x92\x83\x15aQ\xC3W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90aQ\x87V[\x92P`\x80\x83`\x1F\x19\x92\x03\x01\x92\x01\x91\x82RV[\x93\x91\x92\x97\x90\x94\x96\x95\x97aQ\xE6a9FV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\rT\x16\x96aR@`@Q\x96` \x88\x01\x98\x7F\xE6\x05_7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8AR`\xC0`$\x8A\x01R`\xE4\x89\x01\x91a;\xD5V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC\x90\x81\x88\x84\x03\x01`D\x89\x01RaR\xA6aR\x8BaR}\x89\x80a;vV[`\xA0\x87R`\xA0\x87\x01\x91a;\xD5V[aR\x98` \x8A\x01\x8Aa<\x9FV[\x90\x86\x83\x03` \x88\x01RaH,V[`@\x88\x015\x9B`\x04\x8D\x10\x15a\n\x9FW`\0\x9DaS'\x8F\x9E\x9A\x8C\x9Aa\x08\x8A\x99\x89`\x80aSe\x9F\x81aS\x08aS7\x9BaSF\x9Fg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94`@aR\xEE\x92\x01\x90a\x1B\xB6V[aR\xFB``\x8A\x01\x8AaG:V[\x86\x82\x03``\x88\x01RaGlV[\x96\x015aS\x14\x81a\x11qV[\x16\x91\x01R\x8C\x83\x03\x89\x01`d\x8E\x01Ra;\xD5V[\x91\x85\x8A\x84\x03\x01`\x84\x8B\x01Ra;\xD5V[\x91\x86\x83\x03\x01`\xA4\x87\x01Ra=OV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x92\x16`\xC4\x84\x01RV[Q\x91Z\xF4aSqa>%V[\x90\x15a\x06\xBDWPV\xFE\xA2dipfsX\"\x12 \x93\0\xEE\xB8\x9B\xEC\xD8\xF6\xCA>\x87a\xC1\xEE\x16\x13\x03\x0B\x02\xA8\xA7\xF0\x9E$\xEE\xBB\xA6\xEBq\x87!\x14dsolcC\0\x08\x15\x003"; + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R`\x046\x10\x15a\0\x12W`\0\x80\xFD[`\x005`\xE0\x1C\x80c\x01\xC6@\x0F\x14a\x03\x18W\x80c\x04\xF6\x8E\\\x14a\x03\x13W\x80c\x11~\x88j\x14a\x03\x0EW\x80c\x11\xB8\x8A\x15\x14a\x03\tW\x80c\x13\x90\xD2\x8D\x14a\x03\x04W\x80c\x18\xC1\x98p\x14a\x02\xFFW\x80c#@*3\x14a\x02\xFAW\x80c#n\xBDp\x14a\x02\xF5W\x80c%lA\x99\x14a\x02\xF0W\x80c%p\xDA\xE0\x14a\x02\xEBW\x80c%\xCB\xC3\xA6\x14a\x02\xB9W\x80c&\x07\x847\x14a\x02\xE6W\x80c'q\x1Ai\x14a\x02\xE1W\x80c0\0!z\x14a\x02\xDCW\x80c1\x97?\0\x14a\x02\xD7W\x80c;\xC33\x9F\x14a\x02\xD2W\x80cW\x17\xBC\xF5\x14a\x02\xCDW\x80cX$\x18\xB6\x14a\x02\xC8W\x80cY\xF3yv\x14a\x02sW\x80cZ\x9A\xFA\xC3\x14a\x02\xC3W\x80c[=\xE2`\x14a\x02\xBEW\x80c[\xD5\x1Bb\x14a\x02\xB9W\x80c[\xE1d\xEE\x14a\x02\xB4W\x80cjr\x8F,\x14a\x02\xAFW\x80cl\xF4K\xF4\x14a\x02\xAAW\x80cqP\x18\xA6\x14a\x02\xA5W\x80cv\xC8\x1CB\x14a\x02\xA0W\x80cy&\xB8\xA9\x14a\x02\x9BW\x80c~\xB7\x892\x14a\x02\x96W\x80c\x82\x1C\xB5\xD0\x14a\x02\x91W\x80c\x83\x9D\xF9E\x14a\x02\x8CW\x80c\x8D\xA5\xCB[\x14a\x02\x87W\x80c\x99\x04\x91\xA5\x14a\x02\x82W\x80c\xA0I\xE6w\x14a\x02}W\x80c\xA0l\xB3\xA2\x14a\x02FW\x80c\xA9U\r\xAC\x14a\x02xW\x80c\xAA\x18\xC8\xB1\x14a\x02sW\x80c\xAEL\xD2\x01\x14a\x02nW\x80c\xB51\x86\x1F\x14a\x02iW\x80c\xB5ny\xDE\x14a\x02dW\x80c\xC28\x01\x05\x14a\x02_W\x80c\xC90\xB1\xB0\x14a\x02ZW\x80c\xD1){\x8D\x14a\x02UW\x80c\xD5\xA2D\x81\x14a\x02PW\x80c\xDAl\xEAU\x14a\x02KW\x80c\xDD4i\xFC\x14a\x02FW\x80c\xE1\xB1{C\x14a\x02AW\x80c\xE6\x05_7\x14a\x02V[a\x1A\xA4V[a\x1A\x02V[a\x18\xC8V[a\x18sV[a\x17\x81V[a\rAV[a\x16\xEBV[a\x16cV[a\x16\x1BV[a\x15\xEEV[a\x15dV[a\x14\xB8V[a\x12\xC8V[a\x10\xDAV[a\rvV[a\x0C\xC5V[a\x0C\x08V[a\x0B\xD3V[a\nDV[a\x08\xFEV[a\x08\xAFV[a\x05\xF3V[a\x04\xDDV[a\x04\rV[a\x03\xD8V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x90` \x82\x82\x01\x12a\x03mW`\x045\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03mW\x82``\x92\x03\x01\x12a\x03mW`\x04\x01\x90V[`\0\x80\xFD[`\0[\x83\x81\x10a\x03\x85WPP`\0\x91\x01RV[\x81\x81\x01Q\x83\x82\x01R` \x01a\x03uV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x93a\x03\xD1\x81Q\x80\x92\x81\x87R\x87\x80\x88\x01\x91\x01a\x03rV[\x01\x16\x01\x01\x90V[4a\x03mWa\x03\xE66a\x03\x1DV[P\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a%\xF5V[4a\x03mW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC` \x816\x01\x12a\x03mW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03mWa\x01\x80\x916\x03\x01\x12a\x03mW\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a%\xF5V[\x91\x81`\x1F\x84\x01\x12\x15a\x03mW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03mW` \x83\x81\x86\x01\x95\x01\x01\x11a\x03mWV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x03a\x03mWV[`\xA45\x90a\x04\xDB\x82a\x04\xB0V[V[4a\x03mW`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03mWa\x05,\x906\x90`\x04\x01a\x04\x82V[`$5\x90a\x059\x82a\x04\xB0V[a\x05Aa&\x14V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x920\x84\x84\x16\x14a\x03mWa\x05k\x916\x91a\x07\x86V[\x91a\x05u\x83a\x08=V[T\x16a\x05\xC9Wa\x05\x87a\x05\xC7\x92a\x08=V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[\0[`\x04`@Q\x7FF>\xEC\x90\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[4a\x03mW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC` \x816\x01\x12a\x03mW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03mW`\xC0\x916\x03\x01\x12a\x03mW\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a%\xF5V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`A`\x04R`$`\0\xFD[`\xA0\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06\xB2W`@RV[a\x06gV[``\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06\xB2W`@RV[` \x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06\xB2W`@RV[`@\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06\xB2W`@RV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06\xB2W`@RV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06\xB2W`\x1F\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x16` \x01\x90V[\x92\x91\x92a\x07\x92\x82a\x07LV[\x91a\x07\xA0`@Q\x93\x84a\x07\x0BV[\x82\x94\x81\x84R\x81\x83\x01\x11a\x03mW\x82\x81` \x93\x84`\0\x96\x017\x01\x01RV[\x90\x80`\x1F\x83\x01\x12\x15a\x03mW\x81` a\x07\xD8\x935\x91\x01a\x07\x86V[\x90V[\x90`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x83\x01\x12a\x03mWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x03mW\x83a\x08&\x91`\x04\x01a\x07\xBDV[\x92`$5\x91\x82\x11a\x03mWa\x07\xD8\x91`\x04\x01a\x07\xBDV[` a\x08V\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x03rV[\x81\x01`\n\x81R\x03\x01\x90 \x90V[` a\x08|\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x03rV[\x81\x01`\x03\x81R\x03\x01\x90 \x90V[` \x90a\x08\xA3\x92\x82`@Q\x94\x83\x86\x80\x95Q\x93\x84\x92\x01a\x03rV[\x82\x01\x90\x81R\x03\x01\x90 \x90V[4a\x03mW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x08\xF4\x82a\x08\xE4a\x08\xCF6a\x07\xDBV[\x92\x90\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x03rV[\x81\x01`\x08\x81R\x03\x01\x90 \x90a\x08\x89V[T\x16`@Q\x90\x81R\xF3[4a\x03mW`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03mWa\tM\x906\x90`\x04\x01a\x04\x82V[PPa\tZ`$5a\x04\xB0V[a\tba&\x14V[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a%\xF5V[`D5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x03mWV[`\x845\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x03mWV[5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x03mWV[``\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x82\x01\x12a\x03mWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91`\x045\x83\x81\x11a\x03mW\x82a\n\x16\x91`\x04\x01a\x04\x82V[\x93\x90\x93\x92`$5\x90\x82\x82\x11a\x03mWa\n1\x91`\x04\x01a\x04\x82V[\x92\x90\x92\x91`D5\x90\x81\x16\x81\x03a\x03mW\x90V[4a\x03mWa\x0B\x7Fa\x0Bfa\n|a\n\x84a\x0BS`Ga\n\x8Bg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\no6a\t\xCBV[\x98\x93\x90\x99\x91\x926\x91a\x07\x86V[\x976\x91a\x07\x86V[\x94\x16a&eV[\x92`@Q\x93\x84\x91` \x83\x01\x96\x7Fcommitments/ports/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x88Ra\n\xCE\x81Q\x80\x92` `2\x88\x01\x91\x01a\x03rV[\x83\x01\x7F/channels/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`2\x82\x01Ra\x0B\n\x82Q\x80\x93` `<\x85\x01\x91\x01a\x03rV[\x01\x7F/sequences/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`<\x82\x01Ra\x0BD\x82Q\x80\x93` \x87\x85\x01\x91\x01a\x03rV[\x01\x03`'\x81\x01\x84R\x01\x82a\x07\x0BV[Q\x90 `\0R`\0` R`@`\0 \x90V[T`@\x80Q\x82\x81R\x91\x15\x15` \x83\x01R\x90\x91\x82\x91\x82\x01\x90V[\x03\x90\xF3[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x90` \x82\x82\x01\x12a\x03mW`\x045\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03mW\x82`\x80\x92\x03\x01\x12a\x03mW`\x04\x01\x90V[4a\x03mWa\x0B\xE16a\x0B\x83V[P\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a%\xF5V[4a\x03mW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC` \x816\x01\x12a\x03mW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03mW`\xE0\x916\x03\x01\x12a\x03mW\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a%\xF5V[` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x82\x01\x12a\x03mW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03mWa\x07\xD8\x91`\x04\x01a\x07\xBDV[4a\x03mWa\x0B\x7Fa\x0C\xD66a\x0C|V[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x03\x95V[\x90\x81`\xA0\x91\x03\x12a\x03mW\x90V[` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x82\x01\x12a\x03mW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03mWa\x07\xD8\x91`\x04\x01a\x0C\xEAV[4a\x03mWa\rO6a\x0C\xF8V[P\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a%\xF5V[4a\x03mW``\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x03mWa\r\xC6\x906\x90`\x04\x01a\x07\xBDV[`$5\x91\x82\x11a\x03mWa\x0E4`\xFF\x91a\x0E\x1Ba\r\xEAa\x0B\x7F\x956\x90`\x04\x01a\x07\xBDV[a\x0E\x0B` a\r\xF7a\t\x88V[\x94\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x03rV[\x81\x01`\t\x81R\x03\x01\x90 \x90a\x08\x89V[\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\0R` R`@`\0 \x90V[T\x16`@Q\x91\x82\x91\x82\x91\x90\x91`\xFF` \x82\x01\x93\x16\x90RV[` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x82\x01\x12a\x03mW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03mWa\x0E\x95\x91`\x04\x01a\x04\x82V[\x90\x91V[\x90\x80\x82Q\x90\x81\x81R` \x80\x91\x01\x92` \x80\x84`\x05\x1B\x83\x01\x01\x95\x01\x93`\0\x91[\x84\x83\x10a\x0E\xC8WPPPPPP\x90V[\x90\x91\x92\x93\x94\x95\x84\x80a\x0F\x04\x83\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x86`\x01\x96\x03\x01\x87R\x8AQa\x03\x95V[\x98\x01\x93\x01\x93\x01\x91\x94\x93\x92\x90a\x0E\xB8V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`!`\x04R`$`\0\xFD[`\x04\x11\x15a\x0FMWV[a\x0F\x14V[\x90`\x04\x82\x10\x15a\x0FMWRV[` a\x07\xD8\x92`@a\x0F\x8Da\x0F}\x85Q``\x85R``\x85\x01\x90a\x03\x95V[\x84\x86\x01Q\x84\x82\x03\x86\x86\x01Ra\x03\x95V[\x93\x01Q\x90`@\x81\x85\x03\x91\x01RQ\x91\x81\x81R\x01\x90a\x03\x95V[\x91\x92\x90\x92`@\x80\x84Ra\x0F\xC4\x85Q`\xA0`@\x87\x01R`\xE0\x86\x01\x90a\x03\x95V[\x94` \x91\x82\x82\x01Q\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\x90\x81\x88\x8A\x03\x01``\x89\x01R\x82Q\x80\x8AR\x85\x8A\x01\x91\x86\x80\x83`\x05\x1B\x8D\x01\x01\x95\x01\x92`\0\x91[\x83\x83\x10a\x10qWPPPPPa\x04\xDB\x95\x96\x97Pa\x10Ta\x10h\x92`\x80\x92a\x10@`@\x87\x01Q\x85\x8D\x01\x90a\x0FRV[``\x86\x01Q\x90\x8B\x83\x03\x01`\xA0\x8C\x01Ra\x0F_V[\x92\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\xC0\x88\x01RV[\x94\x01\x90\x15\x15\x90RV[\x90\x91\x92\x93\x95\x88\x80a\x10\xCB\x8F\x93\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x01\x95\x82\x03\x01\x87R\x8AQ\x90\x83a\x10\xBB\x83Q\x89\x84R\x89\x84\x01\x90a\x03\x95V[\x92\x01Q\x90\x84\x81\x84\x03\x91\x01Ra\x0E\x99V[\x98\x01\x93\x01\x93\x01\x91\x93\x92\x90a\x10\x12V[4a\x03mWa\x10\xE86a\x0ELV[` `@\x92`\0`\x80\x85Qa\x10\xFC\x81a\x06\x96V[``\x80\x82R\x80\x86\x83\x01R\x83\x88\x83\x01R\x87Q\x90a\x11\x17\x82a\x06\xB7V[\x80\x82R\x80\x87\x83\x01R\x88Qa\x11*\x81a\x06\xD3V[\x81\x81R\x89\x83\x01R\x82\x01R\x01R\x82\x84Q\x93\x84\x92\x837\x81\x01`\x04\x81R\x03\x01\x90 a\x0B\x7Fa\x11ka\x11\\`\x02\x84\x01T`\xFF\x16\x90V[\x92a\x11f\x84a\x0FCV[a#UV[\x92Q\x92\x83\x92\x15\x15\x90\x83a\x0F\xA5V[`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x82\x01\x12a\x03mWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91`\x045\x83\x81\x11a\x03mW\x82a\x11\xC4\x91`\x04\x01a\x04\x82V[\x93\x90\x93\x92`$5\x91\x82\x11a\x03mWa\x0E\x95\x91`\x04\x01a\x04\x82V[`\x05\x11\x15a\x0FMWV[\x90`\x05\x82\x10\x15a\x0FMWRV[\x90`\x03\x82\x10\x15a\x0FMWRV[a\x07\xD8\x91` a\x12\x1B\x83Q`@\x84R`@\x84\x01\x90a\x03\x95V[\x92\x01Q\x90` \x81\x84\x03\x91\x01Ra\x03\x95V[\x90a\x12\xC0` \x91\x94\x93\x94`@\x84Ra\x12H`@\x85\x01\x82Qa\x11\xE8V[a\x12Y\x83\x82\x01Q``\x86\x01\x90a\x11\xF5V[a\x12r`@\x82\x01Q`\xA0`\x80\x87\x01R`\xE0\x86\x01\x90a\x12\x02V[`\x80a\x12\xAE``\x84\x01Q\x92\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC0\x93\x84\x89\x83\x03\x01`\xA0\x8A\x01Ra\x0E\x99V[\x92\x01Q\x90\x85\x83\x03\x01`\xC0\x86\x01Ra\x03\x95V[\x93\x15\x15\x91\x01RV[4a\x03mWa\x132` a\x12\xDB6a\x11yV[\x92```\x80`@\x96\x93\x96Qa\x12\xEF\x81a\x06\x96V[`\0\x81R`\0\x85\x82\x01R`@Qa\x13\x05\x81a\x06\xEFV[\x83\x81R\x83\x86\x82\x01R`@\x82\x01R\x82\x80\x82\x01R\x01R\x82`@Q\x93\x84\x92\x837\x81\x01`\x05\x81R\x03\x01\x90 \x91a\"\xB1V[a\x13I`\xFF\x82T\x16\x91a\x13D\x83a\x11\xDEV[a$OV[\x90a\x0B\x7F`@Q\x92\x83\x92\x15\x15\x90\x83a\x12,V[\x80T`\0\x93\x92`\x01\x80\x83\x16\x93\x83\x82\x1C\x93\x85\x15a\x14FW[` \x95\x86\x86\x10\x81\x14a\x14\x17W\x85\x85R\x90\x81\x15a\x13\xDAWP`\x01\x14a\x13\x99W[PPPPPV[\x90\x93\x94\x95P`\0\x92\x91\x92R\x83`\0 \x92\x84`\0\x94[\x83\x86\x10a\x13\xC6WPPPP\x01\x01\x908\x80\x80\x80\x80a\x13\x92V[\x80T\x85\x87\x01\x83\x01R\x94\x01\x93\x85\x90\x82\x01a\x13\xAEV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16\x86\x85\x01RPPP\x90\x15\x15`\x05\x1B\x01\x01\x91P8\x80\x80\x80\x80a\x13\x92V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\"`\x04R`$`\0\xFD[\x93`\x7F\x16\x93a\x13sV[\x90`@\x91\x82Q\x92a\x14`\x84a\x06\xB7V[\x83\x81Qa\x14x\x81a\x14q\x81\x87a\x13\\V[\x03\x82a\x07\x0BV[\x81R\x81Qa\x14\x8D\x81a\x14q\x81`\x01\x88\x01a\x13\\V[` \x82\x01R`\x02a\x14\xB2\x83Q\x94a\x14\xA3\x86a\x06\xD3V[a\x14q\x85Q\x80\x94\x81\x93\x01a\x13\\V[\x83R\x01RV[4a\x03mWa\x15Ba\x14\xE1` a\x14\xCE6a\x0C|V[\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x03rV[\x81\x01`\x04\x81R\x03\x01\x90 `@Q\x90a\x15\x04\x82a\x14\xFD\x81\x84a\x13\\V[\x03\x83a\x07\x0BV[a\x15Z`\xFF`\x02\x83\x01T\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x06a\x15&`\x03\x86\x01a\x14PV[\x94\x01T\x16\x92a\x15M`@Q\x96\x87\x96`\x80\x88R`\x80\x88\x01\x90a\x03\x95V[\x92` \x87\x01\x90a\x0FRV[\x84\x82\x03`@\x86\x01Ra\x0F_V[\x90``\x83\x01R\x03\x90\xF3[4a\x03mWa\x15r6a\x07\xDBV[\x90a\x15\xDA`!`@Q\x80\x94` \x94a\x15\x92\x81Q\x80\x92\x88\x80\x87\x01\x91\x01a\x03rV[\x82\x01\x7F/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86\x82\x01Ra\x15\xCB\x82Q\x80\x93\x88\x87\x85\x01\x91\x01a\x03rV[\x01\x03`\x01\x81\x01\x85R\x01\x83a\x07\x0BV[a\x0B\x7F`@Q\x92\x82\x84\x93\x84R\x83\x01\x90a\x03\x95V[4a\x03mW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x08\xF4a\x16\x166a\x0C|V[a\x08=V[4a\x03mW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x08\xF4\x82a\x1686a\x11yV[\x92\x82`@\x95\x92\x95Q\x93\x84\x92\x837\x81\x01`\x06\x81R\x03\x01\x90 \x91a\"\xB1V[4a\x03mWa\x0B\xE16a\x0C\xF8V[4a\x03mW` `\x01`\xFFa\x16\x9C\x83a\x0E\x1Ba\x16~6a\t\xCBV[\x95\x90\x92\x91\x93\x82`@Q\x93\x84\x92\x837\x81\x01`\t\x81R\x03\x01\x90 \x91a\"\xB1V[T\x16\x14`@Q\x90\x81R\xF3[\x90`\x01` `@Qa\x16\xB8\x81a\x06\xEFV[a\x16\xE7\x81\x95`@Qa\x16\xCE\x81a\x14q\x81\x85a\x13\\V[\x83Ra\x16\xE0`@Q\x80\x96\x81\x93\x01a\x13\\V[\x03\x84a\x07\x0BV[\x01RV[4a\x03mWa\x17ba\x17\x14` a\x17\x04a\x08\xCF6a\x07\xDBV[\x81\x01`\x05\x81R\x03\x01\x90 \x90a\x08\x89V[a\x0B\x7F`\x04a\x17s\x83T\x93a\x17?a\x17.`\x01\x83\x01a\x16\xA7V[\x91a\x16\xE0`@Q\x80\x96\x81\x93\x01a\x13\\V[`@Q\x95\x85a\x17R\x88`\xFF\x81\x99\x16a\x11\xE8V[`\xFF` \x88\x01\x91`\x08\x1C\x16a\x11\xF5V[`\x80`@\x86\x01R`\x80\x85\x01\x90a\x12\x02V[\x90\x83\x82\x03``\x85\x01Ra\x03\x95V[4a\x03mWa\x0B\x7Fa\x0Bfa\n|a\n\x84a\x0BS`@a\x17\xACg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\no6a\t\xCBV[\x92\x81Q\x93\x84\x91` \x83\x01\x96\x7Facks/ports/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x88Ra\x17\xEE\x81Q\x80\x92` `+\x88\x01\x91\x01a\x03rV[\x83\x01\x7F/channels/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`+\x82\x01Ra\x18*\x82Q\x80\x93` `5\x85\x01\x91\x01a\x03rV[\x01\x7F/sequences/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`5\x82\x01Ra\x18d\x82Q\x80\x93` \x87\x85\x01\x91\x01a\x03rV[\x01\x03` \x81\x01\x84R\x01\x82a\x07\x0BV[4a\x03mWa\x03\xE66a\x0B\x83V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC`@\x91\x01\x12a\x03mW`$\x90V[\x90a\x12\xC0` \x91\x94\x93\x94`@\x84R`@\x84\x01\x90a\x03\x95V[4a\x03mW``\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11a\x03mWa\x19\x94`\0\x91a\x19 ` \x946\x90`\x04\x01a\x04\x82V[a\x19)6a\x18\x81V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x19Qa\x19L6\x85\x87a\x07\x86V[a%\x80V[\x16\x93a\x19\xAB`@Q\x98\x89\x97\x88\x96\x87\x96\x7Fl\xF4K\xF4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x88R```\x04\x89\x01R`d\x88\x01\x91a%5V[\x93\x83a\x19\x9F\x82a\t\xB6V[\x16`$\x87\x01R\x01a\t\xB6V[\x16`D\x83\x01R\x03\x91Z\xFA\x90\x81\x15a\x19\xFDW`\0\x90`\0\x92a\x19\xD7W[Pa\x0B\x7F`@Q\x92\x83\x92\x83a\x18\xB0V[\x90Pa\x19\xF6\x91P=\x80`\0\x83>a\x19\xEE\x81\x83a\x07\x0BV[\x81\x01\x90a$\xC1V[\x908a\x19\xC7V[a%tV[4a\x03mW`\0\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x1A\xA1Wa\x1A:a&\x14V[\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0CT\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16`\x0CU\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\x80\xF3[\x80\xFD[4a\x03mWa\x1B\x19`\0a\x1A\xB76a\x0ELV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x1A\xDAa\x19L6\x84\x86a\x07\x86V[\x16\x90`@Q\x80\x95\x81\x94\x82\x93\x7Fv\xC8\x1CB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R` `\x04\x85\x01R`$\x84\x01\x91a%5V[\x03\x91Z\xFA\x90\x81\x15a\x19\xFDW`\0\x90`\0\x92a\x19\xD7WPa\x0B\x7F`@Q\x92\x83\x92\x83a\x18\xB0V[4a\x03mW`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT`\x80\x1C\x16`@Q\x90\x81R\xF3[4a\x03mW` a\x1B\x9Aa\x19L6a\x0C|V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[4a\x03mW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x08\xF4\x82a\x1B\xD8a\x08\xCF6a\x07\xDBV[\x81\x01`\x06\x81R\x03\x01\x90 \x90a\x08\x89V[4a\x03mW` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mW`\x045`\0R`\0` R` `@`\0 T`@Q\x90\x81R\xF3[4a\x03mW`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0CT\x16`@Q\x90\x81R\xF3[4a\x03mW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x1C\xAD\x82a\x14\xCE6a\x0C|V[\x81\x01`\x01\x81R\x03\x01\x90 T\x16`@Q\x90\x81R\xF3[4a\x03mW`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mW` `\x0BTg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91`@\x1C\x16\x81R\xF3[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x90` \x82\x82\x01\x12a\x03mW`\x045\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03mW\x82`@\x92\x03\x01\x12a\x03mW`\x04\x01\x90V[4a\x03mWa\rO6a\x1D\nV[4a\x03mW`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mWa\x0B\x7F`@Qa\x1D\xA6\x81a\x06\xEFV[`\x03\x81R\x7Fibc\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x03\x95V[4a\x03mW`\xC0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x03mWa\x1E4\x906\x90`\x04\x01a\x04\x82V[PP`$5\x81\x81\x11a\x03mWa\x1EN\x906\x90`\x04\x01a\x04\x82V[PP`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xBC6\x01\x12a\x03mWa\x1E\x82a\t\x9FV[P`\xA45\x90\x81\x11a\x03mWa\x1E\x9B\x906\x90`\x04\x01a\x04\x82V[PPa\"\x8BV[4a\x03mW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC` \x816\x01\x12a\x03mW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03mWa\x01`\x916\x03\x01\x12a\x03mW\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a%\xF5V[4a\x03mW`\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x03mWa\x1Fg\x906\x90`\x04\x01a\x04\x82V[PP`$5\x81\x81\x11a\x03mWa\x1F\x81\x906\x90`\x04\x01a\x04\x82V[PPa\x1F\x8Ba\t\x88V[P`d5\x90\x81\x11a\x03mWa\x1F\xA4\x906\x90`\x04\x01a\x04\x82V[PP\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a%\xF5V[4a\x03mWa\x0B\x7Fa\x14qa\x0C\xD6a\x1F\xE8` a\x14\xCE6a\x0C|V[\x81\x01`\x02\x81R\x03\x01\x90 `@Q\x92\x83\x80\x92a\x13\\V[4a\x03mW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x08\xF4\x82a \x1Ea\x08\xCF6a\x07\xDBV[\x81\x01`\x07\x81R\x03\x01\x90 \x90a\x08\x89V[4a\x03mW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x08\xF4a V6a\x0C|V[a\x08cV[4a\x03mWa i6a\x03\x1DV[P\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a%\xF5V[4a\x03mWa i6a\x1D\nV[4a\x03mW`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT\x16`@Q\x90\x81R\xF3[4a\x03mW`\xC0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x04\x805\x82\x81\x11a\x03mWa!4\x906\x90\x83\x01a\x04\x82V[PP`$5\x82\x81\x11a\x03mWa!M\x906\x90\x83\x01a\x0C\xEAV[P`D5\x82\x81\x11a\x03mWa!e\x906\x90\x83\x01a\x04\x82V[PP`d5\x82\x81\x11a\x03mWa!~\x906\x90\x83\x01a\x04\x82V[PP`\x845\x91\x82\x11a\x03mWa!\x96\x916\x91\x01a\x0C\xEAV[Pa!\x9Fa\x04\xCEV[Pa%\xD3V[4a\x03mW` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03mW`\x045a!\xE0\x81a\x04\xB0V[a!\xE8a&\x14V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x91\x16\x90\x81\x15a\"ZW`\x0CT\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17`\x0CU\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0`\0\x80\xA3\0[`$`@Q\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\0`\x04\x82\x01R\xFD[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a%\xF5V[` \x91\x92\x83`@Q\x94\x85\x93\x847\x82\x01\x90\x81R\x03\x01\x90 \x90V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06\xB2W`\x05\x1B` \x01\x90V[\x90\x81Ta\"\xEE\x81a\"\xCAV[\x92`@\x93a\"\xFF`@Q\x91\x82a\x07\x0BV[\x82\x81R\x80\x94` \x80\x92\x01\x92`\0R` `\0 \x90`\0\x93[\x85\x85\x10a#&WPPPPPPV[`\x01\x84\x81\x92\x84Qa#;\x81a\x14q\x81\x8Aa\x13\\V[\x81R\x01\x93\x01\x94\x01\x93\x91a#\x17V[`\x04\x82\x10\x15a\x0FMWRV[\x90`@\x91\x82Q\x90a#e\x82a\x06\x96V[\x81\x93\x80Qa#w\x81a\x14q\x81\x86a\x13\\V[\x83R`\x01\x80\x83\x01\x90\x81Ta#\x8A\x81a\"\xCAV[\x92a#\x97\x85Q\x94\x85a\x07\x0BV[\x81\x84R`\0\x90\x81R` \x80\x82 \x81\x86\x01[\x84\x84\x10a$\x10WPPPPPP`\x06\x84\x93a#\xE1`\x80\x94a$\x01\x94` a\x04\xDB\x99\x01Ra#\xD9`\x02\x84\x01T`\xFF\x16\x90V[\x90\x87\x01a#IV[a#\xED`\x03\x82\x01a\x14PV[``\x86\x01R\x01Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x91\x01RV[`\x02\x83\x87\x92\x8AQa$ \x81a\x06\xEFV[\x8BQa$0\x81a\x14q\x81\x8Aa\x13\\V[\x81Ra$=\x85\x87\x01a\"\xE2V[\x83\x82\x01R\x81R\x01\x92\x01\x93\x01\x92\x90a#\xA8V[\x90`@Qa$\\\x81a\x06\x96V[\x80\x92\x80T`\xFF\x81\x16\x90`\x05\x82\x10\x15a\x0FMW`\xFF\x91\x84R`\x08\x1C\x16\x91`\x03\x83\x10\x15a\x0FMWa\x16\xE7`\x80\x92`\x04\x94` \x84\x01Ra$\x9B`\x01\x82\x01a\x16\xA7V[`@\x84\x01Ra$\xAC`\x03\x82\x01a\"\xE2V[``\x84\x01Ra\x16\xE0`@Q\x80\x96\x81\x93\x01a\x13\\V[\x91\x90`@\x83\x82\x03\x12a\x03mW\x82Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03mW\x83\x01\x90\x80`\x1F\x83\x01\x12\x15a\x03mW\x81Q\x91a$\xF8\x83a\x07LV[\x91a%\x06`@Q\x93\x84a\x07\x0BV[\x83\x83R` \x84\x83\x01\x01\x11a\x03mW` \x92a%&\x91\x84\x80\x85\x01\x91\x01a\x03rV[\x92\x01Q\x80\x15\x15\x81\x03a\x03mW\x90V[`\x1F\x82` \x94\x93\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x93\x81\x86R\x86\x86\x017`\0\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[`@Q=`\0\x82>=\x90\xFD[a%\x9Es\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91a\x08cV[T\x16\x80\x15a%\xA9W\x90V[`\x04`@Q\x7F\xB6\xC7\x1F}\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[a%\xDBa&\x14V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\rT\x16[`\0\x80\x80\x926\x82\x807\x816\x91Z\xF4=\x82\x80>\x15a&\x10W=\x90\xF3[=\x90\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0CT\x163\x03a&5WV[`$`@Q\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R3`\x04\x82\x01R\xFD[\x90`@Q\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x80\x82\x01\x93`\xA0\x83\x01`@R`\0\x85R\x93[\x01\x92`\n\x90\x81\x81\x06`0\x01\x85S\x04\x92\x83\x15a&\xD8W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90a&\x9CV[\x92P`\x80\x83\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x92\x03\x01\x92\x01\x91\x82RV\xFE\xA2dipfsX\"\x12 \xCCP\xED}\x1C\x01\xBC\xBC\"\xFD\xFC\xBBr\xD5\xF1\xA7;\x83\xBE\xCA\xAC\x93\xCD;\xA91T\xEAk\xC4\x1F\xCEdsolcC\0\x08\x17\x003"; /// The deployed bytecode of the contract. #[cfg(feature = "providers")] pub static DEVNETOWNABLEIBCHANDLER_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = @@ -2639,6 +2226,14 @@ pub mod devnet_ownable_ibc_handler { let deployer = ::ethers::contract::ContractDeployer::new(deployer); Ok(deployer) } + ///Calls the contract's `COMMITMENT_PREFIX` (0xa9550dac) function + pub fn commitment_prefix( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([169, 85, 13, 172], ()) + .expect("method not found (this should never happen)") + } ///Calls the contract's `acknowledgePacket` (0x59f37976) function pub fn acknowledge_packet( &self, @@ -2658,14 +2253,13 @@ pub mod devnet_ownable_ibc_handler { .method_hash([17, 126, 136, 106], (port_id, module_address)) .expect("method not found (this should never happen)") } - ///Calls the contract's `capabilities` (0xdd5b9f4d) function + ///Calls the contract's `capabilities` (0x5717bcf5) function pub fn capabilities( &self, - p0: ::ethers::core::types::Bytes, - p1: ::ethers::core::types::U256, + p0: ::std::string::String, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([221, 91, 159, 77], (p0, p1)) + .method_hash([87, 23, 188, 245], p0) .expect("method not found (this should never happen)") } ///Calls the contract's `channelCapabilityPath` (0x3bc3339f) function @@ -2673,7 +2267,7 @@ pub mod devnet_ownable_ibc_handler { &self, port_id: ::std::string::String, channel_id: ::std::string::String, - ) -> ::ethers::contract::builders::ContractCall { + ) -> ::ethers::contract::builders::ContractCall { self.0 .method_hash([59, 195, 51, 159], (port_id, channel_id)) .expect("method not found (this should never happen)") @@ -2848,14 +2442,6 @@ pub mod devnet_ownable_ibc_handler { .method_hash([213, 162, 68, 129], (msg,)) .expect("method not found (this should never happen)") } - ///Calls the contract's `expectedTimePerBlock` (0xd31407fe) function - pub fn expected_time_per_block( - &self, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([211, 20, 7, 254], ()) - .expect("method not found (this should never happen)") - } ///Calls the contract's `getChannel` (0x3000217a) function pub fn get_channel( &self, @@ -2909,14 +2495,6 @@ pub mod devnet_ownable_ibc_handler { .method_hash([108, 244, 75, 244], (client_id, height)) .expect("method not found (this should never happen)") } - ///Calls the contract's `getExpectedTimePerBlock` (0xec75d829) function - pub fn get_expected_time_per_block( - &self, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([236, 117, 216, 41], ()) - .expect("method not found (this should never happen)") - } ///Calls the contract's `getHashedPacketAcknowledgementCommitment` (0x5be164ee) function pub fn get_hashed_packet_acknowledgement_commitment( &self, @@ -3033,7 +2611,7 @@ pub mod devnet_ownable_ibc_handler { pub fn port_capability_path( &self, port_id: ::std::string::String, - ) -> ::ethers::contract::builders::ContractCall { + ) -> ::ethers::contract::builders::ContractCall { self.0 .method_hash([37, 112, 218, 224], port_id) .expect("method not found (this should never happen)") @@ -3071,7 +2649,7 @@ pub mod devnet_ownable_ibc_handler { timeout_height: IbcCoreClientV1HeightData, timeout_timestamp: u64, data: ::ethers::core::types::Bytes, - ) -> ::ethers::contract::builders::ContractCall { + ) -> ::ethers::contract::builders::ContractCall { self.0 .method_hash( [174, 76, 210, 1], @@ -3085,15 +2663,6 @@ pub mod devnet_ownable_ibc_handler { ) .expect("method not found (this should never happen)") } - ///Calls the contract's `setExpectedTimePerBlock` (0x27184c13) function - pub fn set_expected_time_per_block( - &self, - expected_time_per_block: u64, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([39, 24, 76, 19], expected_time_per_block) - .expect("method not found (this should never happen)") - } ///Calls the contract's `setupInitialChannel` (0xe6055f37) function pub fn setup_initial_channel( &self, @@ -3154,373 +2723,45 @@ pub mod devnet_ownable_ibc_handler { acknowledgement: ::ethers::core::types::Bytes, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash( - [181, 110, 121, 222], - ( - destination_port_id, - destination_channel, - sequence, - acknowledgement, - ), - ) - .expect("method not found (this should never happen)") - } - ///Gets the contract's `AcknowledgePacket` event - pub fn acknowledge_packet_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, AcknowledgePacketFilter> - { - self.0.event() - } - ///Gets the contract's `ChannelCloseConfirm` event - pub fn channel_close_confirm_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ChannelCloseConfirmFilter> - { - self.0.event() - } - ///Gets the contract's `ChannelCloseInit` event - pub fn channel_close_init_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ChannelCloseInitFilter> - { - self.0.event() - } - ///Gets the contract's `ChannelOpenAck` event - pub fn channel_open_ack_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ChannelOpenAckFilter> - { - self.0.event() - } - ///Gets the contract's `ChannelOpenConfirm` event - pub fn channel_open_confirm_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ChannelOpenConfirmFilter> - { - self.0.event() - } - ///Gets the contract's `ChannelOpenInit` event - pub fn channel_open_init_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ChannelOpenInitFilter> - { - self.0.event() - } - ///Gets the contract's `ChannelOpenTry` event - pub fn channel_open_try_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ChannelOpenTryFilter> - { - self.0.event() - } - ///Gets the contract's `ConnectionOpenAck` event - pub fn connection_open_ack_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ConnectionOpenAckFilter> - { - self.0.event() - } - ///Gets the contract's `ConnectionOpenConfirm` event - pub fn connection_open_confirm_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ConnectionOpenConfirmFilter> - { - self.0.event() - } - ///Gets the contract's `ConnectionOpenInit` event - pub fn connection_open_init_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ConnectionOpenInitFilter> - { - self.0.event() - } - ///Gets the contract's `ConnectionOpenTry` event - pub fn connection_open_try_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ConnectionOpenTryFilter> - { - self.0.event() - } - ///Gets the contract's `GeneratedClientIdentifier` event - pub fn generated_client_identifier_filter( - &self, - ) -> ::ethers::contract::builders::Event< - ::std::sync::Arc, - M, - GeneratedClientIdentifierFilter, - > { - self.0.event() - } - ///Gets the contract's `OwnershipTransferred` event - pub fn ownership_transferred_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, OwnershipTransferredFilter> - { - self.0.event() - } - ///Gets the contract's `RecvPacket` event - pub fn recv_packet_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, RecvPacketFilter> { - self.0.event() - } - ///Gets the contract's `SendPacket` event - pub fn send_packet_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, SendPacketFilter> { - self.0.event() - } - ///Gets the contract's `TimeoutPacket` event - pub fn timeout_packet_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, TimeoutPacketFilter> - { - self.0.event() - } - ///Gets the contract's `WriteAcknowledgement` event - pub fn write_acknowledgement_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, WriteAcknowledgementFilter> - { - self.0.event() - } - /// Returns an `Event` builder for all the events of this contract. - pub fn events( - &self, - ) -> ::ethers::contract::builders::Event< - ::std::sync::Arc, - M, - DevnetOwnableIBCHandlerEvents, - > { - self.0 - .event_with_filter(::core::default::Default::default()) - } - } - #[cfg(feature = "providers")] - impl From<::ethers::contract::Contract> - for DevnetOwnableIBCHandler - { - fn from(contract: ::ethers::contract::Contract) -> Self { - Self::new(contract.address(), contract.client()) - } - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent( - name = "AcknowledgePacket", - abi = "AcknowledgePacket((uint64,string,string,string,string,bytes,(uint64,uint64),uint64),bytes)" - )] - pub struct AcknowledgePacketFilter { - pub packet: IbcCoreChannelV1PacketData, - pub acknowledgement: ::ethers::core::types::Bytes, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent( - name = "ChannelCloseConfirm", - abi = "ChannelCloseConfirm(string,string)" - )] - pub struct ChannelCloseConfirmFilter { - pub channel_id: ::std::string::String, - pub port_id: ::std::string::String, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent(name = "ChannelCloseInit", abi = "ChannelCloseInit(string,string)")] - pub struct ChannelCloseInitFilter { - pub channel_id: ::std::string::String, - pub port_id: ::std::string::String, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent(name = "ChannelOpenAck", abi = "ChannelOpenAck(string,string)")] - pub struct ChannelOpenAckFilter { - pub channel_id: ::std::string::String, - pub port_id: ::std::string::String, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent(name = "ChannelOpenConfirm", abi = "ChannelOpenConfirm(string,string)")] - pub struct ChannelOpenConfirmFilter { - pub channel_id: ::std::string::String, - pub port_id: ::std::string::String, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent( - name = "ChannelOpenInit", - abi = "ChannelOpenInit(string,string,string,string)" - )] - pub struct ChannelOpenInitFilter { - pub channel_id: ::std::string::String, - pub connection_id: ::std::string::String, - pub port_id: ::std::string::String, - pub counterparty_port_id: ::std::string::String, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent( - name = "ChannelOpenTry", - abi = "ChannelOpenTry(string,string,string,string,string)" - )] - pub struct ChannelOpenTryFilter { - pub channel_id: ::std::string::String, - pub connection_id: ::std::string::String, - pub port_id: ::std::string::String, - pub counterparty_port_id: ::std::string::String, - pub version: ::std::string::String, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent(name = "ConnectionOpenAck", abi = "ConnectionOpenAck(string)")] - pub struct ConnectionOpenAckFilter { - pub connection_id: ::std::string::String, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent(name = "ConnectionOpenConfirm", abi = "ConnectionOpenConfirm(string)")] - pub struct ConnectionOpenConfirmFilter { - pub connection_id: ::std::string::String, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent(name = "ConnectionOpenInit", abi = "ConnectionOpenInit(string)")] - pub struct ConnectionOpenInitFilter { - pub connection_id: ::std::string::String, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent(name = "ConnectionOpenTry", abi = "ConnectionOpenTry(string)")] - pub struct ConnectionOpenTryFilter { - pub connection_id: ::std::string::String, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent( - name = "GeneratedClientIdentifier", - abi = "GeneratedClientIdentifier(string)" - )] - pub struct GeneratedClientIdentifierFilter(pub ::std::string::String); - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent( - name = "OwnershipTransferred", - abi = "OwnershipTransferred(address,address)" - )] - pub struct OwnershipTransferredFilter { - #[ethevent(indexed)] - pub previous_owner: ::ethers::core::types::Address, - #[ethevent(indexed)] - pub new_owner: ::ethers::core::types::Address, + .method_hash( + [181, 110, 121, 222], + ( + destination_port_id, + destination_channel, + sequence, + acknowledgement, + ), + ) + .expect("method not found (this should never happen)") + } + ///Gets the contract's `OwnershipTransferred` event + pub fn ownership_transferred_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, OwnershipTransferredFilter> + { + self.0.event() + } + /// Returns an `Event` builder for all the events of this contract. + pub fn events( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, OwnershipTransferredFilter> + { + self.0 + .event_with_filter(::core::default::Default::default()) + } + } + #[cfg(feature = "providers")] + impl From<::ethers::contract::Contract> + for DevnetOwnableIBCHandler + { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } } + ///Custom Error type `ErrCapabilityAlreadyClaimed` with signature `ErrCapabilityAlreadyClaimed()` and selector `0x463eec90` #[derive( Clone, - ::ethers::contract::EthEvent, + ::ethers::contract::EthError, ::ethers::contract::EthDisplay, Default, Debug, @@ -3528,16 +2769,15 @@ pub mod devnet_ownable_ibc_handler { Eq, Hash, )] - #[ethevent( - name = "RecvPacket", - abi = "RecvPacket((uint64,string,string,string,string,bytes,(uint64,uint64),uint64))" + #[etherror( + name = "ErrCapabilityAlreadyClaimed", + abi = "ErrCapabilityAlreadyClaimed()" )] - pub struct RecvPacketFilter { - pub packet: IbcCoreChannelV1PacketData, - } + pub struct ErrCapabilityAlreadyClaimed; + ///Custom Error type `ErrClientNotFound` with signature `ErrClientNotFound()` and selector `0xb6c71f7d` #[derive( Clone, - ::ethers::contract::EthEvent, + ::ethers::contract::EthError, ::ethers::contract::EthDisplay, Default, Debug, @@ -3545,21 +2785,12 @@ pub mod devnet_ownable_ibc_handler { Eq, Hash, )] - #[ethevent( - name = "SendPacket", - abi = "SendPacket(uint64,string,string,(uint64,uint64),uint64,bytes)" - )] - pub struct SendPacketFilter { - pub sequence: u64, - pub source_port: ::std::string::String, - pub source_channel: ::std::string::String, - pub timeout_height: IbcCoreClientV1HeightData, - pub timeout_timestamp: u64, - pub data: ::ethers::core::types::Bytes, - } + #[etherror(name = "ErrClientNotFound", abi = "ErrClientNotFound()")] + pub struct ErrClientNotFound; + ///Custom Error type `OwnableInvalidOwner` with signature `OwnableInvalidOwner(address)` and selector `0x1e4fbdf7` #[derive( Clone, - ::ethers::contract::EthEvent, + ::ethers::contract::EthError, ::ethers::contract::EthDisplay, Default, Debug, @@ -3567,16 +2798,14 @@ pub mod devnet_ownable_ibc_handler { Eq, Hash, )] - #[ethevent( - name = "TimeoutPacket", - abi = "TimeoutPacket((uint64,string,string,string,string,bytes,(uint64,uint64),uint64))" - )] - pub struct TimeoutPacketFilter { - pub packet: IbcCoreChannelV1PacketData, + #[etherror(name = "OwnableInvalidOwner", abi = "OwnableInvalidOwner(address)")] + pub struct OwnableInvalidOwner { + pub owner: ::ethers::core::types::Address, } + ///Custom Error type `OwnableUnauthorizedAccount` with signature `OwnableUnauthorizedAccount(address)` and selector `0x118cdaa7` #[derive( Clone, - ::ethers::contract::EthEvent, + ::ethers::contract::EthError, ::ethers::contract::EthDisplay, Default, Debug, @@ -3584,227 +2813,171 @@ pub mod devnet_ownable_ibc_handler { Eq, Hash, )] - #[ethevent( - name = "WriteAcknowledgement", - abi = "WriteAcknowledgement(string,string,uint64,bytes)" + #[etherror( + name = "OwnableUnauthorizedAccount", + abi = "OwnableUnauthorizedAccount(address)" )] - pub struct WriteAcknowledgementFilter { - pub destination_port_id: ::std::string::String, - pub destination_channel: ::std::string::String, - pub sequence: u64, - pub acknowledgement: ::ethers::core::types::Bytes, + pub struct OwnableUnauthorizedAccount { + pub account: ::ethers::core::types::Address, } - ///Container type for all of the contract's events + ///Container type for all of the contract's custom errors #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] - pub enum DevnetOwnableIBCHandlerEvents { - AcknowledgePacketFilter(AcknowledgePacketFilter), - ChannelCloseConfirmFilter(ChannelCloseConfirmFilter), - ChannelCloseInitFilter(ChannelCloseInitFilter), - ChannelOpenAckFilter(ChannelOpenAckFilter), - ChannelOpenConfirmFilter(ChannelOpenConfirmFilter), - ChannelOpenInitFilter(ChannelOpenInitFilter), - ChannelOpenTryFilter(ChannelOpenTryFilter), - ConnectionOpenAckFilter(ConnectionOpenAckFilter), - ConnectionOpenConfirmFilter(ConnectionOpenConfirmFilter), - ConnectionOpenInitFilter(ConnectionOpenInitFilter), - ConnectionOpenTryFilter(ConnectionOpenTryFilter), - GeneratedClientIdentifierFilter(GeneratedClientIdentifierFilter), - OwnershipTransferredFilter(OwnershipTransferredFilter), - RecvPacketFilter(RecvPacketFilter), - SendPacketFilter(SendPacketFilter), - TimeoutPacketFilter(TimeoutPacketFilter), - WriteAcknowledgementFilter(WriteAcknowledgementFilter), - } - impl ::ethers::contract::EthLogDecode for DevnetOwnableIBCHandlerEvents { - fn decode_log( - log: &::ethers::core::abi::RawLog, - ) -> ::core::result::Result { - if let Ok(decoded) = AcknowledgePacketFilter::decode_log(log) { - return Ok(DevnetOwnableIBCHandlerEvents::AcknowledgePacketFilter( - decoded, - )); - } - if let Ok(decoded) = ChannelCloseConfirmFilter::decode_log(log) { - return Ok(DevnetOwnableIBCHandlerEvents::ChannelCloseConfirmFilter( - decoded, - )); - } - if let Ok(decoded) = ChannelCloseInitFilter::decode_log(log) { - return Ok(DevnetOwnableIBCHandlerEvents::ChannelCloseInitFilter( - decoded, - )); - } - if let Ok(decoded) = ChannelOpenAckFilter::decode_log(log) { - return Ok(DevnetOwnableIBCHandlerEvents::ChannelOpenAckFilter(decoded)); - } - if let Ok(decoded) = ChannelOpenConfirmFilter::decode_log(log) { - return Ok(DevnetOwnableIBCHandlerEvents::ChannelOpenConfirmFilter( - decoded, - )); - } - if let Ok(decoded) = ChannelOpenInitFilter::decode_log(log) { - return Ok(DevnetOwnableIBCHandlerEvents::ChannelOpenInitFilter( - decoded, - )); - } - if let Ok(decoded) = ChannelOpenTryFilter::decode_log(log) { - return Ok(DevnetOwnableIBCHandlerEvents::ChannelOpenTryFilter(decoded)); - } - if let Ok(decoded) = ConnectionOpenAckFilter::decode_log(log) { - return Ok(DevnetOwnableIBCHandlerEvents::ConnectionOpenAckFilter( - decoded, - )); - } - if let Ok(decoded) = ConnectionOpenConfirmFilter::decode_log(log) { - return Ok(DevnetOwnableIBCHandlerEvents::ConnectionOpenConfirmFilter( - decoded, - )); - } - if let Ok(decoded) = ConnectionOpenInitFilter::decode_log(log) { - return Ok(DevnetOwnableIBCHandlerEvents::ConnectionOpenInitFilter( - decoded, - )); - } - if let Ok(decoded) = ConnectionOpenTryFilter::decode_log(log) { - return Ok(DevnetOwnableIBCHandlerEvents::ConnectionOpenTryFilter( - decoded, - )); - } - if let Ok(decoded) = GeneratedClientIdentifierFilter::decode_log(log) { - return Ok(DevnetOwnableIBCHandlerEvents::GeneratedClientIdentifierFilter(decoded)); - } - if let Ok(decoded) = OwnershipTransferredFilter::decode_log(log) { - return Ok(DevnetOwnableIBCHandlerEvents::OwnershipTransferredFilter( - decoded, - )); + pub enum DevnetOwnableIBCHandlerErrors { + ErrCapabilityAlreadyClaimed(ErrCapabilityAlreadyClaimed), + ErrClientNotFound(ErrClientNotFound), + OwnableInvalidOwner(OwnableInvalidOwner), + OwnableUnauthorizedAccount(OwnableUnauthorizedAccount), + /// The standard solidity revert string, with selector + /// Error(string) -- 0x08c379a0 + RevertString(::std::string::String), + } + impl ::ethers::core::abi::AbiDecode for DevnetOwnableIBCHandlerErrors { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + <::std::string::String as ::ethers::core::abi::AbiDecode>::decode(data) + { + return Ok(Self::RevertString(decoded)); } - if let Ok(decoded) = RecvPacketFilter::decode_log(log) { - return Ok(DevnetOwnableIBCHandlerEvents::RecvPacketFilter(decoded)); + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrCapabilityAlreadyClaimed(decoded)); } - if let Ok(decoded) = SendPacketFilter::decode_log(log) { - return Ok(DevnetOwnableIBCHandlerEvents::SendPacketFilter(decoded)); + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::ErrClientNotFound(decoded)); } - if let Ok(decoded) = TimeoutPacketFilter::decode_log(log) { - return Ok(DevnetOwnableIBCHandlerEvents::TimeoutPacketFilter(decoded)); + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::OwnableInvalidOwner(decoded)); } - if let Ok(decoded) = WriteAcknowledgementFilter::decode_log(log) { - return Ok(DevnetOwnableIBCHandlerEvents::WriteAcknowledgementFilter( - decoded, - )); + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::OwnableUnauthorizedAccount(decoded)); } - Err(::ethers::core::abi::Error::InvalidData) + Err(::ethers::core::abi::Error::InvalidData.into()) } } - impl ::core::fmt::Display for DevnetOwnableIBCHandlerEvents { - fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + impl ::ethers::core::abi::AbiEncode for DevnetOwnableIBCHandlerErrors { + fn encode(self) -> ::std::vec::Vec { match self { - Self::AcknowledgePacketFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::ChannelCloseConfirmFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::ChannelCloseInitFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::ChannelOpenAckFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::ChannelOpenConfirmFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::ChannelOpenInitFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::ChannelOpenTryFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::ConnectionOpenAckFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::ConnectionOpenConfirmFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::ConnectionOpenInitFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::ConnectionOpenTryFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::GeneratedClientIdentifierFilter(element) => { - ::core::fmt::Display::fmt(element, f) + Self::ErrCapabilityAlreadyClaimed(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrClientNotFound(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::OwnableInvalidOwner(element) => { + ::ethers::core::abi::AbiEncode::encode(element) } - Self::OwnershipTransferredFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::RecvPacketFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::SendPacketFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::TimeoutPacketFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::WriteAcknowledgementFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::OwnableUnauthorizedAccount(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::RevertString(s) => ::ethers::core::abi::AbiEncode::encode(s), } } } - impl ::core::convert::From for DevnetOwnableIBCHandlerEvents { - fn from(value: AcknowledgePacketFilter) -> Self { - Self::AcknowledgePacketFilter(value) - } - } - impl ::core::convert::From for DevnetOwnableIBCHandlerEvents { - fn from(value: ChannelCloseConfirmFilter) -> Self { - Self::ChannelCloseConfirmFilter(value) - } - } - impl ::core::convert::From for DevnetOwnableIBCHandlerEvents { - fn from(value: ChannelCloseInitFilter) -> Self { - Self::ChannelCloseInitFilter(value) - } - } - impl ::core::convert::From for DevnetOwnableIBCHandlerEvents { - fn from(value: ChannelOpenAckFilter) -> Self { - Self::ChannelOpenAckFilter(value) - } - } - impl ::core::convert::From for DevnetOwnableIBCHandlerEvents { - fn from(value: ChannelOpenConfirmFilter) -> Self { - Self::ChannelOpenConfirmFilter(value) - } - } - impl ::core::convert::From for DevnetOwnableIBCHandlerEvents { - fn from(value: ChannelOpenInitFilter) -> Self { - Self::ChannelOpenInitFilter(value) - } - } - impl ::core::convert::From for DevnetOwnableIBCHandlerEvents { - fn from(value: ChannelOpenTryFilter) -> Self { - Self::ChannelOpenTryFilter(value) - } - } - impl ::core::convert::From for DevnetOwnableIBCHandlerEvents { - fn from(value: ConnectionOpenAckFilter) -> Self { - Self::ConnectionOpenAckFilter(value) - } - } - impl ::core::convert::From for DevnetOwnableIBCHandlerEvents { - fn from(value: ConnectionOpenConfirmFilter) -> Self { - Self::ConnectionOpenConfirmFilter(value) - } - } - impl ::core::convert::From for DevnetOwnableIBCHandlerEvents { - fn from(value: ConnectionOpenInitFilter) -> Self { - Self::ConnectionOpenInitFilter(value) + impl ::ethers::contract::ContractRevert for DevnetOwnableIBCHandlerErrors { + fn valid_selector(selector: [u8; 4]) -> bool { + match selector { + [0x08, 0xc3, 0x79, 0xa0] => true, + _ if selector + == ::selector( + ) => + { + true + } + _ if selector + == ::selector() => + { + true + } + _ if selector + == ::selector() => + { + true + } + _ if selector + == ::selector() => + { + true + } + _ => false, + } } } - impl ::core::convert::From for DevnetOwnableIBCHandlerEvents { - fn from(value: ConnectionOpenTryFilter) -> Self { - Self::ConnectionOpenTryFilter(value) + impl ::core::fmt::Display for DevnetOwnableIBCHandlerErrors { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::ErrCapabilityAlreadyClaimed(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrClientNotFound(element) => ::core::fmt::Display::fmt(element, f), + Self::OwnableInvalidOwner(element) => ::core::fmt::Display::fmt(element, f), + Self::OwnableUnauthorizedAccount(element) => ::core::fmt::Display::fmt(element, f), + Self::RevertString(s) => ::core::fmt::Display::fmt(s, f), + } } } - impl ::core::convert::From for DevnetOwnableIBCHandlerEvents { - fn from(value: GeneratedClientIdentifierFilter) -> Self { - Self::GeneratedClientIdentifierFilter(value) + impl ::core::convert::From<::std::string::String> for DevnetOwnableIBCHandlerErrors { + fn from(value: String) -> Self { + Self::RevertString(value) } } - impl ::core::convert::From for DevnetOwnableIBCHandlerEvents { - fn from(value: OwnershipTransferredFilter) -> Self { - Self::OwnershipTransferredFilter(value) + impl ::core::convert::From for DevnetOwnableIBCHandlerErrors { + fn from(value: ErrCapabilityAlreadyClaimed) -> Self { + Self::ErrCapabilityAlreadyClaimed(value) } } - impl ::core::convert::From for DevnetOwnableIBCHandlerEvents { - fn from(value: RecvPacketFilter) -> Self { - Self::RecvPacketFilter(value) + impl ::core::convert::From for DevnetOwnableIBCHandlerErrors { + fn from(value: ErrClientNotFound) -> Self { + Self::ErrClientNotFound(value) } } - impl ::core::convert::From for DevnetOwnableIBCHandlerEvents { - fn from(value: SendPacketFilter) -> Self { - Self::SendPacketFilter(value) + impl ::core::convert::From for DevnetOwnableIBCHandlerErrors { + fn from(value: OwnableInvalidOwner) -> Self { + Self::OwnableInvalidOwner(value) } } - impl ::core::convert::From for DevnetOwnableIBCHandlerEvents { - fn from(value: TimeoutPacketFilter) -> Self { - Self::TimeoutPacketFilter(value) + impl ::core::convert::From for DevnetOwnableIBCHandlerErrors { + fn from(value: OwnableUnauthorizedAccount) -> Self { + Self::OwnableUnauthorizedAccount(value) } } - impl ::core::convert::From for DevnetOwnableIBCHandlerEvents { - fn from(value: WriteAcknowledgementFilter) -> Self { - Self::WriteAcknowledgementFilter(value) - } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent( + name = "OwnershipTransferred", + abi = "OwnershipTransferred(address,address)" + )] + pub struct OwnershipTransferredFilter { + #[ethevent(indexed)] + pub previous_owner: ::ethers::core::types::Address, + #[ethevent(indexed)] + pub new_owner: ::ethers::core::types::Address, } + ///Container type for all input parameters for the `COMMITMENT_PREFIX` function with signature `COMMITMENT_PREFIX()` and selector `0xa9550dac` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "COMMITMENT_PREFIX", abi = "COMMITMENT_PREFIX()")] + pub struct CommitmentPrefixCall; ///Container type for all input parameters for the `acknowledgePacket` function with signature `acknowledgePacket(((uint64,string,string,string,string,bytes,(uint64,uint64),uint64),bytes,bytes,(uint64,uint64)))` and selector `0x59f37976` #[derive( Clone, @@ -3839,7 +3012,7 @@ pub mod devnet_ownable_ibc_handler { pub port_id: ::std::string::String, pub module_address: ::ethers::core::types::Address, } - ///Container type for all input parameters for the `capabilities` function with signature `capabilities(bytes,uint256)` and selector `0xdd5b9f4d` + ///Container type for all input parameters for the `capabilities` function with signature `capabilities(string)` and selector `0x5717bcf5` #[derive( Clone, ::ethers::contract::EthCall, @@ -3850,11 +3023,8 @@ pub mod devnet_ownable_ibc_handler { Eq, Hash, )] - #[ethcall(name = "capabilities", abi = "capabilities(bytes,uint256)")] - pub struct CapabilitiesCall( - pub ::ethers::core::types::Bytes, - pub ::ethers::core::types::U256, - ); + #[ethcall(name = "capabilities", abi = "capabilities(string)")] + pub struct CapabilitiesCall(pub ::std::string::String); ///Container type for all input parameters for the `channelCapabilityPath` function with signature `channelCapabilityPath(string,string)` and selector `0x3bc3339f` #[derive( Clone, @@ -4144,19 +3314,6 @@ pub mod devnet_ownable_ibc_handler { pub struct CreateClientCall { pub msg: MsgCreateClient, } - ///Container type for all input parameters for the `expectedTimePerBlock` function with signature `expectedTimePerBlock()` and selector `0xd31407fe` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethcall(name = "expectedTimePerBlock", abi = "expectedTimePerBlock()")] - pub struct ExpectedTimePerBlockCall; ///Container type for all input parameters for the `getChannel` function with signature `getChannel(string,string)` and selector `0x3000217a` #[derive( Clone, @@ -4237,19 +3394,6 @@ pub mod devnet_ownable_ibc_handler { pub client_id: ::std::string::String, pub height: IbcCoreClientV1HeightData, } - ///Container type for all input parameters for the `getExpectedTimePerBlock` function with signature `getExpectedTimePerBlock()` and selector `0xec75d829` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethcall(name = "getExpectedTimePerBlock", abi = "getExpectedTimePerBlock()")] - pub struct GetExpectedTimePerBlockCall; ///Container type for all input parameters for the `getHashedPacketAcknowledgementCommitment` function with signature `getHashedPacketAcknowledgementCommitment(string,string,uint64)` and selector `0x5be164ee` #[derive( Clone, @@ -4521,24 +3665,6 @@ pub mod devnet_ownable_ibc_handler { pub timeout_timestamp: u64, pub data: ::ethers::core::types::Bytes, } - ///Container type for all input parameters for the `setExpectedTimePerBlock` function with signature `setExpectedTimePerBlock(uint64)` and selector `0x27184c13` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethcall( - name = "setExpectedTimePerBlock", - abi = "setExpectedTimePerBlock(uint64)" - )] - pub struct SetExpectedTimePerBlockCall { - pub expected_time_per_block: u64, - } ///Container type for all input parameters for the `setupInitialChannel` function with signature `setupInitialChannel(string,(string,(string,string[])[],uint8,(string,string,(bytes)),uint64),string,string,(uint8,uint8,(string,string),string[],string),address)` and selector `0xe6055f37` #[derive( Clone, @@ -4634,6 +3760,7 @@ pub mod devnet_ownable_ibc_handler { ///Container type for all of the contract's call #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] pub enum DevnetOwnableIBCHandlerCalls { + CommitmentPrefix(CommitmentPrefixCall), AcknowledgePacket(AcknowledgePacketCall), BindPort(BindPortCall), Capabilities(CapabilitiesCall), @@ -4655,13 +3782,11 @@ pub mod devnet_ownable_ibc_handler { ConnectionOpenTry(ConnectionOpenTryCall), Connections(ConnectionsCall), CreateClient(CreateClientCall), - ExpectedTimePerBlock(ExpectedTimePerBlockCall), GetChannel(GetChannelCall), GetClient(GetClientCall), GetClientState(GetClientStateCall), GetConnection(GetConnectionCall), GetConsensusState(GetConsensusStateCall), - GetExpectedTimePerBlock(GetExpectedTimePerBlockCall), GetHashedPacketAcknowledgementCommitment(GetHashedPacketAcknowledgementCommitmentCall), GetHashedPacketCommitment(GetHashedPacketCommitmentCall), GetNextSequenceSend(GetNextSequenceSendCall), @@ -4679,7 +3804,6 @@ pub mod devnet_ownable_ibc_handler { RegisterClient(RegisterClientCall), RenounceOwnership(RenounceOwnershipCall), SendPacket(SendPacketCall), - SetExpectedTimePerBlock(SetExpectedTimePerBlockCall), SetupInitialChannel(SetupInitialChannelCall), TimeoutPacket(TimeoutPacketCall), TransferOwnership(TransferOwnershipCall), @@ -4691,6 +3815,11 @@ pub mod devnet_ownable_ibc_handler { data: impl AsRef<[u8]>, ) -> ::core::result::Result { let data = data.as_ref(); + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::CommitmentPrefix(decoded)); + } if let Ok(decoded) = ::decode(data) { @@ -4782,11 +3911,6 @@ pub mod devnet_ownable_ibc_handler { { return Ok(Self::CreateClient(decoded)); } - if let Ok(decoded) = - ::decode(data) - { - return Ok(Self::ExpectedTimePerBlock(decoded)); - } if let Ok(decoded) = ::decode(data) { return Ok(Self::GetChannel(decoded)); } @@ -4807,11 +3931,6 @@ pub mod devnet_ownable_ibc_handler { { return Ok(Self::GetConsensusState(decoded)); } - if let Ok(decoded) = - ::decode(data) - { - return Ok(Self::GetExpectedTimePerBlock(decoded)); - } if let Ok(decoded) = ::decode( data, ) { @@ -4891,11 +4010,6 @@ pub mod devnet_ownable_ibc_handler { if let Ok(decoded) = ::decode(data) { return Ok(Self::SendPacket(decoded)); } - if let Ok(decoded) = - ::decode(data) - { - return Ok(Self::SetExpectedTimePerBlock(decoded)); - } if let Ok(decoded) = ::decode(data) { @@ -4925,6 +4039,7 @@ pub mod devnet_ownable_ibc_handler { impl ::ethers::core::abi::AbiEncode for DevnetOwnableIBCHandlerCalls { fn encode(self) -> Vec { match self { + Self::CommitmentPrefix(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::AcknowledgePacket(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::BindPort(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::Capabilities(element) => ::ethers::core::abi::AbiEncode::encode(element), @@ -4956,17 +4071,11 @@ pub mod devnet_ownable_ibc_handler { Self::ConnectionOpenTry(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::Connections(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::CreateClient(element) => ::ethers::core::abi::AbiEncode::encode(element), - Self::ExpectedTimePerBlock(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } Self::GetChannel(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::GetClient(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::GetClientState(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::GetConnection(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::GetConsensusState(element) => ::ethers::core::abi::AbiEncode::encode(element), - Self::GetExpectedTimePerBlock(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } Self::GetHashedPacketAcknowledgementCommitment(element) => { ::ethers::core::abi::AbiEncode::encode(element) } @@ -4998,9 +4107,6 @@ pub mod devnet_ownable_ibc_handler { Self::RegisterClient(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::RenounceOwnership(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::SendPacket(element) => ::ethers::core::abi::AbiEncode::encode(element), - Self::SetExpectedTimePerBlock(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } Self::SetupInitialChannel(element) => { ::ethers::core::abi::AbiEncode::encode(element) } @@ -5016,6 +4122,7 @@ pub mod devnet_ownable_ibc_handler { impl ::core::fmt::Display for DevnetOwnableIBCHandlerCalls { fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { match self { + Self::CommitmentPrefix(element) => ::core::fmt::Display::fmt(element, f), Self::AcknowledgePacket(element) => ::core::fmt::Display::fmt(element, f), Self::BindPort(element) => ::core::fmt::Display::fmt(element, f), Self::Capabilities(element) => ::core::fmt::Display::fmt(element, f), @@ -5037,13 +4144,11 @@ pub mod devnet_ownable_ibc_handler { Self::ConnectionOpenTry(element) => ::core::fmt::Display::fmt(element, f), Self::Connections(element) => ::core::fmt::Display::fmt(element, f), Self::CreateClient(element) => ::core::fmt::Display::fmt(element, f), - Self::ExpectedTimePerBlock(element) => ::core::fmt::Display::fmt(element, f), Self::GetChannel(element) => ::core::fmt::Display::fmt(element, f), Self::GetClient(element) => ::core::fmt::Display::fmt(element, f), Self::GetClientState(element) => ::core::fmt::Display::fmt(element, f), Self::GetConnection(element) => ::core::fmt::Display::fmt(element, f), Self::GetConsensusState(element) => ::core::fmt::Display::fmt(element, f), - Self::GetExpectedTimePerBlock(element) => ::core::fmt::Display::fmt(element, f), Self::GetHashedPacketAcknowledgementCommitment(element) => { ::core::fmt::Display::fmt(element, f) } @@ -5063,7 +4168,6 @@ pub mod devnet_ownable_ibc_handler { Self::RegisterClient(element) => ::core::fmt::Display::fmt(element, f), Self::RenounceOwnership(element) => ::core::fmt::Display::fmt(element, f), Self::SendPacket(element) => ::core::fmt::Display::fmt(element, f), - Self::SetExpectedTimePerBlock(element) => ::core::fmt::Display::fmt(element, f), Self::SetupInitialChannel(element) => ::core::fmt::Display::fmt(element, f), Self::TimeoutPacket(element) => ::core::fmt::Display::fmt(element, f), Self::TransferOwnership(element) => ::core::fmt::Display::fmt(element, f), @@ -5072,6 +4176,11 @@ pub mod devnet_ownable_ibc_handler { } } } + impl ::core::convert::From for DevnetOwnableIBCHandlerCalls { + fn from(value: CommitmentPrefixCall) -> Self { + Self::CommitmentPrefix(value) + } + } impl ::core::convert::From for DevnetOwnableIBCHandlerCalls { fn from(value: AcknowledgePacketCall) -> Self { Self::AcknowledgePacket(value) @@ -5177,11 +4286,6 @@ pub mod devnet_ownable_ibc_handler { Self::CreateClient(value) } } - impl ::core::convert::From for DevnetOwnableIBCHandlerCalls { - fn from(value: ExpectedTimePerBlockCall) -> Self { - Self::ExpectedTimePerBlock(value) - } - } impl ::core::convert::From for DevnetOwnableIBCHandlerCalls { fn from(value: GetChannelCall) -> Self { Self::GetChannel(value) @@ -5207,11 +4311,6 @@ pub mod devnet_ownable_ibc_handler { Self::GetConsensusState(value) } } - impl ::core::convert::From for DevnetOwnableIBCHandlerCalls { - fn from(value: GetExpectedTimePerBlockCall) -> Self { - Self::GetExpectedTimePerBlock(value) - } - } impl ::core::convert::From for DevnetOwnableIBCHandlerCalls { @@ -5299,11 +4398,6 @@ pub mod devnet_ownable_ibc_handler { Self::SendPacket(value) } } - impl ::core::convert::From for DevnetOwnableIBCHandlerCalls { - fn from(value: SetExpectedTimePerBlockCall) -> Self { - Self::SetExpectedTimePerBlock(value) - } - } impl ::core::convert::From for DevnetOwnableIBCHandlerCalls { fn from(value: SetupInitialChannelCall) -> Self { Self::SetupInitialChannel(value) @@ -5329,7 +4423,19 @@ pub mod devnet_ownable_ibc_handler { Self::WriteAcknowledgement(value) } } - ///Container type for all return fields from the `capabilities` function with signature `capabilities(bytes,uint256)` and selector `0xdd5b9f4d` + ///Container type for all return fields from the `COMMITMENT_PREFIX` function with signature `COMMITMENT_PREFIX()` and selector `0xa9550dac` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct CommitmentPrefixReturn(pub ::std::string::String); + ///Container type for all return fields from the `capabilities` function with signature `capabilities(string)` and selector `0x5717bcf5` #[derive( Clone, ::ethers::contract::EthAbiType, @@ -5352,7 +4458,7 @@ pub mod devnet_ownable_ibc_handler { Eq, Hash, )] - pub struct ChannelCapabilityPathReturn(pub ::ethers::core::types::Bytes); + pub struct ChannelCapabilityPathReturn(pub ::std::string::String); ///Container type for all return fields from the `channelOpenInit` function with signature `channelOpenInit((string,(uint8,uint8,(string,string),string[],string)))` and selector `0xdd3469fc` #[derive( Clone, @@ -5364,9 +4470,7 @@ pub mod devnet_ownable_ibc_handler { Eq, Hash, )] - pub struct ChannelOpenInitReturn { - pub channel_id: ::std::string::String, - } + pub struct ChannelOpenInitReturn(pub ::std::string::String); ///Container type for all return fields from the `channelOpenTry` function with signature `channelOpenTry((string,(uint8,uint8,(string,string),string[],string),string,bytes,(uint64,uint64)))` and selector `0x11b88a15` #[derive( Clone, @@ -5378,9 +4482,7 @@ pub mod devnet_ownable_ibc_handler { Eq, Hash, )] - pub struct ChannelOpenTryReturn { - pub channel_id: ::std::string::String, - } + pub struct ChannelOpenTryReturn(pub ::std::string::String); ///Container type for all return fields from the `channels` function with signature `channels(string,string)` and selector `0x5b3de260` #[derive( Clone, @@ -5457,9 +4559,7 @@ pub mod devnet_ownable_ibc_handler { Eq, Hash, )] - pub struct ConnectionOpenInitReturn { - pub connection_id: ::std::string::String, - } + pub struct ConnectionOpenInitReturn(pub ::std::string::String); ///Container type for all return fields from the `connectionOpenTry` function with signature `connectionOpenTry(((string,string,(bytes)),uint64,string,bytes,(string,string[])[],bytes,bytes,bytes,(uint64,uint64),(uint64,uint64)))` and selector `0x04f68e5c` #[derive( Clone, @@ -5471,9 +4571,7 @@ pub mod devnet_ownable_ibc_handler { Eq, Hash, )] - pub struct ConnectionOpenTryReturn { - pub connection_id: ::std::string::String, - } + pub struct ConnectionOpenTryReturn(pub ::std::string::String); ///Container type for all return fields from the `connections` function with signature `connections(string)` and selector `0x31973f00` #[derive( Clone, @@ -5502,21 +4600,7 @@ pub mod devnet_ownable_ibc_handler { Eq, Hash, )] - pub struct CreateClientReturn { - pub client_id: ::std::string::String, - } - ///Container type for all return fields from the `expectedTimePerBlock` function with signature `expectedTimePerBlock()` and selector `0xd31407fe` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - pub struct ExpectedTimePerBlockReturn(pub u64); + pub struct CreateClientReturn(pub ::std::string::String); ///Container type for all return fields from the `getChannel` function with signature `getChannel(string,string)` and selector `0x3000217a` #[derive( Clone, @@ -5580,18 +4664,6 @@ pub mod devnet_ownable_ibc_handler { pub consensus_state_bytes: ::ethers::core::types::Bytes, pub p1: bool, } - ///Container type for all return fields from the `getExpectedTimePerBlock` function with signature `getExpectedTimePerBlock()` and selector `0xec75d829` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - pub struct GetExpectedTimePerBlockReturn(pub u64); ///Container type for all return fields from the `getHashedPacketAcknowledgementCommitment` function with signature `getHashedPacketAcknowledgementCommitment(string,string,uint64)` and selector `0x5be164ee` #[derive( Clone, @@ -5747,5 +4819,17 @@ pub mod devnet_ownable_ibc_handler { Eq, Hash, )] - pub struct PortCapabilityPathReturn(pub ::ethers::core::types::Bytes); + pub struct PortCapabilityPathReturn(pub ::std::string::String); + ///Container type for all return fields from the `sendPacket` function with signature `sendPacket(string,string,(uint64,uint64),uint64,bytes)` and selector `0xae4cd201` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct SendPacketReturn(pub u64); } diff --git a/generated/contracts/src/erc20.rs b/generated/contracts/src/erc20.rs index 61770e8b4c..7a86a04cd0 100644 --- a/generated/contracts/src/erc20.rs +++ b/generated/contracts/src/erc20.rs @@ -15,24 +15,7 @@ pub mod erc20 { #[cfg(feature = "providers")] fn __abi() -> ::ethers::core::abi::Abi { ::ethers::core::abi::ethabi::Contract { - constructor: ::core::option::Option::Some(::ethers::core::abi::ethabi::Constructor { - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("name_"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("string"), - ), - }, - ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("symbol_"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("string"), - ), - }, - ], - }), + constructor: ::core::option::Option::None, functions: ::core::convert::From::from([ ( ::std::borrow::ToOwned::to_owned("allowance"), @@ -78,7 +61,7 @@ pub mod erc20 { ), }, ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("amount"), + name: ::std::borrow::ToOwned::to_owned("value"), kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned("uint256"), @@ -134,68 +117,6 @@ pub mod erc20 { state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, },], ), - ( - ::std::borrow::ToOwned::to_owned("decreaseAllowance"), - ::std::vec![::ethers::core::abi::ethabi::Function { - name: ::std::borrow::ToOwned::to_owned("decreaseAllowance"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("spender"), - kind: ::ethers::core::abi::ethabi::ParamType::Address, - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("address"), - ), - }, - ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("subtractedValue"), - kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint256"), - ), - }, - ], - outputs: ::std::vec![::ethers::core::abi::ethabi::Param { - name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::Bool, - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("bool"), - ), - },], - constant: ::core::option::Option::None, - state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, - },], - ), - ( - ::std::borrow::ToOwned::to_owned("increaseAllowance"), - ::std::vec![::ethers::core::abi::ethabi::Function { - name: ::std::borrow::ToOwned::to_owned("increaseAllowance"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("spender"), - kind: ::ethers::core::abi::ethabi::ParamType::Address, - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("address"), - ), - }, - ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("addedValue"), - kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint256"), - ), - }, - ], - outputs: ::std::vec![::ethers::core::abi::ethabi::Param { - name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::Bool, - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("bool"), - ), - },], - constant: ::core::option::Option::None, - state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, - },], - ), ( ::std::borrow::ToOwned::to_owned("name"), ::std::vec![::ethers::core::abi::ethabi::Function { @@ -257,7 +178,7 @@ pub mod erc20 { ), }, ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("amount"), + name: ::std::borrow::ToOwned::to_owned("value"), kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned("uint256"), @@ -295,7 +216,7 @@ pub mod erc20 { ), }, ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("amount"), + name: ::std::borrow::ToOwned::to_owned("value"), kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned("uint256"), @@ -364,7 +285,118 @@ pub mod erc20 { },], ), ]), - errors: ::std::collections::BTreeMap::new(), + errors: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("ERC20InsufficientAllowance"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ERC20InsufficientAllowance",), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("spender"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("allowance"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("needed"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ERC20InsufficientBalance"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ERC20InsufficientBalance",), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("sender"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("balance"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("needed"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint256"), + ), + }, + ], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ERC20InvalidApprover"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ERC20InvalidApprover",), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("approver"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ERC20InvalidReceiver"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ERC20InvalidReceiver",), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("receiver"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ERC20InvalidSender"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ERC20InvalidSender"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("sender"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ERC20InvalidSpender"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ERC20InvalidSpender",), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("spender"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + },], + ), + ]), receive: false, fallback: false, } @@ -373,20 +405,6 @@ pub mod erc20 { #[cfg(feature = "providers")] pub static ERC20_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = ::ethers::contract::Lazy::new(__abi); - #[rustfmt::skip] - #[cfg(feature = "providers")] - const __BYTECODE: &[u8] = b"`\x80\x80`@R4b\0\x03tWb\0\x11\xDB\x808\x03\x80b\0\0\x1E\x81b\0\x03\xC1V[\x92\x839\x81\x01\x90`@\x81\x83\x03\x12b\0\x03$W\x80Q`\x01`\x01`@\x1B\x03\x90\x81\x81\x11b\0\x03\x1EW\x83b\0\0P\x91\x84\x01b\0\x047V[\x91` \x93\x84\x82\x01Q\x83\x81\x11b\0\x03\x1EWb\0\0l\x92\x01b\0\x047V[\x82Q\x82\x81\x11b\0\x02\x1EW`\x03\x91\x82T\x91`\x01\x95\x86\x84\x81\x1C\x94\x16\x80\x15b\0\x03\x13W[\x88\x85\x10\x14b\0\x02\xFDW\x81\x90`\x1F\x94\x85\x81\x11b\0\x02\xA7W[P\x88\x90\x85\x83\x11`\x01\x14b\0\x02@W`\0\x92b\0\x024W[PP`\0\x19\x82\x86\x1B\x1C\x19\x16\x90\x86\x1B\x17\x83U[\x80Q\x93\x84\x11b\0\x02\x1EW`\x04\x95\x86T\x86\x81\x81\x1C\x91\x16\x80\x15b\0\x02\x13W[\x82\x82\x10\x14b\0\x01\xFEW\x83\x81\x11b\0\x01\xB3W[P\x80\x92\x85\x11`\x01\x14b\0\x01EWP\x93\x83\x94\x91\x84\x92`\0\x95b\0\x019W[PP\x1B\x92`\0\x19\x91\x1B\x1C\x19\x16\x17\x90U[`@Qa\x0C\x83\x90\x81b\0\x05X\x829\xF3[\x01Q\x93P\x86\x80b\0\x01\x19V[\x92\x91\x90\x84`\x1F\x19\x81\x16\x88`\0R\x85`\0 \x95`\0\x90[\x89\x83\x83\x10b\0\x01\x98WPPP\x10b\0\x01}W[PPPP\x81\x1B\x01\x90Ub\0\x01)V[\x01Q\x90`\xF8\x84`\0\x19\x92\x1B\x16\x1C\x19\x16\x90U\x83\x80\x80\x80b\0\x01nV[\x85\x87\x01Q\x89U\x90\x97\x01\x96\x94\x85\x01\x94\x88\x93P\x90\x81\x01\x90b\0\x01[V[\x87`\0R\x81`\0 \x84\x80\x88\x01`\x05\x1C\x82\x01\x92\x84\x89\x10b\0\x01\xF4W[\x01`\x05\x1C\x01\x90\x87\x90[\x82\x81\x10b\0\x01\xE7WPPb\0\0\xFCV[`\0\x81U\x01\x87\x90b\0\x01\xD7V[\x92P\x81\x92b\0\x01\xCEV[`\"\x88cNH{q`\xE0\x1B`\0RR`$`\0\xFD[\x90`\x7F\x16\x90b\0\0\xEAV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[\x01Q\x90P\x88\x80b\0\0\xBBV[\x90\x88\x93P`\x1F\x19\x83\x16\x91\x87`\0R\x8A`\0 \x92`\0[\x8C\x82\x82\x10b\0\x02\x90WPP\x84\x11b\0\x02wW[PPP\x81\x1B\x01\x83Ub\0\0\xCDV[\x01Q`\0\x19\x83\x88\x1B`\xF8\x16\x1C\x19\x16\x90U\x88\x80\x80b\0\x02iV[\x83\x85\x01Q\x86U\x8C\x97\x90\x95\x01\x94\x93\x84\x01\x93\x01b\0\x02VV[\x90\x91P\x85`\0R\x88`\0 \x85\x80\x85\x01`\x05\x1C\x82\x01\x92\x8B\x86\x10b\0\x02\xF3W[\x91\x8A\x91\x86\x95\x94\x93\x01`\x05\x1C\x01\x91[\x82\x81\x10b\0\x02\xE3WPPb\0\0\xA4V[`\0\x81U\x85\x94P\x8A\x91\x01b\0\x02\xD3V[\x92P\x81\x92b\0\x02\xC5V[cNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[\x93`\x7F\x16\x93b\0\0\x8DV[b\0\x03\xE7V[`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FABI decoding: tuple data too sho`D\x82\x01Ra\x1C\x9D`\xF2\x1B`d\x82\x01R`\x84\x90\xFD[bF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FEther sent to non-payable functi`D\x82\x01Ra7\xB7`\xF1\x1B`d\x82\x01R`\x84\x90\xFD[`@Q\x91\x90`\x1F\x01`\x1F\x19\x16\x82\x01`\x01`\x01`@\x1B\x03\x81\x11\x83\x82\x10\x17b\0\x02\x1EW`@RV[`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FABI decoding: invalid tuple offs`D\x82\x01Ra\x19]`\xF2\x1B`d\x82\x01R`\x84\x90\xFD[\x91\x90\x80`\x1F\x84\x01\x12\x15b\0\x04\xFEW\x82Q`\x01`\x01`@\x1B\x03\x81\x11b\0\x02\x1EW` \x90b\0\x04m`\x1F\x82\x01`\x1F\x19\x16\x83\x01b\0\x03\xC1V[\x92\x81\x84R\x82\x82\x87\x01\x01\x11b\0\x04\xA9W`\0[\x81\x81\x10b\0\x04\x95WP\x82`\0\x93\x94\x95P\x01\x01R\x90V[\x85\x81\x01\x83\x01Q\x84\x82\x01\x84\x01R\x82\x01b\0\x04\x7FV[`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x81\x01\x83\x90R`'`$\x82\x01R\x7FABI decoding: invalid byte array`D\x82\x01Rf\x04\r\x8C\xAD\xCC\xEE\x8D`\xCB\x1B`d\x82\x01R`\x84\x90\xFD[`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`+`$\x82\x01R\x7FABI decoding: invalid calldata a`D\x82\x01Rj\x1C\x9C\x98^H\x1B\xD9\x99\x9C\xD9]`\xAA\x1B`d\x82\x01R`\x84\x90\xFD\xFE`@`\x80\x81R`\x04\x90\x816\x10\x15a\0\x94W[\x90` `\x84\x92Q\x91\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R\x82\x01R`5`$\x82\x01R\x7FContract does not have fallback `D\x82\x01R\x7Fnor receive functions\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\0\x805`\xE0\x1C\x80c\x06\xFD\xDE\x03\x14a\x06HW\x80c\t^\xA7\xB3\x14a\x06\x1FW\x80c\x18\x16\r\xDD\x14a\x06\x02W\x80c#\xB8r\xDD\x14a\x04\xF3W\x80c1<\xE5g\x14a\x04\xD9W\x80c9P\x93Q\x14a\x04NW\x80cp\xA0\x821\x14a\x04\x0BW\x80c\x95\xD8\x9BA\x14a\x02\x8DW\x80c\xA4W\xC2\xD7\x14a\x01\xA8W\x80c\xA9\x05\x9C\xBB\x14a\x01xWc\xDDb\xED>\x14a\x01\x19WPa\0\x11V[\x904a\x01sW\x80`\x03\x196\x01\x12a\x01nW\x80` \x92a\x016a\x08~V[a\x01>a\x08\xA6V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x82\x16\x83R`\x01\x86R\x83\x83 \x91\x16\x82R\x84R T\x90Q\x90\x81R\xF3[a\x07\xB2V[a\x07.V[\x824a\x01sW\x80`\x03\x196\x01\x12a\x01nW` \x90a\x01\xA1a\x01\x97a\x08~V[`$5\x903a\x08\xC9V[Q`\x01\x81R\xF3[P\x82\x904a\x01sW\x82`\x03\x196\x01\x12a\x01nWa\x01\xC3a\x08~V[\x91\x83`$5\x923\x81R`\x01` R\x81\x81 s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x86\x16\x82R` R T\x90\x82\x82\x10a\x02\nW` \x85a\x01\xA1\x85\x85\x03\x873a\n\xD8V[`\x84\x90` \x86Q\x91\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R\x82\x01R`%`$\x82\x01R\x7FERC20: decreased allowance below`D\x82\x01R\x7F zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[P\x904a\x01sW\x81`\x03\x196\x01\x12a\x01nW\x80Q\x90\x82\x84T`\x01\x81\x81\x1C\x90\x80\x83\x16\x92\x83\x15a\x04\x01W[` \x93\x84\x84\x10\x81\x14a\x03\xD5W\x83\x88R\x87\x95\x94\x93\x92\x91\x81\x15a\x03\x98WP`\x01\x14a\x03:W[PPP\x03`\x1F\x01`\x1F\x19\x16\x82\x01\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11\x83\x85\x10\x17a\x03\x0EWP\x82\x91\x82a\x03\n\x92R\x82a\x086V[\x03\x90\xF3[\x80`A\x86\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`$\x94RR\xFD[\x88\x88R\x91\x93\x92P\x86\x91\x7F\x8A5\xAC\xFB\xC1_\xF8\x1A9\xAE}4O\xD7\t\xF2\x8E\x86\0\xB4\xAA\x8Ce\xC6\xB6K\xFE\x7F\xE3k\xD1\x9B[\x82\x84\x10a\x03\x82WPPP\x90`\x1F\x19\x92`\x1F\x92\x82\x01\x01\x91\x81\x93a\x02\xDAV[\x80T\x88\x85\x01\x87\x01R\x87\x94P\x92\x85\x01\x92\x81\x01a\x03eV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16\x84\x87\x01RPP\x15\x15`\x05\x1B\x83\x01\x01\x90P\x81`\x1F`\x1F\x19a\x02\xDAV[`$\x89`\"\x8C\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83RR\xFD[\x91`\x7F\x16\x91a\x02\xB6V[P\x904a\x01sW` `\x03\x196\x01\x12a\x01nW\x80` \x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x04?a\x08~V[\x16\x81R\x80\x84R T\x90Q\x90\x81R\xF3[P4a\x01sW\x81`\x03\x196\x01\x12a\x01nWa\x04ga\x08~V[3\x82R`\x01` R\x82\x82 s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x83R` R\x82\x82 T\x91`$5\x83\x01\x80\x93\x11a\x04\xADW` \x84a\x01\xA1\x85\x853a\n\xD8V[\x80`\x11\x86\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`$\x94RR\xFD[P4a\x01sW`\x03\x196\x01\x12a\x01nW` \x90Q`\x12\x81R\xF3[P\x824a\x01sW```\x03\x196\x01\x12a\x01nWa\x05\x0Ea\x08~V[a\x05\x16a\x08\xA6V[\x91\x84`D5\x94s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x81R`\x01` R\x81\x81 3\x82R` R T\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x03a\x05|W[` \x86a\x01\xA1\x87\x87\x87a\x08\xC9V[\x84\x82\x10a\x05\xA5WP\x91\x83\x91a\x05\x9A` \x96\x95a\x01\xA1\x95\x033\x83a\n\xD8V[\x91\x93\x94\x81\x93Pa\x05nV[`d\x90` \x87Q\x91\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R\x82\x01R`\x1D`$\x82\x01R\x7FERC20: insufficient allowance\0\0\0`D\x82\x01R\xFD[P4a\x01sW`\x03\x196\x01\x12a\x01nW` \x90`\x02T\x90Q\x90\x81R\xF3[\x824a\x01sW\x80`\x03\x196\x01\x12a\x01nW` \x90a\x01\xA1a\x06>a\x08~V[`$5\x903a\n\xD8V[P\x904a\x07.W\x81`\x03\x196\x01\x12a\x01nW\x80Q\x90\x82`\x03T`\x01\x81\x81\x1C\x90\x80\x83\x16\x92\x83\x15a\x07$W[` \x93\x84\x84\x10\x81\x14a\x03\xD5W\x83\x88R\x87\x95\x94\x93\x92\x91\x81\x15a\x03\x98WP`\x01\x14a\x06\xC5WPPP\x03`\x1F\x01`\x1F\x19\x16\x82\x01\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11\x83\x85\x10\x17a\x03\x0EWP\x82\x91\x82a\x03\n\x92R\x82a\x086V[`\x03\x88R\x91\x93\x92P\x86\x91\x7F\xC2WZ\x0E\x9EY<\0\xF9Y\xF8\xC9/\x12\xDB(i\xC39Z;\x05\x02\xD0^%\x16Doq\xF8[[\x82\x84\x10a\x07\x0EWPPP\x90`\x1F\x19\x92`\x1F\x92\x82\x01\x01\x91\x81\x93a\x02\xDAV[\x80T\x88\x85\x01\x87\x01R\x87\x94P\x92\x85\x01\x92\x81\x01a\x06\xF1V[\x91`\x7F\x16\x91a\x06rV[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FEther sent to non-payable functi`D\x82\x01R\x7Fon\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FABI decoding: tuple data too sho`D\x82\x01R\x7Frt\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[` \x80\x82R\x82Q\x81\x83\x01\x81\x90R\x93\x92`\0[\x85\x81\x10a\x08jWPPP`\x1F\x19`\x1F\x84`\0`@\x80\x96\x97\x86\x01\x01R\x01\x16\x01\x01\x90V[\x81\x81\x01\x83\x01Q\x84\x82\x01`@\x01R\x82\x01a\x08HV[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x08\xA1WV[`\0\x80\xFD[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x08\xA1WV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x91\x16\x91\x82\x15a\nTW\x16\x91\x82\x15a\t\xD0W`\0\x82\x81R\x80` R`@\x81 T\x91\x80\x83\x10a\tLW`@\x82\x82\x7F\xDD\xF2R\xAD\x1B\xE2\xC8\x9Bi\xC2\xB0h\xFC7\x8D\xAA\x95+\xA7\xF1c\xC4\xA1\x16(\xF5ZM\xF5#\xB3\xEF\x95\x87` \x96R\x82\x86R\x03\x82\x82 U\x86\x81R \x81\x81T\x01\x90U`@Q\x90\x81R\xA3V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FERC20: transfer amount exceeds b`D\x82\x01R\x7Falance\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`#`$\x82\x01R\x7FERC20: transfer to the zero addr`D\x82\x01R\x7Fess\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FERC20: transfer from the zero ad`D\x82\x01R\x7Fdress\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x91\x16\x91\x82\x15a\x0B\xCAW\x16\x91\x82\x15a\x0BFW` \x7F\x8C[\xE1\xE5\xEB\xEC}[\xD1OqB}\x1E\x84\xF3\xDD\x03\x14\xC0\xF7\xB2)\x1E[ \n\xC8\xC7\xC3\xB9%\x91\x83`\0R`\x01\x82R`@`\0 \x85`\0R\x82R\x80`@`\0 U`@Q\x90\x81R\xA3V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FERC20: approve to the zero addre`D\x82\x01R\x7Fss\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`$\x80\x82\x01R\x7FERC20: approve from the zero add`D\x82\x01R\x7Fress\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD\xFE\xA2dipfsX\"\x12 \xCC\xD9\xEA\xAB\xB5\xE8m\x80\xE6\x9B\xF8\x82\xB6W\x06]\x91\x87\xD6\x0C~\xA6\xDB9aH\x10V\x82\x85\xF6~dsolcC\0\x08\x15\x003"; - /// The bytecode of the contract. - #[cfg(feature = "providers")] - pub static ERC20_BYTECODE: ::ethers::core::types::Bytes = - ::ethers::core::types::Bytes::from_static(__BYTECODE); - #[rustfmt::skip] - #[cfg(feature = "providers")] - const __DEPLOYED_BYTECODE: &[u8] = b"`@`\x80\x81R`\x04\x90\x816\x10\x15a\0\x94W[\x90` `\x84\x92Q\x91\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R\x82\x01R`5`$\x82\x01R\x7FContract does not have fallback `D\x82\x01R\x7Fnor receive functions\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\0\x805`\xE0\x1C\x80c\x06\xFD\xDE\x03\x14a\x06HW\x80c\t^\xA7\xB3\x14a\x06\x1FW\x80c\x18\x16\r\xDD\x14a\x06\x02W\x80c#\xB8r\xDD\x14a\x04\xF3W\x80c1<\xE5g\x14a\x04\xD9W\x80c9P\x93Q\x14a\x04NW\x80cp\xA0\x821\x14a\x04\x0BW\x80c\x95\xD8\x9BA\x14a\x02\x8DW\x80c\xA4W\xC2\xD7\x14a\x01\xA8W\x80c\xA9\x05\x9C\xBB\x14a\x01xWc\xDDb\xED>\x14a\x01\x19WPa\0\x11V[\x904a\x01sW\x80`\x03\x196\x01\x12a\x01nW\x80` \x92a\x016a\x08~V[a\x01>a\x08\xA6V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x82\x16\x83R`\x01\x86R\x83\x83 \x91\x16\x82R\x84R T\x90Q\x90\x81R\xF3[a\x07\xB2V[a\x07.V[\x824a\x01sW\x80`\x03\x196\x01\x12a\x01nW` \x90a\x01\xA1a\x01\x97a\x08~V[`$5\x903a\x08\xC9V[Q`\x01\x81R\xF3[P\x82\x904a\x01sW\x82`\x03\x196\x01\x12a\x01nWa\x01\xC3a\x08~V[\x91\x83`$5\x923\x81R`\x01` R\x81\x81 s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x86\x16\x82R` R T\x90\x82\x82\x10a\x02\nW` \x85a\x01\xA1\x85\x85\x03\x873a\n\xD8V[`\x84\x90` \x86Q\x91\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R\x82\x01R`%`$\x82\x01R\x7FERC20: decreased allowance below`D\x82\x01R\x7F zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[P\x904a\x01sW\x81`\x03\x196\x01\x12a\x01nW\x80Q\x90\x82\x84T`\x01\x81\x81\x1C\x90\x80\x83\x16\x92\x83\x15a\x04\x01W[` \x93\x84\x84\x10\x81\x14a\x03\xD5W\x83\x88R\x87\x95\x94\x93\x92\x91\x81\x15a\x03\x98WP`\x01\x14a\x03:W[PPP\x03`\x1F\x01`\x1F\x19\x16\x82\x01\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11\x83\x85\x10\x17a\x03\x0EWP\x82\x91\x82a\x03\n\x92R\x82a\x086V[\x03\x90\xF3[\x80`A\x86\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`$\x94RR\xFD[\x88\x88R\x91\x93\x92P\x86\x91\x7F\x8A5\xAC\xFB\xC1_\xF8\x1A9\xAE}4O\xD7\t\xF2\x8E\x86\0\xB4\xAA\x8Ce\xC6\xB6K\xFE\x7F\xE3k\xD1\x9B[\x82\x84\x10a\x03\x82WPPP\x90`\x1F\x19\x92`\x1F\x92\x82\x01\x01\x91\x81\x93a\x02\xDAV[\x80T\x88\x85\x01\x87\x01R\x87\x94P\x92\x85\x01\x92\x81\x01a\x03eV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16\x84\x87\x01RPP\x15\x15`\x05\x1B\x83\x01\x01\x90P\x81`\x1F`\x1F\x19a\x02\xDAV[`$\x89`\"\x8C\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83RR\xFD[\x91`\x7F\x16\x91a\x02\xB6V[P\x904a\x01sW` `\x03\x196\x01\x12a\x01nW\x80` \x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x04?a\x08~V[\x16\x81R\x80\x84R T\x90Q\x90\x81R\xF3[P4a\x01sW\x81`\x03\x196\x01\x12a\x01nWa\x04ga\x08~V[3\x82R`\x01` R\x82\x82 s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x83R` R\x82\x82 T\x91`$5\x83\x01\x80\x93\x11a\x04\xADW` \x84a\x01\xA1\x85\x853a\n\xD8V[\x80`\x11\x86\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`$\x94RR\xFD[P4a\x01sW`\x03\x196\x01\x12a\x01nW` \x90Q`\x12\x81R\xF3[P\x824a\x01sW```\x03\x196\x01\x12a\x01nWa\x05\x0Ea\x08~V[a\x05\x16a\x08\xA6V[\x91\x84`D5\x94s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x81R`\x01` R\x81\x81 3\x82R` R T\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x03a\x05|W[` \x86a\x01\xA1\x87\x87\x87a\x08\xC9V[\x84\x82\x10a\x05\xA5WP\x91\x83\x91a\x05\x9A` \x96\x95a\x01\xA1\x95\x033\x83a\n\xD8V[\x91\x93\x94\x81\x93Pa\x05nV[`d\x90` \x87Q\x91\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R\x82\x01R`\x1D`$\x82\x01R\x7FERC20: insufficient allowance\0\0\0`D\x82\x01R\xFD[P4a\x01sW`\x03\x196\x01\x12a\x01nW` \x90`\x02T\x90Q\x90\x81R\xF3[\x824a\x01sW\x80`\x03\x196\x01\x12a\x01nW` \x90a\x01\xA1a\x06>a\x08~V[`$5\x903a\n\xD8V[P\x904a\x07.W\x81`\x03\x196\x01\x12a\x01nW\x80Q\x90\x82`\x03T`\x01\x81\x81\x1C\x90\x80\x83\x16\x92\x83\x15a\x07$W[` \x93\x84\x84\x10\x81\x14a\x03\xD5W\x83\x88R\x87\x95\x94\x93\x92\x91\x81\x15a\x03\x98WP`\x01\x14a\x06\xC5WPPP\x03`\x1F\x01`\x1F\x19\x16\x82\x01\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11\x83\x85\x10\x17a\x03\x0EWP\x82\x91\x82a\x03\n\x92R\x82a\x086V[`\x03\x88R\x91\x93\x92P\x86\x91\x7F\xC2WZ\x0E\x9EY<\0\xF9Y\xF8\xC9/\x12\xDB(i\xC39Z;\x05\x02\xD0^%\x16Doq\xF8[[\x82\x84\x10a\x07\x0EWPPP\x90`\x1F\x19\x92`\x1F\x92\x82\x01\x01\x91\x81\x93a\x02\xDAV[\x80T\x88\x85\x01\x87\x01R\x87\x94P\x92\x85\x01\x92\x81\x01a\x06\xF1V[\x91`\x7F\x16\x91a\x06rV[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FEther sent to non-payable functi`D\x82\x01R\x7Fon\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FABI decoding: tuple data too sho`D\x82\x01R\x7Frt\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[` \x80\x82R\x82Q\x81\x83\x01\x81\x90R\x93\x92`\0[\x85\x81\x10a\x08jWPPP`\x1F\x19`\x1F\x84`\0`@\x80\x96\x97\x86\x01\x01R\x01\x16\x01\x01\x90V[\x81\x81\x01\x83\x01Q\x84\x82\x01`@\x01R\x82\x01a\x08HV[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x08\xA1WV[`\0\x80\xFD[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x08\xA1WV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x91\x16\x91\x82\x15a\nTW\x16\x91\x82\x15a\t\xD0W`\0\x82\x81R\x80` R`@\x81 T\x91\x80\x83\x10a\tLW`@\x82\x82\x7F\xDD\xF2R\xAD\x1B\xE2\xC8\x9Bi\xC2\xB0h\xFC7\x8D\xAA\x95+\xA7\xF1c\xC4\xA1\x16(\xF5ZM\xF5#\xB3\xEF\x95\x87` \x96R\x82\x86R\x03\x82\x82 U\x86\x81R \x81\x81T\x01\x90U`@Q\x90\x81R\xA3V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FERC20: transfer amount exceeds b`D\x82\x01R\x7Falance\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`#`$\x82\x01R\x7FERC20: transfer to the zero addr`D\x82\x01R\x7Fess\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FERC20: transfer from the zero ad`D\x82\x01R\x7Fdress\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x91\x16\x91\x82\x15a\x0B\xCAW\x16\x91\x82\x15a\x0BFW` \x7F\x8C[\xE1\xE5\xEB\xEC}[\xD1OqB}\x1E\x84\xF3\xDD\x03\x14\xC0\xF7\xB2)\x1E[ \n\xC8\xC7\xC3\xB9%\x91\x83`\0R`\x01\x82R`@`\0 \x85`\0R\x82R\x80`@`\0 U`@Q\x90\x81R\xA3V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FERC20: approve to the zero addre`D\x82\x01R\x7Fss\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`$\x80\x82\x01R\x7FERC20: approve from the zero add`D\x82\x01R\x7Fress\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD\xFE\xA2dipfsX\"\x12 \xCC\xD9\xEA\xAB\xB5\xE8m\x80\xE6\x9B\xF8\x82\xB6W\x06]\x91\x87\xD6\x0C~\xA6\xDB9aH\x10V\x82\x85\xF6~dsolcC\0\x08\x15\x003"; - /// The deployed bytecode of the contract. - #[cfg(feature = "providers")] - pub static ERC20_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = - ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); #[cfg(feature = "providers")] pub struct ERC20(::ethers::contract::Contract); #[cfg(feature = "providers")] @@ -430,45 +448,6 @@ pub mod erc20 { client, )) } - /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. - /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction - /// - /// Notes: - /// - If there are no constructor arguments, you should pass `()` as the argument. - /// - The default poll duration is 7 seconds. - /// - The default number of confirmations is 1 block. - /// - /// - /// # Example - /// - /// Generate contract bindings with `abigen!` and deploy a new contract instance. - /// - /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. - /// - /// ```ignore - /// # async fn deploy(client: ::std::sync::Arc) { - /// abigen!(Greeter, "../greeter.json"); - /// - /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); - /// let msg = greeter_contract.greet().call().await.unwrap(); - /// # } - /// ``` - pub fn deploy( - client: ::std::sync::Arc, - constructor_args: T, - ) -> ::core::result::Result< - ::ethers::contract::builders::ContractDeployer, - ::ethers::contract::ContractError, - > { - let factory = ::ethers::contract::ContractFactory::new( - ERC20_ABI.clone(), - ERC20_BYTECODE.clone().into(), - client, - ); - let deployer = factory.deploy(constructor_args)?; - let deployer = ::ethers::contract::ContractDeployer::new(deployer); - Ok(deployer) - } ///Calls the contract's `allowance` (0xdd62ed3e) function pub fn allowance( &self, @@ -483,10 +462,10 @@ pub mod erc20 { pub fn approve( &self, spender: ::ethers::core::types::Address, - amount: ::ethers::core::types::U256, + value: ::ethers::core::types::U256, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([9, 94, 167, 179], (spender, amount)) + .method_hash([9, 94, 167, 179], (spender, value)) .expect("method not found (this should never happen)") } ///Calls the contract's `balanceOf` (0x70a08231) function @@ -504,26 +483,6 @@ pub mod erc20 { .method_hash([49, 60, 229, 103], ()) .expect("method not found (this should never happen)") } - ///Calls the contract's `decreaseAllowance` (0xa457c2d7) function - pub fn decrease_allowance( - &self, - spender: ::ethers::core::types::Address, - subtracted_value: ::ethers::core::types::U256, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([164, 87, 194, 215], (spender, subtracted_value)) - .expect("method not found (this should never happen)") - } - ///Calls the contract's `increaseAllowance` (0x39509351) function - pub fn increase_allowance( - &self, - spender: ::ethers::core::types::Address, - added_value: ::ethers::core::types::U256, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([57, 80, 147, 81], (spender, added_value)) - .expect("method not found (this should never happen)") - } ///Calls the contract's `name` (0x06fdde03) function pub fn name(&self) -> ::ethers::contract::builders::ContractCall { self.0 @@ -550,10 +509,10 @@ pub mod erc20 { pub fn transfer( &self, to: ::ethers::core::types::Address, - amount: ::ethers::core::types::U256, + value: ::ethers::core::types::U256, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([169, 5, 156, 187], (to, amount)) + .method_hash([169, 5, 156, 187], (to, value)) .expect("method not found (this should never happen)") } ///Calls the contract's `transferFrom` (0x23b872dd) function @@ -561,10 +520,10 @@ pub mod erc20 { &self, from: ::ethers::core::types::Address, to: ::ethers::core::types::Address, - amount: ::ethers::core::types::U256, + value: ::ethers::core::types::U256, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([35, 184, 114, 221], (from, to, amount)) + .method_hash([35, 184, 114, 221], (from, to, value)) .expect("method not found (this should never happen)") } ///Gets the contract's `Approval` event @@ -593,6 +552,273 @@ pub mod erc20 { Self::new(contract.address(), contract.client()) } } + ///Custom Error type `ERC20InsufficientAllowance` with signature `ERC20InsufficientAllowance(address,uint256,uint256)` and selector `0xfb8f41b2` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ERC20InsufficientAllowance", + abi = "ERC20InsufficientAllowance(address,uint256,uint256)" + )] + pub struct ERC20InsufficientAllowance { + pub spender: ::ethers::core::types::Address, + pub allowance: ::ethers::core::types::U256, + pub needed: ::ethers::core::types::U256, + } + ///Custom Error type `ERC20InsufficientBalance` with signature `ERC20InsufficientBalance(address,uint256,uint256)` and selector `0xe450d38c` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ERC20InsufficientBalance", + abi = "ERC20InsufficientBalance(address,uint256,uint256)" + )] + pub struct ERC20InsufficientBalance { + pub sender: ::ethers::core::types::Address, + pub balance: ::ethers::core::types::U256, + pub needed: ::ethers::core::types::U256, + } + ///Custom Error type `ERC20InvalidApprover` with signature `ERC20InvalidApprover(address)` and selector `0xe602df05` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ERC20InvalidApprover", abi = "ERC20InvalidApprover(address)")] + pub struct ERC20InvalidApprover { + pub approver: ::ethers::core::types::Address, + } + ///Custom Error type `ERC20InvalidReceiver` with signature `ERC20InvalidReceiver(address)` and selector `0xec442f05` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ERC20InvalidReceiver", abi = "ERC20InvalidReceiver(address)")] + pub struct ERC20InvalidReceiver { + pub receiver: ::ethers::core::types::Address, + } + ///Custom Error type `ERC20InvalidSender` with signature `ERC20InvalidSender(address)` and selector `0x96c6fd1e` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ERC20InvalidSender", abi = "ERC20InvalidSender(address)")] + pub struct ERC20InvalidSender { + pub sender: ::ethers::core::types::Address, + } + ///Custom Error type `ERC20InvalidSpender` with signature `ERC20InvalidSpender(address)` and selector `0x94280d62` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ERC20InvalidSpender", abi = "ERC20InvalidSpender(address)")] + pub struct ERC20InvalidSpender { + pub spender: ::ethers::core::types::Address, + } + ///Container type for all of the contract's custom errors + #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] + pub enum ERC20Errors { + ERC20InsufficientAllowance(ERC20InsufficientAllowance), + ERC20InsufficientBalance(ERC20InsufficientBalance), + ERC20InvalidApprover(ERC20InvalidApprover), + ERC20InvalidReceiver(ERC20InvalidReceiver), + ERC20InvalidSender(ERC20InvalidSender), + ERC20InvalidSpender(ERC20InvalidSpender), + /// The standard solidity revert string, with selector + /// Error(string) -- 0x08c379a0 + RevertString(::std::string::String), + } + impl ::ethers::core::abi::AbiDecode for ERC20Errors { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + <::std::string::String as ::ethers::core::abi::AbiDecode>::decode(data) + { + return Ok(Self::RevertString(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ERC20InsufficientAllowance(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ERC20InsufficientBalance(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ERC20InvalidApprover(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ERC20InvalidReceiver(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ERC20InvalidSender(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ERC20InvalidSpender(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for ERC20Errors { + fn encode(self) -> ::std::vec::Vec { + match self { + Self::ERC20InsufficientAllowance(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ERC20InsufficientBalance(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ERC20InvalidApprover(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ERC20InvalidReceiver(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ERC20InvalidSender(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ERC20InvalidSpender(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::RevertString(s) => ::ethers::core::abi::AbiEncode::encode(s), + } + } + } + impl ::ethers::contract::ContractRevert for ERC20Errors { + fn valid_selector(selector: [u8; 4]) -> bool { + match selector { + [0x08, 0xc3, 0x79, 0xa0] => true, + _ if selector + == ::selector() => + { + true + } + _ if selector + == ::selector() => + { + true + } + _ if selector + == ::selector() => + { + true + } + _ if selector + == ::selector() => + { + true + } + _ if selector + == ::selector() => + { + true + } + _ if selector + == ::selector() => + { + true + } + _ => false, + } + } + } + impl ::core::fmt::Display for ERC20Errors { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::ERC20InsufficientAllowance(element) => ::core::fmt::Display::fmt(element, f), + Self::ERC20InsufficientBalance(element) => ::core::fmt::Display::fmt(element, f), + Self::ERC20InvalidApprover(element) => ::core::fmt::Display::fmt(element, f), + Self::ERC20InvalidReceiver(element) => ::core::fmt::Display::fmt(element, f), + Self::ERC20InvalidSender(element) => ::core::fmt::Display::fmt(element, f), + Self::ERC20InvalidSpender(element) => ::core::fmt::Display::fmt(element, f), + Self::RevertString(s) => ::core::fmt::Display::fmt(s, f), + } + } + } + impl ::core::convert::From<::std::string::String> for ERC20Errors { + fn from(value: String) -> Self { + Self::RevertString(value) + } + } + impl ::core::convert::From for ERC20Errors { + fn from(value: ERC20InsufficientAllowance) -> Self { + Self::ERC20InsufficientAllowance(value) + } + } + impl ::core::convert::From for ERC20Errors { + fn from(value: ERC20InsufficientBalance) -> Self { + Self::ERC20InsufficientBalance(value) + } + } + impl ::core::convert::From for ERC20Errors { + fn from(value: ERC20InvalidApprover) -> Self { + Self::ERC20InvalidApprover(value) + } + } + impl ::core::convert::From for ERC20Errors { + fn from(value: ERC20InvalidReceiver) -> Self { + Self::ERC20InvalidReceiver(value) + } + } + impl ::core::convert::From for ERC20Errors { + fn from(value: ERC20InvalidSender) -> Self { + Self::ERC20InvalidSender(value) + } + } + impl ::core::convert::From for ERC20Errors { + fn from(value: ERC20InvalidSpender) -> Self { + Self::ERC20InvalidSpender(value) + } + } #[derive( Clone, ::ethers::contract::EthEvent, @@ -696,7 +922,7 @@ pub mod erc20 { #[ethcall(name = "approve", abi = "approve(address,uint256)")] pub struct ApproveCall { pub spender: ::ethers::core::types::Address, - pub amount: ::ethers::core::types::U256, + pub value: ::ethers::core::types::U256, } ///Container type for all input parameters for the `balanceOf` function with signature `balanceOf(address)` and selector `0x70a08231` #[derive( @@ -726,38 +952,6 @@ pub mod erc20 { )] #[ethcall(name = "decimals", abi = "decimals()")] pub struct DecimalsCall; - ///Container type for all input parameters for the `decreaseAllowance` function with signature `decreaseAllowance(address,uint256)` and selector `0xa457c2d7` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethcall(name = "decreaseAllowance", abi = "decreaseAllowance(address,uint256)")] - pub struct DecreaseAllowanceCall { - pub spender: ::ethers::core::types::Address, - pub subtracted_value: ::ethers::core::types::U256, - } - ///Container type for all input parameters for the `increaseAllowance` function with signature `increaseAllowance(address,uint256)` and selector `0x39509351` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethcall(name = "increaseAllowance", abi = "increaseAllowance(address,uint256)")] - pub struct IncreaseAllowanceCall { - pub spender: ::ethers::core::types::Address, - pub added_value: ::ethers::core::types::U256, - } ///Container type for all input parameters for the `name` function with signature `name()` and selector `0x06fdde03` #[derive( Clone, @@ -811,7 +1005,7 @@ pub mod erc20 { #[ethcall(name = "transfer", abi = "transfer(address,uint256)")] pub struct TransferCall { pub to: ::ethers::core::types::Address, - pub amount: ::ethers::core::types::U256, + pub value: ::ethers::core::types::U256, } ///Container type for all input parameters for the `transferFrom` function with signature `transferFrom(address,address,uint256)` and selector `0x23b872dd` #[derive( @@ -828,7 +1022,7 @@ pub mod erc20 { pub struct TransferFromCall { pub from: ::ethers::core::types::Address, pub to: ::ethers::core::types::Address, - pub amount: ::ethers::core::types::U256, + pub value: ::ethers::core::types::U256, } ///Container type for all of the contract's call #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] @@ -837,8 +1031,6 @@ pub mod erc20 { Approve(ApproveCall), BalanceOf(BalanceOfCall), Decimals(DecimalsCall), - DecreaseAllowance(DecreaseAllowanceCall), - IncreaseAllowance(IncreaseAllowanceCall), Name(NameCall), Symbol(SymbolCall), TotalSupply(TotalSupplyCall), @@ -862,16 +1054,6 @@ pub mod erc20 { if let Ok(decoded) = ::decode(data) { return Ok(Self::Decimals(decoded)); } - if let Ok(decoded) = - ::decode(data) - { - return Ok(Self::DecreaseAllowance(decoded)); - } - if let Ok(decoded) = - ::decode(data) - { - return Ok(Self::IncreaseAllowance(decoded)); - } if let Ok(decoded) = ::decode(data) { return Ok(Self::Name(decoded)); } @@ -898,8 +1080,6 @@ pub mod erc20 { Self::Approve(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::BalanceOf(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::Decimals(element) => ::ethers::core::abi::AbiEncode::encode(element), - Self::DecreaseAllowance(element) => ::ethers::core::abi::AbiEncode::encode(element), - Self::IncreaseAllowance(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::Name(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::Symbol(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::TotalSupply(element) => ::ethers::core::abi::AbiEncode::encode(element), @@ -915,8 +1095,6 @@ pub mod erc20 { Self::Approve(element) => ::core::fmt::Display::fmt(element, f), Self::BalanceOf(element) => ::core::fmt::Display::fmt(element, f), Self::Decimals(element) => ::core::fmt::Display::fmt(element, f), - Self::DecreaseAllowance(element) => ::core::fmt::Display::fmt(element, f), - Self::IncreaseAllowance(element) => ::core::fmt::Display::fmt(element, f), Self::Name(element) => ::core::fmt::Display::fmt(element, f), Self::Symbol(element) => ::core::fmt::Display::fmt(element, f), Self::TotalSupply(element) => ::core::fmt::Display::fmt(element, f), @@ -945,16 +1123,6 @@ pub mod erc20 { Self::Decimals(value) } } - impl ::core::convert::From for ERC20Calls { - fn from(value: DecreaseAllowanceCall) -> Self { - Self::DecreaseAllowance(value) - } - } - impl ::core::convert::From for ERC20Calls { - fn from(value: IncreaseAllowanceCall) -> Self { - Self::IncreaseAllowance(value) - } - } impl ::core::convert::From for ERC20Calls { fn from(value: NameCall) -> Self { Self::Name(value) @@ -1028,30 +1196,6 @@ pub mod erc20 { Hash, )] pub struct DecimalsReturn(pub u8); - ///Container type for all return fields from the `decreaseAllowance` function with signature `decreaseAllowance(address,uint256)` and selector `0xa457c2d7` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - pub struct DecreaseAllowanceReturn(pub bool); - ///Container type for all return fields from the `increaseAllowance` function with signature `increaseAllowance(address,uint256)` and selector `0x39509351` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - pub struct IncreaseAllowanceReturn(pub bool); ///Container type for all return fields from the `name` function with signature `name()` and selector `0x06fdde03` #[derive( Clone, diff --git a/generated/contracts/src/glue.rs b/generated/contracts/src/glue.rs index 0e1b029b8a..1823c489a8 100644 --- a/generated/contracts/src/glue.rs +++ b/generated/contracts/src/glue.rs @@ -285,8 +285,8 @@ pub mod glue { name: ::std::string::String::new(), kind: ::ethers::core::abi::ethabi::ParamType::Tuple( ::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Uint(128usize), - ::ethers::core::abi::ethabi::ParamType::Uint(128usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), + ::ethers::core::abi::ethabi::ParamType::Uint(256usize), ], ), internal_type: ::core::option::Option::Some( @@ -905,14 +905,14 @@ pub mod glue { ::ethers::contract::Lazy::new(__abi); #[rustfmt::skip] #[cfg(feature = "providers")] - const __BYTECODE: &[u8] = b"`\x80\x80`@R4a\0\x19W`@Qa ^\x90\x81a\0g\x829\xF3[bF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FEther sent to non-payable functi`D\x82\x01Ra7\xB7`\xF1\x1B`d\x82\x01R`\x84\x90\xFD\xFE`\xC0\x80`@R`\x046\x10\x15a\0\x93W[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`5`$\x82\x01R\x7FContract does not have fallback `D\x82\x01R\x7Fnor receive functions\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\0\x90\x815`\xE0\x1Cc\x97\xE8\xE7\xC4\x14a\0\xABWPa\0\x0FV[4a\x11!WPa\x02 `\x03\x196\x01\x12a\x10\x9DW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0E)Wa\x01\0`\x03\x19\x826\x03\x01\x12a\rhWa\0\xE7a\x12\xABV[\x90\x80`\x04\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/W`\xA0\x91a\x01\x12a\x01c\x92`\x046\x91\x84\x01\x01a\x14\xE6V[\x84Ra\x01 `$\x82\x01a\x15\xDAV[` \x85\x01Ra\x011`D\x82\x01a\x15\xDAV[`@\x85\x01Ra\x01B`d\x82\x01a\x15\xDAV[``\x85\x01Ra\x01T6`\x84\x83\x01a\x15\xF4V[`\x80\x85\x01R`\xC46\x91\x01a\x15\xF4V[\x91\x01R`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0E)W```\x03\x19\x826\x03\x01\x12a\rhWa\x01\x8Ea\x12\xFAV[\x90a\x01\x9B\x81`\x04\x01a\x15\xDAV[\x82R`$\x81\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\x01\xC1\x90`\x046\x91\x84\x01\x01a\x16&V[` \x83\x01R`D\x81\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/W`@\x91`\x04a\x01\xEC\x926\x92\x01\x01a\x14\xE6V[\x91\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`D5\x11a\x0E)W`\x80`\x03\x19`D56\x03\x01\x12a\rhWa\x02\x18a\x12\xFAV[`D5`\x04\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\x02@\x90`\x046\x91`D5\x01\x01a\x1A\xD3V[\x81Ra\x02Q6`$`D5\x01a\x15\xF4V[` \x82\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`d`D5\x015\x11a\x0C/W`@a\x02\x826`D5`d\x81\x015\x01`\x04\x01a\x14\xE6V[\x91\x01R`d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0E)Wa\x02\xA5\x906\x90`\x04\x01a\x17 V[P`\x845g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0E)Wa\x02\xC6\x906\x90`\x04\x01a\x19uV[P`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\\6\x01\x12a\rhWa\x02\xF9a\x13\x1AV[`\xA45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x10\x99W\x81R`\xC45\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x10\x99W` \x01R``\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x1C6\x01\x12a\rhWa\x03Za\x12\xFAV[`\xE45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x10\x99W\x81Ra\x01\x045` \x82\x01R`@a\x01$5\x91\x01R`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFE\xBC6\x01\x12a\rhWa\x03\xB4a\x13\x1AV[a\x01D5o\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x10\x99W\x81Ra\x01d5\x90o\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x10\x99W` \x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\x845\x11a\x0E)W`\xA0`\x03\x19a\x01\x8456\x03\x01\x12a\rhWa\x04 a\x13:V[a\x01\x845`\x04\x015`\x04\x81\x10\x15a\x10\x99W\x81Ra\x04B`$a\x01\x845\x01a\x16[V[` \x82\x01Ra\x04V`Da\x01\x845\x01a\x16[V[`@\x82\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`da\x01\x845\x015\x11a\x0C/Wa\x04\x876a\x01\x845`d\x81\x015\x01`\x04\x01a\x16\x94V[``\x82\x01R`\x84a\x01\x845\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\x04\xB8`\x80\x91`\x046\x91a\x01\x845\x01\x01a\x14\xE6V[\x91\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xA45\x11a\x0E)Wa\x02 `\x03\x19a\x01\xA456\x03\x01\x12a\rhW`@Q\x80a\x01`\x81\x01\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01`\x83\x01\x11\x17a\x10lWa\x01`\x81\x01`@Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xA45`\x04\x015\x11a\x0C/Wa\x0536`\x04a\x01\xA45\x81\x015a\x01\xA45\x01\x01a\x14\xE6V[\x81Ra\x05E6`$a\x01\xA45\x01a\x15\xF4V[` \x82\x01Ra\x05Z6`da\x01\xA45\x01a\x1B\x1FV[`@\x82\x01Ra\x05o6`\xA4a\x01\xA45\x01a\x1B\x1FV[``\x82\x01Ra\x05\x846`\xE4a\x01\xA45\x01a\x1B\x1FV[`\x80\x82\x01Ra\x05\x9A6a\x01$a\x01\xA45\x01a\x15\xF4V[`\xA0\x82\x01Ra\x05\xB06a\x01da\x01\xA45\x01a\x15\xF4V[`\xC0\x82\x01Ra\x01\xA4\x805\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/W6`#\x82a\x01\xA45\x01\x01\x12\x15a\rmWa\x05\xF5a\x05\xF0`\x04\x83a\x01\xA45\x01\x015a\x18\xD9V[a\x13\x9AV[a\x01\xA45\x82\x01`\x04\x81\x015\x80\x83R\x91\x92` \x84\x01\x92\x90\x916`\x05\x92\x90\x92\x1B\x01`$\x01\x11a\rrW`$\x81a\x01\xA45\x01\x01\x91[a\x01\xA45\x82\x01`\x04\x81\x015`\x05\x1B\x01`$\x01\x83\x10a\x0EgWPPP`\xE0\x82\x01Ra\x01\xC4a\x01\xA45\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/W6`#\x82a\x01\xA45\x01\x01\x12\x15a\rmW`\x04\x81a\x01\xA45\x01\x015\x90a\x06\x86a\x05\xF0\x83a\x18\xD9V[\x91` \x83\x82\x81R\x01\x916`$\x83`\x05\x1B\x83a\x01\xA45\x01\x01\x01\x11a\rrW`$\x81a\x01\xA45\x01\x01\x92[`$\x83`\x05\x1B\x83a\x01\xA45\x01\x01\x01\x84\x10a\x0E.WPPPPa\x01\0\x82\x01Ra\x06\xDCa\x01\xE4a\x01\xA45\x01a\x1C'V[a\x01 \x82\x01Ra\x01@a\x06\xF5a\x02\x04a\x01\xA45\x01a\x1C'V[\x91\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xC45\x11a\x0E)W`\x80`\x03\x19a\x01\xC456\x03\x01\x12a\rhWa\x07#a\x12\xFAV[a\x0736a\x01\xC45`\x04\x01a\x16iV[\x81R`Da\x01\xC45\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\x07_\x90`\x046\x91a\x01\xC45\x01\x01a\x16&V[` \x82\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`da\x01\xC45\x015\x11a\x0C/W`@a\x07\x926a\x01\xC45`d\x81\x015\x01`\x04\x01a\x14\xE6V[\x91\x01Ra\x01\xE45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0E)W`\xA0`\x03\x19\x826\x03\x01\x12a\rhWa\x07\xBEa\x13ZV[\x90\x80`\x04\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\x07\xE3\x90`\x046\x91\x84\x01\x01a\x1A\xD3V[\x82R`$\x81\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\x08\t\x90`\x046\x91\x84\x01\x01a\x1D\x04V[` \x83\x01Ra\x08\x1B6`D\x83\x01a\x15\xF4V[`@\x83\x01R`\x84\x81\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/W``\x91`\x04a\x08F\x926\x92\x01\x01a\x1D\x04V[\x91\x01Ra\x02\x045`\x80Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x80Q\x11a\x0E)W` `\x03\x19`\x80Q6\x03\x01\x12a\rhWa\x08ya\x13zV[P`\x80Q`\x04\x015`\xA0Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xA0Q\x11a\x0C/W6`#`\xA0Q`\x80Q\x01\x01\x12\x15a\rmW`\x04`\xA0Q`\x80Q\x01\x015` a\x08\xBFa\x05\xF0\x83a\x18\xD9V[\x82\x81R\x01\x906`$\x82`\x05\x1B`\xA0Q`\x80Q\x01\x01\x01\x11a\rrW`$`\xA0Q`\x80Q\x01\x01\x91[`$\x82`\x05\x1B`\xA0Q`\x80Q\x01\x01\x01\x83\x10a\x08\xFEW\x83\x80\xF3[\x825g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\rmW`\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC\x82`\xA0Q\x83Q\x01\x016\x03\x01\x12a\rhWa\tJa\x13ZV[\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$\x83`\xA0Q`\x80Q\x01\x01\x015\x11a\x0C/W`\xA0Q`\x80Qa\t\x83\x916\x91`$\x91\x01\x85\x01\x81\x81\x015\x01\x01a\x1E\xB3V[\x83Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`D\x83`\xA0Q`\x80Q\x01\x01\x015\x11a\x0C/W`\xA0Q`\x80Qa\t\xBD\x916\x91\x01\x84\x01`D\x81\x015\x01`$\x01a\x1F9V[` \x84\x01R`d\x82`\xA0Q`\x80Q\x01\x01\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC\x82\x85`\xA0Q`\x80Q\x01\x01\x016\x03\x01\x12a\rhWa\n\x1Ca\x13zV[\x90`$\x81\x85`\xA0Q`\x80Q\x01\x01\x01\x015\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x0C/W6`C\x83\x83\x88`\xA0Q`\x80Q\x01\x01\x01\x01\x01\x12\x15a\rmW`$\x82\x82\x87`\xA0Q`\x80Q\x01\x01\x01\x01\x015a\npa\x05\xF0\x82a\x18\xD9V[\x92` \x84\x83\x81R\x01\x926`D\x84`\x05\x1B\x84\x84\x8C`\xA0Q`\x80Q\x01\x01\x01\x01\x01\x01\x11a\rrW`D\x82\x82\x8A`\xA0Q`\x80Q\x01\x01\x01\x01\x01\x93[`D\x84`\x05\x1B\x84\x84\x8C`\xA0Q`\x80Q\x01\x01\x01\x01\x01\x01\x85\x10a\rwWPPPPP\x81R`@\x84\x01R`\x84\x82`\xA0Q`\x80Q\x01\x01\x015\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x0C/W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC\x83\x85`\xA0Q`\x80Q\x01\x01\x016\x03\x01\x12a\rhWa\x0B(a\x13\x1AV[\x93`$\x83\x85`\xA0Q`\x80Q\x01\x01\x01\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/W6`C\x82\x86\x88`\xA0Q`\x80Q\x01\x01\x01\x01\x01\x12\x15a\rmW`$\x81\x85\x87`\xA0Q`\x80Q\x01\x01\x01\x01\x015\x90a\x0B|a\x05\xF0\x83a\x18\xD9V[\x91` \x83\x82\x81R\x01\x916`D\x83`\x05\x1B\x83\x8A\x8C`\xA0Q`\x80Q\x01\x01\x01\x01\x01\x01\x11a\rrW`D\x81\x88\x8A`\xA0Q`\x80Q\x01\x01\x01\x01\x01\x92[`D\x83`\x05\x1B\x83\x8A\x8C`\xA0Q`\x80Q\x01\x01\x01\x01\x01\x01\x84\x10a\x0C4WPPPP\x85Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`D\x84\x86`\xA0Q`\x80Q\x01\x01\x01\x015\x11a\x0C/W`\xA0Q`\x80Q`$\x96` \x96\x87\x96\x91\x93a\x0C\x19\x936\x93\x91\x01\x90\x91\x01\x01`D\x81\x015\x01\x88\x01a\x1D\xC6V[\x84\x82\x01R``\x82\x01R\x81R\x01\x93\x01\x92\x90Pa\x08\xE5V[a\x13\xDEV[\x835g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\rmW\x82\x89\x8B`\xA0Q`\x80Q\x01\x01\x01\x01\x01\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xBC\x90`@\x82\x846\x03\x01\x12a\rhWa\x0C\x8Aa\x13\x1AV[\x92`D\x81\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\x0C\xAF\x90`D6\x91\x84\x01\x01a\x1F\xA2V[\x84R`d\x81\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/W``\x91\x01\x92\x836\x03\x01\x12a\rhWa\x0C\xDBa\x12\xFAV[\x92`D\x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\r\0\x90`D6\x91\x86\x01\x01a\x14\xE6V[\x84R`d\x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\r&\x90`D6\x91\x86\x01\x01a\x1F\xA2V[` \x85\x01R`\x84\x83\x015\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x85\x11a\x0C/Wa\rT` \x95\x94`D\x87\x966\x92\x01\x01a\x1F\xA2V[`@\x82\x01R\x83\x82\x01R\x81R\x01\x93\x01\x92a\x0B\xB2V[a\x12'V[a\x14bV[a\x18\xF1V[\x845g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\rmW\x83\x83\x8B`\xA0Q`\x80Q\x01\x01\x01\x01\x01`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xBC\x826\x03\x01\x12a\rhWa\r\xCAa\x13\x1AV[\x91`D\x82\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\r\xEF\x90`D6\x91\x85\x01\x01a\x1E\xB3V[\x83R`d\x82\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\x0C/Wa\x0E\x1A` \x94\x93`D\x86\x956\x92\x01\x01a\x1F9V[\x83\x82\x01R\x81R\x01\x94\x01\x93a\n\xA6V[a\x11\xA3V[\x835\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\rmW` \x80\x91a\x0EZ`$\x94\x856\x91\x88a\x01\xA45\x01\x01\x01a\x14\xE6V[\x81R\x01\x94\x01\x93\x90Pa\x06\xAEV[\x825g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\rmW`\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC\x82\x85a\x01\xA45\x01\x016\x03\x01\x12a\rhWa\x0E\xB3a\x13ZV[\x91`$\x82\x85a\x01\xA45\x01\x01\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\x0E\xE6\x90`$6\x91\x85\x88a\x01\xA45\x01\x01\x01\x01a\x1BJV[\x83R`D\x82\x85a\x01\xA45\x01\x01\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\x0C/W`\xC0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC\x85\x85\x88a\x01\xA45\x01\x01\x016\x03\x01\x12a\rhWa\x0FAa\x12\xABV[\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$\x82\x86\x89a\x01\xA45\x01\x01\x01\x015\x11a\x0C/Wa\x0Fy6`$a\x01\xA45\x89\x01\x87\x01\x84\x01\x81\x81\x015\x01\x01a\x1B\xCBV[\x85Ra\x0F\x90`D\x82\x86\x89a\x01\xA45\x01\x01\x01\x01a\x18\xCBV[` \x86\x01Ra\x0F\xAA`d\x82\x86\x89a\x01\xA45\x01\x01\x01\x01a\x18\xCBV[`@\x86\x01Ra\x0F\xC4`\x84\x82\x86\x89a\x01\xA45\x01\x01\x01\x01a\x18\xCBV[``\x86\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xA4\x82\x86\x89a\x01\xA45\x01\x01\x01\x015\x11a\x0C/W`\xC4\x90a\x10\x046a\x01\xA45\x89\x01\x87\x01\x83\x01`\xA4\x81\x015\x01`$\x01a\x14\xE6V[`\x80\x87\x01R\x84\x87a\x01\xA45\x01\x01\x01\x015\x93`\x07\x85\x10\x15a\x10hW`\x84` \x95\x94\x82\x87\x96`\xA0a\x10X\x95\x01R\x86\x85\x01Ra\x10F`d\x82\x8Aa\x01\xA45\x01\x01\x01a\x18\xCBV[`@\x85\x01R\x87a\x01\xA45\x01\x01\x01a\x18\xCBV[``\x82\x01R\x81R\x01\x92\x01\x91a\x06'V[\x89\x80\xFD[`$\x82\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`A`\x04R\xFD[\x82\x80\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FABI decoding: tuple data too sho`D\x82\x01R\x7Frt\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x80\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x84\x92R` `\x04\x82\x01R`\"`$\x82\x01R\x7FEther sent to non-payable functi`D\x82\x01R\x7Fon\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FABI decoding: invalid tuple offs`D\x82\x01R\x7Fet\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`#`$\x82\x01R\x7FABI decoding: struct data too sh`D\x82\x01R\x7Fort\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`@Q\x90`\xC0\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x12\xCBW`@RV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`A`\x04R`$`\0\xFD[`@Q\x90``\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x12\xCBW`@RV[`@Q\x90`@\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x12\xCBW`@RV[`@Q\x90`\xA0\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x12\xCBW`@RV[`@Q\x90`\x80\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x12\xCBW`@RV[`@Q\x90` \x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x12\xCBW`@RV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F`@Q\x93\x01\x16\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x12\xCBW`@RV[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`#`$\x82\x01R\x7FABI decoding: invalid struct off`D\x82\x01R\x7Fset\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`+`$\x82\x01R\x7FABI decoding: invalid calldata a`D\x82\x01R\x7Frray offset\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x81`\x1F\x82\x01\x12\x15a\rmW\x805` \x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x12\xCBWa\x155\x83\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x85\x01\x16\x01a\x13\x9AV[\x93\x82\x85R\x83\x83\x83\x01\x01\x11a\x15VW\x90\x80\x83`\0\x94\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[`\x84\x83`@Q\x90\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R`\x04\x82\x01R`'`$\x82\x01R\x7FABI decoding: invalid byte array`D\x82\x01R\x7F length\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x15\xEFWV[`\0\x80\xFD[\x91\x90\x82`@\x91\x03\x12a\rhWa\x16\x1F` a\x16\ra\x13\x1AV[\x93a\x16\x17\x81a\x15\xDAV[\x85R\x01a\x15\xDAV[` \x83\x01RV[\x91\x90\x91` \x81\x84\x03\x12a\rhWa\x16;a\x13zV[\x92\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\x16W\x92\x01a\x14\xE6V[\x82RV[5\x90\x81`\x07\x0B\x82\x03a\x15\xEFWV[\x91\x90\x82`@\x91\x03\x12a\rhWa\x16\x1F` a\x16\x82a\x13\x1AV[\x93a\x16\x8C\x81a\x16[V[\x85R\x01a\x16[V[\x91\x90\x91`@\x81\x84\x03\x12a\rhWa\x16\xA9a\x13\x1AV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x805\x83\x81\x11a\x0C/W\x82a\x16\xC9\x91\x83\x01a\x14\xE6V[\x85R` \x81\x015\x90\x83\x82\x11a\x0C/W\x01\x90`@\x82\x82\x03\x12a\rhWa\x16\xECa\x13\x1AV[\x92\x825c\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x15\xEFW\x84R` \x83\x015\x90\x81\x11a\x0C/Wa\x17\x14\x92\x01a\x14\xE6V[` \x82\x01R` \x83\x01RV[\x91\x90\x91a\x02\0\x81\x84\x03\x12a\rhW`@Q\x90a\x01\xC0\x90\x81\x83\x01\x94g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x95\x84\x81\x10\x87\x82\x11\x17a\x12\xCBW`@R\x83\x95a\x17^\x82\x84a\x15\xF4V[\x85R`@\x83\x015\x81\x81\x11a\x0C/W\x82a\x17x\x91\x85\x01a\x14\xE6V[` \x86\x01Ra\x17\x89``\x84\x01a\x16[V[`@\x86\x01Ra\x17\x9B\x82`\x80\x85\x01a\x16iV[``\x86\x01R`\xC0\x83\x015\x81\x81\x11a\x0C/W\x82a\x17\xB8\x91\x85\x01a\x16\x94V[`\x80\x86\x01R`\xE0\x83\x015\x81\x81\x11a\x0C/W\x82a\x17\xD5\x91\x85\x01a\x14\xE6V[`\xA0\x86\x01Ra\x01\0\x80\x84\x015\x82\x81\x11a\x0C/W\x83a\x17\xF4\x91\x86\x01a\x14\xE6V[`\xC0\x87\x01Ra\x01 \x94\x85\x85\x015\x83\x81\x11a\x0C/W\x84a\x18\x14\x91\x87\x01a\x14\xE6V[`\xE0\x88\x01Ra\x01@\x91\x82\x86\x015\x84\x81\x11a\x0C/W\x85a\x184\x91\x88\x01a\x14\xE6V[\x90\x88\x01Ra\x01`\x95\x86\x86\x015\x84\x81\x11a\x0C/W\x85a\x18S\x91\x88\x01a\x14\xE6V[\x90\x88\x01Ra\x01\x80\x91\x82\x86\x015\x84\x81\x11a\x0C/W\x85a\x18r\x91\x88\x01a\x14\xE6V[\x90\x88\x01Ra\x01\xA0\x95\x86\x86\x015\x84\x81\x11a\x0C/W\x85a\x18\x91\x91\x88\x01a\x14\xE6V[\x90\x88\x01R\x84\x015\x82\x81\x11a\x0C/W\x83a\x18\xAB\x91\x86\x01a\x14\xE6V[\x90\x86\x01Ra\x01\xE0\x83\x015\x90\x81\x11a\x0C/Wa\x18\xC6\x92\x01a\x14\xE6V[\x91\x01RV[5\x90\x81`\x03\x0B\x82\x03a\x15\xEFWV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x12\xCBW`\x05\x1B` \x01\x90V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`+`$\x82\x01R\x7FABI decoding: invalid calldata a`D\x82\x01R\x7Frray stride\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x91\x90`\x80\x83\x82\x03\x12a\rhWa\x19\x89a\x13ZV[\x92a\x19\x93\x81a\x16[V[\x84R` a\x19\xA2\x81\x83\x01a\x18\xCBV[\x81\x86\x01R`@\x80\x83\x015\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94\x85\x81\x11a\x0C/W\x81a\x19\xCA\x91\x86\x01a\x16\x94V[\x82\x88\x01R``\x93\x84\x81\x015\x90\x86\x82\x11a\x0C/W\x01\x91\x81`\x1F\x84\x01\x12\x15a\rmW\x825\x90a\x19\xF9a\x05\xF0\x83a\x18\xD9V[\x96\x85\x80\x89\x85\x81R\x01\x93`\x05\x1B\x86\x01\x01\x94\x84\x86\x11a\rrW\x86\x81\x01\x93[\x86\x85\x10a\x1A)WPPPPPPPP\x83\x01RV[\x845\x83\x81\x11a\rmW\x82\x01\x90`\xA0\x90\x81\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x84\x8A\x03\x01\x12a\rhWa\x1Aka\x13ZV[\x91\x8A\x84\x015`\x04\x81\x10\x15a\x15\xEFW\x83R\x86\x84\x015\x86\x81\x11a\x0C/W\x89\x8Ca\x1A\x94\x92\x87\x01\x01a\x14\xE6V[\x8B\x84\x01Ra\x1A\xA4\x89\x8D\x86\x01a\x16iV[\x87\x84\x01R\x83\x015\x91\x85\x83\x11a\x0C/Wa\x1A\xC4\x89\x8C\x80\x96\x95\x81\x96\x01\x01a\x14\xE6V[\x8C\x82\x01R\x81R\x01\x94\x01\x93a\x1A\x15V[\x91\x90\x91`@\x81\x84\x03\x12a\rhWa\x1A\xE8a\x13\x1AV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x825\x81\x81\x11a\x0C/W\x82a\x1B\x07\x91\x85\x01a\x17 V[\x85R` \x83\x015\x90\x81\x11a\x0C/Wa\x16\x1F\x92\x01a\x19uV[\x91\x90\x82`@\x91\x03\x12a\rhWa\x16\x1F` a\x1B8a\x13\x1AV[\x93a\x1BB\x81a\x16[V[\x85R\x01a\x18\xCBV[\x91\x90\x91`\xA0\x81\x84\x03\x12a\rhWa\x1B_a\x13:V[\x92\x815`\x07\x81\x10\x15a\x15\xEFW\x84R` \x82\x015`\x07\x81\x10\x15a\x15\xEFW` \x85\x01R`@\x82\x015`\x07\x81\x10\x15a\x15\xEFW`@\x85\x01R``\x82\x015`\t\x81\x10\x15a\x15\xEFW``\x85\x01R`\x80\x82\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\x1B\xC4\x92\x01a\x14\xE6V[`\x80\x83\x01RV[\x90\x80`\x1F\x83\x01\x12\x15a\rmW` \x90\x825a\x1B\xE8a\x05\xF0\x82a\x18\xD9V[\x93\x83\x80\x86\x84\x81R\x01\x92`\x05\x1B\x82\x01\x01\x92\x83\x11a\rrW\x83\x01\x90[\x82\x82\x10a\x1C\x10WPPPP\x90V[\x83\x80\x91a\x1C\x1C\x84a\x18\xCBV[\x81R\x01\x91\x01\x90a\x1C\x02V[5\x90\x81\x15\x15\x82\x03a\x15\xEFWV[\x91\x90`\x80\x83\x82\x03\x12a\rhWa\x1CHa\x13ZV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x805\x82\x81\x11a\x0C/W\x83a\x1Ch\x91\x83\x01a\x14\xE6V[\x85R` \x81\x015\x82\x81\x11a\x0C/W\x81\x01``\x81\x85\x03\x12a\rhWa\x1C\x8Aa\x12\xFAV[\x90\x805\x84\x81\x11a\x0C/W\x85a\x1C\xA0\x91\x83\x01a\x14\xE6V[\x82R` \x81\x015\x84\x81\x11a\x0C/W\x85a\x1C\xBA\x91\x83\x01a\x14\xE6V[` \x83\x01R`@\x81\x015\x93\x84\x11a\x0C/Wa\x1C\xFD\x94``\x94a\x1C\xDC\x92\x01a\x14\xE6V[`@\x82\x01R` \x86\x01Ra\x1C\xF2`@\x82\x01a\x16[V[`@\x86\x01R\x01a\x16[V[``\x83\x01RV[\x91\x90\x91``\x81\x84\x03\x12a\rhWa\x1D\x19a\x12\xFAV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x805\x83\x81\x11a\x0C/W\x81\x01\x82`\x1F\x82\x01\x12\x15a\rmW` \x90\x805a\x1DKa\x05\xF0\x82a\x18\xD9V[\x91\x83\x80\x84\x84\x81R\x01\x92`\x05\x1B\x82\x01\x01\x91\x86\x83\x11a\rrW\x84\x82\x01\x90[\x83\x82\x10a\x1D\xA1WPPPP\x86R\x80\x82\x015\x93\x84\x11a\x0C/Wa\x1D\x90`@\x93a\x1D\x9A\x95\x84\x01a\x1C4V[\x90\x86\x01R\x01a\x16[V[`@\x83\x01RV[\x815\x89\x81\x11a\rmW\x86\x91a\x1D\xBB\x8A\x84\x80\x94\x88\x01\x01a\x1C4V[\x81R\x01\x91\x01\x90a\x1DgV[\x81`\x1F\x82\x01\x12\x15a\rmW\x805\x91` \x91a\x1D\xE3a\x05\xF0\x85a\x18\xD9V[\x93\x83\x80\x86\x83\x81R\x01\x91`\x05\x1B\x83\x01\x01\x92\x80\x84\x11a\rrW\x84\x83\x01\x91[\x84\x83\x10a\x1E\x0FWPPPPPP\x90V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x835\x81\x81\x11a\rmW\x85\x01\x91``\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x85\x87\x03\x01\x12a\rhWa\x1EYa\x12\xFAV[\x90\x89\x85\x015`\x07\x81\x10\x15a\x15\xEFW\x82R`@\x90\x81\x86\x015\x85\x81\x11a\x0C/W\x87\x8Ca\x1E\x85\x92\x89\x01\x01a\x14\xE6V[\x8B\x84\x01R\x85\x015\x93\x84\x11a\x0C/Wa\x1E\xA4\x86\x8B\x80\x97\x96\x81\x97\x01\x01a\x14\xE6V[\x90\x82\x01R\x81R\x01\x92\x01\x91a\x1D\xFFV[\x91\x90\x91`\x80\x81\x84\x03\x12a\rhWa\x1E\xC8a\x13ZV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x825\x81\x81\x11a\x0C/W\x82a\x1E\xE7\x91\x85\x01a\x14\xE6V[\x85R` \x83\x015\x81\x81\x11a\x0C/W\x82a\x1F\x01\x91\x85\x01a\x14\xE6V[` \x86\x01R`@\x83\x015\x81\x81\x11a\x0C/W\x82a\x1F\x1E\x91\x85\x01a\x1BJV[`@\x86\x01R``\x83\x015\x90\x81\x11a\x0C/Wa\x1C\xFD\x92\x01a\x1D\xC6V[\x91\x90\x91``\x81\x84\x03\x12a\rhWa\x1FNa\x12\xFAV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x825\x81\x81\x11a\x0C/W\x82a\x1Fm\x91\x85\x01a\x14\xE6V[\x85R` \x83\x015\x81\x81\x11a\x0C/W\x82a\x1F\x87\x91\x85\x01a\x1E\xB3V[` \x86\x01R`@\x83\x015\x90\x81\x11a\x0C/Wa\x1D\x9A\x92\x01a\x1E\xB3V[\x91\x90\x91`\x80\x81\x84\x03\x12a\rhWa\x1F\xB7a\x13ZV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x825\x81\x81\x11a\x0C/W\x82a\x1F\xD6\x91\x85\x01a\x14\xE6V[\x85R` \x83\x015\x81\x81\x11a\x0C/W\x82a\x1F\xF0\x91\x85\x01a\x14\xE6V[` \x86\x01R`@\x83\x015\x81\x81\x11a\x0C/W\x82a \r\x91\x85\x01a\x1BJV[`@\x86\x01R``\x83\x015\x90\x81\x11a\x0C/Wa\x1C\xFD\x92\x01a\x1B\xCBV\xFE\xA2dipfsX\"\x12 \xA9\xB3\x0F\xCA\x99/\xC0\xC9\x96\x94\xEA\x01y\xB4\xFD\x7F&n\x19\x0F\0\xAE\x7FKa\x88X\xA5\n,\xDDRdsolcC\0\x08\x15\x003"; + const __BYTECODE: &[u8] = b"`\x80\x80`@R4a\0\x16Wa\x1B\xF6\x90\x81a\0\x1C\x829\xF3[`\0\x80\xFD\xFE`\xA0`@R`\x046\x10\x15a\0\x12W`\0\x80\xFD[`\x005`\xE0\x1Cc\xE4\x18\xDCO\x14a\0'W`\0\x80\xFD[4a\x0C\x19Wa\x02 \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x0C\x19W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\x01\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x826\x03\x01\x12a\x0C\x19Wa\0\x9Ea\x10{V[\x90\x80`\x04\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W`\xA0\x91a\0\xC9a\x01\x1A\x92`\x046\x91\x84\x01\x01a\x11\x7FV[\x84Ra\0\xD7`$\x82\x01a\x11\xF0V[` \x85\x01Ra\0\xE8`D\x82\x01a\x11\xF0V[`@\x85\x01Ra\0\xF9`d\x82\x01a\x11\xF0V[``\x85\x01Ra\x01\x0B6`\x84\x83\x01a\x12\x05V[`\x80\x85\x01R`\xC46\x91\x01a\x12\x05V[\x91\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$5\x11a\x0C\x19W``\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC`$56\x03\x01\x12a\x0C\x19Wa\x01da\x10\x9BV[a\x01r`$5`\x04\x01a\x11\xF0V[\x81Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$\x805\x015\x11a\x0C\x19Wa\x01\x9E6`\x04`$\x805\x015`$5\x01\x01a\x127V[` \x82\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`D`$5\x015\x11a\x0C\x19W`@a\x01\xCF6`$5`D\x81\x015\x01`\x04\x01a\x11\x7FV[\x91\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`D5\x11a\x0C\x19W`\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC`D56\x03\x01\x12a\x0C\x19Wa\x02\x19a\x10\x9BV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`D5`\x04\x015\x11a\x0C\x19Wa\x02D6`\x04`D5\x81\x015`D5\x01\x01a\x16iV[\x81Ra\x02U6`$`D5\x01a\x12\x05V[` \x82\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`d`D5\x015\x11a\x0C\x19W`@a\x02\x866`D5`d\x81\x015\x01`\x04\x01a\x11\x7FV[\x91\x01R`d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\x02\xA9\x906\x90`\x04\x01a\x131V[P`\x845g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\x02\xCA\x906\x90`\x04\x01a\x15\x02V[P`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\\6\x01\x12a\x0C\x19Wa\x02\xFDa\x10\xBBV[`\xA45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x0C\x19W\x81Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xC45\x16`\xC45\x03a\x0C\x19W` `\xC45\x91\x01R``\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x1C6\x01\x12a\x0C\x19Wa\x03ba\x10\x9BV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xE45\x16`\xE45\x03a\x0C\x19W`\xE45\x81Ra\x01\x045` \x82\x01R`@a\x01$5\x91\x01R`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFE\xBC6\x01\x12a\x0C\x19Wa\x03\xC0a\x10\xBBV[a\x01D5\x81R` a\x01d5\x91\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\x845\x11a\x0C\x19W`\xA0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFCa\x01\x8456\x03\x01\x12a\x0C\x19Wa\x04\x18a\x10\xDBV[`\x04a\x01\x845\x81\x015\x10\x15a\x0C\x19Wa\x01\x845`\x04\x015\x81Ra\x04@`$a\x01\x845\x01a\x12lV[` \x82\x01Ra\x04T`Da\x01\x845\x01a\x12lV[`@\x82\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`da\x01\x845\x015\x11a\x0C\x19Wa\x04\x856a\x01\x845`d\x81\x015\x01`\x04\x01a\x12\xA5V[``\x82\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x84a\x01\x845\x015\x11a\x0C\x19W`\x80a\x04\xB86a\x01\x845`\x84\x81\x015\x01`\x04\x01a\x11\x7FV[\x91\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xA45\x11a\x0C\x19Wa\x02 \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFCa\x01\xA456\x03\x01\x12a\x0C\x19W`@Q\x80a\x01`\x81\x01\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01`\x83\x01\x11\x17a\x10LWa\x01`\x81\x01`@Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xA45`\x04\x015\x11a\x0C\x19Wa\x05Q6`\x04a\x01\xA45\x81\x015a\x01\xA45\x01\x01a\x11\x7FV[\x81Ra\x05c6`$a\x01\xA45\x01a\x12\x05V[` \x82\x01Ra\x05x6`da\x01\xA45\x01a\x16\xB5V[`@\x82\x01Ra\x05\x8D6`\xA4a\x01\xA45\x01a\x16\xB5V[``\x82\x01Ra\x05\xA26`\xE4a\x01\xA45\x01a\x16\xB5V[`\x80\x82\x01Ra\x05\xB86a\x01$a\x01\xA45\x01a\x12\x05V[`\xA0\x82\x01Ra\x05\xCE6a\x01da\x01\xA45\x01a\x12\x05V[`\xC0\x82\x01Ra\x01\xA4\x805\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W6`#\x82a\x01\xA45\x01\x01\x12\x15a\x0C\x19W`\x04\x81a\x01\xA45\x01\x015\x90a\x06\x15a\x06\x10\x83a\x14\xEAV[a\x11;V[\x91` \x83\x82\x81R\x01\x916`$\x83`\x05\x1B\x83a\x01\xA45\x01\x01\x01\x11a\x0C\x19W`$\x81a\x01\xA45\x01\x01\x92[`$\x83`\x05\x1B\x83a\x01\xA45\x01\x01\x01\x84\x10a\x0E1W\x85\x85`\xE0\x82\x01Ra\x01\xC4a\x01\xA45\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W6`#\x82a\x01\xA45\x01\x01\x12\x15a\x0C\x19W`\x04\x81a\x01\xA45\x01\x015\x90a\x06\x97a\x06\x10\x83a\x14\xEAV[\x91` \x83\x82\x81R\x01\x916`$\x83`\x05\x1B\x83a\x01\xA45\x01\x01\x01\x11a\x0C\x19W`$\x81a\x01\xA45\x01\x01\x92[`$\x83`\x05\x1B\x83a\x01\xA45\x01\x01\x01\x84\x10a\r\xF8W\x85\x85a\x01\0\x82\x01Ra\x06\xEBa\x01\xE4a\x01\xA45\x01a\x17\xBFV[a\x01 \x82\x01Ra\x01@a\x07\x04a\x02\x04a\x01\xA45\x01a\x17\xBFV[\x91\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xC45\x11a\x0C\x19W`\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFCa\x01\xC456\x03\x01\x12a\x0C\x19Wa\x07Pa\x10\x9BV[a\x07`6a\x01\xC45`\x04\x01a\x12zV[\x81R`Da\x01\xC45\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\x07\x8C\x90`\x046\x91a\x01\xC45\x01\x01a\x127V[` \x82\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`da\x01\xC45\x015\x11a\x0C\x19W`@a\x07\xBF6a\x01\xC45`d\x81\x015\x01`\x04\x01a\x11\x7FV[\x91\x01Ra\x01\xE45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W`\xA0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x826\x03\x01\x12a\x0C\x19Wa\x08\ta\x10\xFBV[\x90\x80`\x04\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\x08.\x90`\x046\x91\x84\x01\x01a\x16iV[\x82R`$\x81\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\x08T\x90`\x046\x91\x84\x01\x01a\x18\x9CV[` \x83\x01Ra\x08f6`D\x83\x01a\x12\x05V[`@\x83\x01R`\x84\x81\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W``\x91`\x04a\x08\x91\x926\x92\x01\x01a\x18\x9CV[\x91\x01Ra\x02\x045`\x80Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x80Q\x11a\x0C\x19W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC`\x80Q6\x03\x01\x12a\x0C\x19Wa\x08\xE2a\x11\x1BV[P`\x80Q`\x04\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W6`#\x82`\x80Q\x01\x01\x12\x15a\x0C\x19W`\x04\x81`\x80Q\x01\x015` a\t\x1Fa\x06\x10\x83a\x14\xEAV[\x82\x81R\x01\x916`$\x83`\x05\x1B\x83`\x80Q\x01\x01\x01\x11a\x0C\x19W`$\x81`\x80Q\x01\x01\x92[`$\x83`\x05\x1B\x83`\x80Q\x01\x01\x01\x84\x10a\tVW\0[\x835g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W`\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC\x82\x85\x83Q\x01\x016\x03\x01\x12a\x0C\x19Wa\t\xA0a\x10\xFBV[\x91`$\x82\x85`\x80Q\x01\x01\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\t\xD1\x90`$6\x91\x85\x88`\x80Q\x01\x01\x01\x01a\x1AKV[\x83R`D\x82\x85`\x80Q\x01\x01\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\n\x03\x90`$6\x91\x85\x88`\x80Q\x01\x01\x01\x01a\x1A\xD1V[` \x84\x01R`d\x82\x85`\x80Q\x01\x01\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W\x82\x85`\x80Q\x01\x01\x01` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC\x826\x03\x01\x12a\x0C\x19Wa\n^a\x11\x1BV[\x90`$\x81\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W6`C\x82\x84\x01\x01\x12\x15a\x0C\x19W`$\x81\x83\x01\x015a\n\x93a\x06\x10\x82a\x14\xEAV[\x92` \x84\x83\x81R\x01\x926`D\x84`\x05\x1B\x83\x85\x01\x01\x01\x11a\x0C\x19W`D\x81\x83\x01\x01\x93[`D\x84`\x05\x1B\x83\x85\x01\x01\x01\x85\x10a\rPWPPPPP\x81R`@\x84\x01R`\x84\x82\x85`\x80Q\x01\x01\x015\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x0C\x19W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC\x83\x85\x88`\x80Q\x01\x01\x016\x03\x01\x12a\x0C\x19Wa\x0B)a\x10\xBBV[\x93`$\x83\x85\x88`\x80Q\x01\x01\x01\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W6`C\x82\x86\x88\x8B`\x80Q\x01\x01\x01\x01\x01\x12\x15a\x0C\x19W`$\x81\x85\x87\x8A`\x80Q\x01\x01\x01\x01\x015\x90a\x0Bwa\x06\x10\x83a\x14\xEAV[\x91` \x83\x82\x81R\x01\x916`D\x8B\x83\x8A\x8C\x87`\x05\x1B\x93`\x80Q\x01\x01\x01\x01\x01\x01\x11a\x0C\x19W`D\x81\x88\x8A\x8D`\x80Q\x01\x01\x01\x01\x01\x92[`D\x8B\x83\x8A\x8C\x87`\x05\x1B\x93`\x80Q\x01\x01\x01\x01\x01\x01\x84\x10a\x0C\x1EWPPPP\x85R`D\x83\x85\x88`\x80Q\x01\x01\x01\x015\x94g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x86\x11a\x0C\x19Wa\x0C\x03` \x95`$\x80\x98\x88\x976\x93\x8C`\x80Q\x01\x01\x01\x01\x01a\x19^V[\x84\x82\x01R``\x82\x01R\x81R\x01\x94\x01\x93\x90Pa\tAV[`\0\x80\xFD[\x835g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W\x82\x89\x8B\x8E`\x80Q\x01\x01\x01\x01\x01\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xBC\x90`@\x82\x846\x03\x01\x12a\x0C\x19Wa\x0Cra\x10\xBBV[\x92`D\x81\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\x0C\x97\x90`D6\x91\x84\x01\x01a\x1B:V[\x84R`d\x81\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W``\x91\x01\x92\x836\x03\x01\x12a\x0C\x19Wa\x0C\xC3a\x10\x9BV[\x92`D\x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\x0C\xE8\x90`D6\x91\x86\x01\x01a\x11\x7FV[\x84R`d\x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\r\x0E\x90`D6\x91\x86\x01\x01a\x1B:V[` \x85\x01R`\x84\x83\x015\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x85\x11a\x0C\x19Wa\r<` \x95\x94`D\x87\x966\x92\x01\x01a\x1B:V[`@\x82\x01R\x83\x82\x01R\x81R\x01\x93\x01\x92a\x0B\xAAV[\x845g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W\x82\x84\x01\x01`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xBC\x826\x03\x01\x12a\x0C\x19Wa\r\x99a\x10\xBBV[\x91`D\x82\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\r\xBE\x90`D6\x91\x85\x01\x01a\x1AKV[\x83R`d\x82\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\x0C\x19Wa\r\xE9` \x94\x93`D\x86\x956\x92\x01\x01a\x1A\xD1V[\x83\x82\x01R\x81R\x01\x94\x01\x93a\n\xB5V[\x835\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x0C\x19W` \x80\x91a\x0E$`$\x94\x856\x91\x88a\x01\xA45\x01\x01\x01a\x11\x7FV[\x81R\x01\x94\x01\x93\x90Pa\x06\xBFV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x845\x11a\x0C\x19W`\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC\x855\x84a\x01\xA45\x01\x016\x03\x01\x12a\x0C\x19Wa\x0E}a\x10\xFBV[\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$\x865\x85a\x01\xA45\x01\x01\x015\x11a\x0C\x19Wa\x0E\xB36`$\x875a\x01\xA45\x87\x01\x01\x81\x81\x015\x01\x01a\x16\xE0V[\x82R`D\x855\x84a\x01\xA45\x01\x01\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W`\xC0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC\x82\x885\x87a\x01\xA45\x01\x01\x016\x03\x01\x12a\x0C\x19Wa\x0F\x0Fa\x10{V[\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$\x83\x895\x88a\x01\xA45\x01\x01\x01\x015\x11a\x0C\x19Wa\x0FI6`$\x895a\x01\xA45\x89\x01\x01\x85\x01\x81\x81\x015\x01\x01a\x17aV[\x83Ra\x0Fa`D\x83\x895\x88a\x01\xA45\x01\x01\x01\x01a\x14\xDCV[` \x84\x01Ra\x0F|`d\x83\x895\x88a\x01\xA45\x01\x01\x01\x01a\x14\xDCV[`@\x84\x01Ra\x0F\x97`\x84\x83\x895\x88a\x01\xA45\x01\x01\x01\x01a\x14\xDCV[``\x84\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xA4\x83\x895\x88a\x01\xA45\x01\x01\x01\x015\x11a\x0C\x19Wa\x0F\xD66a\x01\xA45\x87\x01\x895\x01\x84\x01`\xA4\x81\x015\x01`$\x01a\x11\x7FV[`\x80\x84\x01R`\x07`\xC4\x83\x895\x88a\x01\xA45\x01\x01\x01\x015\x10\x15a\x0C\x19Wa\x01\xA45\x85\x01\x875\x01\x91\x82\x01`\xC4\x015`\xA0\x84\x01R` \x80\x85\x01\x93\x90\x93R`$\x93\x83\x92a\x10!\x90`d\x01a\x14\xDCV[`@\x82\x01Ra\x10:`\x84\x895\x88a\x01\xA45\x01\x01\x01a\x14\xDCV[``\x82\x01R\x81R\x01\x94\x01\x93\x90Pa\x06=V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`A`\x04R`$`\0\xFD[`@Q\x90`\xC0\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x10LW`@RV[`@Q\x90``\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x10LW`@RV[`@Q\x90`@\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x10LW`@RV[`@Q\x90`\xA0\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x10LW`@RV[`@Q\x90`\x80\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x10LW`@RV[`@Q\x90` \x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x10LW`@RV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F`@Q\x93\x01\x16\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x10LW`@RV[\x81`\x1F\x82\x01\x12\x15a\x0C\x19W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x10LWa\x11\xCD` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x85\x01\x16\x01a\x11;V[\x92\x82\x84R` \x83\x83\x01\x01\x11a\x0C\x19W\x81`\0\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x0C\x19WV[\x91\x90\x82`@\x91\x03\x12a\x0C\x19Wa\x120` a\x12\x1Ea\x10\xBBV[\x93a\x12(\x81a\x11\xF0V[\x85R\x01a\x11\xF0V[` \x83\x01RV[\x91\x90\x91` \x81\x84\x03\x12a\x0C\x19Wa\x12La\x11\x1BV[\x92\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\x12h\x92\x01a\x11\x7FV[\x82RV[5\x90\x81`\x07\x0B\x82\x03a\x0C\x19WV[\x91\x90\x82`@\x91\x03\x12a\x0C\x19Wa\x120` a\x12\x93a\x10\xBBV[\x93a\x12\x9D\x81a\x12lV[\x85R\x01a\x12lV[\x91\x90\x91`@\x81\x84\x03\x12a\x0C\x19Wa\x12\xBAa\x10\xBBV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x805\x83\x81\x11a\x0C\x19W\x82a\x12\xDA\x91\x83\x01a\x11\x7FV[\x85R` \x81\x015\x90\x83\x82\x11a\x0C\x19W\x01\x90`@\x82\x82\x03\x12a\x0C\x19Wa\x12\xFDa\x10\xBBV[\x92\x825c\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x0C\x19W\x84R` \x83\x015\x90\x81\x11a\x0C\x19Wa\x13%\x92\x01a\x11\x7FV[` \x82\x01R` \x83\x01RV[\x91\x90\x91a\x02\0\x81\x84\x03\x12a\x0C\x19W`@Q\x90a\x01\xC0\x90\x81\x83\x01\x94g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x95\x84\x81\x10\x87\x82\x11\x17a\x10LW`@R\x83\x95a\x13o\x82\x84a\x12\x05V[\x85R`@\x83\x015\x81\x81\x11a\x0C\x19W\x82a\x13\x89\x91\x85\x01a\x11\x7FV[` \x86\x01Ra\x13\x9A``\x84\x01a\x12lV[`@\x86\x01Ra\x13\xAC\x82`\x80\x85\x01a\x12zV[``\x86\x01R`\xC0\x83\x015\x81\x81\x11a\x0C\x19W\x82a\x13\xC9\x91\x85\x01a\x12\xA5V[`\x80\x86\x01R`\xE0\x83\x015\x81\x81\x11a\x0C\x19W\x82a\x13\xE6\x91\x85\x01a\x11\x7FV[`\xA0\x86\x01Ra\x01\0\x80\x84\x015\x82\x81\x11a\x0C\x19W\x83a\x14\x05\x91\x86\x01a\x11\x7FV[`\xC0\x87\x01Ra\x01 \x94\x85\x85\x015\x83\x81\x11a\x0C\x19W\x84a\x14%\x91\x87\x01a\x11\x7FV[`\xE0\x88\x01Ra\x01@\x91\x82\x86\x015\x84\x81\x11a\x0C\x19W\x85a\x14E\x91\x88\x01a\x11\x7FV[\x90\x88\x01Ra\x01`\x95\x86\x86\x015\x84\x81\x11a\x0C\x19W\x85a\x14d\x91\x88\x01a\x11\x7FV[\x90\x88\x01Ra\x01\x80\x91\x82\x86\x015\x84\x81\x11a\x0C\x19W\x85a\x14\x83\x91\x88\x01a\x11\x7FV[\x90\x88\x01Ra\x01\xA0\x95\x86\x86\x015\x84\x81\x11a\x0C\x19W\x85a\x14\xA2\x91\x88\x01a\x11\x7FV[\x90\x88\x01R\x84\x015\x82\x81\x11a\x0C\x19W\x83a\x14\xBC\x91\x86\x01a\x11\x7FV[\x90\x86\x01Ra\x01\xE0\x83\x015\x90\x81\x11a\x0C\x19Wa\x14\xD7\x92\x01a\x11\x7FV[\x91\x01RV[5\x90\x81`\x03\x0B\x82\x03a\x0C\x19WV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x10LW`\x05\x1B` \x01\x90V[\x91\x90\x91`\x80\x81\x84\x03\x12a\x0C\x19Wa\x15\x17a\x10\xFBV[\x92a\x15!\x82a\x12lV[\x84R` \x90a\x151\x82\x84\x01a\x14\xDCV[\x82\x86\x01R`@\x90`@\x84\x015\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94\x85\x81\x11a\x0C\x19W\x82a\x15[\x91\x83\x01a\x12\xA5V[`@\x88\x01R``\x90``\x81\x015\x90\x86\x82\x11a\x0C\x19W\x01\x92\x82`\x1F\x85\x01\x12\x15a\x0C\x19W\x835\x91a\x15\x8Ca\x06\x10\x84a\x14\xEAV[\x96\x86\x80\x89\x86\x81R\x01\x94`\x05\x1B\x87\x01\x01\x95\x85\x87\x11a\x0C\x19W\x87\x81\x01\x94[\x87\x86\x10a\x15\xBFWPPPPPPPPP``\x83\x01RV[\x855\x83\x81\x11a\x0C\x19W\x82\x01\x90`\xA0\x90\x81\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x84\x8B\x03\x01\x12a\x0C\x19Wa\x16\x01a\x10\xFBV[\x91\x8B\x84\x015`\x04\x81\x10\x15a\x0C\x19W\x83R\x87\x84\x015\x86\x81\x11a\x0C\x19W\x8A\x8Da\x16*\x92\x87\x01\x01a\x11\x7FV[\x8C\x84\x01Ra\x16:\x8A\x88\x86\x01a\x12zV[\x88\x84\x01R\x83\x015\x91\x85\x83\x11a\x0C\x19Wa\x16Z\x8A\x8D\x80\x96\x95\x81\x96\x01\x01a\x11\x7FV[\x87\x82\x01R\x81R\x01\x95\x01\x94a\x15\xA8V[\x91\x90\x91`@\x81\x84\x03\x12a\x0C\x19Wa\x16~a\x10\xBBV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x825\x81\x81\x11a\x0C\x19W\x82a\x16\x9D\x91\x85\x01a\x131V[\x85R` \x83\x015\x90\x81\x11a\x0C\x19Wa\x120\x92\x01a\x15\x02V[\x91\x90\x82`@\x91\x03\x12a\x0C\x19Wa\x120` a\x16\xCEa\x10\xBBV[\x93a\x16\xD8\x81a\x12lV[\x85R\x01a\x14\xDCV[\x91\x90\x91`\xA0\x81\x84\x03\x12a\x0C\x19Wa\x16\xF5a\x10\xDBV[\x92\x815`\x07\x81\x10\x15a\x0C\x19W\x84R` \x82\x015`\x07\x81\x10\x15a\x0C\x19W` \x85\x01R`@\x82\x015`\x07\x81\x10\x15a\x0C\x19W`@\x85\x01R``\x82\x015`\t\x81\x10\x15a\x0C\x19W``\x85\x01R`\x80\x82\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\x17Z\x92\x01a\x11\x7FV[`\x80\x83\x01RV[\x90\x80`\x1F\x83\x01\x12\x15a\x0C\x19W` \x90\x825a\x17~a\x06\x10\x82a\x14\xEAV[\x93` \x80\x86\x84\x81R\x01\x92`\x05\x1B\x82\x01\x01\x92\x83\x11a\x0C\x19W` \x01\x90[\x82\x82\x10a\x17\xA8WPPPP\x90V[\x83\x80\x91a\x17\xB4\x84a\x14\xDCV[\x81R\x01\x91\x01\x90a\x17\x9AV[5\x90\x81\x15\x15\x82\x03a\x0C\x19WV[\x91\x90`\x80\x83\x82\x03\x12a\x0C\x19Wa\x17\xE0a\x10\xFBV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x805\x82\x81\x11a\x0C\x19W\x83a\x18\0\x91\x83\x01a\x11\x7FV[\x85R` \x81\x015\x82\x81\x11a\x0C\x19W\x81\x01``\x81\x85\x03\x12a\x0C\x19Wa\x18\"a\x10\x9BV[\x90\x805\x84\x81\x11a\x0C\x19W\x85a\x188\x91\x83\x01a\x11\x7FV[\x82R` \x81\x015\x84\x81\x11a\x0C\x19W\x85a\x18R\x91\x83\x01a\x11\x7FV[` \x83\x01R`@\x81\x015\x93\x84\x11a\x0C\x19Wa\x18\x95\x94``\x94a\x18t\x92\x01a\x11\x7FV[`@\x82\x01R` \x86\x01Ra\x18\x8A`@\x82\x01a\x12lV[`@\x86\x01R\x01a\x12lV[``\x83\x01RV[\x91\x90\x91``\x81\x84\x03\x12a\x0C\x19Wa\x18\xB1a\x10\x9BV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x805\x83\x81\x11a\x0C\x19W\x81\x01\x82`\x1F\x82\x01\x12\x15a\x0C\x19W` \x90\x805a\x18\xE3a\x06\x10\x82a\x14\xEAV[\x91\x83\x80\x84\x84\x81R\x01\x92`\x05\x1B\x82\x01\x01\x91\x86\x83\x11a\x0C\x19W\x84\x82\x01\x90[\x83\x82\x10a\x199WPPPP\x86R\x80\x82\x015\x93\x84\x11a\x0C\x19Wa\x19(`@\x93a\x192\x95\x84\x01a\x17\xCCV[\x90\x86\x01R\x01a\x12lV[`@\x83\x01RV[\x815\x89\x81\x11a\x0C\x19W\x86\x91a\x19S\x8A\x84\x80\x94\x88\x01\x01a\x17\xCCV[\x81R\x01\x91\x01\x90a\x18\xFFV[\x81`\x1F\x82\x01\x12\x15a\x0C\x19W\x805\x91` \x91a\x19{a\x06\x10\x85a\x14\xEAV[\x93\x83\x80\x86\x83\x81R\x01\x91`\x05\x1B\x83\x01\x01\x92\x80\x84\x11a\x0C\x19W\x84\x83\x01\x91[\x84\x83\x10a\x19\xA7WPPPPPP\x90V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x835\x81\x81\x11a\x0C\x19W\x85\x01\x91``\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x85\x87\x03\x01\x12a\x0C\x19Wa\x19\xF1a\x10\x9BV[\x90\x89\x85\x015`\x07\x81\x10\x15a\x0C\x19W\x82R`@\x90\x81\x86\x015\x85\x81\x11a\x0C\x19W\x87\x8Ca\x1A\x1D\x92\x89\x01\x01a\x11\x7FV[\x8B\x84\x01R\x85\x015\x93\x84\x11a\x0C\x19Wa\x1A<\x86\x8B\x80\x97\x96\x81\x97\x01\x01a\x11\x7FV[\x90\x82\x01R\x81R\x01\x92\x01\x91a\x19\x97V[\x91\x90\x91`\x80\x81\x84\x03\x12a\x0C\x19Wa\x1A`a\x10\xFBV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x825\x81\x81\x11a\x0C\x19W\x82a\x1A\x7F\x91\x85\x01a\x11\x7FV[\x85R` \x83\x015\x81\x81\x11a\x0C\x19W\x82a\x1A\x99\x91\x85\x01a\x11\x7FV[` \x86\x01R`@\x83\x015\x81\x81\x11a\x0C\x19W\x82a\x1A\xB6\x91\x85\x01a\x16\xE0V[`@\x86\x01R``\x83\x015\x90\x81\x11a\x0C\x19Wa\x18\x95\x92\x01a\x19^V[\x91\x90\x91``\x81\x84\x03\x12a\x0C\x19Wa\x1A\xE6a\x10\x9BV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x825\x81\x81\x11a\x0C\x19W\x82a\x1B\x05\x91\x85\x01a\x11\x7FV[\x85R` \x83\x015\x81\x81\x11a\x0C\x19W\x82a\x1B\x1F\x91\x85\x01a\x1AKV[` \x86\x01R`@\x83\x015\x90\x81\x11a\x0C\x19Wa\x192\x92\x01a\x1AKV[\x91\x90\x91`\x80\x81\x84\x03\x12a\x0C\x19Wa\x1BOa\x10\xFBV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x825\x81\x81\x11a\x0C\x19W\x82a\x1Bn\x91\x85\x01a\x11\x7FV[\x85R` \x83\x015\x81\x81\x11a\x0C\x19W\x82a\x1B\x88\x91\x85\x01a\x11\x7FV[` \x86\x01R`@\x83\x015\x81\x81\x11a\x0C\x19W\x82a\x1B\xA5\x91\x85\x01a\x16\xE0V[`@\x86\x01R``\x83\x015\x90\x81\x11a\x0C\x19Wa\x18\x95\x92\x01a\x17aV\xFE\xA2dipfsX\"\x12 l\xD7\x88\t\x97\xCA\t\x8E\x16\x14\xFE\xFDg\x8CJ8H\xC1\x95.\xAD\xF3\x8E\x89\x84\xAC0\xB9\xDA\x86\xCEydsolcC\0\x08\x17\x003"; /// The bytecode of the contract. #[cfg(feature = "providers")] pub static GLUE_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static(__BYTECODE); #[rustfmt::skip] #[cfg(feature = "providers")] - const __DEPLOYED_BYTECODE: &[u8] = b"`\xC0\x80`@R`\x046\x10\x15a\0\x93W[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`5`$\x82\x01R\x7FContract does not have fallback `D\x82\x01R\x7Fnor receive functions\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\0\x90\x815`\xE0\x1Cc\x97\xE8\xE7\xC4\x14a\0\xABWPa\0\x0FV[4a\x11!WPa\x02 `\x03\x196\x01\x12a\x10\x9DW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0E)Wa\x01\0`\x03\x19\x826\x03\x01\x12a\rhWa\0\xE7a\x12\xABV[\x90\x80`\x04\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/W`\xA0\x91a\x01\x12a\x01c\x92`\x046\x91\x84\x01\x01a\x14\xE6V[\x84Ra\x01 `$\x82\x01a\x15\xDAV[` \x85\x01Ra\x011`D\x82\x01a\x15\xDAV[`@\x85\x01Ra\x01B`d\x82\x01a\x15\xDAV[``\x85\x01Ra\x01T6`\x84\x83\x01a\x15\xF4V[`\x80\x85\x01R`\xC46\x91\x01a\x15\xF4V[\x91\x01R`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0E)W```\x03\x19\x826\x03\x01\x12a\rhWa\x01\x8Ea\x12\xFAV[\x90a\x01\x9B\x81`\x04\x01a\x15\xDAV[\x82R`$\x81\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\x01\xC1\x90`\x046\x91\x84\x01\x01a\x16&V[` \x83\x01R`D\x81\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/W`@\x91`\x04a\x01\xEC\x926\x92\x01\x01a\x14\xE6V[\x91\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`D5\x11a\x0E)W`\x80`\x03\x19`D56\x03\x01\x12a\rhWa\x02\x18a\x12\xFAV[`D5`\x04\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\x02@\x90`\x046\x91`D5\x01\x01a\x1A\xD3V[\x81Ra\x02Q6`$`D5\x01a\x15\xF4V[` \x82\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`d`D5\x015\x11a\x0C/W`@a\x02\x826`D5`d\x81\x015\x01`\x04\x01a\x14\xE6V[\x91\x01R`d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0E)Wa\x02\xA5\x906\x90`\x04\x01a\x17 V[P`\x845g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0E)Wa\x02\xC6\x906\x90`\x04\x01a\x19uV[P`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\\6\x01\x12a\rhWa\x02\xF9a\x13\x1AV[`\xA45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x10\x99W\x81R`\xC45\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x10\x99W` \x01R``\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x1C6\x01\x12a\rhWa\x03Za\x12\xFAV[`\xE45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x10\x99W\x81Ra\x01\x045` \x82\x01R`@a\x01$5\x91\x01R`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFE\xBC6\x01\x12a\rhWa\x03\xB4a\x13\x1AV[a\x01D5o\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x10\x99W\x81Ra\x01d5\x90o\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x10\x99W` \x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\x845\x11a\x0E)W`\xA0`\x03\x19a\x01\x8456\x03\x01\x12a\rhWa\x04 a\x13:V[a\x01\x845`\x04\x015`\x04\x81\x10\x15a\x10\x99W\x81Ra\x04B`$a\x01\x845\x01a\x16[V[` \x82\x01Ra\x04V`Da\x01\x845\x01a\x16[V[`@\x82\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`da\x01\x845\x015\x11a\x0C/Wa\x04\x876a\x01\x845`d\x81\x015\x01`\x04\x01a\x16\x94V[``\x82\x01R`\x84a\x01\x845\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\x04\xB8`\x80\x91`\x046\x91a\x01\x845\x01\x01a\x14\xE6V[\x91\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xA45\x11a\x0E)Wa\x02 `\x03\x19a\x01\xA456\x03\x01\x12a\rhW`@Q\x80a\x01`\x81\x01\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01`\x83\x01\x11\x17a\x10lWa\x01`\x81\x01`@Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xA45`\x04\x015\x11a\x0C/Wa\x0536`\x04a\x01\xA45\x81\x015a\x01\xA45\x01\x01a\x14\xE6V[\x81Ra\x05E6`$a\x01\xA45\x01a\x15\xF4V[` \x82\x01Ra\x05Z6`da\x01\xA45\x01a\x1B\x1FV[`@\x82\x01Ra\x05o6`\xA4a\x01\xA45\x01a\x1B\x1FV[``\x82\x01Ra\x05\x846`\xE4a\x01\xA45\x01a\x1B\x1FV[`\x80\x82\x01Ra\x05\x9A6a\x01$a\x01\xA45\x01a\x15\xF4V[`\xA0\x82\x01Ra\x05\xB06a\x01da\x01\xA45\x01a\x15\xF4V[`\xC0\x82\x01Ra\x01\xA4\x805\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/W6`#\x82a\x01\xA45\x01\x01\x12\x15a\rmWa\x05\xF5a\x05\xF0`\x04\x83a\x01\xA45\x01\x015a\x18\xD9V[a\x13\x9AV[a\x01\xA45\x82\x01`\x04\x81\x015\x80\x83R\x91\x92` \x84\x01\x92\x90\x916`\x05\x92\x90\x92\x1B\x01`$\x01\x11a\rrW`$\x81a\x01\xA45\x01\x01\x91[a\x01\xA45\x82\x01`\x04\x81\x015`\x05\x1B\x01`$\x01\x83\x10a\x0EgWPPP`\xE0\x82\x01Ra\x01\xC4a\x01\xA45\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/W6`#\x82a\x01\xA45\x01\x01\x12\x15a\rmW`\x04\x81a\x01\xA45\x01\x015\x90a\x06\x86a\x05\xF0\x83a\x18\xD9V[\x91` \x83\x82\x81R\x01\x916`$\x83`\x05\x1B\x83a\x01\xA45\x01\x01\x01\x11a\rrW`$\x81a\x01\xA45\x01\x01\x92[`$\x83`\x05\x1B\x83a\x01\xA45\x01\x01\x01\x84\x10a\x0E.WPPPPa\x01\0\x82\x01Ra\x06\xDCa\x01\xE4a\x01\xA45\x01a\x1C'V[a\x01 \x82\x01Ra\x01@a\x06\xF5a\x02\x04a\x01\xA45\x01a\x1C'V[\x91\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xC45\x11a\x0E)W`\x80`\x03\x19a\x01\xC456\x03\x01\x12a\rhWa\x07#a\x12\xFAV[a\x0736a\x01\xC45`\x04\x01a\x16iV[\x81R`Da\x01\xC45\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\x07_\x90`\x046\x91a\x01\xC45\x01\x01a\x16&V[` \x82\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`da\x01\xC45\x015\x11a\x0C/W`@a\x07\x926a\x01\xC45`d\x81\x015\x01`\x04\x01a\x14\xE6V[\x91\x01Ra\x01\xE45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0E)W`\xA0`\x03\x19\x826\x03\x01\x12a\rhWa\x07\xBEa\x13ZV[\x90\x80`\x04\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\x07\xE3\x90`\x046\x91\x84\x01\x01a\x1A\xD3V[\x82R`$\x81\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\x08\t\x90`\x046\x91\x84\x01\x01a\x1D\x04V[` \x83\x01Ra\x08\x1B6`D\x83\x01a\x15\xF4V[`@\x83\x01R`\x84\x81\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/W``\x91`\x04a\x08F\x926\x92\x01\x01a\x1D\x04V[\x91\x01Ra\x02\x045`\x80Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x80Q\x11a\x0E)W` `\x03\x19`\x80Q6\x03\x01\x12a\rhWa\x08ya\x13zV[P`\x80Q`\x04\x015`\xA0Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xA0Q\x11a\x0C/W6`#`\xA0Q`\x80Q\x01\x01\x12\x15a\rmW`\x04`\xA0Q`\x80Q\x01\x015` a\x08\xBFa\x05\xF0\x83a\x18\xD9V[\x82\x81R\x01\x906`$\x82`\x05\x1B`\xA0Q`\x80Q\x01\x01\x01\x11a\rrW`$`\xA0Q`\x80Q\x01\x01\x91[`$\x82`\x05\x1B`\xA0Q`\x80Q\x01\x01\x01\x83\x10a\x08\xFEW\x83\x80\xF3[\x825g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\rmW`\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC\x82`\xA0Q\x83Q\x01\x016\x03\x01\x12a\rhWa\tJa\x13ZV[\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$\x83`\xA0Q`\x80Q\x01\x01\x015\x11a\x0C/W`\xA0Q`\x80Qa\t\x83\x916\x91`$\x91\x01\x85\x01\x81\x81\x015\x01\x01a\x1E\xB3V[\x83Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`D\x83`\xA0Q`\x80Q\x01\x01\x015\x11a\x0C/W`\xA0Q`\x80Qa\t\xBD\x916\x91\x01\x84\x01`D\x81\x015\x01`$\x01a\x1F9V[` \x84\x01R`d\x82`\xA0Q`\x80Q\x01\x01\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC\x82\x85`\xA0Q`\x80Q\x01\x01\x016\x03\x01\x12a\rhWa\n\x1Ca\x13zV[\x90`$\x81\x85`\xA0Q`\x80Q\x01\x01\x01\x015\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x0C/W6`C\x83\x83\x88`\xA0Q`\x80Q\x01\x01\x01\x01\x01\x12\x15a\rmW`$\x82\x82\x87`\xA0Q`\x80Q\x01\x01\x01\x01\x015a\npa\x05\xF0\x82a\x18\xD9V[\x92` \x84\x83\x81R\x01\x926`D\x84`\x05\x1B\x84\x84\x8C`\xA0Q`\x80Q\x01\x01\x01\x01\x01\x01\x11a\rrW`D\x82\x82\x8A`\xA0Q`\x80Q\x01\x01\x01\x01\x01\x93[`D\x84`\x05\x1B\x84\x84\x8C`\xA0Q`\x80Q\x01\x01\x01\x01\x01\x01\x85\x10a\rwWPPPPP\x81R`@\x84\x01R`\x84\x82`\xA0Q`\x80Q\x01\x01\x015\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x0C/W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC\x83\x85`\xA0Q`\x80Q\x01\x01\x016\x03\x01\x12a\rhWa\x0B(a\x13\x1AV[\x93`$\x83\x85`\xA0Q`\x80Q\x01\x01\x01\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/W6`C\x82\x86\x88`\xA0Q`\x80Q\x01\x01\x01\x01\x01\x12\x15a\rmW`$\x81\x85\x87`\xA0Q`\x80Q\x01\x01\x01\x01\x015\x90a\x0B|a\x05\xF0\x83a\x18\xD9V[\x91` \x83\x82\x81R\x01\x916`D\x83`\x05\x1B\x83\x8A\x8C`\xA0Q`\x80Q\x01\x01\x01\x01\x01\x01\x11a\rrW`D\x81\x88\x8A`\xA0Q`\x80Q\x01\x01\x01\x01\x01\x92[`D\x83`\x05\x1B\x83\x8A\x8C`\xA0Q`\x80Q\x01\x01\x01\x01\x01\x01\x84\x10a\x0C4WPPPP\x85Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`D\x84\x86`\xA0Q`\x80Q\x01\x01\x01\x015\x11a\x0C/W`\xA0Q`\x80Q`$\x96` \x96\x87\x96\x91\x93a\x0C\x19\x936\x93\x91\x01\x90\x91\x01\x01`D\x81\x015\x01\x88\x01a\x1D\xC6V[\x84\x82\x01R``\x82\x01R\x81R\x01\x93\x01\x92\x90Pa\x08\xE5V[a\x13\xDEV[\x835g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\rmW\x82\x89\x8B`\xA0Q`\x80Q\x01\x01\x01\x01\x01\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xBC\x90`@\x82\x846\x03\x01\x12a\rhWa\x0C\x8Aa\x13\x1AV[\x92`D\x81\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\x0C\xAF\x90`D6\x91\x84\x01\x01a\x1F\xA2V[\x84R`d\x81\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/W``\x91\x01\x92\x836\x03\x01\x12a\rhWa\x0C\xDBa\x12\xFAV[\x92`D\x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\r\0\x90`D6\x91\x86\x01\x01a\x14\xE6V[\x84R`d\x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\r&\x90`D6\x91\x86\x01\x01a\x1F\xA2V[` \x85\x01R`\x84\x83\x015\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x85\x11a\x0C/Wa\rT` \x95\x94`D\x87\x966\x92\x01\x01a\x1F\xA2V[`@\x82\x01R\x83\x82\x01R\x81R\x01\x93\x01\x92a\x0B\xB2V[a\x12'V[a\x14bV[a\x18\xF1V[\x845g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\rmW\x83\x83\x8B`\xA0Q`\x80Q\x01\x01\x01\x01\x01`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xBC\x826\x03\x01\x12a\rhWa\r\xCAa\x13\x1AV[\x91`D\x82\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\r\xEF\x90`D6\x91\x85\x01\x01a\x1E\xB3V[\x83R`d\x82\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\x0C/Wa\x0E\x1A` \x94\x93`D\x86\x956\x92\x01\x01a\x1F9V[\x83\x82\x01R\x81R\x01\x94\x01\x93a\n\xA6V[a\x11\xA3V[\x835\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\rmW` \x80\x91a\x0EZ`$\x94\x856\x91\x88a\x01\xA45\x01\x01\x01a\x14\xE6V[\x81R\x01\x94\x01\x93\x90Pa\x06\xAEV[\x825g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\rmW`\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC\x82\x85a\x01\xA45\x01\x016\x03\x01\x12a\rhWa\x0E\xB3a\x13ZV[\x91`$\x82\x85a\x01\xA45\x01\x01\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\x0E\xE6\x90`$6\x91\x85\x88a\x01\xA45\x01\x01\x01\x01a\x1BJV[\x83R`D\x82\x85a\x01\xA45\x01\x01\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\x0C/W`\xC0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC\x85\x85\x88a\x01\xA45\x01\x01\x016\x03\x01\x12a\rhWa\x0FAa\x12\xABV[\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$\x82\x86\x89a\x01\xA45\x01\x01\x01\x015\x11a\x0C/Wa\x0Fy6`$a\x01\xA45\x89\x01\x87\x01\x84\x01\x81\x81\x015\x01\x01a\x1B\xCBV[\x85Ra\x0F\x90`D\x82\x86\x89a\x01\xA45\x01\x01\x01\x01a\x18\xCBV[` \x86\x01Ra\x0F\xAA`d\x82\x86\x89a\x01\xA45\x01\x01\x01\x01a\x18\xCBV[`@\x86\x01Ra\x0F\xC4`\x84\x82\x86\x89a\x01\xA45\x01\x01\x01\x01a\x18\xCBV[``\x86\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xA4\x82\x86\x89a\x01\xA45\x01\x01\x01\x015\x11a\x0C/W`\xC4\x90a\x10\x046a\x01\xA45\x89\x01\x87\x01\x83\x01`\xA4\x81\x015\x01`$\x01a\x14\xE6V[`\x80\x87\x01R\x84\x87a\x01\xA45\x01\x01\x01\x015\x93`\x07\x85\x10\x15a\x10hW`\x84` \x95\x94\x82\x87\x96`\xA0a\x10X\x95\x01R\x86\x85\x01Ra\x10F`d\x82\x8Aa\x01\xA45\x01\x01\x01a\x18\xCBV[`@\x85\x01R\x87a\x01\xA45\x01\x01\x01a\x18\xCBV[``\x82\x01R\x81R\x01\x92\x01\x91a\x06'V[\x89\x80\xFD[`$\x82\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`A`\x04R\xFD[\x82\x80\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FABI decoding: tuple data too sho`D\x82\x01R\x7Frt\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x80\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x84\x92R` `\x04\x82\x01R`\"`$\x82\x01R\x7FEther sent to non-payable functi`D\x82\x01R\x7Fon\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FABI decoding: invalid tuple offs`D\x82\x01R\x7Fet\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`#`$\x82\x01R\x7FABI decoding: struct data too sh`D\x82\x01R\x7Fort\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`@Q\x90`\xC0\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x12\xCBW`@RV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`A`\x04R`$`\0\xFD[`@Q\x90``\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x12\xCBW`@RV[`@Q\x90`@\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x12\xCBW`@RV[`@Q\x90`\xA0\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x12\xCBW`@RV[`@Q\x90`\x80\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x12\xCBW`@RV[`@Q\x90` \x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x12\xCBW`@RV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F`@Q\x93\x01\x16\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x12\xCBW`@RV[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`#`$\x82\x01R\x7FABI decoding: invalid struct off`D\x82\x01R\x7Fset\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`+`$\x82\x01R\x7FABI decoding: invalid calldata a`D\x82\x01R\x7Frray offset\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x81`\x1F\x82\x01\x12\x15a\rmW\x805` \x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x12\xCBWa\x155\x83\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x85\x01\x16\x01a\x13\x9AV[\x93\x82\x85R\x83\x83\x83\x01\x01\x11a\x15VW\x90\x80\x83`\0\x94\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[`\x84\x83`@Q\x90\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R`\x04\x82\x01R`'`$\x82\x01R\x7FABI decoding: invalid byte array`D\x82\x01R\x7F length\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x15\xEFWV[`\0\x80\xFD[\x91\x90\x82`@\x91\x03\x12a\rhWa\x16\x1F` a\x16\ra\x13\x1AV[\x93a\x16\x17\x81a\x15\xDAV[\x85R\x01a\x15\xDAV[` \x83\x01RV[\x91\x90\x91` \x81\x84\x03\x12a\rhWa\x16;a\x13zV[\x92\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\x16W\x92\x01a\x14\xE6V[\x82RV[5\x90\x81`\x07\x0B\x82\x03a\x15\xEFWV[\x91\x90\x82`@\x91\x03\x12a\rhWa\x16\x1F` a\x16\x82a\x13\x1AV[\x93a\x16\x8C\x81a\x16[V[\x85R\x01a\x16[V[\x91\x90\x91`@\x81\x84\x03\x12a\rhWa\x16\xA9a\x13\x1AV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x805\x83\x81\x11a\x0C/W\x82a\x16\xC9\x91\x83\x01a\x14\xE6V[\x85R` \x81\x015\x90\x83\x82\x11a\x0C/W\x01\x90`@\x82\x82\x03\x12a\rhWa\x16\xECa\x13\x1AV[\x92\x825c\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x15\xEFW\x84R` \x83\x015\x90\x81\x11a\x0C/Wa\x17\x14\x92\x01a\x14\xE6V[` \x82\x01R` \x83\x01RV[\x91\x90\x91a\x02\0\x81\x84\x03\x12a\rhW`@Q\x90a\x01\xC0\x90\x81\x83\x01\x94g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x95\x84\x81\x10\x87\x82\x11\x17a\x12\xCBW`@R\x83\x95a\x17^\x82\x84a\x15\xF4V[\x85R`@\x83\x015\x81\x81\x11a\x0C/W\x82a\x17x\x91\x85\x01a\x14\xE6V[` \x86\x01Ra\x17\x89``\x84\x01a\x16[V[`@\x86\x01Ra\x17\x9B\x82`\x80\x85\x01a\x16iV[``\x86\x01R`\xC0\x83\x015\x81\x81\x11a\x0C/W\x82a\x17\xB8\x91\x85\x01a\x16\x94V[`\x80\x86\x01R`\xE0\x83\x015\x81\x81\x11a\x0C/W\x82a\x17\xD5\x91\x85\x01a\x14\xE6V[`\xA0\x86\x01Ra\x01\0\x80\x84\x015\x82\x81\x11a\x0C/W\x83a\x17\xF4\x91\x86\x01a\x14\xE6V[`\xC0\x87\x01Ra\x01 \x94\x85\x85\x015\x83\x81\x11a\x0C/W\x84a\x18\x14\x91\x87\x01a\x14\xE6V[`\xE0\x88\x01Ra\x01@\x91\x82\x86\x015\x84\x81\x11a\x0C/W\x85a\x184\x91\x88\x01a\x14\xE6V[\x90\x88\x01Ra\x01`\x95\x86\x86\x015\x84\x81\x11a\x0C/W\x85a\x18S\x91\x88\x01a\x14\xE6V[\x90\x88\x01Ra\x01\x80\x91\x82\x86\x015\x84\x81\x11a\x0C/W\x85a\x18r\x91\x88\x01a\x14\xE6V[\x90\x88\x01Ra\x01\xA0\x95\x86\x86\x015\x84\x81\x11a\x0C/W\x85a\x18\x91\x91\x88\x01a\x14\xE6V[\x90\x88\x01R\x84\x015\x82\x81\x11a\x0C/W\x83a\x18\xAB\x91\x86\x01a\x14\xE6V[\x90\x86\x01Ra\x01\xE0\x83\x015\x90\x81\x11a\x0C/Wa\x18\xC6\x92\x01a\x14\xE6V[\x91\x01RV[5\x90\x81`\x03\x0B\x82\x03a\x15\xEFWV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x12\xCBW`\x05\x1B` \x01\x90V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`+`$\x82\x01R\x7FABI decoding: invalid calldata a`D\x82\x01R\x7Frray stride\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x91\x90`\x80\x83\x82\x03\x12a\rhWa\x19\x89a\x13ZV[\x92a\x19\x93\x81a\x16[V[\x84R` a\x19\xA2\x81\x83\x01a\x18\xCBV[\x81\x86\x01R`@\x80\x83\x015\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94\x85\x81\x11a\x0C/W\x81a\x19\xCA\x91\x86\x01a\x16\x94V[\x82\x88\x01R``\x93\x84\x81\x015\x90\x86\x82\x11a\x0C/W\x01\x91\x81`\x1F\x84\x01\x12\x15a\rmW\x825\x90a\x19\xF9a\x05\xF0\x83a\x18\xD9V[\x96\x85\x80\x89\x85\x81R\x01\x93`\x05\x1B\x86\x01\x01\x94\x84\x86\x11a\rrW\x86\x81\x01\x93[\x86\x85\x10a\x1A)WPPPPPPPP\x83\x01RV[\x845\x83\x81\x11a\rmW\x82\x01\x90`\xA0\x90\x81\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x84\x8A\x03\x01\x12a\rhWa\x1Aka\x13ZV[\x91\x8A\x84\x015`\x04\x81\x10\x15a\x15\xEFW\x83R\x86\x84\x015\x86\x81\x11a\x0C/W\x89\x8Ca\x1A\x94\x92\x87\x01\x01a\x14\xE6V[\x8B\x84\x01Ra\x1A\xA4\x89\x8D\x86\x01a\x16iV[\x87\x84\x01R\x83\x015\x91\x85\x83\x11a\x0C/Wa\x1A\xC4\x89\x8C\x80\x96\x95\x81\x96\x01\x01a\x14\xE6V[\x8C\x82\x01R\x81R\x01\x94\x01\x93a\x1A\x15V[\x91\x90\x91`@\x81\x84\x03\x12a\rhWa\x1A\xE8a\x13\x1AV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x825\x81\x81\x11a\x0C/W\x82a\x1B\x07\x91\x85\x01a\x17 V[\x85R` \x83\x015\x90\x81\x11a\x0C/Wa\x16\x1F\x92\x01a\x19uV[\x91\x90\x82`@\x91\x03\x12a\rhWa\x16\x1F` a\x1B8a\x13\x1AV[\x93a\x1BB\x81a\x16[V[\x85R\x01a\x18\xCBV[\x91\x90\x91`\xA0\x81\x84\x03\x12a\rhWa\x1B_a\x13:V[\x92\x815`\x07\x81\x10\x15a\x15\xEFW\x84R` \x82\x015`\x07\x81\x10\x15a\x15\xEFW` \x85\x01R`@\x82\x015`\x07\x81\x10\x15a\x15\xEFW`@\x85\x01R``\x82\x015`\t\x81\x10\x15a\x15\xEFW``\x85\x01R`\x80\x82\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C/Wa\x1B\xC4\x92\x01a\x14\xE6V[`\x80\x83\x01RV[\x90\x80`\x1F\x83\x01\x12\x15a\rmW` \x90\x825a\x1B\xE8a\x05\xF0\x82a\x18\xD9V[\x93\x83\x80\x86\x84\x81R\x01\x92`\x05\x1B\x82\x01\x01\x92\x83\x11a\rrW\x83\x01\x90[\x82\x82\x10a\x1C\x10WPPPP\x90V[\x83\x80\x91a\x1C\x1C\x84a\x18\xCBV[\x81R\x01\x91\x01\x90a\x1C\x02V[5\x90\x81\x15\x15\x82\x03a\x15\xEFWV[\x91\x90`\x80\x83\x82\x03\x12a\rhWa\x1CHa\x13ZV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x805\x82\x81\x11a\x0C/W\x83a\x1Ch\x91\x83\x01a\x14\xE6V[\x85R` \x81\x015\x82\x81\x11a\x0C/W\x81\x01``\x81\x85\x03\x12a\rhWa\x1C\x8Aa\x12\xFAV[\x90\x805\x84\x81\x11a\x0C/W\x85a\x1C\xA0\x91\x83\x01a\x14\xE6V[\x82R` \x81\x015\x84\x81\x11a\x0C/W\x85a\x1C\xBA\x91\x83\x01a\x14\xE6V[` \x83\x01R`@\x81\x015\x93\x84\x11a\x0C/Wa\x1C\xFD\x94``\x94a\x1C\xDC\x92\x01a\x14\xE6V[`@\x82\x01R` \x86\x01Ra\x1C\xF2`@\x82\x01a\x16[V[`@\x86\x01R\x01a\x16[V[``\x83\x01RV[\x91\x90\x91``\x81\x84\x03\x12a\rhWa\x1D\x19a\x12\xFAV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x805\x83\x81\x11a\x0C/W\x81\x01\x82`\x1F\x82\x01\x12\x15a\rmW` \x90\x805a\x1DKa\x05\xF0\x82a\x18\xD9V[\x91\x83\x80\x84\x84\x81R\x01\x92`\x05\x1B\x82\x01\x01\x91\x86\x83\x11a\rrW\x84\x82\x01\x90[\x83\x82\x10a\x1D\xA1WPPPP\x86R\x80\x82\x015\x93\x84\x11a\x0C/Wa\x1D\x90`@\x93a\x1D\x9A\x95\x84\x01a\x1C4V[\x90\x86\x01R\x01a\x16[V[`@\x83\x01RV[\x815\x89\x81\x11a\rmW\x86\x91a\x1D\xBB\x8A\x84\x80\x94\x88\x01\x01a\x1C4V[\x81R\x01\x91\x01\x90a\x1DgV[\x81`\x1F\x82\x01\x12\x15a\rmW\x805\x91` \x91a\x1D\xE3a\x05\xF0\x85a\x18\xD9V[\x93\x83\x80\x86\x83\x81R\x01\x91`\x05\x1B\x83\x01\x01\x92\x80\x84\x11a\rrW\x84\x83\x01\x91[\x84\x83\x10a\x1E\x0FWPPPPPP\x90V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x835\x81\x81\x11a\rmW\x85\x01\x91``\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x85\x87\x03\x01\x12a\rhWa\x1EYa\x12\xFAV[\x90\x89\x85\x015`\x07\x81\x10\x15a\x15\xEFW\x82R`@\x90\x81\x86\x015\x85\x81\x11a\x0C/W\x87\x8Ca\x1E\x85\x92\x89\x01\x01a\x14\xE6V[\x8B\x84\x01R\x85\x015\x93\x84\x11a\x0C/Wa\x1E\xA4\x86\x8B\x80\x97\x96\x81\x97\x01\x01a\x14\xE6V[\x90\x82\x01R\x81R\x01\x92\x01\x91a\x1D\xFFV[\x91\x90\x91`\x80\x81\x84\x03\x12a\rhWa\x1E\xC8a\x13ZV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x825\x81\x81\x11a\x0C/W\x82a\x1E\xE7\x91\x85\x01a\x14\xE6V[\x85R` \x83\x015\x81\x81\x11a\x0C/W\x82a\x1F\x01\x91\x85\x01a\x14\xE6V[` \x86\x01R`@\x83\x015\x81\x81\x11a\x0C/W\x82a\x1F\x1E\x91\x85\x01a\x1BJV[`@\x86\x01R``\x83\x015\x90\x81\x11a\x0C/Wa\x1C\xFD\x92\x01a\x1D\xC6V[\x91\x90\x91``\x81\x84\x03\x12a\rhWa\x1FNa\x12\xFAV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x825\x81\x81\x11a\x0C/W\x82a\x1Fm\x91\x85\x01a\x14\xE6V[\x85R` \x83\x015\x81\x81\x11a\x0C/W\x82a\x1F\x87\x91\x85\x01a\x1E\xB3V[` \x86\x01R`@\x83\x015\x90\x81\x11a\x0C/Wa\x1D\x9A\x92\x01a\x1E\xB3V[\x91\x90\x91`\x80\x81\x84\x03\x12a\rhWa\x1F\xB7a\x13ZV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x825\x81\x81\x11a\x0C/W\x82a\x1F\xD6\x91\x85\x01a\x14\xE6V[\x85R` \x83\x015\x81\x81\x11a\x0C/W\x82a\x1F\xF0\x91\x85\x01a\x14\xE6V[` \x86\x01R`@\x83\x015\x81\x81\x11a\x0C/W\x82a \r\x91\x85\x01a\x1BJV[`@\x86\x01R``\x83\x015\x90\x81\x11a\x0C/Wa\x1C\xFD\x92\x01a\x1B\xCBV\xFE\xA2dipfsX\"\x12 \xA9\xB3\x0F\xCA\x99/\xC0\xC9\x96\x94\xEA\x01y\xB4\xFD\x7F&n\x19\x0F\0\xAE\x7FKa\x88X\xA5\n,\xDDRdsolcC\0\x08\x15\x003"; + const __DEPLOYED_BYTECODE: &[u8] = b"`\xA0`@R`\x046\x10\x15a\0\x12W`\0\x80\xFD[`\x005`\xE0\x1Cc\xE4\x18\xDCO\x14a\0'W`\0\x80\xFD[4a\x0C\x19Wa\x02 \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x0C\x19W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\x01\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x826\x03\x01\x12a\x0C\x19Wa\0\x9Ea\x10{V[\x90\x80`\x04\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W`\xA0\x91a\0\xC9a\x01\x1A\x92`\x046\x91\x84\x01\x01a\x11\x7FV[\x84Ra\0\xD7`$\x82\x01a\x11\xF0V[` \x85\x01Ra\0\xE8`D\x82\x01a\x11\xF0V[`@\x85\x01Ra\0\xF9`d\x82\x01a\x11\xF0V[``\x85\x01Ra\x01\x0B6`\x84\x83\x01a\x12\x05V[`\x80\x85\x01R`\xC46\x91\x01a\x12\x05V[\x91\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$5\x11a\x0C\x19W``\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC`$56\x03\x01\x12a\x0C\x19Wa\x01da\x10\x9BV[a\x01r`$5`\x04\x01a\x11\xF0V[\x81Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$\x805\x015\x11a\x0C\x19Wa\x01\x9E6`\x04`$\x805\x015`$5\x01\x01a\x127V[` \x82\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`D`$5\x015\x11a\x0C\x19W`@a\x01\xCF6`$5`D\x81\x015\x01`\x04\x01a\x11\x7FV[\x91\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`D5\x11a\x0C\x19W`\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC`D56\x03\x01\x12a\x0C\x19Wa\x02\x19a\x10\x9BV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`D5`\x04\x015\x11a\x0C\x19Wa\x02D6`\x04`D5\x81\x015`D5\x01\x01a\x16iV[\x81Ra\x02U6`$`D5\x01a\x12\x05V[` \x82\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`d`D5\x015\x11a\x0C\x19W`@a\x02\x866`D5`d\x81\x015\x01`\x04\x01a\x11\x7FV[\x91\x01R`d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\x02\xA9\x906\x90`\x04\x01a\x131V[P`\x845g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\x02\xCA\x906\x90`\x04\x01a\x15\x02V[P`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\\6\x01\x12a\x0C\x19Wa\x02\xFDa\x10\xBBV[`\xA45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x0C\x19W\x81Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xC45\x16`\xC45\x03a\x0C\x19W` `\xC45\x91\x01R``\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x1C6\x01\x12a\x0C\x19Wa\x03ba\x10\x9BV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xE45\x16`\xE45\x03a\x0C\x19W`\xE45\x81Ra\x01\x045` \x82\x01R`@a\x01$5\x91\x01R`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFE\xBC6\x01\x12a\x0C\x19Wa\x03\xC0a\x10\xBBV[a\x01D5\x81R` a\x01d5\x91\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\x845\x11a\x0C\x19W`\xA0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFCa\x01\x8456\x03\x01\x12a\x0C\x19Wa\x04\x18a\x10\xDBV[`\x04a\x01\x845\x81\x015\x10\x15a\x0C\x19Wa\x01\x845`\x04\x015\x81Ra\x04@`$a\x01\x845\x01a\x12lV[` \x82\x01Ra\x04T`Da\x01\x845\x01a\x12lV[`@\x82\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`da\x01\x845\x015\x11a\x0C\x19Wa\x04\x856a\x01\x845`d\x81\x015\x01`\x04\x01a\x12\xA5V[``\x82\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x84a\x01\x845\x015\x11a\x0C\x19W`\x80a\x04\xB86a\x01\x845`\x84\x81\x015\x01`\x04\x01a\x11\x7FV[\x91\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xA45\x11a\x0C\x19Wa\x02 \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFCa\x01\xA456\x03\x01\x12a\x0C\x19W`@Q\x80a\x01`\x81\x01\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01`\x83\x01\x11\x17a\x10LWa\x01`\x81\x01`@Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xA45`\x04\x015\x11a\x0C\x19Wa\x05Q6`\x04a\x01\xA45\x81\x015a\x01\xA45\x01\x01a\x11\x7FV[\x81Ra\x05c6`$a\x01\xA45\x01a\x12\x05V[` \x82\x01Ra\x05x6`da\x01\xA45\x01a\x16\xB5V[`@\x82\x01Ra\x05\x8D6`\xA4a\x01\xA45\x01a\x16\xB5V[``\x82\x01Ra\x05\xA26`\xE4a\x01\xA45\x01a\x16\xB5V[`\x80\x82\x01Ra\x05\xB86a\x01$a\x01\xA45\x01a\x12\x05V[`\xA0\x82\x01Ra\x05\xCE6a\x01da\x01\xA45\x01a\x12\x05V[`\xC0\x82\x01Ra\x01\xA4\x805\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W6`#\x82a\x01\xA45\x01\x01\x12\x15a\x0C\x19W`\x04\x81a\x01\xA45\x01\x015\x90a\x06\x15a\x06\x10\x83a\x14\xEAV[a\x11;V[\x91` \x83\x82\x81R\x01\x916`$\x83`\x05\x1B\x83a\x01\xA45\x01\x01\x01\x11a\x0C\x19W`$\x81a\x01\xA45\x01\x01\x92[`$\x83`\x05\x1B\x83a\x01\xA45\x01\x01\x01\x84\x10a\x0E1W\x85\x85`\xE0\x82\x01Ra\x01\xC4a\x01\xA45\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W6`#\x82a\x01\xA45\x01\x01\x12\x15a\x0C\x19W`\x04\x81a\x01\xA45\x01\x015\x90a\x06\x97a\x06\x10\x83a\x14\xEAV[\x91` \x83\x82\x81R\x01\x916`$\x83`\x05\x1B\x83a\x01\xA45\x01\x01\x01\x11a\x0C\x19W`$\x81a\x01\xA45\x01\x01\x92[`$\x83`\x05\x1B\x83a\x01\xA45\x01\x01\x01\x84\x10a\r\xF8W\x85\x85a\x01\0\x82\x01Ra\x06\xEBa\x01\xE4a\x01\xA45\x01a\x17\xBFV[a\x01 \x82\x01Ra\x01@a\x07\x04a\x02\x04a\x01\xA45\x01a\x17\xBFV[\x91\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xC45\x11a\x0C\x19W`\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFCa\x01\xC456\x03\x01\x12a\x0C\x19Wa\x07Pa\x10\x9BV[a\x07`6a\x01\xC45`\x04\x01a\x12zV[\x81R`Da\x01\xC45\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\x07\x8C\x90`\x046\x91a\x01\xC45\x01\x01a\x127V[` \x82\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`da\x01\xC45\x015\x11a\x0C\x19W`@a\x07\xBF6a\x01\xC45`d\x81\x015\x01`\x04\x01a\x11\x7FV[\x91\x01Ra\x01\xE45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W`\xA0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x826\x03\x01\x12a\x0C\x19Wa\x08\ta\x10\xFBV[\x90\x80`\x04\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\x08.\x90`\x046\x91\x84\x01\x01a\x16iV[\x82R`$\x81\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\x08T\x90`\x046\x91\x84\x01\x01a\x18\x9CV[` \x83\x01Ra\x08f6`D\x83\x01a\x12\x05V[`@\x83\x01R`\x84\x81\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W``\x91`\x04a\x08\x91\x926\x92\x01\x01a\x18\x9CV[\x91\x01Ra\x02\x045`\x80Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x80Q\x11a\x0C\x19W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC`\x80Q6\x03\x01\x12a\x0C\x19Wa\x08\xE2a\x11\x1BV[P`\x80Q`\x04\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W6`#\x82`\x80Q\x01\x01\x12\x15a\x0C\x19W`\x04\x81`\x80Q\x01\x015` a\t\x1Fa\x06\x10\x83a\x14\xEAV[\x82\x81R\x01\x916`$\x83`\x05\x1B\x83`\x80Q\x01\x01\x01\x11a\x0C\x19W`$\x81`\x80Q\x01\x01\x92[`$\x83`\x05\x1B\x83`\x80Q\x01\x01\x01\x84\x10a\tVW\0[\x835g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W`\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC\x82\x85\x83Q\x01\x016\x03\x01\x12a\x0C\x19Wa\t\xA0a\x10\xFBV[\x91`$\x82\x85`\x80Q\x01\x01\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\t\xD1\x90`$6\x91\x85\x88`\x80Q\x01\x01\x01\x01a\x1AKV[\x83R`D\x82\x85`\x80Q\x01\x01\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\n\x03\x90`$6\x91\x85\x88`\x80Q\x01\x01\x01\x01a\x1A\xD1V[` \x84\x01R`d\x82\x85`\x80Q\x01\x01\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W\x82\x85`\x80Q\x01\x01\x01` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC\x826\x03\x01\x12a\x0C\x19Wa\n^a\x11\x1BV[\x90`$\x81\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W6`C\x82\x84\x01\x01\x12\x15a\x0C\x19W`$\x81\x83\x01\x015a\n\x93a\x06\x10\x82a\x14\xEAV[\x92` \x84\x83\x81R\x01\x926`D\x84`\x05\x1B\x83\x85\x01\x01\x01\x11a\x0C\x19W`D\x81\x83\x01\x01\x93[`D\x84`\x05\x1B\x83\x85\x01\x01\x01\x85\x10a\rPWPPPPP\x81R`@\x84\x01R`\x84\x82\x85`\x80Q\x01\x01\x015\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x0C\x19W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC\x83\x85\x88`\x80Q\x01\x01\x016\x03\x01\x12a\x0C\x19Wa\x0B)a\x10\xBBV[\x93`$\x83\x85\x88`\x80Q\x01\x01\x01\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W6`C\x82\x86\x88\x8B`\x80Q\x01\x01\x01\x01\x01\x12\x15a\x0C\x19W`$\x81\x85\x87\x8A`\x80Q\x01\x01\x01\x01\x015\x90a\x0Bwa\x06\x10\x83a\x14\xEAV[\x91` \x83\x82\x81R\x01\x916`D\x8B\x83\x8A\x8C\x87`\x05\x1B\x93`\x80Q\x01\x01\x01\x01\x01\x01\x11a\x0C\x19W`D\x81\x88\x8A\x8D`\x80Q\x01\x01\x01\x01\x01\x92[`D\x8B\x83\x8A\x8C\x87`\x05\x1B\x93`\x80Q\x01\x01\x01\x01\x01\x01\x84\x10a\x0C\x1EWPPPP\x85R`D\x83\x85\x88`\x80Q\x01\x01\x01\x015\x94g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x86\x11a\x0C\x19Wa\x0C\x03` \x95`$\x80\x98\x88\x976\x93\x8C`\x80Q\x01\x01\x01\x01\x01a\x19^V[\x84\x82\x01R``\x82\x01R\x81R\x01\x94\x01\x93\x90Pa\tAV[`\0\x80\xFD[\x835g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W\x82\x89\x8B\x8E`\x80Q\x01\x01\x01\x01\x01\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xBC\x90`@\x82\x846\x03\x01\x12a\x0C\x19Wa\x0Cra\x10\xBBV[\x92`D\x81\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\x0C\x97\x90`D6\x91\x84\x01\x01a\x1B:V[\x84R`d\x81\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W``\x91\x01\x92\x836\x03\x01\x12a\x0C\x19Wa\x0C\xC3a\x10\x9BV[\x92`D\x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\x0C\xE8\x90`D6\x91\x86\x01\x01a\x11\x7FV[\x84R`d\x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\r\x0E\x90`D6\x91\x86\x01\x01a\x1B:V[` \x85\x01R`\x84\x83\x015\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x85\x11a\x0C\x19Wa\r<` \x95\x94`D\x87\x966\x92\x01\x01a\x1B:V[`@\x82\x01R\x83\x82\x01R\x81R\x01\x93\x01\x92a\x0B\xAAV[\x845g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W\x82\x84\x01\x01`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xBC\x826\x03\x01\x12a\x0C\x19Wa\r\x99a\x10\xBBV[\x91`D\x82\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\r\xBE\x90`D6\x91\x85\x01\x01a\x1AKV[\x83R`d\x82\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\x0C\x19Wa\r\xE9` \x94\x93`D\x86\x956\x92\x01\x01a\x1A\xD1V[\x83\x82\x01R\x81R\x01\x94\x01\x93a\n\xB5V[\x835\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x0C\x19W` \x80\x91a\x0E$`$\x94\x856\x91\x88a\x01\xA45\x01\x01\x01a\x11\x7FV[\x81R\x01\x94\x01\x93\x90Pa\x06\xBFV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x845\x11a\x0C\x19W`\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC\x855\x84a\x01\xA45\x01\x016\x03\x01\x12a\x0C\x19Wa\x0E}a\x10\xFBV[\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$\x865\x85a\x01\xA45\x01\x01\x015\x11a\x0C\x19Wa\x0E\xB36`$\x875a\x01\xA45\x87\x01\x01\x81\x81\x015\x01\x01a\x16\xE0V[\x82R`D\x855\x84a\x01\xA45\x01\x01\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19W`\xC0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xDC\x82\x885\x87a\x01\xA45\x01\x01\x016\x03\x01\x12a\x0C\x19Wa\x0F\x0Fa\x10{V[\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$\x83\x895\x88a\x01\xA45\x01\x01\x01\x015\x11a\x0C\x19Wa\x0FI6`$\x895a\x01\xA45\x89\x01\x01\x85\x01\x81\x81\x015\x01\x01a\x17aV[\x83Ra\x0Fa`D\x83\x895\x88a\x01\xA45\x01\x01\x01\x01a\x14\xDCV[` \x84\x01Ra\x0F|`d\x83\x895\x88a\x01\xA45\x01\x01\x01\x01a\x14\xDCV[`@\x84\x01Ra\x0F\x97`\x84\x83\x895\x88a\x01\xA45\x01\x01\x01\x01a\x14\xDCV[``\x84\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xA4\x83\x895\x88a\x01\xA45\x01\x01\x01\x015\x11a\x0C\x19Wa\x0F\xD66a\x01\xA45\x87\x01\x895\x01\x84\x01`\xA4\x81\x015\x01`$\x01a\x11\x7FV[`\x80\x84\x01R`\x07`\xC4\x83\x895\x88a\x01\xA45\x01\x01\x01\x015\x10\x15a\x0C\x19Wa\x01\xA45\x85\x01\x875\x01\x91\x82\x01`\xC4\x015`\xA0\x84\x01R` \x80\x85\x01\x93\x90\x93R`$\x93\x83\x92a\x10!\x90`d\x01a\x14\xDCV[`@\x82\x01Ra\x10:`\x84\x895\x88a\x01\xA45\x01\x01\x01a\x14\xDCV[``\x82\x01R\x81R\x01\x94\x01\x93\x90Pa\x06=V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`A`\x04R`$`\0\xFD[`@Q\x90`\xC0\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x10LW`@RV[`@Q\x90``\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x10LW`@RV[`@Q\x90`@\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x10LW`@RV[`@Q\x90`\xA0\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x10LW`@RV[`@Q\x90`\x80\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x10LW`@RV[`@Q\x90` \x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x10LW`@RV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F`@Q\x93\x01\x16\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x10LW`@RV[\x81`\x1F\x82\x01\x12\x15a\x0C\x19W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x10LWa\x11\xCD` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x85\x01\x16\x01a\x11;V[\x92\x82\x84R` \x83\x83\x01\x01\x11a\x0C\x19W\x81`\0\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x0C\x19WV[\x91\x90\x82`@\x91\x03\x12a\x0C\x19Wa\x120` a\x12\x1Ea\x10\xBBV[\x93a\x12(\x81a\x11\xF0V[\x85R\x01a\x11\xF0V[` \x83\x01RV[\x91\x90\x91` \x81\x84\x03\x12a\x0C\x19Wa\x12La\x11\x1BV[\x92\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\x12h\x92\x01a\x11\x7FV[\x82RV[5\x90\x81`\x07\x0B\x82\x03a\x0C\x19WV[\x91\x90\x82`@\x91\x03\x12a\x0C\x19Wa\x120` a\x12\x93a\x10\xBBV[\x93a\x12\x9D\x81a\x12lV[\x85R\x01a\x12lV[\x91\x90\x91`@\x81\x84\x03\x12a\x0C\x19Wa\x12\xBAa\x10\xBBV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x805\x83\x81\x11a\x0C\x19W\x82a\x12\xDA\x91\x83\x01a\x11\x7FV[\x85R` \x81\x015\x90\x83\x82\x11a\x0C\x19W\x01\x90`@\x82\x82\x03\x12a\x0C\x19Wa\x12\xFDa\x10\xBBV[\x92\x825c\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x0C\x19W\x84R` \x83\x015\x90\x81\x11a\x0C\x19Wa\x13%\x92\x01a\x11\x7FV[` \x82\x01R` \x83\x01RV[\x91\x90\x91a\x02\0\x81\x84\x03\x12a\x0C\x19W`@Q\x90a\x01\xC0\x90\x81\x83\x01\x94g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x95\x84\x81\x10\x87\x82\x11\x17a\x10LW`@R\x83\x95a\x13o\x82\x84a\x12\x05V[\x85R`@\x83\x015\x81\x81\x11a\x0C\x19W\x82a\x13\x89\x91\x85\x01a\x11\x7FV[` \x86\x01Ra\x13\x9A``\x84\x01a\x12lV[`@\x86\x01Ra\x13\xAC\x82`\x80\x85\x01a\x12zV[``\x86\x01R`\xC0\x83\x015\x81\x81\x11a\x0C\x19W\x82a\x13\xC9\x91\x85\x01a\x12\xA5V[`\x80\x86\x01R`\xE0\x83\x015\x81\x81\x11a\x0C\x19W\x82a\x13\xE6\x91\x85\x01a\x11\x7FV[`\xA0\x86\x01Ra\x01\0\x80\x84\x015\x82\x81\x11a\x0C\x19W\x83a\x14\x05\x91\x86\x01a\x11\x7FV[`\xC0\x87\x01Ra\x01 \x94\x85\x85\x015\x83\x81\x11a\x0C\x19W\x84a\x14%\x91\x87\x01a\x11\x7FV[`\xE0\x88\x01Ra\x01@\x91\x82\x86\x015\x84\x81\x11a\x0C\x19W\x85a\x14E\x91\x88\x01a\x11\x7FV[\x90\x88\x01Ra\x01`\x95\x86\x86\x015\x84\x81\x11a\x0C\x19W\x85a\x14d\x91\x88\x01a\x11\x7FV[\x90\x88\x01Ra\x01\x80\x91\x82\x86\x015\x84\x81\x11a\x0C\x19W\x85a\x14\x83\x91\x88\x01a\x11\x7FV[\x90\x88\x01Ra\x01\xA0\x95\x86\x86\x015\x84\x81\x11a\x0C\x19W\x85a\x14\xA2\x91\x88\x01a\x11\x7FV[\x90\x88\x01R\x84\x015\x82\x81\x11a\x0C\x19W\x83a\x14\xBC\x91\x86\x01a\x11\x7FV[\x90\x86\x01Ra\x01\xE0\x83\x015\x90\x81\x11a\x0C\x19Wa\x14\xD7\x92\x01a\x11\x7FV[\x91\x01RV[5\x90\x81`\x03\x0B\x82\x03a\x0C\x19WV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x10LW`\x05\x1B` \x01\x90V[\x91\x90\x91`\x80\x81\x84\x03\x12a\x0C\x19Wa\x15\x17a\x10\xFBV[\x92a\x15!\x82a\x12lV[\x84R` \x90a\x151\x82\x84\x01a\x14\xDCV[\x82\x86\x01R`@\x90`@\x84\x015\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94\x85\x81\x11a\x0C\x19W\x82a\x15[\x91\x83\x01a\x12\xA5V[`@\x88\x01R``\x90``\x81\x015\x90\x86\x82\x11a\x0C\x19W\x01\x92\x82`\x1F\x85\x01\x12\x15a\x0C\x19W\x835\x91a\x15\x8Ca\x06\x10\x84a\x14\xEAV[\x96\x86\x80\x89\x86\x81R\x01\x94`\x05\x1B\x87\x01\x01\x95\x85\x87\x11a\x0C\x19W\x87\x81\x01\x94[\x87\x86\x10a\x15\xBFWPPPPPPPPP``\x83\x01RV[\x855\x83\x81\x11a\x0C\x19W\x82\x01\x90`\xA0\x90\x81\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x84\x8B\x03\x01\x12a\x0C\x19Wa\x16\x01a\x10\xFBV[\x91\x8B\x84\x015`\x04\x81\x10\x15a\x0C\x19W\x83R\x87\x84\x015\x86\x81\x11a\x0C\x19W\x8A\x8Da\x16*\x92\x87\x01\x01a\x11\x7FV[\x8C\x84\x01Ra\x16:\x8A\x88\x86\x01a\x12zV[\x88\x84\x01R\x83\x015\x91\x85\x83\x11a\x0C\x19Wa\x16Z\x8A\x8D\x80\x96\x95\x81\x96\x01\x01a\x11\x7FV[\x87\x82\x01R\x81R\x01\x95\x01\x94a\x15\xA8V[\x91\x90\x91`@\x81\x84\x03\x12a\x0C\x19Wa\x16~a\x10\xBBV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x825\x81\x81\x11a\x0C\x19W\x82a\x16\x9D\x91\x85\x01a\x131V[\x85R` \x83\x015\x90\x81\x11a\x0C\x19Wa\x120\x92\x01a\x15\x02V[\x91\x90\x82`@\x91\x03\x12a\x0C\x19Wa\x120` a\x16\xCEa\x10\xBBV[\x93a\x16\xD8\x81a\x12lV[\x85R\x01a\x14\xDCV[\x91\x90\x91`\xA0\x81\x84\x03\x12a\x0C\x19Wa\x16\xF5a\x10\xDBV[\x92\x815`\x07\x81\x10\x15a\x0C\x19W\x84R` \x82\x015`\x07\x81\x10\x15a\x0C\x19W` \x85\x01R`@\x82\x015`\x07\x81\x10\x15a\x0C\x19W`@\x85\x01R``\x82\x015`\t\x81\x10\x15a\x0C\x19W``\x85\x01R`\x80\x82\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x0C\x19Wa\x17Z\x92\x01a\x11\x7FV[`\x80\x83\x01RV[\x90\x80`\x1F\x83\x01\x12\x15a\x0C\x19W` \x90\x825a\x17~a\x06\x10\x82a\x14\xEAV[\x93` \x80\x86\x84\x81R\x01\x92`\x05\x1B\x82\x01\x01\x92\x83\x11a\x0C\x19W` \x01\x90[\x82\x82\x10a\x17\xA8WPPPP\x90V[\x83\x80\x91a\x17\xB4\x84a\x14\xDCV[\x81R\x01\x91\x01\x90a\x17\x9AV[5\x90\x81\x15\x15\x82\x03a\x0C\x19WV[\x91\x90`\x80\x83\x82\x03\x12a\x0C\x19Wa\x17\xE0a\x10\xFBV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x805\x82\x81\x11a\x0C\x19W\x83a\x18\0\x91\x83\x01a\x11\x7FV[\x85R` \x81\x015\x82\x81\x11a\x0C\x19W\x81\x01``\x81\x85\x03\x12a\x0C\x19Wa\x18\"a\x10\x9BV[\x90\x805\x84\x81\x11a\x0C\x19W\x85a\x188\x91\x83\x01a\x11\x7FV[\x82R` \x81\x015\x84\x81\x11a\x0C\x19W\x85a\x18R\x91\x83\x01a\x11\x7FV[` \x83\x01R`@\x81\x015\x93\x84\x11a\x0C\x19Wa\x18\x95\x94``\x94a\x18t\x92\x01a\x11\x7FV[`@\x82\x01R` \x86\x01Ra\x18\x8A`@\x82\x01a\x12lV[`@\x86\x01R\x01a\x12lV[``\x83\x01RV[\x91\x90\x91``\x81\x84\x03\x12a\x0C\x19Wa\x18\xB1a\x10\x9BV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x805\x83\x81\x11a\x0C\x19W\x81\x01\x82`\x1F\x82\x01\x12\x15a\x0C\x19W` \x90\x805a\x18\xE3a\x06\x10\x82a\x14\xEAV[\x91\x83\x80\x84\x84\x81R\x01\x92`\x05\x1B\x82\x01\x01\x91\x86\x83\x11a\x0C\x19W\x84\x82\x01\x90[\x83\x82\x10a\x199WPPPP\x86R\x80\x82\x015\x93\x84\x11a\x0C\x19Wa\x19(`@\x93a\x192\x95\x84\x01a\x17\xCCV[\x90\x86\x01R\x01a\x12lV[`@\x83\x01RV[\x815\x89\x81\x11a\x0C\x19W\x86\x91a\x19S\x8A\x84\x80\x94\x88\x01\x01a\x17\xCCV[\x81R\x01\x91\x01\x90a\x18\xFFV[\x81`\x1F\x82\x01\x12\x15a\x0C\x19W\x805\x91` \x91a\x19{a\x06\x10\x85a\x14\xEAV[\x93\x83\x80\x86\x83\x81R\x01\x91`\x05\x1B\x83\x01\x01\x92\x80\x84\x11a\x0C\x19W\x84\x83\x01\x91[\x84\x83\x10a\x19\xA7WPPPPPP\x90V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x835\x81\x81\x11a\x0C\x19W\x85\x01\x91``\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x85\x87\x03\x01\x12a\x0C\x19Wa\x19\xF1a\x10\x9BV[\x90\x89\x85\x015`\x07\x81\x10\x15a\x0C\x19W\x82R`@\x90\x81\x86\x015\x85\x81\x11a\x0C\x19W\x87\x8Ca\x1A\x1D\x92\x89\x01\x01a\x11\x7FV[\x8B\x84\x01R\x85\x015\x93\x84\x11a\x0C\x19Wa\x1A<\x86\x8B\x80\x97\x96\x81\x97\x01\x01a\x11\x7FV[\x90\x82\x01R\x81R\x01\x92\x01\x91a\x19\x97V[\x91\x90\x91`\x80\x81\x84\x03\x12a\x0C\x19Wa\x1A`a\x10\xFBV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x825\x81\x81\x11a\x0C\x19W\x82a\x1A\x7F\x91\x85\x01a\x11\x7FV[\x85R` \x83\x015\x81\x81\x11a\x0C\x19W\x82a\x1A\x99\x91\x85\x01a\x11\x7FV[` \x86\x01R`@\x83\x015\x81\x81\x11a\x0C\x19W\x82a\x1A\xB6\x91\x85\x01a\x16\xE0V[`@\x86\x01R``\x83\x015\x90\x81\x11a\x0C\x19Wa\x18\x95\x92\x01a\x19^V[\x91\x90\x91``\x81\x84\x03\x12a\x0C\x19Wa\x1A\xE6a\x10\x9BV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x825\x81\x81\x11a\x0C\x19W\x82a\x1B\x05\x91\x85\x01a\x11\x7FV[\x85R` \x83\x015\x81\x81\x11a\x0C\x19W\x82a\x1B\x1F\x91\x85\x01a\x1AKV[` \x86\x01R`@\x83\x015\x90\x81\x11a\x0C\x19Wa\x192\x92\x01a\x1AKV[\x91\x90\x91`\x80\x81\x84\x03\x12a\x0C\x19Wa\x1BOa\x10\xFBV[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x825\x81\x81\x11a\x0C\x19W\x82a\x1Bn\x91\x85\x01a\x11\x7FV[\x85R` \x83\x015\x81\x81\x11a\x0C\x19W\x82a\x1B\x88\x91\x85\x01a\x11\x7FV[` \x86\x01R`@\x83\x015\x81\x81\x11a\x0C\x19W\x82a\x1B\xA5\x91\x85\x01a\x16\xE0V[`@\x86\x01R``\x83\x015\x90\x81\x11a\x0C\x19Wa\x18\x95\x92\x01a\x17aV\xFE\xA2dipfsX\"\x12 l\xD7\x88\t\x97\xCA\t\x8E\x16\x14\xFE\xFDg\x8CJ8H\xC1\x95.\xAD\xF3\x8E\x89\x84\xAC0\xB9\xDA\x86\xCEydsolcC\0\x08\x17\x003"; /// The deployed bytecode of the contract. #[cfg(feature = "providers")] pub static GLUE_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = @@ -999,7 +999,7 @@ pub mod glue { let deployer = ::ethers::contract::ContractDeployer::new(deployer); Ok(deployer) } - ///Calls the contract's `typesTelescope` (0x97e8e7c4) function + ///Calls the contract's `typesTelescope` (0xe418dc4f) function pub fn types_telescope( &self, p0: IbcCoreCommitmentV1MerkleProofData, @@ -1018,7 +1018,7 @@ pub mod glue { ) -> ::ethers::contract::builders::ContractCall { self.0 .method_hash( - [151, 232, 231, 196], + [228, 24, 220, 79], (p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), ) .expect("method not found (this should never happen)") @@ -1030,11 +1030,11 @@ pub mod glue { Self::new(contract.address(), contract.client()) } } - ///Container type for all input parameters for the `typesTelescope` function with signature `typesTelescope((string,uint64,uint64,uint64,(uint64,uint64),(uint64,uint64)),(uint64,(bytes),bytes),((((uint64,uint64),string,int64,(int64,int64),(bytes,(uint32,bytes)),bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes),(int64,int32,(bytes,(uint32,bytes)),(uint8,bytes,(int64,int64),bytes)[])),(uint64,uint64),bytes),((uint64,uint64),string,int64,(int64,int64),(bytes,(uint32,bytes)),bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes),(int64,int32,(bytes,(uint32,bytes)),(uint8,bytes,(int64,int64),bytes)[]),(uint64,uint64),(uint64,bytes32,bytes32),(uint128,uint128),(uint8,int64,int64,(bytes,(uint32,bytes)),string),(string,(uint64,uint64),(int64,int32),(int64,int32),(int64,int32),(uint64,uint64),(uint64,uint64),((uint8,uint8,uint8,uint8,bytes),(int32[],int32,int32,int32,bytes,uint8),int32,int32)[],string[],bool,bool),((int64,int64),(bytes),bytes),((((uint64,uint64),string,int64,(int64,int64),(bytes,(uint32,bytes)),bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes),(int64,int32,(bytes,(uint32,bytes)),(uint8,bytes,(int64,int64),bytes)[])),((bytes,(bytes,bytes,bytes),int64,int64)[],(bytes,(bytes,bytes,bytes),int64,int64),int64),(uint64,uint64),((bytes,(bytes,bytes,bytes),int64,int64)[],(bytes,(bytes,bytes,bytes),int64,int64),int64)),(((bytes,bytes,(uint8,uint8,uint8,uint8,bytes),(uint8,bytes,bytes)[]),(bytes,(bytes,bytes,(uint8,uint8,uint8,uint8,bytes),(uint8,bytes,bytes)[]),(bytes,bytes,(uint8,uint8,uint8,uint8,bytes),(uint8,bytes,bytes)[])),(((bytes,bytes,(uint8,uint8,uint8,uint8,bytes),(uint8,bytes,bytes)[]),(bytes,(bytes,bytes,(uint8,uint8,uint8,uint8,bytes),(uint8,bytes,bytes)[]),(bytes,bytes,(uint8,uint8,uint8,uint8,bytes),(uint8,bytes,bytes)[])))[]),(((bytes,bytes,(uint8,uint8,uint8,uint8,bytes),int32[]),(bytes,(bytes,bytes,(uint8,uint8,uint8,uint8,bytes),int32[]),(bytes,bytes,(uint8,uint8,uint8,uint8,bytes),int32[])))[],(uint8,bytes,bytes)[]))[]))` and selector `0x97e8e7c4` + ///Container type for all input parameters for the `typesTelescope` function with signature `typesTelescope((string,uint64,uint64,uint64,(uint64,uint64),(uint64,uint64)),(uint64,(bytes),bytes),((((uint64,uint64),string,int64,(int64,int64),(bytes,(uint32,bytes)),bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes),(int64,int32,(bytes,(uint32,bytes)),(uint8,bytes,(int64,int64),bytes)[])),(uint64,uint64),bytes),((uint64,uint64),string,int64,(int64,int64),(bytes,(uint32,bytes)),bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes),(int64,int32,(bytes,(uint32,bytes)),(uint8,bytes,(int64,int64),bytes)[]),(uint64,uint64),(uint64,bytes32,bytes32),(uint256,uint256),(uint8,int64,int64,(bytes,(uint32,bytes)),string),(string,(uint64,uint64),(int64,int32),(int64,int32),(int64,int32),(uint64,uint64),(uint64,uint64),((uint8,uint8,uint8,uint8,bytes),(int32[],int32,int32,int32,bytes,uint8),int32,int32)[],string[],bool,bool),((int64,int64),(bytes),bytes),((((uint64,uint64),string,int64,(int64,int64),(bytes,(uint32,bytes)),bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes),(int64,int32,(bytes,(uint32,bytes)),(uint8,bytes,(int64,int64),bytes)[])),((bytes,(bytes,bytes,bytes),int64,int64)[],(bytes,(bytes,bytes,bytes),int64,int64),int64),(uint64,uint64),((bytes,(bytes,bytes,bytes),int64,int64)[],(bytes,(bytes,bytes,bytes),int64,int64),int64)),(((bytes,bytes,(uint8,uint8,uint8,uint8,bytes),(uint8,bytes,bytes)[]),(bytes,(bytes,bytes,(uint8,uint8,uint8,uint8,bytes),(uint8,bytes,bytes)[]),(bytes,bytes,(uint8,uint8,uint8,uint8,bytes),(uint8,bytes,bytes)[])),(((bytes,bytes,(uint8,uint8,uint8,uint8,bytes),(uint8,bytes,bytes)[]),(bytes,(bytes,bytes,(uint8,uint8,uint8,uint8,bytes),(uint8,bytes,bytes)[]),(bytes,bytes,(uint8,uint8,uint8,uint8,bytes),(uint8,bytes,bytes)[])))[]),(((bytes,bytes,(uint8,uint8,uint8,uint8,bytes),int32[]),(bytes,(bytes,bytes,(uint8,uint8,uint8,uint8,bytes),int32[]),(bytes,bytes,(uint8,uint8,uint8,uint8,bytes),int32[])))[],(uint8,bytes,bytes)[]))[]))` and selector `0xe418dc4f` #[derive(Clone, ::ethers::contract::EthCall, ::ethers::contract::EthDisplay)] #[ethcall( name = "typesTelescope", - abi = "typesTelescope((string,uint64,uint64,uint64,(uint64,uint64),(uint64,uint64)),(uint64,(bytes),bytes),((((uint64,uint64),string,int64,(int64,int64),(bytes,(uint32,bytes)),bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes),(int64,int32,(bytes,(uint32,bytes)),(uint8,bytes,(int64,int64),bytes)[])),(uint64,uint64),bytes),((uint64,uint64),string,int64,(int64,int64),(bytes,(uint32,bytes)),bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes),(int64,int32,(bytes,(uint32,bytes)),(uint8,bytes,(int64,int64),bytes)[]),(uint64,uint64),(uint64,bytes32,bytes32),(uint128,uint128),(uint8,int64,int64,(bytes,(uint32,bytes)),string),(string,(uint64,uint64),(int64,int32),(int64,int32),(int64,int32),(uint64,uint64),(uint64,uint64),((uint8,uint8,uint8,uint8,bytes),(int32[],int32,int32,int32,bytes,uint8),int32,int32)[],string[],bool,bool),((int64,int64),(bytes),bytes),((((uint64,uint64),string,int64,(int64,int64),(bytes,(uint32,bytes)),bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes),(int64,int32,(bytes,(uint32,bytes)),(uint8,bytes,(int64,int64),bytes)[])),((bytes,(bytes,bytes,bytes),int64,int64)[],(bytes,(bytes,bytes,bytes),int64,int64),int64),(uint64,uint64),((bytes,(bytes,bytes,bytes),int64,int64)[],(bytes,(bytes,bytes,bytes),int64,int64),int64)),(((bytes,bytes,(uint8,uint8,uint8,uint8,bytes),(uint8,bytes,bytes)[]),(bytes,(bytes,bytes,(uint8,uint8,uint8,uint8,bytes),(uint8,bytes,bytes)[]),(bytes,bytes,(uint8,uint8,uint8,uint8,bytes),(uint8,bytes,bytes)[])),(((bytes,bytes,(uint8,uint8,uint8,uint8,bytes),(uint8,bytes,bytes)[]),(bytes,(bytes,bytes,(uint8,uint8,uint8,uint8,bytes),(uint8,bytes,bytes)[]),(bytes,bytes,(uint8,uint8,uint8,uint8,bytes),(uint8,bytes,bytes)[])))[]),(((bytes,bytes,(uint8,uint8,uint8,uint8,bytes),int32[]),(bytes,(bytes,bytes,(uint8,uint8,uint8,uint8,bytes),int32[]),(bytes,bytes,(uint8,uint8,uint8,uint8,bytes),int32[])))[],(uint8,bytes,bytes)[]))[]))" + abi = "typesTelescope((string,uint64,uint64,uint64,(uint64,uint64),(uint64,uint64)),(uint64,(bytes),bytes),((((uint64,uint64),string,int64,(int64,int64),(bytes,(uint32,bytes)),bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes),(int64,int32,(bytes,(uint32,bytes)),(uint8,bytes,(int64,int64),bytes)[])),(uint64,uint64),bytes),((uint64,uint64),string,int64,(int64,int64),(bytes,(uint32,bytes)),bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes),(int64,int32,(bytes,(uint32,bytes)),(uint8,bytes,(int64,int64),bytes)[]),(uint64,uint64),(uint64,bytes32,bytes32),(uint256,uint256),(uint8,int64,int64,(bytes,(uint32,bytes)),string),(string,(uint64,uint64),(int64,int32),(int64,int32),(int64,int32),(uint64,uint64),(uint64,uint64),((uint8,uint8,uint8,uint8,bytes),(int32[],int32,int32,int32,bytes,uint8),int32,int32)[],string[],bool,bool),((int64,int64),(bytes),bytes),((((uint64,uint64),string,int64,(int64,int64),(bytes,(uint32,bytes)),bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes),(int64,int32,(bytes,(uint32,bytes)),(uint8,bytes,(int64,int64),bytes)[])),((bytes,(bytes,bytes,bytes),int64,int64)[],(bytes,(bytes,bytes,bytes),int64,int64),int64),(uint64,uint64),((bytes,(bytes,bytes,bytes),int64,int64)[],(bytes,(bytes,bytes,bytes),int64,int64),int64)),(((bytes,bytes,(uint8,uint8,uint8,uint8,bytes),(uint8,bytes,bytes)[]),(bytes,(bytes,bytes,(uint8,uint8,uint8,uint8,bytes),(uint8,bytes,bytes)[]),(bytes,bytes,(uint8,uint8,uint8,uint8,bytes),(uint8,bytes,bytes)[])),(((bytes,bytes,(uint8,uint8,uint8,uint8,bytes),(uint8,bytes,bytes)[]),(bytes,(bytes,bytes,(uint8,uint8,uint8,uint8,bytes),(uint8,bytes,bytes)[]),(bytes,bytes,(uint8,uint8,uint8,uint8,bytes),(uint8,bytes,bytes)[])))[]),(((bytes,bytes,(uint8,uint8,uint8,uint8,bytes),int32[]),(bytes,(bytes,bytes,(uint8,uint8,uint8,uint8,bytes),int32[]),(bytes,bytes,(uint8,uint8,uint8,uint8,bytes),int32[])))[],(uint8,bytes,bytes)[]))[]))" )] pub struct TypesTelescopeCall( pub IbcCoreCommitmentV1MerkleProofData, @@ -1406,10 +1406,10 @@ pub mod glue { )] pub struct OptimizedConsensusState { pub timestamp: u64, - pub root: [u8; 32], + pub app_hash: [u8; 32], pub next_validators_hash: [u8; 32], } - ///`ProcessedMoment(uint128,uint128)` + ///`ProcessedMoment(uint256,uint256)` #[derive( Clone, ::ethers::contract::EthAbiType, @@ -1421,8 +1421,8 @@ pub mod glue { Hash, )] pub struct ProcessedMoment { - pub timestamp: u128, - pub height: u128, + pub timestamp: ::ethers::core::types::U256, + pub height: ::ethers::core::types::U256, } ///`TendermintCryptoPublicKeyData(bytes,bytes,bytes)` #[derive( diff --git a/generated/contracts/src/ibc_channel_handshake.rs b/generated/contracts/src/ibc_channel_handshake.rs new file mode 100644 index 0000000000..b03a170136 --- /dev/null +++ b/generated/contracts/src/ibc_channel_handshake.rs @@ -0,0 +1,2867 @@ +pub use ibc_channel_handshake::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod ibc_channel_handshake { + pub use super::super::shared_types::*; + #[cfg(feature = "providers")] + #[allow(deprecated)] + #[cfg(feature = "providers")] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("COMMITMENT_PREFIX"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("COMMITMENT_PREFIX"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("bindPort"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("bindPort"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("portId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("moduleAddress"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("capabilities"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("capabilities"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("channelCapabilityPath"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("channelCapabilityPath",), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("portId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("channelId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Pure, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("channelCloseConfirm"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("channelCloseConfirm",), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("msg_"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IBCMsgs.MsgChannelCloseConfirm", + ), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("channelCloseInit"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("channelCloseInit"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("msg_"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IBCMsgs.MsgChannelCloseInit", + ), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("channelOpenAck"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("channelOpenAck"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("msg_"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IBCMsgs.MsgChannelOpenAck", + ), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("channelOpenConfirm"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("channelOpenConfirm"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("msg_"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IBCMsgs.MsgChannelOpenConfirm", + ), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("channelOpenInit"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("channelOpenInit"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("msg_"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(8usize), + ::ethers::core::abi::ethabi::ParamType::Uint(8usize), + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ],), + ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::String, + ), + ), + ::ethers::core::abi::ethabi::ParamType::String, + ],), + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IBCMsgs.MsgChannelOpenInit", + ), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("channelOpenTry"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("channelOpenTry"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("msg_"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(8usize), + ::ethers::core::abi::ethabi::ParamType::Uint(8usize), + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ],), + ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::String, + ), + ), + ::ethers::core::abi::ethabi::ParamType::String, + ],), + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IBCMsgs.MsgChannelOpenTry", + ), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("channels"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("channels"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("state"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(8usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "enum IbcCoreChannelV1GlobalEnums.State", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("ordering"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(8usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "enum IbcCoreChannelV1GlobalEnums.Order", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("counterparty"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IbcCoreChannelV1Counterparty.Data", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("version"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("clientImpls"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("clientImpls"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("clientRegistry"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("clientRegistry"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("clientTypes"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("clientTypes"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("commitments"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("commitments"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("connections"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("connections"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("client_id"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("state"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(8usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "enum IbcCoreConnectionV1GlobalEnums.State", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("counterparty"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Bytes + ],), + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IbcCoreConnectionV1Counterparty.Data", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("delay_period"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("getClient"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("getClient"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("clientId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("contract ILightClient"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextChannelSequence"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextChannelSequence",), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextClientSequence"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextClientSequence"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextConnectionSequence"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextConnectionSequence",), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextSequenceAcks"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextSequenceAcks"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextSequenceRecvs"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextSequenceRecvs"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextSequenceSends"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextSequenceSends"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("packetReceipts"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("packetReceipts"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(8usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint8"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("portCapabilityPath"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("portCapabilityPath"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("portId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Pure, + },], + ), + ]), + events: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("ChannelCloseConfirm"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("ChannelCloseConfirm",), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("channelId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("portId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + }, + ], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ChannelCloseInit"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("ChannelCloseInit"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("channelId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("portId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + }, + ], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ChannelOpenAck"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("ChannelOpenAck"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("channelId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("portId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + }, + ], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ChannelOpenConfirm"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("ChannelOpenConfirm"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("channelId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("portId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + }, + ], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ChannelOpenInit"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("ChannelOpenInit"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("channelId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("connectionId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("portId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("counterpartyPortId",), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + }, + ], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ChannelOpenTry"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("ChannelOpenTry"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("channelId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("connectionId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("portId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("counterpartyPortId",), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("version"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + }, + ], + anonymous: false, + },], + ), + ]), + errors: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("ErrCapabilityAlreadyClaimed"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrCapabilityAlreadyClaimed",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrClientNotFound"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrClientNotFound"), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrConnNotSingleHop"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrConnNotSingleHop",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrConnNotSingleVersion"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrConnNotSingleVersion",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrCounterpartyChannelNotEmpty"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrCounterpartyChannelNotEmpty",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrInvalidChannelState"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrInvalidChannelState",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrInvalidConnectionState"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrInvalidConnectionState",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrInvalidProof"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrInvalidProof"), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrModuleNotFound"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrModuleNotFound"), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrUnsupportedFeature"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrUnsupportedFeature",), + inputs: ::std::vec![], + },], + ), + ]), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + #[cfg(feature = "providers")] + pub static IBCCHANNELHANDSHAKE_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + #[cfg(feature = "providers")] + const __BYTECODE: &[u8] = b"`\x80\x80`@R4a\0\x16WaW\x80c\xD1){\x8D\x14a\x019W\x80c\xDD4i\xFC\x14a\x014Wc\xE1\xB1{C\x14a\x01/W`\0\x80\xFD[a\x1E\xBEV[a\x1CBV[a\x1C\x15V[a\x1B\xE5V[a\x1B\xB3V[a\x1B7V[a\x19\xD8V[a\x19?V[a\x18\xEFV[a\x18\xA5V[a\x18uV[a\x18?V[a\x17\xF6V[a\x16yV[a\x15\xAAV[a\x15\x18V[a\x14\xFEV[a\x14)V[a\x11\xACV[a\x0F6V[a\x0E\xC1V[a\n\xCBV[a\n|V[a\x02\xBAV[4a\x02;W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x02;W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11a\x02;W6`#\x83\x01\x12\x15a\x02;W\x81`\x04\x015\x90\x81\x11a\x02;W6`$\x82\x84\x01\x01\x11a\x02;W`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x02;W`$a\x029\x93\x01a\x1F\x04V[\0[`\0\x80\xFD[`\0[\x83\x81\x10a\x02SWPP`\0\x91\x01RV[\x81\x81\x01Q\x83\x82\x01R` \x01a\x02CV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x93a\x02\x9F\x81Q\x80\x92\x81\x87R\x87\x80\x88\x01\x91\x01a\x02@V[\x01\x16\x01\x01\x90V[\x90` a\x02\xB7\x92\x81\x81R\x01\x90a\x02cV[\x90V[4a\x02;W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x90\x80\x826\x01\x12a\x02;W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02;W`\xC0\x81`\x04\x01\x93\x826\x03\x01\x12a\x02;W`$\x81\x01\x90a\x03Ga\x03-a\x03#\x84\x87a\x1F7V[``\x81\x01\x90a\x1FjV[a\x03A\x86a\x03;\x87\x8Aa\x1F7V[\x01a\x1F\xBEV[\x91a*\xFFV[\x92\x90`\x02a\x03]a\x03X\x84\x89a\x1F7V[a\x1F\xCBV[a\x03f\x81a\x15\x89V[\x03a\x07TWa\x03u\x86\x80a\x1F\xD8V[\x94\x90a\x03\x7Fa\x08wV[\x956\x90a\x03\x8B\x92a\x08\xCDV[\x85Ra\x03\x95a\x1B$V[\x86\x86\x01R\x82\x86a\x03\xA5\x82\x8Aa\x1F7V[\x01a\x03\xAF\x90a\x1F\xBEV[\x94\x88a\x03\xBB\x83\x82a\x1F7V[``\x81\x01a\x03\xC8\x91a\x1FjV[a\x03\xD1\x91a XV[6\x90a\x03\xDC\x92a\x08\xCDV[a\x03\xE5\x90a+\xF7V[\x96`D\x83\x01\x97a\x03\xF5\x89\x84a\x1F\xD8V[\x90\x91a\x03\xFFa\x08\x86V[`\x01\x81R\x93a\x04\x10\x90\x85\x8F\x01a qV[`@\x9B\x8C\x85\x01R``\x84\x01R6\x90a\x04'\x92a\x08\xCDV[`\x80\x82\x01Ra\x049`d\x84\x01\x83a\x1F\xD8V[\x91a\x04D\x86\x85a\x1F7V[\x8B\x81\x01a\x04P\x91a }V[\x80a\x04Z\x91a\x1F\xD8V[\x96a\x04e\x91\x95a\x1F7V[\x8B\x81\x01a\x04q\x91a }V[\x8C\x81\x01a\x04}\x91a\x1F\xD8V[\x94\x90\x91a\x04\x89\x90a,\xABV[\x966\x90a\x04\x95\x92a\x08\xCDV[\x936\x90a\x04\xA1\x92a\x08\xCDV[\x93`\x84\x01a\x04\xAE\x96a-\x9CV[\x15a\x07+Wa\x04\xBBa/-V[\x94a\x04\xEAa\x04\xC9\x84\x89a\x1F7V[a\x04\xE5a\x04\xDFa\x04\xD9\x8B\x80a\x1F\xD8V[\x90a \xB0V[\x89a\nVV[a$\x05V[a\x054a\x05\ta\x05\x03a\x04\xFD\x8A\x80a\x1F\xD8V[\x90a \xC9V[\x88a\nVV[`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[a\x05Ma\x05\ta\x05\x03a\x05G\x8A\x80a\x1F\xD8V[\x90a \xE2V[a\x05fa\x05\ta\x05\x03a\x05`\x8A\x80a\x1F\xD8V[\x90a \xFBV[a\x05\x83\x86a\x05~a\x05w\x8A\x80a\x1F\xD8V[6\x91a\x08\xCDV[a1\xD7V[\x86a\x05\xDEa\x05\x9Ca\x05\x97a\x05w\x84\x80a\x1F\xD8V[a2\x8AV[\x92a\x05\xD4s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x05\xCB\x8Ba\x05\xC6a\x05w\x88\x80a\x1F\xD8V[a(\xADV[\x95\x16\x80\x95a*\x06V[a\x03;\x86\x84a\x1F7V[\x91a\x05\xECa\x03#\x86\x84a\x1F7V[\x91\x90a\x05\xF8\x84\x80a\x1F\xD8V[\x90\x95a\x06\x10a\x06\x07\x8A\x88a\x1F7V[\x8C\x81\x01\x90a }V[\x8Aa\x063a\x06+a\x06!\x8D\x8Ba\x1F7V[`\x80\x81\x01\x90a\x1F\xD8V[\x92\x90\x99a\x1F\xD8V[\x91\x87;\x15a\x02;W\x8F\x99\x8F\x94`\0\x9B\x8C\x98a\x06|\x97Q\x9E\x8F\x9D\x8E\x9C\x8D\x9B\x7F\x98\x13\x89\xF2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8DR`\x04\x8D\x01a'>V[\x03\x92Z\xF1\x96\x87\x15a\x07&Wa\x06\xD6\x7FZ\xD8A\xB35\xEC\xEFa\x1D\xECd\x01\xE9$\xA4\x9D/\xFCUv\xBE\xEA;J\xE2\xCF\x0F*n\x14*\xB6\x95a\x06\xFC\x93a\x07\t\x9Aa\x07\rW[Pa\x06\xEDa\x06\xE5a\x06\xDFa\x06\xCD\x86\x80a\x1F\xD8V[\x95\x90\x99\x87a\x1F7V[\x8B\x81\x01\x90a }V[\x80a\x1F\xD8V[\x92\x90\x94a\x1F\xD8V[\x93\x90\x92\x89Q\x97\x88\x97\x8C\x89a'\xC8V[\x03\x90\xA1Q\x91\x82\x91\x82a\x02\xA6V[\x03\x90\xF3[\x80a\x07\x1Aa\x07 \x92a\x07\xADV[\x80a\x17\xEBV[8a\x06\xB9V[a'\xBCV[`\x04\x84Q\x7F\x14 \x992\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04`@Q\x7F\x96\xD0\x91F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`A`\x04R`$`\0\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\xC1W`@RV[a\x07~V[``\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\xC1W`@RV[` \x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\xC1W`@RV[`@\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\xC1W`@RV[`\xA0\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\xC1W`@RV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\xC1W`@RV[`@Q\x90a\x08\x84\x82a\x07\xFEV[V[`@Q\x90a\x08\x84\x82a\x08\x1AV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\xC1W`\x1F\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x16` \x01\x90V[\x92\x91\x92a\x08\xD9\x82a\x08\x93V[\x91a\x08\xE7`@Q\x93\x84a\x086V[\x82\x94\x81\x84R\x81\x83\x01\x11a\x02;W\x82\x81` \x93\x84`\0\x96\x017\x01\x01RV[\x90\x80`\x1F\x83\x01\x12\x15a\x02;W\x81` a\x02\xB7\x935\x91\x01a\x08\xCDV[\x90`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x83\x01\x12a\x02;Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x02;W\x83a\tj\x91`\x04\x01a\t\x04V[\x92`$5\x91\x82\x11a\x02;Wa\x02\xB7\x91`\x04\x01a\t\x04V[\x90a\t\x94` \x92\x82\x81Q\x94\x85\x92\x01a\x02@V[\x01\x90V[` a\t\xB1\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x02@V[\x81\x01`\t\x81R\x03\x01\x90 \x90V[` a\t\xD7\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x02@V[\x81\x01`\x04\x81R\x03\x01\x90 \x90V[` a\t\xFD\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x02@V[\x81\x01`\n\x81R\x03\x01\x90 \x90V[` a\n#\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x02@V[\x81\x01`\x05\x81R\x03\x01\x90 \x90V[` a\nI\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x02@V[\x81\x01`\x03\x81R\x03\x01\x90 \x90V[` \x90a\np\x92\x82`@Q\x94\x83\x86\x80\x95Q\x93\x84\x92\x01a\x02@V[\x82\x01\x90\x81R\x03\x01\x90 \x90V[4a\x02;W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\n\xC1\x82a\n\xB1a\n\x9C6a\t\x1FV[\x92\x90\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x02@V[\x81\x01`\x08\x81R\x03\x01\x90 \x90a\nVV[T\x16`@Q\x90\x81R\xF3[4a\x02;W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC` \x816\x01\x12a\x02;W`\x04\x805\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02;W`\xE0\x83\x83\x01\x91\x846\x03\x01\x12a\x02;Wa\x0B+a\x04\xD9\x82\x80a\x1F\xD8V[\x91a\x0BD`$\x85\x01\x93a\x0B>\x85\x85a\x1F\xD8V[\x90a!\x14V[\x90\x81T\x91`\x01`\xFF\x84\x16a\x0BW\x81a\x15\x89V[\x03a\x0EOW`\x03\x81\x01\x92a\x0Bj\x84a(%V[Pa\x0Bt\x90a\x13hV[a\x0B}\x90a2\xE9V[\x90a\x0B\x88\x86\x80a\x1F\xD8V[\x95\x90a\x0B\x94\x89\x89a\x1F\xD8V[\x90\x91a\x0B\x9Ea\x08wV[\x986\x90a\x0B\xAA\x92a\x08\xCDV[\x88R6\x90a\x0B\xB7\x92a\x08\xCDV[` \x87\x01Ra\x0B\xC5\x90a(%V[Pa\x0B\xCF\x90a\x13hV[a\x0B\xD8\x90a+\xF7V[\x94`D\x89\x01\x95a\x0B\xE8\x87\x89a\x1F\xD8V[\x91\x90\x92a\x0B\xF3a\x08\x86V[`\x02\x81R\x94`\x08\x1C`\xFF\x16` \x86\x01\x90a\x0C\x0C\x91a qV[`@\x85\x01R``\x84\x01R6\x90a\x0C!\x92a\x08\xCDV[`\x80\x82\x01Ra\x0C3`\x84\x89\x01\x87a\x1F\xD8V[\x98\x90`d\x82\x01\x99a\x0CD\x8B\x8Aa\x1F\xD8V[\x92\x90\x94a\x0CP\x90a,\xABV[\x94a\x0C]`\x01\x89\x01a\x13hV[\x936\x90a\x0Ci\x92a\x08\xCDV[\x93`\xA4\x01a\x0Cv\x96a-\x9CV[\x15a\x0E&W\x90a\x0C\xDE`\x02\x83a\x0C\xB5a\ro\x96\x95`\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[a\x0C\xCBa\x0C\xC2\x86\x89a\x1F\xD8V[\x90\x86\x84\x01a!\xC0V[a\x0C\xD5\x89\x88a\x1F\xD8V[\x92\x90\x91\x01a!\xC0V[a\r\x16a\r\x10a\x0C\xEE\x86\x80a\x1F\xD8V[a\r\x08a\x0C\xFE\x8A\x8A\x95\x94\x95a\x1F\xD8V[\x94\x90\x926\x91a\x08\xCDV[\x926\x91a\x08\xCDV[\x90a1\xD7V[a\rBa\r)a\x05\x97a\x05w\x87\x80a\x1F\xD8V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x90a\rM\x85\x80a\x1F\xD8V[\x93\x90\x91a\rfa\r]\x89\x89a\x1F\xD8V[\x91\x90\x9A\x89a\x1F\xD8V[\x97\x90\x93\x89a\x1F\xD8V[\x90\x86;\x15a\x02;W`\0\x98\x89\x95a\r\xB4\x94`@Q\x9E\x8F\x9B\x8C\x9A\x8B\x99\x7FO\x01\xE5.\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8BR\x8A\x01a(:V[\x03\x92Z\xF1\x92\x83\x15a\x07&Wa\r\xF8a\x0E\x01\x93a\x0E\x0E\x92\x7FG\x191\xE9\xCC\xDF\x90\x8B\xFF\xCFl\xB1\xF0\"\x17u\xFA\x8BE\xF2\xE6*\xE5~\xDD\x10K!\xD2;\xAB1\x96a\x0E\x13W[P\x83a\x1F\xD8V[\x93\x90\x92\x80a\x1F\xD8V[\x90`@Q\x94\x85\x94\x85a(\x86V[\x03\x90\xA1\0[\x80a\x07\x1Aa\x0E \x92a\x07\xADV[8a\r\xF1V[P`@Q\x7F\x14 \x992\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[P`@Q\x7F\x96\xD0\x91F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x82\x01\x12a\x02;W`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x02;Wa\x02\xB7\x91`\x04\x01a\t\x04V[4a\x02;Wa\x07\ta\x0E\xD26a\x0ExV[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x02cV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x90` \x82\x82\x01\x12a\x02;W`\x045\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02;W\x82`\xA0\x92\x03\x01\x12a\x02;W`\x04\x01\x90V[4a\x02;Wa\x0FD6a\x0E\xE6V[a\x0FQa\x04\xD9\x82\x80a\x1F\xD8V[a\x0Fc` \x83\x01\x91a\x0B>\x83\x85a\x1F\xD8V[\x80T`\x03`\xFF\x82\x16a\x0Ft\x81a\x15\x89V[\x03a\x07TWa\x10ja\x10Ea\x10n\x92`\x03\x85\x01\x90\x86a\x0F\xF4a\x0F\xEFa\x0F\xA1a\x0F\xACa\x0F\xA7a\x0F\xA1\x88a(%V[Pa\x13hV[a2\xE9V[\x95a\x0F\xE5\x8Da\x0F\xDCa\x0F\xC9a\x0F\xC1\x83\x80a\x1F\xD8V[\x99\x90\x93a\x1F\xD8V[\x91\x90\x92a\x0F\xD4a\x08wV[\x996\x91a\x08\xCDV[\x88R6\x91a\x08\xCDV[` \x86\x01Ra(%V[a+\xF7V[\x90a\x10\x15`\xFFa\x10\x02a\x08\x86V[`\x04\x81R\x94[`\x08\x1C\x16` \x85\x01a qV[`@\x83\x01R``\x82\x01Ra\x10+`\x04\x87\x01a\x13hV[`\x80\x82\x01Ra\x10=`@\x89\x01\x89a\x1F\xD8V[\x93\x90\x91a,\xABV[\x92a\x10R`\x01\x88\x01a\x13hV[\x91a\x10_`\x02\x89\x01a\x13hV[\x93``\x8B\x01\x90a-\x9CV[\x15\x90V[a\x11mW\x80T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16`\x04\x17\x90Ua\x10\xBBa\r\x10a\x10\xAB\x84\x80a\x1F\xD8V[a\r\x08a\x0C\xFE\x86\x88\x95\x94\x95a\x1F\xD8V[a\x10\xCEa\r)a\x05\x97a\x05w\x85\x80a\x1F\xD8V[\x91a\x10\xD9\x81\x80a\x1F\xD8V[a\x10\xE3\x84\x84a\x1F\xD8V[\x95\x90\x91\x81;\x15a\x02;W`\0\x80\x94a\x11*`@Q\x99\x8A\x96\x87\x95\x86\x94\x7F\xEFGv\xD2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86R`\x04\x86\x01a(\x86V[\x03\x92Z\xF1\x92\x83\x15a\x07&Wa\r\xF8a\x0E\x01\x93a\x0E\x0E\x92\x7F\xF4t\xFCXP\x88@GO\xD7\x94\x07^Vu\xD2\x0B/\xDD\x9C\xA1\xD5\x85X\xBF\xF9ps\x05\xE09\xCF\x96a\x0E\x13WP\x83a\x1F\xD8V[`\x04`@Q\x7F\x14 \x992\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x02;WV[4a\x02;W``\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x02;Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x02;Wa\x11\xFC\x906\x90`\x04\x01a\t\x04V[`$5\x82\x81\x11a\x02;Wa\x12\x14\x906\x90`\x04\x01a\t\x04V[`D5\x92\x83\x16\x80\x93\x03a\x02;Wa\x12-a\x123\x92a\t\x98V[\x90a\nVV[\x90`\0R` Ra\x07\ta\x12M`@`\0 `\xFF\x90T\x16\x90V[`@Q`\xFF\x90\x91\x16\x81R\x90\x81\x90` \x82\x01\x90V[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a\x12\xAAW[` \x83\x10\x14a\x12{WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\"`\x04R`$`\0\xFD[\x91`\x7F\x16\x91a\x12pV[\x80T`\0\x93\x92a\x12\xC3\x82a\x12aV[\x91\x82\x82R` \x93`\x01\x91`\x01\x81\x16\x90\x81`\0\x14a\x13+WP`\x01\x14a\x12\xEAW[PPPPPV[\x90\x93\x94\x95P`\0\x92\x91\x92R\x83`\0 \x92\x84`\0\x94[\x83\x86\x10a\x13\x17WPPPP\x01\x01\x908\x80\x80\x80\x80a\x12\xE3V[\x80T\x85\x87\x01\x83\x01R\x94\x01\x93\x85\x90\x82\x01a\x12\xFFV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16\x86\x85\x01RPPP\x90\x15\x15`\x05\x1B\x01\x01\x91P8\x80\x80\x80\x80a\x12\xE3V[\x90a\x08\x84a\x13|\x92`@Q\x93\x84\x80\x92a\x12\xB4V[\x03\x83a\x086V[\x90`@\x91\x82Q\x92a\x13\x93\x84a\x07\xC6V[\x83\x81Qa\x13\xAB\x81a\x13\xA4\x81\x87a\x12\xB4V[\x03\x82a\x086V[\x81R\x81Qa\x13\xC0\x81a\x13\xA4\x81`\x01\x88\x01a\x12\xB4V[` \x82\x01R`\x02a\x13\xE5\x83Q\x94a\x13\xD6\x86a\x07\xE2V[a\x13\xA4\x85Q\x80\x94\x81\x93\x01a\x12\xB4V[\x83R\x01RV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`!`\x04R`$`\0\xFD[`\x04\x11\x15a\x14$WV[a\x13\xEBV[4a\x02;Wa\x14?a\x14:6a\x0ExV[a\t\xBEV[`@Q\x90a\x14Q\x82a\x13|\x81\x84a\x12\xB4V[`\xFF`\x02\x82\x01T\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x06a\x14p`\x03\x85\x01a\x13\x83V[\x93\x01T\x16\x90a\x14\x8A`@Q\x94`\x80\x86R`\x80\x86\x01\x90a\x02cV[`\x04\x82\x10\x15a\x14$W\x84\x93` a\x14\xEB\x92a\x07\t\x94\x82\x88\x01R\x86\x81\x03`@\x88\x01R`@a\x14\xD3a\x14\xC3\x85Q``\x85R``\x85\x01\x90a\x02cV[\x84\x86\x01Q\x84\x82\x03\x86\x86\x01Ra\x02cV[\x93\x01Q\x90`@\x81\x85\x03\x91\x01RQ\x91\x81\x81R\x01\x90a\x02cV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x92\x16``\x84\x01RV[4a\x02;Wa\x07\ta\x0E\xD2a\x15\x126a\t\x1FV[\x90a(\xADV[4a\x02;W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\n\xC1a\x15@6a\x0ExV[a\t\xE4V[\x90`\x01` `@Qa\x15V\x81a\x07\xFEV[a\x15\x85\x81\x95`@Qa\x15l\x81a\x13\xA4\x81\x85a\x12\xB4V[\x83Ra\x15~`@Q\x80\x96\x81\x93\x01a\x12\xB4V[\x03\x84a\x086V[\x01RV[`\x05\x11\x15a\x14$WV[`\x03\x11\x15a\x14$WV[\x90`\x03\x82\x10\x15a\x14$WRV[4a\x02;Wa\x15\xC5a\x12-a\x15\xBE6a\t\x1FV[\x91\x90a\n\nV[\x80T\x90`\xFF\x82\x16`\x04a\x15\xEEa\x15\xDD`\x01\x85\x01a\x15EV[\x93a\x13\xA4`@Q\x80\x94\x81\x93\x01a\x12\xB4V[`@Q\x93`\x05\x83\x10\x15a\x14$W\x84\x93a\x16\x1Aa\x16k\x92a\x07\t\x95\x87R`\xFF` \x88\x01\x91`\x08\x1C\x16a\x15\x9DV[`\x80`@\x86\x01R` a\x169\x82Q`@`\x80\x89\x01R`\xC0\x88\x01\x90a\x02cV[\x91\x01Q\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x86\x83\x03\x01`\xA0\x87\x01Ra\x02cV[\x90\x83\x82\x03``\x85\x01Ra\x02cV[4a\x02;Wa\x16\x876a\x0E\xE6V[a\x16\x94a\x04\xD9\x82\x80a\x1F\xD8V[a\x16\xA6` \x83\x01\x91a\x0B>\x83\x85a\x1F\xD8V[\x80T`\x02`\xFF\x82\x16a\x16\xB7\x81a\x15\x89V[\x03a\x07TWa\x10ja\x10Ea\x16\xFC\x92`\x03\x85\x01\x90\x86a\x16\xE4a\x0F\xEFa\x0F\xA1a\x0F\xACa\x0F\xA7a\x0F\xA1\x88a(%V[\x90a\x10\x15`\xFFa\x16\xF2a\x08\x86V[`\x03\x81R\x94a\x10\x08V[a\x11mW\x80T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16`\x03\x17\x90Ua\x179a\r\x10a\x10\xAB\x84\x80a\x1F\xD8V[a\x17La\r)a\x05\x97a\x05w\x85\x80a\x1F\xD8V[\x91a\x17W\x81\x80a\x1F\xD8V[a\x17a\x84\x84a\x1F\xD8V[\x95\x90\x91\x81;\x15a\x02;W`\0\x80\x94a\x17\xA8`@Q\x99\x8A\x96\x87\x95\x86\x94\x7F\xA1\x13\xE4\x11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86R`\x04\x86\x01a(\x86V[\x03\x92Z\xF1\x92\x83\x15a\x07&Wa\r\xF8a\x0E\x01\x93a\x0E\x0E\x92\x7F:2\xA2\xEF$\x99\x03\x18\xA42\xF4t\xA6\\\xA0\x04\xFAy\xB3\xD7\xB8\xF5\xB0=\xC2>\xD4\x1FJF\xA2\xE5\x96a\x0E\x13WP\x83a\x1F\xD8V[`\0\x91\x03\x12a\x02;WV[4a\x02;W`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x02;W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT`\x80\x1C\x16`@Q\x90\x81R\xF3[4a\x02;W` a\x18Wa\x18R6a\x0ExV[a)\x19V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[4a\x02;W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\n\xC1\x82a\x18\x95a\n\x9C6a\t\x1FV[\x81\x01`\x06\x81R\x03\x01\x90 \x90a\nVV[4a\x02;W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x02;W`\x045`\0R`\0` R` `@`\0 T`@Q\x90\x81R\xF3[4a\x02;W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x19+\x82a\x19\x186a\x0ExV[\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x02@V[\x81\x01`\x01\x81R\x03\x01\x90 T\x16`@Q\x90\x81R\xF3[4a\x02;W`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x02;W` `\x0BTg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91`@\x1C\x16\x81R\xF3[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x90` \x82\x82\x01\x12a\x02;W`\x045\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02;W\x82`@\x92\x03\x01\x12a\x02;W`\x04\x01\x90V[4a\x02;Wa\x19\xE66a\x19\x88V[a\x19\xF3a\x04\xD9\x82\x80a\x1F\xD8V[a\x1A\x05` \x83\x01\x91a\x0B>\x83\x85a\x1F\xD8V[`\x03a\x1A\x12\x82T`\xFF\x16\x90V[a\x1A\x1B\x81a\x15\x89V[\x03a\x07TW\x80a\x1A6a\x0F\xA7a\x0F\xA1`\x03a\x1Ab\x95\x01a(%V[P`\x04\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[a\x1Ara\r\x10a\x10\xAB\x84\x80a\x1F\xD8V[a\x1A\x85a\r)a\x05\x97a\x05w\x85\x80a\x1F\xD8V[\x91a\x1A\x90\x81\x80a\x1F\xD8V[a\x1A\x9A\x84\x84a\x1F\xD8V[\x95\x90\x91\x81;\x15a\x02;W`\0\x80\x94a\x1A\xE1`@Q\x99\x8A\x96\x87\x95\x86\x94\x7F\xE7J\x1A\xC2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86R`\x04\x86\x01a(\x86V[\x03\x92Z\xF1\x92\x83\x15a\x07&Wa\r\xF8a\x0E\x01\x93a\x0E\x0E\x92\x7F\x1CHi\xAAT\xEA\xF3\xD7\x93{b>\x04\x12\x80\xEF\xC3 \xF6\xC8\x03(\n\x84\x8E\x13\x98\x8BL\xFC2Z\x96a\x0E\x13WP\x83a\x1F\xD8V[`@Q\x90a\x1B1\x82a\x07\xE2V[`\0\x82RV[4a\x02;W`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x02;Wa\x07\t`@Qa\x1Bu\x81a\x07\xFEV[`\x03\x81R\x7Fibc\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x02cV[4a\x02;Wa\x07\ta\x13\xA4a\x0E\xD2a\x1B\xCF` a\x19\x186a\x0ExV[\x81\x01`\x02\x81R\x03\x01\x90 `@Q\x92\x83\x80\x92a\x12\xB4V[4a\x02;W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\n\xC1\x82a\x1C\x05a\n\x9C6a\t\x1FV[\x81\x01`\x07\x81R\x03\x01\x90 \x90a\nVV[4a\x02;W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\n\xC1a\x1C=6a\x0ExV[a\n0V[4a\x02;Wa\x1CP6a\x19\x88V[` \x81\x01\x90a\x1Cta\x1Cea\x03#\x84\x84a\x1F7V[a\x03A` a\x03;\x87\x87a\x1F7V[P`\x01a\x1C\x84a\x03X\x85\x85a\x1F7V[a\x1C\x8D\x81a\x15\x89V[\x03a\x07TWa\x1C\x9C\x83\x83a\x1F7V[\x90a\x1C\xB9a\x1C\xAF`@\x93\x84\x81\x01\x90a }V[` \x81\x01\x90a\x1F\xD8V[\x90Pa\x1E\x95Wa\x1C\xC7a/-V[\x92a\x1C\xEBa\x1C\xD5\x86\x83a\x1F7V[a\x04\xE5a\x1C\xE5a\x04\xD9\x85\x80a\x1F\xD8V[\x87a\nVV[a\x1D\x04a\x05\ta\x1C\xFEa\x04\xFD\x84\x80a\x1F\xD8V[\x86a\nVV[a\x1D\x17a\x05\ta\x1C\xFEa\x05G\x84\x80a\x1F\xD8V[a\x1D*a\x05\ta\x1C\xFEa\x05`\x84\x80a\x1F\xD8V[a\x1D;\x84a\x05~a\x05w\x84\x80a\x1F\xD8V[a\x1DKa\x05\x97a\x05w\x83\x80a\x1F\xD8V[\x91a\x1D~s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x1Du\x87a\x05\xC6a\x05w\x87\x80a\x1F\xD8V[\x94\x16\x80\x94a*\x06V[a\x1D\x8D` a\x03;\x88\x85a\x1F7V[\x92a\x1D\x9Ba\x03#\x88\x85a\x1F7V[\x90\x91a\x1D\xA7\x85\x80a\x1F\xD8V[\x93\x90\x96a\x1D\xC0a\x1D\xB7\x8C\x89a\x1F7V[\x8A\x81\x01\x90a }V[\x90a\x1D\xCEa\x06!\x8D\x8Aa\x1F7V[\x85\x97\x91\x97;\x15a\x02;W`\0\x97\x88\x94\x8Ea\x1E\x17\x94\x8FQ\x9E\x8F\x9B\x8C\x9A\x8B\x99\x7FD\xDD\x968\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8BR`\x04\x8B\x01a)lV[\x03\x92Z\xF1\x80\x15a\x07&Wa\x07\t\x96\x7F\xE9xM\xBF\x97\xF9p\xE7\xF0\x98\xB5\xA3\xE7\xE3\xBE\xBD\xDDu\xC1K\xD6\xBET\x142>\xEE\xDF!\x06\x1B\n\x94a\x06\xFC\x92a\x1E\x82W[Pa\x1Eua\x06\xDFa\x1Ela\x1Ed\x87\x80a\x1F\xD8V[\x94\x90\x97a\x1F7V[\x88\x81\x01\x90a }V[\x91\x87Q\x95\x86\x95\x8A\x87a)\xD7V[\x80a\x07\x1Aa\x1E\x8F\x92a\x07\xADV[8a\x1EPV[`\x04\x82Q\x7F2i\x93b\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[4a\x02;W`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x02;W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT\x16`@Q\x90\x81R\xF3[\x91\x900s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x14a\x02;Wa\x08\x84\x92a\x1F2\x916\x91a\x08\xCDV[a*\x06V[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x816\x03\x01\x82\x12\x15a\x02;W\x01\x90V[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\x02;W\x01\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x02;W` \x01\x91\x81`\x05\x1B6\x03\x83\x13a\x02;WV[5`\x03\x81\x10\x15a\x02;W\x90V[5`\x05\x81\x10\x15a\x02;W\x90V[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\x02;W\x01\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x02;W` \x01\x91\x816\x03\x83\x13a\x02;WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`2`\x04R`$`\0\xFD[\x90\x15a lW\x80a h\x91a\x1F\xD8V[\x90\x91V[a )V[`\x03\x82\x10\x15a\x14$WRV[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC1\x816\x03\x01\x82\x12\x15a\x02;W\x01\x90V[` \x90\x82`@Q\x93\x84\x92\x837\x81\x01`\x05\x81R\x03\x01\x90 \x90V[` \x90\x82`@Q\x93\x84\x92\x837\x81\x01`\x06\x81R\x03\x01\x90 \x90V[` \x90\x82`@Q\x93\x84\x92\x837\x81\x01`\x07\x81R\x03\x01\x90 \x90V[` \x90\x82`@Q\x93\x84\x92\x837\x81\x01`\x08\x81R\x03\x01\x90 \x90V[` \x91\x92\x83`@Q\x94\x85\x93\x847\x82\x01\x90\x81R\x03\x01\x90 \x90V[\x90`\x05\x81\x10\x15a\x14$W`\xFF\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83T\x16\x91\x16\x17\x90UV[\x81\x81\x10a!oWPPV[`\0\x81U`\x01\x01a!dV[\x91\x90`\x1F\x81\x11a!\x8AWPPPV[a\x08\x84\x92`\0R` `\0 \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a!\xB6W[`\x1F\x01`\x05\x1C\x01\x90a!dV[\x90\x91P\x81\x90a!\xA9V[\x90\x92\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\xC1Wa!\xE6\x81a!\xE0\x84Ta\x12aV[\x84a!{V[`\0`\x1F\x82\x11`\x01\x14a\"DW\x81\x90a\"5\x93\x94\x95`\0\x92a\"9W[PP\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[\x90UV[\x015\x90P8\x80a\"\x03V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x82\x16\x94a\"w\x84`\0R` `\0 \x90V[\x91\x80[\x87\x81\x10a\"\xD0WP\x83`\x01\x95\x96\x97\x10a\"\x98W[PPP\x81\x1B\x01\x90UV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U8\x80\x80a\"\x8EV[\x90\x92` `\x01\x81\x92\x86\x86\x015\x81U\x01\x94\x01\x91\x01a\"zV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\x11`\x04R`$`\0\xFD[h\x01\0\0\0\0\0\0\0\0\x83\x11a\x07\xC1W\x80T\x83\x82U\x80\x84\x10a#\x7FW[P\x90a#F\x81\x92`\0R` `\0 \x90V[\x90`\0\x92[\x84\x84\x10a#YWPPPPPV[`\x01` \x82a#sa#l\x84\x95\x87a\x1F\xD8V[\x90\x88a!\xC0V[\x01\x93\x01\x93\x01\x92\x91a#KV[`\0\x82`\0R\x84` `\0 \x92\x83\x01\x92\x01[\x82\x81\x10a#\x9FWPPa#4V[\x80a#\xAC`\x01\x92Ta\x12aV[\x80a#\xB9W[P\x01a#\x91V[`\x1F\x90\x81\x81\x11\x84\x14a#\xD1WPP\x82\x81U[8a#\xB2V[\x83a#\xF3\x92a#\xE5\x85`\0R` `\0 \x90V[\x92\x01`\x05\x1C\x82\x01\x91\x01a!dV[`\0\x81\x81R` \x81 \x81\x83UUa#\xCBV[\x90a$\x18a$\x12\x82a\x1F\xCBV[\x83a!-V[` a$&` \x83\x01a\x1F\xBEV[`\x03\x81\x10\x15a\x14$W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFFa\xFF\0\x85T\x92`\x08\x1B\x16\x91\x16\x17\x83U`\x01\x80\x84\x01\x90a$r`@\x85\x01\x85a }V[\x92a$}\x84\x80a\x1F\xD8V[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\x07\xC1Wa$\xA1\x84a$\x9B\x87Ta\x12aV[\x87a!{V[`\0\x92`\x1F\x85\x11`\x01\x14a%3WPPa\x08\x84\x96\x94a\x0C\xD5\x94a%\x03\x85`\x04\x99\x96a%\x19\x96a%\x0F\x96`\0\x92a\"9WPP\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[\x90U` \x81\x01\x90a\x1F\xD8V[\x90`\x02\x86\x01a!\xC0V[a\x06!a%)``\x83\x01\x83a\x1FjV[\x90`\x03\x86\x01a#\x17V[\x92\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x85\x16\x90a%h\x87`\0R` `\0 \x90V[\x94\x83\x91[\x83\x83\x10a%\xDBWPPP\x94`\x01\x85a%\x19\x95a%\x0F\x95a\x08\x84\x9C\x9A\x95`\x04\x9C\x99a\x0C\xD5\x9B\x10a%\xA3W[PPP\x81\x1B\x01\x90Ua\x1C\xAFV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U8\x80\x80a%\x96V[\x85\x85\x015\x87U\x95\x86\x01\x95\x93\x81\x01\x93\x91\x81\x01\x91a%lV[`\x1F\x82` \x94\x93\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x93\x81\x86R\x86\x86\x017`\0\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x905\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x826\x03\x01\x81\x12\x15a\x02;W\x01` \x815\x91\x01\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x02;W\x816\x03\x83\x13a\x02;WV[\x90\x82\x81\x81R` \x80\x91\x01\x93` \x83`\x05\x1B\x82\x01\x01\x94\x84`\0\x92[\x85\x84\x10a&\xACWPPPPPPP\x90V[\x90\x91\x92\x93\x94\x95\x96\x85\x80a&\xF2\x83\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x86`\x01\x96\x03\x01\x88Ra&\xEC\x8C\x88a&1V[\x90a%\xF2V[\x99\x01\x94\x01\x94\x01\x92\x95\x94\x93\x91\x90a&\x9BV[a\x02\xB7\x91a'0a'%a'\x17\x84\x80a&1V[`@\x85R`@\x85\x01\x91a%\xF2V[\x92` \x81\x01\x90a&1V[\x91` \x81\x85\x03\x91\x01Ra%\xF2V[\x99\x97\x95\x90a'\xA0\x94a\x02\xB7\x9C\x9A\x96a'va'\x92\x95a'\xAE\x9B\x97\x8F\x80a'i`\xE0\x92a'\x84\x99a\x15\x9DV[\x81` \x82\x01R\x01\x91a&\x81V[\x8D\x81\x03`@\x8F\x01R\x91a%\xF2V[\x90\x8A\x82\x03``\x8C\x01Ra\x02cV[\x90\x88\x82\x03`\x80\x8A\x01Ra'\x03V[\x91\x86\x83\x03`\xA0\x88\x01Ra%\xF2V[\x92`\xC0\x81\x85\x03\x91\x01Ra%\xF2V[`@Q=`\0\x82>=\x90\xFD[\x96\x94\x92a(\x17\x94a'\xFBa\x02\xB7\x9A\x98\x94a'\xEDa(\t\x95`\xA0\x8DR`\xA0\x8D\x01\x90a\x02cV[\x90\x8B\x82\x03` \x8D\x01Ra\x02cV[\x91\x89\x83\x03`@\x8B\x01Ra%\xF2V[\x91\x86\x83\x03``\x88\x01Ra%\xF2V[\x92`\x80\x81\x85\x03\x91\x01Ra%\xF2V[\x80T\x15a lW`\0R` `\0 \x90`\0\x90V[\x96\x94\x92a(x\x94a(\\a(j\x93a\x02\xB7\x9B\x99\x95`\x80\x8CR`\x80\x8C\x01\x91a%\xF2V[\x91\x89\x83\x03` \x8B\x01Ra%\xF2V[\x91\x86\x83\x03`@\x88\x01Ra%\xF2V[\x92``\x81\x85\x03\x91\x01Ra%\xF2V[\x92\x90a(\x9F\x90a\x02\xB7\x95\x93`@\x86R`@\x86\x01\x91a%\xF2V[\x92` \x81\x85\x03\x91\x01Ra%\xF2V[`!a\x08\x84\x91\x93\x92\x93`@Q\x94\x81a(\xCF\x87\x93Q\x80\x92` \x80\x87\x01\x91\x01a\x02@V[\x82\x01\x7F/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01Ra)\n\x82Q\x80\x93` \x87\x85\x01\x91\x01a\x02@V[\x01\x03`\x01\x81\x01\x85R\x01\x83a\x086V[a)7s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91a\n0V[T\x16\x80\x15a)BW\x90V[`\x04`@Q\x7F\xB6\xC7\x1F}\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x97\x95\x91\x93a)\xC9\x95a)\x9Fa\x02\xB7\x9B\x99\x96a)\xBB\x96`\xC0` \x8Ea)\x93\x81a)\xAD\x9Aa\x15\x9DV[\x01R`\xC0\x8D\x01\x91a&\x81V[\x91\x8A\x83\x03`@\x8C\x01Ra%\xF2V[\x90\x87\x82\x03``\x89\x01Ra\x02cV[\x90\x85\x82\x03`\x80\x87\x01Ra'\x03V[\x92`\xA0\x81\x85\x03\x91\x01Ra%\xF2V[\x94\x92\x90\x93a(ja(x\x93a)\xF8a\x02\xB7\x99\x97`\x80\x8AR`\x80\x8A\x01\x90a\x02cV[\x90\x88\x82\x03` \x8A\x01Ra\x02cV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x81a*&\x82a\t\xE4V[T\x16a*`Wa*5\x90a\t\xE4V[\x91\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[`\x04`@Q\x7FF>\xEC\x90\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`@Q\x90a*\x97\x82a\x08\x1AV[`\0`\x80\x83``\x80\x82R\x80` \x83\x01R\x83`@\x83\x01R`@Q\x90a*\xBA\x82a\x07\xC6V[\x80\x82R\x80` \x83\x01R`@Qa*\xCF\x81a\x07\xE2V[\x81\x81R`@\x83\x01R\x82\x01R\x01RV[\x80Q\x15a lW` \x01\x90V[\x80Q\x82\x10\x15a lW` \x91`\x05\x1B\x01\x01\x90V[\x92\x91\x92a+\na*\x8AV[P`\x01\x82\x03a+\xB5Wa+ \x91a\x05w\x91a XV[a+)\x81a2\xE9V[\x92` \x84\x01`\x01\x81QQ\x03a+\x8BWa+Y\x91a+Sa+La\x10j\x93Qa*\xDEV[Q\x91a48V[\x90a4\xFCV[a+aW\x91\x90V[`\x04`@Q\x7F]\x19\x1F\xAE\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04`@Q\x7F\xCCo\xEF$\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04`@Q\x7F\xD47z\x90\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\xC1W`\x05\x1B` \x01\x90V[`@Q\x90a,\x04\x82a\x07\xFEV[`\x01\x82R` `\0[\x81\x81\x10a,MWPPa,4`\x04a,'a\x13\xA4\x93a\t\xBEV[\x01`@Q\x92\x83\x80\x92a\x12\xB4V[\x81Q\x15a lW` \x82\x01Ra,I\x81a*\xDEV[P\x90V[``\x84\x82\x01\x83\x01R\x81\x01a,\rV[\x90a,f\x82a\x08\x93V[a,s`@Q\x91\x82a\x086V[\x82\x81R\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0a,\xA1\x82\x94a\x08\x93V[\x01\x90` 6\x91\x017V[\x90a-\x1Ba-\x03a,\xDEa,\xD9a,\xD4a,\xCE\x87Qa,\xC9\x81a\x15\x89V[a7\xF0V[`\x03\x0B\x90V[a8eV[a5HV[a,\xFDa,\xD9a,\xD4a,\xCE` \x89\x01Qa,\xF8\x81a\x15\x93V[a8\x8CV[\x90a5rV[a,\xFDa,\xD9a-\x16`@\x87\x01Qa8\xC7V[a9\x07V[`\0\x90[``\x84\x01Q\x80Q\x83\x10\x15a-RW`\x01\x91a,\xFDa,\xD9a-C\x86a-J\x95a*\xEBV[QQa9\x07V[\x91\x01\x90a-\x1FV[Pa-\x7F\x91Pa-sa-x\x91\x94\x93\x94a,\xFDa,\xD9`\x80\x87\x01QQa9\x07V[a,\\V[\x80\x92a5\xE6V[\x81R\x90V[\x90\x81` \x91\x03\x12a\x02;WQ\x80\x15\x15\x81\x03a\x02;W\x90V[\x92\x90\x93\x94\x95\x91\x95\x83Qa-\xAE\x90a)\x19V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x95\x84Q\x94``\x01Q`@\x01QQ\x91a-\xDB\x91a7LV[\x90`@Q\x97\x88\x96\x87\x96\x7F\xF9\xBBZQ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x88R`\x04\x88\x01a\x01 \x90Ra\x01$\x88\x01a.\x1E\x91a\x02cV[\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x81a.3\x82a\x11\x97V[\x16`$\x8A\x01R` \x01a.E\x90a\x11\x97V[\x16`D\x88\x01R`d\x87\x01`\0\x90R`\x84\x87\x01`\0\x90R\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x94\x85\x88\x83\x03\x01`\xA4\x89\x01Ra.\x90\x92a%\xF2V[\x83\x86\x82\x03\x01`\xC4\x87\x01Ra.\xA3\x91a\x02cV[\x82\x85\x82\x03\x01`\xE4\x86\x01Ra.\xB6\x91a\x02cV[\x90\x83\x82\x03\x01a\x01\x04\x84\x01Ra.\xCA\x91a\x02cV[\x03\x81Z` \x94`\0\x91\xF1\x90\x81\x15a\x07&W`\0\x91a.\xE6WP\x90V[a\x02\xB7\x91P` =` \x11a/\x08W[a/\0\x81\x83a\x086V[\x81\x01\x90a-\x84V[P=a.\xF6V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x91\x16\x90\x81\x14a/(W`\x01\x01\x90V[a\"\xE8V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT`\x80\x1C\x16\x80\x81`\0\x92z\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x80\x82\x10\x15a1bW[Pm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x80\x83\x10\x15a1SW[Pf#\x86\xF2o\xC1\0\0\x80\x83\x10\x15a1DW[Pc\x05\xF5\xE1\0\x80\x83\x10\x15a15W[Pa'\x10\x80\x83\x10\x15a1&W[P`d\x82\x10\x15a1\x16W[`\n\x80\x92\x10\x15a1\x0CW[`\x01\x90\x81`!a/\xD6`\x01\x88\x01a,\\V[\x96\x87\x01\x01\x90[a0\xABW[PPPPa0aa\x02\xB7\x91a0\\a00\x94`@Q\x95\x86\x91a0*` \x84\x01`\x08\x90\x7Fchannel-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\x01\x90V[\x90a\t\x81V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x86R\x85a\x086V[a/\x0FV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFw\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x0BT\x92`\x80\x1B\x16\x91\x16\x17`\x0BUV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x91\x01\x91\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x82\x06\x1A\x83S\x04\x91\x82\x15a1\x07W\x91\x90\x82a/\xDCV[a/\xE1V[\x92`\x01\x01\x92a/\xC4V[\x92\x90`d`\x02\x91\x04\x91\x01\x92a/\xB9V[`\x04\x91\x94\x92\x04\x91\x01\x928a/\xAEV[`\x08\x91\x94\x92\x04\x91\x01\x928a/\xA1V[`\x10\x91\x94\x92\x04\x91\x01\x928a/\x92V[` \x91\x94\x92\x04\x91\x01\x928a/\x80V[`@\x94P\x81\x04\x91P8a/gV[\x90\x81Ta1|\x81a+\xDFV[\x92`@\x93a1\x8D`@Q\x91\x82a\x086V[\x82\x81R\x80\x94` \x80\x92\x01\x92`\0R` `\0 \x90`\0\x93[\x85\x85\x10a1\xB4WPPPPPPV[`\x01\x84\x81\x92\x84Qa1\xC9\x81a\x13\xA4\x81\x8Aa\x12\xB4V[\x81R\x01\x93\x01\x94\x01\x93\x91a1\xA5V[\x90a1\xEAa1\xE4\x83a\n\nV[\x82a\nVV[\x90`@Q\x90a1\xF8\x82a\x08\x1AV[\x82T\x92`\xFF\x84\x16\x92`\x05\x84\x10\x15a\x14$W`\x04a2`a2j\x93a2.`\xFFa2\x87\x99a2w\x99\x87R`\x08\x1C\x16` \x86\x01a qV[a2:`\x01\x82\x01a\x15EV[`@\x85\x01Ra2K`\x03\x82\x01a1pV[``\x85\x01Ra\x13\xA4`@Q\x80\x94\x81\x93\x01a\x12\xB4V[`\x80\x82\x01Ra,\xABV[` \x81Q\x91\x01 \x93a7\xDCV[`\0R`\0` R`@`\0 \x90V[UV[a2\xA8s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91a\t\xE4V[T\x16\x80\x15a2\xB3W\x90V[`\x04`@Q\x7F\xC6\x83\x0C\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04\x82\x10\x15a\x14$WRV[a2\xFB\x90a2\xF5a*\x8AV[Pa\t\xBEV[`@\x80Q\x91a3\t\x83a\x08\x1AV[\x81Qa3\x19\x81a\x13\xA4\x81\x85a\x12\xB4V[\x83R`\x01\x80\x82\x01\x90\x81Ta3,\x81a+\xDFV[\x92a39\x86Q\x94\x85a\x086V[\x81\x84R`\0\x90\x81R` \x80\x82 \x81\x86\x01[\x84\x84\x10a3\xF9WPPPPPP\x90`\x03\x91` \x85\x01Ra3\xB4a3\xA3`\x06a3v`\x02\x85\x01T`\xFF\x16\x90V[\x93a3\x84\x87\x89\x01\x95\x86a2\xDDV[a3\x8F\x86\x82\x01a\x13\x83V[``\x89\x01R\x01Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x80\x86\x01RV[Qa3\xBE\x81a\x14\x1AV[a3\xC7\x81a\x14\x1AV[\x03a3\xD0WP\x90V[`\x04\x90Q\x7F\x8C\xA9\x89\x90\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x02\x83\x87\x92\x8BQa4\t\x81a\x07\xFEV[\x8CQa4\x19\x81a\x13\xA4\x81\x8Aa\x12\xB4V[\x81Ra4&\x85\x87\x01a1pV[\x83\x82\x01R\x81R\x01\x92\x01\x93\x01\x92\x90a3JV[`\x03\x81\x10\x15a\x14$W`\x01\x81\x03a4\x83WP`@Qa4V\x81a\x07\xFEV[`\x0F\x81R\x7FORDER_UNORDERED\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R\x90V[`\x02\x03a4\xC3W`@Qa4\x96\x81a\x07\xFEV[`\r\x81R\x7FORDER_ORDERED\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R\x90V[`@Qa4\xCF\x81a\x07\xFEV[`\x0F\x81R\x7F_ORDER_INVALID_\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R\x90V[\x90\x80Q` \x80\x92\x01 \x90`\0[\x81\x84\x01Q\x80Q\x82\x10\x15a5>Wa5!\x82\x85\x92a*\xEBV[Q\x83\x81Q\x91\x01 \x14a55W`\x01\x01a5\tV[PPPP`\x01\x90V[PPPPP`\0\x90V[`\x01\x01\x90\x81`\x01\x11a/(WV[\x90` \x82\x01\x80\x92\x11a/(WV[` \x01\x90\x81` \x11a/(WV[\x91\x90\x82\x01\x80\x92\x11a/(WV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x82\x01\x91\x82\x11a/(WV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x01\x91\x82\x11a/(WV[\x91\x90\x82\x03\x91\x82\x11a/(WV[\x91\x90\x91` \x90`\0\x91\x81Qa5\xFA\x81a\x15\x89V[a6\x03\x81a\x15\x89V[a7\x16W[a68a6G\x91\x86` \x85\x01\x80Qa6\x1F\x81a\x15\x93V[a6(\x81a\x15\x93V[a6\xE4W[Pa,\xFD\x90\x82a:\xBDV[a,\xFD\x86\x82`@\x86\x01Qa91V[\x91``\x82\x01\x90\x81QQa6\x93W[PP`\x80\x01\x80QQ\x92\x93a\x02\xB7\x93a6oW[PPa5\x7FV[\x80a6\x84\x84a,\xFDa,\xFD\x94a6\x8C\x97a:\xD7V[\x80\x93Qa;\xE0V[8\x80a6hV[\x91\x93\x90\x92[\x83QQ\x83\x10\x15a6\xD3Wa6\xCBa6\xB5\x82a,\xFD\x89`\x01\x95a:\xCAV[a,\xFD\x88\x82a6\xC5\x88\x8AQa*\xEBV[Qa;\xE0V[\x92\x01\x91a6\x98V[\x90\x93\x90\x92P\x90P`\x80a\x02\xB7a6UV[\x81a,\xFD\x91a6\xFD\x85a,\xFDa7\n\x96a7\x0F\x98a:\xB0V[\x93\x84\x91Qa,\xF8\x81a\x15\x93V[a9\x1CV[\x868a6-V[Pa6Ga68a7Da71a7,\x88a:xV[a5dV[a,\xFD\x88\x82a7\n\x88Qa,\xC9\x81a\x15\x89V[\x91PPa6\x08V[``\x04\x92a\x15\x89V[\x14a8HW`\0\x80\xFD[`\x04\x90V[P`\x03\x90V[P`\x02\x90V[P`\x01\x90V[P`\0\x90V[`\0\x81`\x07\x0B\x12`\0\x14a8yWP`\n\x90V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x02\xB7\x91\x16a:VV[`\x03\x81\x10\x15a\x14$W\x80\x15a8_Wa8\xA4\x81a\x15\x93V[`\x01\x81\x14a8YW\x80a8\xB8`\x02\x92a\x15\x93V[\x14a8\xC2W`\0\x80\xFD[`\x02\x90V[a8\xD2\x81QQa9\x07V[\x80`\x01\x01\x91\x82`\x01\x11a/(W` a8\xED\x91\x01QQa9\x07V[\x80`\x01\x01`\x01\x11a/(W`\x02\x91\x01\x01\x80\x91\x11a/(W\x90V[a9\x10\x81a:VV[\x81\x01\x80\x91\x11a/(W\x90V[\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x02\xB7\x93\x92\x16a;\0V[\x91a9>a-s\x84a8\xC7V[\x92` \x90\x80QQa9\xC3W[a9\x9Da\x02\xB7\x95a9\xA2\x94a9ra9\x97\x95` a9\x91\x96\x01\x84\x81QQa9\xA7WPPa5\x7FV[\x94\x85\x92a9\x89a9\x83\x84\x8B\x87a;\0V[\x8Aa5rV[\x95\x86\x91a5VV[\x92a5rV[\x90a;KV[a5rV[a5\xD9V[\x80a6\x84\x84a,\xFDa,\xFD\x94a9\xBC\x97a:\xF3V[8\x84a6hV[a9\xCC\x85a:\xE4V[\x91\x82\x81\x01\x92\x83\x82\x11a/(W\x82Q\x90\x81Q\x91a9\xE9\x89\x87\x85a;\0V[\x93`\0\x90\x80\x86`\0\x95\x01\x8C\x01\x01\x92\x01\x91[\x84\x84\x10a:@WPPP\x90P\x81\x01\x80\x91\x11a/(Wa\x02\xB7\x95a9\xA2\x94a9ra9\x91\x94` a:0a9\x9D\x96a9\x97\x99a5rV[\x97PP\x94PP\x94P\x95PPa9JV[\x82Q\x82\x1A\x81S`\x01\x93\x84\x01\x93\x92\x83\x01\x92\x01a9\xFAV[`\x01\x80\x91`\x07\x90`\x07\x1C\x80[a:lWPPP\x90V[\x92\x82\x01\x92\x81\x1C\x80a:bV[`\x08\x90`\0\x90` \x01\x82[`\x07\x1C\x92\x83\x15a:\xA6W`\x80\x17\x81S`\x01\x80\x91\x01\x91\x01`\x7F\x83\x16\x92\x91\x90\x91a:\x83V[\x90`\x01\x93PS\x01\x90V[`\0\x91\x82\x91\x01`\x10a:\xA6V[`\0\x91\x82\x91\x01`\x1Aa:\xA6V[`\0\x91\x82\x91\x01`\"a:\xA6V[`\0\x91\x82\x91\x01`*a:\xA6V[`\0\x90\x81\x90` \x01`\na:\xA6V[`\0\x91\x82\x91\x01`\x12a:\xA6V[`\x7F\x93\x92`\0\x92\x85\x83\x16\x92\x91\x01\x90[`\x07\x1C\x91\x82\x15a;0W`\x80\x17\x81S`\x01\x92\x83\x01\x92\x85\x83\x16\x92\x91\x01\x90a;\x0FV[\x91P`\x01\x93\x94PS\x01\x90V[`\x1F\x81\x11a/(Wa\x01\0\n\x90V[\x91\x92\x90\x83\x15a;\xDAW\x92\x91[` \x93\x84\x84\x11\x15a;\xABW\x81Q\x81R\x84\x81\x01\x80\x91\x11a/(W\x93\x81\x01\x80\x91\x11a/(W\x91\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x90\x81\x11a/(W\x91a;WV[\x92\x90\x91\x93P` \x03` \x81\x11a/(Wa;\xC7a;\xCC\x91a;W\x80c\xD1){\x8D\x14a\x019W\x80c\xDD4i\xFC\x14a\x014Wc\xE1\xB1{C\x14a\x01/W`\0\x80\xFD[a\x1E\xBEV[a\x1CBV[a\x1C\x15V[a\x1B\xE5V[a\x1B\xB3V[a\x1B7V[a\x19\xD8V[a\x19?V[a\x18\xEFV[a\x18\xA5V[a\x18uV[a\x18?V[a\x17\xF6V[a\x16yV[a\x15\xAAV[a\x15\x18V[a\x14\xFEV[a\x14)V[a\x11\xACV[a\x0F6V[a\x0E\xC1V[a\n\xCBV[a\n|V[a\x02\xBAV[4a\x02;W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x02;W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11a\x02;W6`#\x83\x01\x12\x15a\x02;W\x81`\x04\x015\x90\x81\x11a\x02;W6`$\x82\x84\x01\x01\x11a\x02;W`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x02;W`$a\x029\x93\x01a\x1F\x04V[\0[`\0\x80\xFD[`\0[\x83\x81\x10a\x02SWPP`\0\x91\x01RV[\x81\x81\x01Q\x83\x82\x01R` \x01a\x02CV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x93a\x02\x9F\x81Q\x80\x92\x81\x87R\x87\x80\x88\x01\x91\x01a\x02@V[\x01\x16\x01\x01\x90V[\x90` a\x02\xB7\x92\x81\x81R\x01\x90a\x02cV[\x90V[4a\x02;W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x90\x80\x826\x01\x12a\x02;W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02;W`\xC0\x81`\x04\x01\x93\x826\x03\x01\x12a\x02;W`$\x81\x01\x90a\x03Ga\x03-a\x03#\x84\x87a\x1F7V[``\x81\x01\x90a\x1FjV[a\x03A\x86a\x03;\x87\x8Aa\x1F7V[\x01a\x1F\xBEV[\x91a*\xFFV[\x92\x90`\x02a\x03]a\x03X\x84\x89a\x1F7V[a\x1F\xCBV[a\x03f\x81a\x15\x89V[\x03a\x07TWa\x03u\x86\x80a\x1F\xD8V[\x94\x90a\x03\x7Fa\x08wV[\x956\x90a\x03\x8B\x92a\x08\xCDV[\x85Ra\x03\x95a\x1B$V[\x86\x86\x01R\x82\x86a\x03\xA5\x82\x8Aa\x1F7V[\x01a\x03\xAF\x90a\x1F\xBEV[\x94\x88a\x03\xBB\x83\x82a\x1F7V[``\x81\x01a\x03\xC8\x91a\x1FjV[a\x03\xD1\x91a XV[6\x90a\x03\xDC\x92a\x08\xCDV[a\x03\xE5\x90a+\xF7V[\x96`D\x83\x01\x97a\x03\xF5\x89\x84a\x1F\xD8V[\x90\x91a\x03\xFFa\x08\x86V[`\x01\x81R\x93a\x04\x10\x90\x85\x8F\x01a qV[`@\x9B\x8C\x85\x01R``\x84\x01R6\x90a\x04'\x92a\x08\xCDV[`\x80\x82\x01Ra\x049`d\x84\x01\x83a\x1F\xD8V[\x91a\x04D\x86\x85a\x1F7V[\x8B\x81\x01a\x04P\x91a }V[\x80a\x04Z\x91a\x1F\xD8V[\x96a\x04e\x91\x95a\x1F7V[\x8B\x81\x01a\x04q\x91a }V[\x8C\x81\x01a\x04}\x91a\x1F\xD8V[\x94\x90\x91a\x04\x89\x90a,\xABV[\x966\x90a\x04\x95\x92a\x08\xCDV[\x936\x90a\x04\xA1\x92a\x08\xCDV[\x93`\x84\x01a\x04\xAE\x96a-\x9CV[\x15a\x07+Wa\x04\xBBa/-V[\x94a\x04\xEAa\x04\xC9\x84\x89a\x1F7V[a\x04\xE5a\x04\xDFa\x04\xD9\x8B\x80a\x1F\xD8V[\x90a \xB0V[\x89a\nVV[a$\x05V[a\x054a\x05\ta\x05\x03a\x04\xFD\x8A\x80a\x1F\xD8V[\x90a \xC9V[\x88a\nVV[`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[a\x05Ma\x05\ta\x05\x03a\x05G\x8A\x80a\x1F\xD8V[\x90a \xE2V[a\x05fa\x05\ta\x05\x03a\x05`\x8A\x80a\x1F\xD8V[\x90a \xFBV[a\x05\x83\x86a\x05~a\x05w\x8A\x80a\x1F\xD8V[6\x91a\x08\xCDV[a1\xD7V[\x86a\x05\xDEa\x05\x9Ca\x05\x97a\x05w\x84\x80a\x1F\xD8V[a2\x8AV[\x92a\x05\xD4s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x05\xCB\x8Ba\x05\xC6a\x05w\x88\x80a\x1F\xD8V[a(\xADV[\x95\x16\x80\x95a*\x06V[a\x03;\x86\x84a\x1F7V[\x91a\x05\xECa\x03#\x86\x84a\x1F7V[\x91\x90a\x05\xF8\x84\x80a\x1F\xD8V[\x90\x95a\x06\x10a\x06\x07\x8A\x88a\x1F7V[\x8C\x81\x01\x90a }V[\x8Aa\x063a\x06+a\x06!\x8D\x8Ba\x1F7V[`\x80\x81\x01\x90a\x1F\xD8V[\x92\x90\x99a\x1F\xD8V[\x91\x87;\x15a\x02;W\x8F\x99\x8F\x94`\0\x9B\x8C\x98a\x06|\x97Q\x9E\x8F\x9D\x8E\x9C\x8D\x9B\x7F\x98\x13\x89\xF2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8DR`\x04\x8D\x01a'>V[\x03\x92Z\xF1\x96\x87\x15a\x07&Wa\x06\xD6\x7FZ\xD8A\xB35\xEC\xEFa\x1D\xECd\x01\xE9$\xA4\x9D/\xFCUv\xBE\xEA;J\xE2\xCF\x0F*n\x14*\xB6\x95a\x06\xFC\x93a\x07\t\x9Aa\x07\rW[Pa\x06\xEDa\x06\xE5a\x06\xDFa\x06\xCD\x86\x80a\x1F\xD8V[\x95\x90\x99\x87a\x1F7V[\x8B\x81\x01\x90a }V[\x80a\x1F\xD8V[\x92\x90\x94a\x1F\xD8V[\x93\x90\x92\x89Q\x97\x88\x97\x8C\x89a'\xC8V[\x03\x90\xA1Q\x91\x82\x91\x82a\x02\xA6V[\x03\x90\xF3[\x80a\x07\x1Aa\x07 \x92a\x07\xADV[\x80a\x17\xEBV[8a\x06\xB9V[a'\xBCV[`\x04\x84Q\x7F\x14 \x992\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04`@Q\x7F\x96\xD0\x91F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`A`\x04R`$`\0\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\xC1W`@RV[a\x07~V[``\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\xC1W`@RV[` \x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\xC1W`@RV[`@\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\xC1W`@RV[`\xA0\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\xC1W`@RV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\xC1W`@RV[`@Q\x90a\x08\x84\x82a\x07\xFEV[V[`@Q\x90a\x08\x84\x82a\x08\x1AV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\xC1W`\x1F\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x16` \x01\x90V[\x92\x91\x92a\x08\xD9\x82a\x08\x93V[\x91a\x08\xE7`@Q\x93\x84a\x086V[\x82\x94\x81\x84R\x81\x83\x01\x11a\x02;W\x82\x81` \x93\x84`\0\x96\x017\x01\x01RV[\x90\x80`\x1F\x83\x01\x12\x15a\x02;W\x81` a\x02\xB7\x935\x91\x01a\x08\xCDV[\x90`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x83\x01\x12a\x02;Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x02;W\x83a\tj\x91`\x04\x01a\t\x04V[\x92`$5\x91\x82\x11a\x02;Wa\x02\xB7\x91`\x04\x01a\t\x04V[\x90a\t\x94` \x92\x82\x81Q\x94\x85\x92\x01a\x02@V[\x01\x90V[` a\t\xB1\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x02@V[\x81\x01`\t\x81R\x03\x01\x90 \x90V[` a\t\xD7\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x02@V[\x81\x01`\x04\x81R\x03\x01\x90 \x90V[` a\t\xFD\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x02@V[\x81\x01`\n\x81R\x03\x01\x90 \x90V[` a\n#\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x02@V[\x81\x01`\x05\x81R\x03\x01\x90 \x90V[` a\nI\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x02@V[\x81\x01`\x03\x81R\x03\x01\x90 \x90V[` \x90a\np\x92\x82`@Q\x94\x83\x86\x80\x95Q\x93\x84\x92\x01a\x02@V[\x82\x01\x90\x81R\x03\x01\x90 \x90V[4a\x02;W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\n\xC1\x82a\n\xB1a\n\x9C6a\t\x1FV[\x92\x90\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x02@V[\x81\x01`\x08\x81R\x03\x01\x90 \x90a\nVV[T\x16`@Q\x90\x81R\xF3[4a\x02;W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC` \x816\x01\x12a\x02;W`\x04\x805\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02;W`\xE0\x83\x83\x01\x91\x846\x03\x01\x12a\x02;Wa\x0B+a\x04\xD9\x82\x80a\x1F\xD8V[\x91a\x0BD`$\x85\x01\x93a\x0B>\x85\x85a\x1F\xD8V[\x90a!\x14V[\x90\x81T\x91`\x01`\xFF\x84\x16a\x0BW\x81a\x15\x89V[\x03a\x0EOW`\x03\x81\x01\x92a\x0Bj\x84a(%V[Pa\x0Bt\x90a\x13hV[a\x0B}\x90a2\xE9V[\x90a\x0B\x88\x86\x80a\x1F\xD8V[\x95\x90a\x0B\x94\x89\x89a\x1F\xD8V[\x90\x91a\x0B\x9Ea\x08wV[\x986\x90a\x0B\xAA\x92a\x08\xCDV[\x88R6\x90a\x0B\xB7\x92a\x08\xCDV[` \x87\x01Ra\x0B\xC5\x90a(%V[Pa\x0B\xCF\x90a\x13hV[a\x0B\xD8\x90a+\xF7V[\x94`D\x89\x01\x95a\x0B\xE8\x87\x89a\x1F\xD8V[\x91\x90\x92a\x0B\xF3a\x08\x86V[`\x02\x81R\x94`\x08\x1C`\xFF\x16` \x86\x01\x90a\x0C\x0C\x91a qV[`@\x85\x01R``\x84\x01R6\x90a\x0C!\x92a\x08\xCDV[`\x80\x82\x01Ra\x0C3`\x84\x89\x01\x87a\x1F\xD8V[\x98\x90`d\x82\x01\x99a\x0CD\x8B\x8Aa\x1F\xD8V[\x92\x90\x94a\x0CP\x90a,\xABV[\x94a\x0C]`\x01\x89\x01a\x13hV[\x936\x90a\x0Ci\x92a\x08\xCDV[\x93`\xA4\x01a\x0Cv\x96a-\x9CV[\x15a\x0E&W\x90a\x0C\xDE`\x02\x83a\x0C\xB5a\ro\x96\x95`\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[a\x0C\xCBa\x0C\xC2\x86\x89a\x1F\xD8V[\x90\x86\x84\x01a!\xC0V[a\x0C\xD5\x89\x88a\x1F\xD8V[\x92\x90\x91\x01a!\xC0V[a\r\x16a\r\x10a\x0C\xEE\x86\x80a\x1F\xD8V[a\r\x08a\x0C\xFE\x8A\x8A\x95\x94\x95a\x1F\xD8V[\x94\x90\x926\x91a\x08\xCDV[\x926\x91a\x08\xCDV[\x90a1\xD7V[a\rBa\r)a\x05\x97a\x05w\x87\x80a\x1F\xD8V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x90a\rM\x85\x80a\x1F\xD8V[\x93\x90\x91a\rfa\r]\x89\x89a\x1F\xD8V[\x91\x90\x9A\x89a\x1F\xD8V[\x97\x90\x93\x89a\x1F\xD8V[\x90\x86;\x15a\x02;W`\0\x98\x89\x95a\r\xB4\x94`@Q\x9E\x8F\x9B\x8C\x9A\x8B\x99\x7FO\x01\xE5.\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8BR\x8A\x01a(:V[\x03\x92Z\xF1\x92\x83\x15a\x07&Wa\r\xF8a\x0E\x01\x93a\x0E\x0E\x92\x7FG\x191\xE9\xCC\xDF\x90\x8B\xFF\xCFl\xB1\xF0\"\x17u\xFA\x8BE\xF2\xE6*\xE5~\xDD\x10K!\xD2;\xAB1\x96a\x0E\x13W[P\x83a\x1F\xD8V[\x93\x90\x92\x80a\x1F\xD8V[\x90`@Q\x94\x85\x94\x85a(\x86V[\x03\x90\xA1\0[\x80a\x07\x1Aa\x0E \x92a\x07\xADV[8a\r\xF1V[P`@Q\x7F\x14 \x992\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[P`@Q\x7F\x96\xD0\x91F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x82\x01\x12a\x02;W`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x02;Wa\x02\xB7\x91`\x04\x01a\t\x04V[4a\x02;Wa\x07\ta\x0E\xD26a\x0ExV[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x02cV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x90` \x82\x82\x01\x12a\x02;W`\x045\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02;W\x82`\xA0\x92\x03\x01\x12a\x02;W`\x04\x01\x90V[4a\x02;Wa\x0FD6a\x0E\xE6V[a\x0FQa\x04\xD9\x82\x80a\x1F\xD8V[a\x0Fc` \x83\x01\x91a\x0B>\x83\x85a\x1F\xD8V[\x80T`\x03`\xFF\x82\x16a\x0Ft\x81a\x15\x89V[\x03a\x07TWa\x10ja\x10Ea\x10n\x92`\x03\x85\x01\x90\x86a\x0F\xF4a\x0F\xEFa\x0F\xA1a\x0F\xACa\x0F\xA7a\x0F\xA1\x88a(%V[Pa\x13hV[a2\xE9V[\x95a\x0F\xE5\x8Da\x0F\xDCa\x0F\xC9a\x0F\xC1\x83\x80a\x1F\xD8V[\x99\x90\x93a\x1F\xD8V[\x91\x90\x92a\x0F\xD4a\x08wV[\x996\x91a\x08\xCDV[\x88R6\x91a\x08\xCDV[` \x86\x01Ra(%V[a+\xF7V[\x90a\x10\x15`\xFFa\x10\x02a\x08\x86V[`\x04\x81R\x94[`\x08\x1C\x16` \x85\x01a qV[`@\x83\x01R``\x82\x01Ra\x10+`\x04\x87\x01a\x13hV[`\x80\x82\x01Ra\x10=`@\x89\x01\x89a\x1F\xD8V[\x93\x90\x91a,\xABV[\x92a\x10R`\x01\x88\x01a\x13hV[\x91a\x10_`\x02\x89\x01a\x13hV[\x93``\x8B\x01\x90a-\x9CV[\x15\x90V[a\x11mW\x80T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16`\x04\x17\x90Ua\x10\xBBa\r\x10a\x10\xAB\x84\x80a\x1F\xD8V[a\r\x08a\x0C\xFE\x86\x88\x95\x94\x95a\x1F\xD8V[a\x10\xCEa\r)a\x05\x97a\x05w\x85\x80a\x1F\xD8V[\x91a\x10\xD9\x81\x80a\x1F\xD8V[a\x10\xE3\x84\x84a\x1F\xD8V[\x95\x90\x91\x81;\x15a\x02;W`\0\x80\x94a\x11*`@Q\x99\x8A\x96\x87\x95\x86\x94\x7F\xEFGv\xD2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86R`\x04\x86\x01a(\x86V[\x03\x92Z\xF1\x92\x83\x15a\x07&Wa\r\xF8a\x0E\x01\x93a\x0E\x0E\x92\x7F\xF4t\xFCXP\x88@GO\xD7\x94\x07^Vu\xD2\x0B/\xDD\x9C\xA1\xD5\x85X\xBF\xF9ps\x05\xE09\xCF\x96a\x0E\x13WP\x83a\x1F\xD8V[`\x04`@Q\x7F\x14 \x992\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x02;WV[4a\x02;W``\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x02;Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x02;Wa\x11\xFC\x906\x90`\x04\x01a\t\x04V[`$5\x82\x81\x11a\x02;Wa\x12\x14\x906\x90`\x04\x01a\t\x04V[`D5\x92\x83\x16\x80\x93\x03a\x02;Wa\x12-a\x123\x92a\t\x98V[\x90a\nVV[\x90`\0R` Ra\x07\ta\x12M`@`\0 `\xFF\x90T\x16\x90V[`@Q`\xFF\x90\x91\x16\x81R\x90\x81\x90` \x82\x01\x90V[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a\x12\xAAW[` \x83\x10\x14a\x12{WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\"`\x04R`$`\0\xFD[\x91`\x7F\x16\x91a\x12pV[\x80T`\0\x93\x92a\x12\xC3\x82a\x12aV[\x91\x82\x82R` \x93`\x01\x91`\x01\x81\x16\x90\x81`\0\x14a\x13+WP`\x01\x14a\x12\xEAW[PPPPPV[\x90\x93\x94\x95P`\0\x92\x91\x92R\x83`\0 \x92\x84`\0\x94[\x83\x86\x10a\x13\x17WPPPP\x01\x01\x908\x80\x80\x80\x80a\x12\xE3V[\x80T\x85\x87\x01\x83\x01R\x94\x01\x93\x85\x90\x82\x01a\x12\xFFV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16\x86\x85\x01RPPP\x90\x15\x15`\x05\x1B\x01\x01\x91P8\x80\x80\x80\x80a\x12\xE3V[\x90a\x08\x84a\x13|\x92`@Q\x93\x84\x80\x92a\x12\xB4V[\x03\x83a\x086V[\x90`@\x91\x82Q\x92a\x13\x93\x84a\x07\xC6V[\x83\x81Qa\x13\xAB\x81a\x13\xA4\x81\x87a\x12\xB4V[\x03\x82a\x086V[\x81R\x81Qa\x13\xC0\x81a\x13\xA4\x81`\x01\x88\x01a\x12\xB4V[` \x82\x01R`\x02a\x13\xE5\x83Q\x94a\x13\xD6\x86a\x07\xE2V[a\x13\xA4\x85Q\x80\x94\x81\x93\x01a\x12\xB4V[\x83R\x01RV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`!`\x04R`$`\0\xFD[`\x04\x11\x15a\x14$WV[a\x13\xEBV[4a\x02;Wa\x14?a\x14:6a\x0ExV[a\t\xBEV[`@Q\x90a\x14Q\x82a\x13|\x81\x84a\x12\xB4V[`\xFF`\x02\x82\x01T\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x06a\x14p`\x03\x85\x01a\x13\x83V[\x93\x01T\x16\x90a\x14\x8A`@Q\x94`\x80\x86R`\x80\x86\x01\x90a\x02cV[`\x04\x82\x10\x15a\x14$W\x84\x93` a\x14\xEB\x92a\x07\t\x94\x82\x88\x01R\x86\x81\x03`@\x88\x01R`@a\x14\xD3a\x14\xC3\x85Q``\x85R``\x85\x01\x90a\x02cV[\x84\x86\x01Q\x84\x82\x03\x86\x86\x01Ra\x02cV[\x93\x01Q\x90`@\x81\x85\x03\x91\x01RQ\x91\x81\x81R\x01\x90a\x02cV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x92\x16``\x84\x01RV[4a\x02;Wa\x07\ta\x0E\xD2a\x15\x126a\t\x1FV[\x90a(\xADV[4a\x02;W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\n\xC1a\x15@6a\x0ExV[a\t\xE4V[\x90`\x01` `@Qa\x15V\x81a\x07\xFEV[a\x15\x85\x81\x95`@Qa\x15l\x81a\x13\xA4\x81\x85a\x12\xB4V[\x83Ra\x15~`@Q\x80\x96\x81\x93\x01a\x12\xB4V[\x03\x84a\x086V[\x01RV[`\x05\x11\x15a\x14$WV[`\x03\x11\x15a\x14$WV[\x90`\x03\x82\x10\x15a\x14$WRV[4a\x02;Wa\x15\xC5a\x12-a\x15\xBE6a\t\x1FV[\x91\x90a\n\nV[\x80T\x90`\xFF\x82\x16`\x04a\x15\xEEa\x15\xDD`\x01\x85\x01a\x15EV[\x93a\x13\xA4`@Q\x80\x94\x81\x93\x01a\x12\xB4V[`@Q\x93`\x05\x83\x10\x15a\x14$W\x84\x93a\x16\x1Aa\x16k\x92a\x07\t\x95\x87R`\xFF` \x88\x01\x91`\x08\x1C\x16a\x15\x9DV[`\x80`@\x86\x01R` a\x169\x82Q`@`\x80\x89\x01R`\xC0\x88\x01\x90a\x02cV[\x91\x01Q\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x86\x83\x03\x01`\xA0\x87\x01Ra\x02cV[\x90\x83\x82\x03``\x85\x01Ra\x02cV[4a\x02;Wa\x16\x876a\x0E\xE6V[a\x16\x94a\x04\xD9\x82\x80a\x1F\xD8V[a\x16\xA6` \x83\x01\x91a\x0B>\x83\x85a\x1F\xD8V[\x80T`\x02`\xFF\x82\x16a\x16\xB7\x81a\x15\x89V[\x03a\x07TWa\x10ja\x10Ea\x16\xFC\x92`\x03\x85\x01\x90\x86a\x16\xE4a\x0F\xEFa\x0F\xA1a\x0F\xACa\x0F\xA7a\x0F\xA1\x88a(%V[\x90a\x10\x15`\xFFa\x16\xF2a\x08\x86V[`\x03\x81R\x94a\x10\x08V[a\x11mW\x80T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16`\x03\x17\x90Ua\x179a\r\x10a\x10\xAB\x84\x80a\x1F\xD8V[a\x17La\r)a\x05\x97a\x05w\x85\x80a\x1F\xD8V[\x91a\x17W\x81\x80a\x1F\xD8V[a\x17a\x84\x84a\x1F\xD8V[\x95\x90\x91\x81;\x15a\x02;W`\0\x80\x94a\x17\xA8`@Q\x99\x8A\x96\x87\x95\x86\x94\x7F\xA1\x13\xE4\x11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86R`\x04\x86\x01a(\x86V[\x03\x92Z\xF1\x92\x83\x15a\x07&Wa\r\xF8a\x0E\x01\x93a\x0E\x0E\x92\x7F:2\xA2\xEF$\x99\x03\x18\xA42\xF4t\xA6\\\xA0\x04\xFAy\xB3\xD7\xB8\xF5\xB0=\xC2>\xD4\x1FJF\xA2\xE5\x96a\x0E\x13WP\x83a\x1F\xD8V[`\0\x91\x03\x12a\x02;WV[4a\x02;W`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x02;W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT`\x80\x1C\x16`@Q\x90\x81R\xF3[4a\x02;W` a\x18Wa\x18R6a\x0ExV[a)\x19V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[4a\x02;W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\n\xC1\x82a\x18\x95a\n\x9C6a\t\x1FV[\x81\x01`\x06\x81R\x03\x01\x90 \x90a\nVV[4a\x02;W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x02;W`\x045`\0R`\0` R` `@`\0 T`@Q\x90\x81R\xF3[4a\x02;W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x19+\x82a\x19\x186a\x0ExV[\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x02@V[\x81\x01`\x01\x81R\x03\x01\x90 T\x16`@Q\x90\x81R\xF3[4a\x02;W`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x02;W` `\x0BTg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91`@\x1C\x16\x81R\xF3[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x90` \x82\x82\x01\x12a\x02;W`\x045\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02;W\x82`@\x92\x03\x01\x12a\x02;W`\x04\x01\x90V[4a\x02;Wa\x19\xE66a\x19\x88V[a\x19\xF3a\x04\xD9\x82\x80a\x1F\xD8V[a\x1A\x05` \x83\x01\x91a\x0B>\x83\x85a\x1F\xD8V[`\x03a\x1A\x12\x82T`\xFF\x16\x90V[a\x1A\x1B\x81a\x15\x89V[\x03a\x07TW\x80a\x1A6a\x0F\xA7a\x0F\xA1`\x03a\x1Ab\x95\x01a(%V[P`\x04\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[a\x1Ara\r\x10a\x10\xAB\x84\x80a\x1F\xD8V[a\x1A\x85a\r)a\x05\x97a\x05w\x85\x80a\x1F\xD8V[\x91a\x1A\x90\x81\x80a\x1F\xD8V[a\x1A\x9A\x84\x84a\x1F\xD8V[\x95\x90\x91\x81;\x15a\x02;W`\0\x80\x94a\x1A\xE1`@Q\x99\x8A\x96\x87\x95\x86\x94\x7F\xE7J\x1A\xC2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86R`\x04\x86\x01a(\x86V[\x03\x92Z\xF1\x92\x83\x15a\x07&Wa\r\xF8a\x0E\x01\x93a\x0E\x0E\x92\x7F\x1CHi\xAAT\xEA\xF3\xD7\x93{b>\x04\x12\x80\xEF\xC3 \xF6\xC8\x03(\n\x84\x8E\x13\x98\x8BL\xFC2Z\x96a\x0E\x13WP\x83a\x1F\xD8V[`@Q\x90a\x1B1\x82a\x07\xE2V[`\0\x82RV[4a\x02;W`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x02;Wa\x07\t`@Qa\x1Bu\x81a\x07\xFEV[`\x03\x81R\x7Fibc\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x02cV[4a\x02;Wa\x07\ta\x13\xA4a\x0E\xD2a\x1B\xCF` a\x19\x186a\x0ExV[\x81\x01`\x02\x81R\x03\x01\x90 `@Q\x92\x83\x80\x92a\x12\xB4V[4a\x02;W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\n\xC1\x82a\x1C\x05a\n\x9C6a\t\x1FV[\x81\x01`\x07\x81R\x03\x01\x90 \x90a\nVV[4a\x02;W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\n\xC1a\x1C=6a\x0ExV[a\n0V[4a\x02;Wa\x1CP6a\x19\x88V[` \x81\x01\x90a\x1Cta\x1Cea\x03#\x84\x84a\x1F7V[a\x03A` a\x03;\x87\x87a\x1F7V[P`\x01a\x1C\x84a\x03X\x85\x85a\x1F7V[a\x1C\x8D\x81a\x15\x89V[\x03a\x07TWa\x1C\x9C\x83\x83a\x1F7V[\x90a\x1C\xB9a\x1C\xAF`@\x93\x84\x81\x01\x90a }V[` \x81\x01\x90a\x1F\xD8V[\x90Pa\x1E\x95Wa\x1C\xC7a/-V[\x92a\x1C\xEBa\x1C\xD5\x86\x83a\x1F7V[a\x04\xE5a\x1C\xE5a\x04\xD9\x85\x80a\x1F\xD8V[\x87a\nVV[a\x1D\x04a\x05\ta\x1C\xFEa\x04\xFD\x84\x80a\x1F\xD8V[\x86a\nVV[a\x1D\x17a\x05\ta\x1C\xFEa\x05G\x84\x80a\x1F\xD8V[a\x1D*a\x05\ta\x1C\xFEa\x05`\x84\x80a\x1F\xD8V[a\x1D;\x84a\x05~a\x05w\x84\x80a\x1F\xD8V[a\x1DKa\x05\x97a\x05w\x83\x80a\x1F\xD8V[\x91a\x1D~s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x1Du\x87a\x05\xC6a\x05w\x87\x80a\x1F\xD8V[\x94\x16\x80\x94a*\x06V[a\x1D\x8D` a\x03;\x88\x85a\x1F7V[\x92a\x1D\x9Ba\x03#\x88\x85a\x1F7V[\x90\x91a\x1D\xA7\x85\x80a\x1F\xD8V[\x93\x90\x96a\x1D\xC0a\x1D\xB7\x8C\x89a\x1F7V[\x8A\x81\x01\x90a }V[\x90a\x1D\xCEa\x06!\x8D\x8Aa\x1F7V[\x85\x97\x91\x97;\x15a\x02;W`\0\x97\x88\x94\x8Ea\x1E\x17\x94\x8FQ\x9E\x8F\x9B\x8C\x9A\x8B\x99\x7FD\xDD\x968\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8BR`\x04\x8B\x01a)lV[\x03\x92Z\xF1\x80\x15a\x07&Wa\x07\t\x96\x7F\xE9xM\xBF\x97\xF9p\xE7\xF0\x98\xB5\xA3\xE7\xE3\xBE\xBD\xDDu\xC1K\xD6\xBET\x142>\xEE\xDF!\x06\x1B\n\x94a\x06\xFC\x92a\x1E\x82W[Pa\x1Eua\x06\xDFa\x1Ela\x1Ed\x87\x80a\x1F\xD8V[\x94\x90\x97a\x1F7V[\x88\x81\x01\x90a }V[\x91\x87Q\x95\x86\x95\x8A\x87a)\xD7V[\x80a\x07\x1Aa\x1E\x8F\x92a\x07\xADV[8a\x1EPV[`\x04\x82Q\x7F2i\x93b\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[4a\x02;W`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x02;W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT\x16`@Q\x90\x81R\xF3[\x91\x900s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x14a\x02;Wa\x08\x84\x92a\x1F2\x916\x91a\x08\xCDV[a*\x06V[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x816\x03\x01\x82\x12\x15a\x02;W\x01\x90V[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\x02;W\x01\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x02;W` \x01\x91\x81`\x05\x1B6\x03\x83\x13a\x02;WV[5`\x03\x81\x10\x15a\x02;W\x90V[5`\x05\x81\x10\x15a\x02;W\x90V[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\x02;W\x01\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x02;W` \x01\x91\x816\x03\x83\x13a\x02;WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`2`\x04R`$`\0\xFD[\x90\x15a lW\x80a h\x91a\x1F\xD8V[\x90\x91V[a )V[`\x03\x82\x10\x15a\x14$WRV[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC1\x816\x03\x01\x82\x12\x15a\x02;W\x01\x90V[` \x90\x82`@Q\x93\x84\x92\x837\x81\x01`\x05\x81R\x03\x01\x90 \x90V[` \x90\x82`@Q\x93\x84\x92\x837\x81\x01`\x06\x81R\x03\x01\x90 \x90V[` \x90\x82`@Q\x93\x84\x92\x837\x81\x01`\x07\x81R\x03\x01\x90 \x90V[` \x90\x82`@Q\x93\x84\x92\x837\x81\x01`\x08\x81R\x03\x01\x90 \x90V[` \x91\x92\x83`@Q\x94\x85\x93\x847\x82\x01\x90\x81R\x03\x01\x90 \x90V[\x90`\x05\x81\x10\x15a\x14$W`\xFF\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83T\x16\x91\x16\x17\x90UV[\x81\x81\x10a!oWPPV[`\0\x81U`\x01\x01a!dV[\x91\x90`\x1F\x81\x11a!\x8AWPPPV[a\x08\x84\x92`\0R` `\0 \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a!\xB6W[`\x1F\x01`\x05\x1C\x01\x90a!dV[\x90\x91P\x81\x90a!\xA9V[\x90\x92\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\xC1Wa!\xE6\x81a!\xE0\x84Ta\x12aV[\x84a!{V[`\0`\x1F\x82\x11`\x01\x14a\"DW\x81\x90a\"5\x93\x94\x95`\0\x92a\"9W[PP\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[\x90UV[\x015\x90P8\x80a\"\x03V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x82\x16\x94a\"w\x84`\0R` `\0 \x90V[\x91\x80[\x87\x81\x10a\"\xD0WP\x83`\x01\x95\x96\x97\x10a\"\x98W[PPP\x81\x1B\x01\x90UV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U8\x80\x80a\"\x8EV[\x90\x92` `\x01\x81\x92\x86\x86\x015\x81U\x01\x94\x01\x91\x01a\"zV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\x11`\x04R`$`\0\xFD[h\x01\0\0\0\0\0\0\0\0\x83\x11a\x07\xC1W\x80T\x83\x82U\x80\x84\x10a#\x7FW[P\x90a#F\x81\x92`\0R` `\0 \x90V[\x90`\0\x92[\x84\x84\x10a#YWPPPPPV[`\x01` \x82a#sa#l\x84\x95\x87a\x1F\xD8V[\x90\x88a!\xC0V[\x01\x93\x01\x93\x01\x92\x91a#KV[`\0\x82`\0R\x84` `\0 \x92\x83\x01\x92\x01[\x82\x81\x10a#\x9FWPPa#4V[\x80a#\xAC`\x01\x92Ta\x12aV[\x80a#\xB9W[P\x01a#\x91V[`\x1F\x90\x81\x81\x11\x84\x14a#\xD1WPP\x82\x81U[8a#\xB2V[\x83a#\xF3\x92a#\xE5\x85`\0R` `\0 \x90V[\x92\x01`\x05\x1C\x82\x01\x91\x01a!dV[`\0\x81\x81R` \x81 \x81\x83UUa#\xCBV[\x90a$\x18a$\x12\x82a\x1F\xCBV[\x83a!-V[` a$&` \x83\x01a\x1F\xBEV[`\x03\x81\x10\x15a\x14$W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFFa\xFF\0\x85T\x92`\x08\x1B\x16\x91\x16\x17\x83U`\x01\x80\x84\x01\x90a$r`@\x85\x01\x85a }V[\x92a$}\x84\x80a\x1F\xD8V[\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\x07\xC1Wa$\xA1\x84a$\x9B\x87Ta\x12aV[\x87a!{V[`\0\x92`\x1F\x85\x11`\x01\x14a%3WPPa\x08\x84\x96\x94a\x0C\xD5\x94a%\x03\x85`\x04\x99\x96a%\x19\x96a%\x0F\x96`\0\x92a\"9WPP\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[\x90U` \x81\x01\x90a\x1F\xD8V[\x90`\x02\x86\x01a!\xC0V[a\x06!a%)``\x83\x01\x83a\x1FjV[\x90`\x03\x86\x01a#\x17V[\x92\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x85\x16\x90a%h\x87`\0R` `\0 \x90V[\x94\x83\x91[\x83\x83\x10a%\xDBWPPP\x94`\x01\x85a%\x19\x95a%\x0F\x95a\x08\x84\x9C\x9A\x95`\x04\x9C\x99a\x0C\xD5\x9B\x10a%\xA3W[PPP\x81\x1B\x01\x90Ua\x1C\xAFV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U8\x80\x80a%\x96V[\x85\x85\x015\x87U\x95\x86\x01\x95\x93\x81\x01\x93\x91\x81\x01\x91a%lV[`\x1F\x82` \x94\x93\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x93\x81\x86R\x86\x86\x017`\0\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x905\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x826\x03\x01\x81\x12\x15a\x02;W\x01` \x815\x91\x01\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x02;W\x816\x03\x83\x13a\x02;WV[\x90\x82\x81\x81R` \x80\x91\x01\x93` \x83`\x05\x1B\x82\x01\x01\x94\x84`\0\x92[\x85\x84\x10a&\xACWPPPPPPP\x90V[\x90\x91\x92\x93\x94\x95\x96\x85\x80a&\xF2\x83\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x86`\x01\x96\x03\x01\x88Ra&\xEC\x8C\x88a&1V[\x90a%\xF2V[\x99\x01\x94\x01\x94\x01\x92\x95\x94\x93\x91\x90a&\x9BV[a\x02\xB7\x91a'0a'%a'\x17\x84\x80a&1V[`@\x85R`@\x85\x01\x91a%\xF2V[\x92` \x81\x01\x90a&1V[\x91` \x81\x85\x03\x91\x01Ra%\xF2V[\x99\x97\x95\x90a'\xA0\x94a\x02\xB7\x9C\x9A\x96a'va'\x92\x95a'\xAE\x9B\x97\x8F\x80a'i`\xE0\x92a'\x84\x99a\x15\x9DV[\x81` \x82\x01R\x01\x91a&\x81V[\x8D\x81\x03`@\x8F\x01R\x91a%\xF2V[\x90\x8A\x82\x03``\x8C\x01Ra\x02cV[\x90\x88\x82\x03`\x80\x8A\x01Ra'\x03V[\x91\x86\x83\x03`\xA0\x88\x01Ra%\xF2V[\x92`\xC0\x81\x85\x03\x91\x01Ra%\xF2V[`@Q=`\0\x82>=\x90\xFD[\x96\x94\x92a(\x17\x94a'\xFBa\x02\xB7\x9A\x98\x94a'\xEDa(\t\x95`\xA0\x8DR`\xA0\x8D\x01\x90a\x02cV[\x90\x8B\x82\x03` \x8D\x01Ra\x02cV[\x91\x89\x83\x03`@\x8B\x01Ra%\xF2V[\x91\x86\x83\x03``\x88\x01Ra%\xF2V[\x92`\x80\x81\x85\x03\x91\x01Ra%\xF2V[\x80T\x15a lW`\0R` `\0 \x90`\0\x90V[\x96\x94\x92a(x\x94a(\\a(j\x93a\x02\xB7\x9B\x99\x95`\x80\x8CR`\x80\x8C\x01\x91a%\xF2V[\x91\x89\x83\x03` \x8B\x01Ra%\xF2V[\x91\x86\x83\x03`@\x88\x01Ra%\xF2V[\x92``\x81\x85\x03\x91\x01Ra%\xF2V[\x92\x90a(\x9F\x90a\x02\xB7\x95\x93`@\x86R`@\x86\x01\x91a%\xF2V[\x92` \x81\x85\x03\x91\x01Ra%\xF2V[`!a\x08\x84\x91\x93\x92\x93`@Q\x94\x81a(\xCF\x87\x93Q\x80\x92` \x80\x87\x01\x91\x01a\x02@V[\x82\x01\x7F/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01Ra)\n\x82Q\x80\x93` \x87\x85\x01\x91\x01a\x02@V[\x01\x03`\x01\x81\x01\x85R\x01\x83a\x086V[a)7s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91a\n0V[T\x16\x80\x15a)BW\x90V[`\x04`@Q\x7F\xB6\xC7\x1F}\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x97\x95\x91\x93a)\xC9\x95a)\x9Fa\x02\xB7\x9B\x99\x96a)\xBB\x96`\xC0` \x8Ea)\x93\x81a)\xAD\x9Aa\x15\x9DV[\x01R`\xC0\x8D\x01\x91a&\x81V[\x91\x8A\x83\x03`@\x8C\x01Ra%\xF2V[\x90\x87\x82\x03``\x89\x01Ra\x02cV[\x90\x85\x82\x03`\x80\x87\x01Ra'\x03V[\x92`\xA0\x81\x85\x03\x91\x01Ra%\xF2V[\x94\x92\x90\x93a(ja(x\x93a)\xF8a\x02\xB7\x99\x97`\x80\x8AR`\x80\x8A\x01\x90a\x02cV[\x90\x88\x82\x03` \x8A\x01Ra\x02cV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x81a*&\x82a\t\xE4V[T\x16a*`Wa*5\x90a\t\xE4V[\x91\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[`\x04`@Q\x7FF>\xEC\x90\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`@Q\x90a*\x97\x82a\x08\x1AV[`\0`\x80\x83``\x80\x82R\x80` \x83\x01R\x83`@\x83\x01R`@Q\x90a*\xBA\x82a\x07\xC6V[\x80\x82R\x80` \x83\x01R`@Qa*\xCF\x81a\x07\xE2V[\x81\x81R`@\x83\x01R\x82\x01R\x01RV[\x80Q\x15a lW` \x01\x90V[\x80Q\x82\x10\x15a lW` \x91`\x05\x1B\x01\x01\x90V[\x92\x91\x92a+\na*\x8AV[P`\x01\x82\x03a+\xB5Wa+ \x91a\x05w\x91a XV[a+)\x81a2\xE9V[\x92` \x84\x01`\x01\x81QQ\x03a+\x8BWa+Y\x91a+Sa+La\x10j\x93Qa*\xDEV[Q\x91a48V[\x90a4\xFCV[a+aW\x91\x90V[`\x04`@Q\x7F]\x19\x1F\xAE\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04`@Q\x7F\xCCo\xEF$\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04`@Q\x7F\xD47z\x90\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\xC1W`\x05\x1B` \x01\x90V[`@Q\x90a,\x04\x82a\x07\xFEV[`\x01\x82R` `\0[\x81\x81\x10a,MWPPa,4`\x04a,'a\x13\xA4\x93a\t\xBEV[\x01`@Q\x92\x83\x80\x92a\x12\xB4V[\x81Q\x15a lW` \x82\x01Ra,I\x81a*\xDEV[P\x90V[``\x84\x82\x01\x83\x01R\x81\x01a,\rV[\x90a,f\x82a\x08\x93V[a,s`@Q\x91\x82a\x086V[\x82\x81R\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0a,\xA1\x82\x94a\x08\x93V[\x01\x90` 6\x91\x017V[\x90a-\x1Ba-\x03a,\xDEa,\xD9a,\xD4a,\xCE\x87Qa,\xC9\x81a\x15\x89V[a7\xF0V[`\x03\x0B\x90V[a8eV[a5HV[a,\xFDa,\xD9a,\xD4a,\xCE` \x89\x01Qa,\xF8\x81a\x15\x93V[a8\x8CV[\x90a5rV[a,\xFDa,\xD9a-\x16`@\x87\x01Qa8\xC7V[a9\x07V[`\0\x90[``\x84\x01Q\x80Q\x83\x10\x15a-RW`\x01\x91a,\xFDa,\xD9a-C\x86a-J\x95a*\xEBV[QQa9\x07V[\x91\x01\x90a-\x1FV[Pa-\x7F\x91Pa-sa-x\x91\x94\x93\x94a,\xFDa,\xD9`\x80\x87\x01QQa9\x07V[a,\\V[\x80\x92a5\xE6V[\x81R\x90V[\x90\x81` \x91\x03\x12a\x02;WQ\x80\x15\x15\x81\x03a\x02;W\x90V[\x92\x90\x93\x94\x95\x91\x95\x83Qa-\xAE\x90a)\x19V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x95\x84Q\x94``\x01Q`@\x01QQ\x91a-\xDB\x91a7LV[\x90`@Q\x97\x88\x96\x87\x96\x7F\xF9\xBBZQ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x88R`\x04\x88\x01a\x01 \x90Ra\x01$\x88\x01a.\x1E\x91a\x02cV[\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x81a.3\x82a\x11\x97V[\x16`$\x8A\x01R` \x01a.E\x90a\x11\x97V[\x16`D\x88\x01R`d\x87\x01`\0\x90R`\x84\x87\x01`\0\x90R\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x94\x85\x88\x83\x03\x01`\xA4\x89\x01Ra.\x90\x92a%\xF2V[\x83\x86\x82\x03\x01`\xC4\x87\x01Ra.\xA3\x91a\x02cV[\x82\x85\x82\x03\x01`\xE4\x86\x01Ra.\xB6\x91a\x02cV[\x90\x83\x82\x03\x01a\x01\x04\x84\x01Ra.\xCA\x91a\x02cV[\x03\x81Z` \x94`\0\x91\xF1\x90\x81\x15a\x07&W`\0\x91a.\xE6WP\x90V[a\x02\xB7\x91P` =` \x11a/\x08W[a/\0\x81\x83a\x086V[\x81\x01\x90a-\x84V[P=a.\xF6V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x91\x16\x90\x81\x14a/(W`\x01\x01\x90V[a\"\xE8V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT`\x80\x1C\x16\x80\x81`\0\x92z\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x80\x82\x10\x15a1bW[Pm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x80\x83\x10\x15a1SW[Pf#\x86\xF2o\xC1\0\0\x80\x83\x10\x15a1DW[Pc\x05\xF5\xE1\0\x80\x83\x10\x15a15W[Pa'\x10\x80\x83\x10\x15a1&W[P`d\x82\x10\x15a1\x16W[`\n\x80\x92\x10\x15a1\x0CW[`\x01\x90\x81`!a/\xD6`\x01\x88\x01a,\\V[\x96\x87\x01\x01\x90[a0\xABW[PPPPa0aa\x02\xB7\x91a0\\a00\x94`@Q\x95\x86\x91a0*` \x84\x01`\x08\x90\x7Fchannel-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\x01\x90V[\x90a\t\x81V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x86R\x85a\x086V[a/\x0FV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFw\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x0BT\x92`\x80\x1B\x16\x91\x16\x17`\x0BUV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x91\x01\x91\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x82\x06\x1A\x83S\x04\x91\x82\x15a1\x07W\x91\x90\x82a/\xDCV[a/\xE1V[\x92`\x01\x01\x92a/\xC4V[\x92\x90`d`\x02\x91\x04\x91\x01\x92a/\xB9V[`\x04\x91\x94\x92\x04\x91\x01\x928a/\xAEV[`\x08\x91\x94\x92\x04\x91\x01\x928a/\xA1V[`\x10\x91\x94\x92\x04\x91\x01\x928a/\x92V[` \x91\x94\x92\x04\x91\x01\x928a/\x80V[`@\x94P\x81\x04\x91P8a/gV[\x90\x81Ta1|\x81a+\xDFV[\x92`@\x93a1\x8D`@Q\x91\x82a\x086V[\x82\x81R\x80\x94` \x80\x92\x01\x92`\0R` `\0 \x90`\0\x93[\x85\x85\x10a1\xB4WPPPPPPV[`\x01\x84\x81\x92\x84Qa1\xC9\x81a\x13\xA4\x81\x8Aa\x12\xB4V[\x81R\x01\x93\x01\x94\x01\x93\x91a1\xA5V[\x90a1\xEAa1\xE4\x83a\n\nV[\x82a\nVV[\x90`@Q\x90a1\xF8\x82a\x08\x1AV[\x82T\x92`\xFF\x84\x16\x92`\x05\x84\x10\x15a\x14$W`\x04a2`a2j\x93a2.`\xFFa2\x87\x99a2w\x99\x87R`\x08\x1C\x16` \x86\x01a qV[a2:`\x01\x82\x01a\x15EV[`@\x85\x01Ra2K`\x03\x82\x01a1pV[``\x85\x01Ra\x13\xA4`@Q\x80\x94\x81\x93\x01a\x12\xB4V[`\x80\x82\x01Ra,\xABV[` \x81Q\x91\x01 \x93a7\xDCV[`\0R`\0` R`@`\0 \x90V[UV[a2\xA8s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91a\t\xE4V[T\x16\x80\x15a2\xB3W\x90V[`\x04`@Q\x7F\xC6\x83\x0C\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04\x82\x10\x15a\x14$WRV[a2\xFB\x90a2\xF5a*\x8AV[Pa\t\xBEV[`@\x80Q\x91a3\t\x83a\x08\x1AV[\x81Qa3\x19\x81a\x13\xA4\x81\x85a\x12\xB4V[\x83R`\x01\x80\x82\x01\x90\x81Ta3,\x81a+\xDFV[\x92a39\x86Q\x94\x85a\x086V[\x81\x84R`\0\x90\x81R` \x80\x82 \x81\x86\x01[\x84\x84\x10a3\xF9WPPPPPP\x90`\x03\x91` \x85\x01Ra3\xB4a3\xA3`\x06a3v`\x02\x85\x01T`\xFF\x16\x90V[\x93a3\x84\x87\x89\x01\x95\x86a2\xDDV[a3\x8F\x86\x82\x01a\x13\x83V[``\x89\x01R\x01Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x80\x86\x01RV[Qa3\xBE\x81a\x14\x1AV[a3\xC7\x81a\x14\x1AV[\x03a3\xD0WP\x90V[`\x04\x90Q\x7F\x8C\xA9\x89\x90\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x02\x83\x87\x92\x8BQa4\t\x81a\x07\xFEV[\x8CQa4\x19\x81a\x13\xA4\x81\x8Aa\x12\xB4V[\x81Ra4&\x85\x87\x01a1pV[\x83\x82\x01R\x81R\x01\x92\x01\x93\x01\x92\x90a3JV[`\x03\x81\x10\x15a\x14$W`\x01\x81\x03a4\x83WP`@Qa4V\x81a\x07\xFEV[`\x0F\x81R\x7FORDER_UNORDERED\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R\x90V[`\x02\x03a4\xC3W`@Qa4\x96\x81a\x07\xFEV[`\r\x81R\x7FORDER_ORDERED\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R\x90V[`@Qa4\xCF\x81a\x07\xFEV[`\x0F\x81R\x7F_ORDER_INVALID_\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R\x90V[\x90\x80Q` \x80\x92\x01 \x90`\0[\x81\x84\x01Q\x80Q\x82\x10\x15a5>Wa5!\x82\x85\x92a*\xEBV[Q\x83\x81Q\x91\x01 \x14a55W`\x01\x01a5\tV[PPPP`\x01\x90V[PPPPP`\0\x90V[`\x01\x01\x90\x81`\x01\x11a/(WV[\x90` \x82\x01\x80\x92\x11a/(WV[` \x01\x90\x81` \x11a/(WV[\x91\x90\x82\x01\x80\x92\x11a/(WV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x82\x01\x91\x82\x11a/(WV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x01\x91\x82\x11a/(WV[\x91\x90\x82\x03\x91\x82\x11a/(WV[\x91\x90\x91` \x90`\0\x91\x81Qa5\xFA\x81a\x15\x89V[a6\x03\x81a\x15\x89V[a7\x16W[a68a6G\x91\x86` \x85\x01\x80Qa6\x1F\x81a\x15\x93V[a6(\x81a\x15\x93V[a6\xE4W[Pa,\xFD\x90\x82a:\xBDV[a,\xFD\x86\x82`@\x86\x01Qa91V[\x91``\x82\x01\x90\x81QQa6\x93W[PP`\x80\x01\x80QQ\x92\x93a\x02\xB7\x93a6oW[PPa5\x7FV[\x80a6\x84\x84a,\xFDa,\xFD\x94a6\x8C\x97a:\xD7V[\x80\x93Qa;\xE0V[8\x80a6hV[\x91\x93\x90\x92[\x83QQ\x83\x10\x15a6\xD3Wa6\xCBa6\xB5\x82a,\xFD\x89`\x01\x95a:\xCAV[a,\xFD\x88\x82a6\xC5\x88\x8AQa*\xEBV[Qa;\xE0V[\x92\x01\x91a6\x98V[\x90\x93\x90\x92P\x90P`\x80a\x02\xB7a6UV[\x81a,\xFD\x91a6\xFD\x85a,\xFDa7\n\x96a7\x0F\x98a:\xB0V[\x93\x84\x91Qa,\xF8\x81a\x15\x93V[a9\x1CV[\x868a6-V[Pa6Ga68a7Da71a7,\x88a:xV[a5dV[a,\xFD\x88\x82a7\n\x88Qa,\xC9\x81a\x15\x89V[\x91PPa6\x08V[``\x04\x92a\x15\x89V[\x14a8HW`\0\x80\xFD[`\x04\x90V[P`\x03\x90V[P`\x02\x90V[P`\x01\x90V[P`\0\x90V[`\0\x81`\x07\x0B\x12`\0\x14a8yWP`\n\x90V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x02\xB7\x91\x16a:VV[`\x03\x81\x10\x15a\x14$W\x80\x15a8_Wa8\xA4\x81a\x15\x93V[`\x01\x81\x14a8YW\x80a8\xB8`\x02\x92a\x15\x93V[\x14a8\xC2W`\0\x80\xFD[`\x02\x90V[a8\xD2\x81QQa9\x07V[\x80`\x01\x01\x91\x82`\x01\x11a/(W` a8\xED\x91\x01QQa9\x07V[\x80`\x01\x01`\x01\x11a/(W`\x02\x91\x01\x01\x80\x91\x11a/(W\x90V[a9\x10\x81a:VV[\x81\x01\x80\x91\x11a/(W\x90V[\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x02\xB7\x93\x92\x16a;\0V[\x91a9>a-s\x84a8\xC7V[\x92` \x90\x80QQa9\xC3W[a9\x9Da\x02\xB7\x95a9\xA2\x94a9ra9\x97\x95` a9\x91\x96\x01\x84\x81QQa9\xA7WPPa5\x7FV[\x94\x85\x92a9\x89a9\x83\x84\x8B\x87a;\0V[\x8Aa5rV[\x95\x86\x91a5VV[\x92a5rV[\x90a;KV[a5rV[a5\xD9V[\x80a6\x84\x84a,\xFDa,\xFD\x94a9\xBC\x97a:\xF3V[8\x84a6hV[a9\xCC\x85a:\xE4V[\x91\x82\x81\x01\x92\x83\x82\x11a/(W\x82Q\x90\x81Q\x91a9\xE9\x89\x87\x85a;\0V[\x93`\0\x90\x80\x86`\0\x95\x01\x8C\x01\x01\x92\x01\x91[\x84\x84\x10a:@WPPP\x90P\x81\x01\x80\x91\x11a/(Wa\x02\xB7\x95a9\xA2\x94a9ra9\x91\x94` a:0a9\x9D\x96a9\x97\x99a5rV[\x97PP\x94PP\x94P\x95PPa9JV[\x82Q\x82\x1A\x81S`\x01\x93\x84\x01\x93\x92\x83\x01\x92\x01a9\xFAV[`\x01\x80\x91`\x07\x90`\x07\x1C\x80[a:lWPPP\x90V[\x92\x82\x01\x92\x81\x1C\x80a:bV[`\x08\x90`\0\x90` \x01\x82[`\x07\x1C\x92\x83\x15a:\xA6W`\x80\x17\x81S`\x01\x80\x91\x01\x91\x01`\x7F\x83\x16\x92\x91\x90\x91a:\x83V[\x90`\x01\x93PS\x01\x90V[`\0\x91\x82\x91\x01`\x10a:\xA6V[`\0\x91\x82\x91\x01`\x1Aa:\xA6V[`\0\x91\x82\x91\x01`\"a:\xA6V[`\0\x91\x82\x91\x01`*a:\xA6V[`\0\x90\x81\x90` \x01`\na:\xA6V[`\0\x91\x82\x91\x01`\x12a:\xA6V[`\x7F\x93\x92`\0\x92\x85\x83\x16\x92\x91\x01\x90[`\x07\x1C\x91\x82\x15a;0W`\x80\x17\x81S`\x01\x92\x83\x01\x92\x85\x83\x16\x92\x91\x01\x90a;\x0FV[\x91P`\x01\x93\x94PS\x01\x90V[`\x1F\x81\x11a/(Wa\x01\0\n\x90V[\x91\x92\x90\x83\x15a;\xDAW\x92\x91[` \x93\x84\x84\x11\x15a;\xABW\x81Q\x81R\x84\x81\x01\x80\x91\x11a/(W\x93\x81\x01\x80\x91\x11a/(W\x91\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x90\x81\x11a/(W\x91a;WV[\x92\x90\x91\x93P` \x03` \x81\x11a/(Wa;\xC7a;\xCC\x91a;(::ethers::contract::Contract); + #[cfg(feature = "providers")] + impl ::core::clone::Clone for IBCChannelHandshake { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + #[cfg(feature = "providers")] + impl ::core::ops::Deref for IBCChannelHandshake { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + #[cfg(feature = "providers")] + impl ::core::ops::DerefMut for IBCChannelHandshake { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + #[cfg(feature = "providers")] + impl ::core::fmt::Debug for IBCChannelHandshake { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(IBCChannelHandshake)) + .field(&self.address()) + .finish() + } + } + #[cfg(feature = "providers")] + impl IBCChannelHandshake { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + IBCCHANNELHANDSHAKE_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + IBCCHANNELHANDSHAKE_ABI.clone(), + IBCCHANNELHANDSHAKE_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + ///Calls the contract's `COMMITMENT_PREFIX` (0xa9550dac) function + pub fn commitment_prefix( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([169, 85, 13, 172], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `bindPort` (0x117e886a) function + pub fn bind_port( + &self, + port_id: ::std::string::String, + module_address: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([17, 126, 136, 106], (port_id, module_address)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `capabilities` (0x5717bcf5) function + pub fn capabilities( + &self, + p0: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([87, 23, 188, 245], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `channelCapabilityPath` (0x3bc3339f) function + pub fn channel_capability_path( + &self, + port_id: ::std::string::String, + channel_id: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([59, 195, 51, 159], (port_id, channel_id)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `channelCloseConfirm` (0x25cbc3a6) function + pub fn channel_close_confirm( + &self, + msg: MsgChannelCloseConfirm, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([37, 203, 195, 166], (msg,)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `channelCloseInit` (0xa06cb3a2) function + pub fn channel_close_init( + &self, + msg: MsgChannelCloseInit, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([160, 108, 179, 162], (msg,)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `channelOpenAck` (0x256c4199) function + pub fn channel_open_ack( + &self, + msg: MsgChannelOpenAck, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([37, 108, 65, 153], (msg,)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `channelOpenConfirm` (0x5bd51b62) function + pub fn channel_open_confirm( + &self, + msg: MsgChannelOpenConfirm, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([91, 213, 27, 98], (msg,)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `channelOpenInit` (0xdd3469fc) function + pub fn channel_open_init( + &self, + msg: MsgChannelOpenInit, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([221, 52, 105, 252], (msg,)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `channelOpenTry` (0x11b88a15) function + pub fn channel_open_try( + &self, + msg: MsgChannelOpenTry, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([17, 184, 138, 21], (msg,)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `channels` (0x5b3de260) function + pub fn channels( + &self, + p0: ::std::string::String, + p1: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall< + M, + ( + u8, + u8, + IbcCoreChannelV1CounterpartyData, + ::std::string::String, + ), + > { + self.0 + .method_hash([91, 61, 226, 96], (p0, p1)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `clientImpls` (0xd1297b8d) function + pub fn client_impls( + &self, + p0: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([209, 41, 123, 141], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `clientRegistry` (0x990491a5) function + pub fn client_registry( + &self, + p0: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([153, 4, 145, 165], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `clientTypes` (0xc2380105) function + pub fn client_types( + &self, + p0: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([194, 56, 1, 5], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `commitments` (0x839df945) function + pub fn commitments( + &self, + p0: [u8; 32], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([131, 157, 249, 69], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `connections` (0x31973f00) function + pub fn connections( + &self, + p0: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall< + M, + ( + ::std::string::String, + u8, + IbcCoreConnectionV1CounterpartyData, + u64, + ), + > { + self.0 + .method_hash([49, 151, 63, 0], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `getClient` (0x7eb78932) function + pub fn get_client( + &self, + client_id: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([126, 183, 137, 50], client_id) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextChannelSequence` (0x7926b8a9) function + pub fn next_channel_sequence(&self) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([121, 38, 184, 169], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextClientSequence` (0xe1b17b43) function + pub fn next_client_sequence(&self) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([225, 177, 123, 67], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextConnectionSequence` (0xa049e677) function + pub fn next_connection_sequence( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([160, 73, 230, 119], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextSequenceAcks` (0x1390d28d) function + pub fn next_sequence_acks( + &self, + p0: ::std::string::String, + p1: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([19, 144, 210, 141], (p0, p1)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextSequenceRecvs` (0xc930b1b0) function + pub fn next_sequence_recvs( + &self, + p0: ::std::string::String, + p1: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([201, 48, 177, 176], (p0, p1)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextSequenceSends` (0x821cb5d0) function + pub fn next_sequence_sends( + &self, + p0: ::std::string::String, + p1: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([130, 28, 181, 208], (p0, p1)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `packetReceipts` (0x26078437) function + pub fn packet_receipts( + &self, + p0: ::std::string::String, + p1: ::std::string::String, + p2: u64, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([38, 7, 132, 55], (p0, p1, p2)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `portCapabilityPath` (0x2570dae0) function + pub fn port_capability_path( + &self, + port_id: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([37, 112, 218, 224], port_id) + .expect("method not found (this should never happen)") + } + ///Gets the contract's `ChannelCloseConfirm` event + pub fn channel_close_confirm_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ChannelCloseConfirmFilter> + { + self.0.event() + } + ///Gets the contract's `ChannelCloseInit` event + pub fn channel_close_init_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ChannelCloseInitFilter> + { + self.0.event() + } + ///Gets the contract's `ChannelOpenAck` event + pub fn channel_open_ack_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ChannelOpenAckFilter> + { + self.0.event() + } + ///Gets the contract's `ChannelOpenConfirm` event + pub fn channel_open_confirm_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ChannelOpenConfirmFilter> + { + self.0.event() + } + ///Gets the contract's `ChannelOpenInit` event + pub fn channel_open_init_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ChannelOpenInitFilter> + { + self.0.event() + } + ///Gets the contract's `ChannelOpenTry` event + pub fn channel_open_try_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ChannelOpenTryFilter> + { + self.0.event() + } + /// Returns an `Event` builder for all the events of this contract. + pub fn events( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, IBCChannelHandshakeEvents> + { + self.0 + .event_with_filter(::core::default::Default::default()) + } + } + #[cfg(feature = "providers")] + impl From<::ethers::contract::Contract> + for IBCChannelHandshake + { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + ///Custom Error type `ErrCapabilityAlreadyClaimed` with signature `ErrCapabilityAlreadyClaimed()` and selector `0x463eec90` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrCapabilityAlreadyClaimed", + abi = "ErrCapabilityAlreadyClaimed()" + )] + pub struct ErrCapabilityAlreadyClaimed; + ///Custom Error type `ErrClientNotFound` with signature `ErrClientNotFound()` and selector `0xb6c71f7d` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrClientNotFound", abi = "ErrClientNotFound()")] + pub struct ErrClientNotFound; + ///Custom Error type `ErrConnNotSingleHop` with signature `ErrConnNotSingleHop()` and selector `0xd4377a90` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrConnNotSingleHop", abi = "ErrConnNotSingleHop()")] + pub struct ErrConnNotSingleHop; + ///Custom Error type `ErrConnNotSingleVersion` with signature `ErrConnNotSingleVersion()` and selector `0xcc6fef24` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrConnNotSingleVersion", abi = "ErrConnNotSingleVersion()")] + pub struct ErrConnNotSingleVersion; + ///Custom Error type `ErrCounterpartyChannelNotEmpty` with signature `ErrCounterpartyChannelNotEmpty()` and selector `0x32699362` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrCounterpartyChannelNotEmpty", + abi = "ErrCounterpartyChannelNotEmpty()" + )] + pub struct ErrCounterpartyChannelNotEmpty; + ///Custom Error type `ErrInvalidChannelState` with signature `ErrInvalidChannelState()` and selector `0x96d09146` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrInvalidChannelState", abi = "ErrInvalidChannelState()")] + pub struct ErrInvalidChannelState; + ///Custom Error type `ErrInvalidConnectionState` with signature `ErrInvalidConnectionState()` and selector `0x8ca98990` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrInvalidConnectionState", + abi = "ErrInvalidConnectionState()" + )] + pub struct ErrInvalidConnectionState; + ///Custom Error type `ErrInvalidProof` with signature `ErrInvalidProof()` and selector `0x14209932` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrInvalidProof", abi = "ErrInvalidProof()")] + pub struct ErrInvalidProof; + ///Custom Error type `ErrModuleNotFound` with signature `ErrModuleNotFound()` and selector `0xc6830cff` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrModuleNotFound", abi = "ErrModuleNotFound()")] + pub struct ErrModuleNotFound; + ///Custom Error type `ErrUnsupportedFeature` with signature `ErrUnsupportedFeature()` and selector `0x5d191fae` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrUnsupportedFeature", abi = "ErrUnsupportedFeature()")] + pub struct ErrUnsupportedFeature; + ///Container type for all of the contract's custom errors + #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] + pub enum IBCChannelHandshakeErrors { + ErrCapabilityAlreadyClaimed(ErrCapabilityAlreadyClaimed), + ErrClientNotFound(ErrClientNotFound), + ErrConnNotSingleHop(ErrConnNotSingleHop), + ErrConnNotSingleVersion(ErrConnNotSingleVersion), + ErrCounterpartyChannelNotEmpty(ErrCounterpartyChannelNotEmpty), + ErrInvalidChannelState(ErrInvalidChannelState), + ErrInvalidConnectionState(ErrInvalidConnectionState), + ErrInvalidProof(ErrInvalidProof), + ErrModuleNotFound(ErrModuleNotFound), + ErrUnsupportedFeature(ErrUnsupportedFeature), + /// The standard solidity revert string, with selector + /// Error(string) -- 0x08c379a0 + RevertString(::std::string::String), + } + impl ::ethers::core::abi::AbiDecode for IBCChannelHandshakeErrors { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + <::std::string::String as ::ethers::core::abi::AbiDecode>::decode(data) + { + return Ok(Self::RevertString(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrCapabilityAlreadyClaimed(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::ErrClientNotFound(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrConnNotSingleHop(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrConnNotSingleVersion(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrCounterpartyChannelNotEmpty(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrInvalidChannelState(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrInvalidConnectionState(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::ErrInvalidProof(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::ErrModuleNotFound(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrUnsupportedFeature(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for IBCChannelHandshakeErrors { + fn encode(self) -> ::std::vec::Vec { + match self { + Self::ErrCapabilityAlreadyClaimed(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrClientNotFound(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ErrConnNotSingleHop(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrConnNotSingleVersion(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrCounterpartyChannelNotEmpty(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrInvalidChannelState(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrInvalidConnectionState(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrInvalidProof(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ErrModuleNotFound(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ErrUnsupportedFeature(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::RevertString(s) => ::ethers::core::abi::AbiEncode::encode(s), + } + } + } + impl ::ethers::contract::ContractRevert for IBCChannelHandshakeErrors { + fn valid_selector(selector: [u8; 4]) -> bool { + match selector { + [0x08, 0xc3, 0x79, 0xa0] => true, + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ => false, + } + } + } + impl ::core::fmt::Display for IBCChannelHandshakeErrors { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::ErrCapabilityAlreadyClaimed(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrClientNotFound(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrConnNotSingleHop(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrConnNotSingleVersion(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrCounterpartyChannelNotEmpty(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::ErrInvalidChannelState(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrInvalidConnectionState(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrInvalidProof(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrModuleNotFound(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrUnsupportedFeature(element) => ::core::fmt::Display::fmt(element, f), + Self::RevertString(s) => ::core::fmt::Display::fmt(s, f), + } + } + } + impl ::core::convert::From<::std::string::String> for IBCChannelHandshakeErrors { + fn from(value: String) -> Self { + Self::RevertString(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeErrors { + fn from(value: ErrCapabilityAlreadyClaimed) -> Self { + Self::ErrCapabilityAlreadyClaimed(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeErrors { + fn from(value: ErrClientNotFound) -> Self { + Self::ErrClientNotFound(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeErrors { + fn from(value: ErrConnNotSingleHop) -> Self { + Self::ErrConnNotSingleHop(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeErrors { + fn from(value: ErrConnNotSingleVersion) -> Self { + Self::ErrConnNotSingleVersion(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeErrors { + fn from(value: ErrCounterpartyChannelNotEmpty) -> Self { + Self::ErrCounterpartyChannelNotEmpty(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeErrors { + fn from(value: ErrInvalidChannelState) -> Self { + Self::ErrInvalidChannelState(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeErrors { + fn from(value: ErrInvalidConnectionState) -> Self { + Self::ErrInvalidConnectionState(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeErrors { + fn from(value: ErrInvalidProof) -> Self { + Self::ErrInvalidProof(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeErrors { + fn from(value: ErrModuleNotFound) -> Self { + Self::ErrModuleNotFound(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeErrors { + fn from(value: ErrUnsupportedFeature) -> Self { + Self::ErrUnsupportedFeature(value) + } + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent( + name = "ChannelCloseConfirm", + abi = "ChannelCloseConfirm(string,string)" + )] + pub struct ChannelCloseConfirmFilter { + pub channel_id: ::std::string::String, + pub port_id: ::std::string::String, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "ChannelCloseInit", abi = "ChannelCloseInit(string,string)")] + pub struct ChannelCloseInitFilter { + pub channel_id: ::std::string::String, + pub port_id: ::std::string::String, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "ChannelOpenAck", abi = "ChannelOpenAck(string,string)")] + pub struct ChannelOpenAckFilter { + pub channel_id: ::std::string::String, + pub port_id: ::std::string::String, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "ChannelOpenConfirm", abi = "ChannelOpenConfirm(string,string)")] + pub struct ChannelOpenConfirmFilter { + pub channel_id: ::std::string::String, + pub port_id: ::std::string::String, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent( + name = "ChannelOpenInit", + abi = "ChannelOpenInit(string,string,string,string)" + )] + pub struct ChannelOpenInitFilter { + pub channel_id: ::std::string::String, + pub connection_id: ::std::string::String, + pub port_id: ::std::string::String, + pub counterparty_port_id: ::std::string::String, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent( + name = "ChannelOpenTry", + abi = "ChannelOpenTry(string,string,string,string,string)" + )] + pub struct ChannelOpenTryFilter { + pub channel_id: ::std::string::String, + pub connection_id: ::std::string::String, + pub port_id: ::std::string::String, + pub counterparty_port_id: ::std::string::String, + pub version: ::std::string::String, + } + ///Container type for all of the contract's events + #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] + pub enum IBCChannelHandshakeEvents { + ChannelCloseConfirmFilter(ChannelCloseConfirmFilter), + ChannelCloseInitFilter(ChannelCloseInitFilter), + ChannelOpenAckFilter(ChannelOpenAckFilter), + ChannelOpenConfirmFilter(ChannelOpenConfirmFilter), + ChannelOpenInitFilter(ChannelOpenInitFilter), + ChannelOpenTryFilter(ChannelOpenTryFilter), + } + impl ::ethers::contract::EthLogDecode for IBCChannelHandshakeEvents { + fn decode_log( + log: &::ethers::core::abi::RawLog, + ) -> ::core::result::Result { + if let Ok(decoded) = ChannelCloseConfirmFilter::decode_log(log) { + return Ok(IBCChannelHandshakeEvents::ChannelCloseConfirmFilter( + decoded, + )); + } + if let Ok(decoded) = ChannelCloseInitFilter::decode_log(log) { + return Ok(IBCChannelHandshakeEvents::ChannelCloseInitFilter(decoded)); + } + if let Ok(decoded) = ChannelOpenAckFilter::decode_log(log) { + return Ok(IBCChannelHandshakeEvents::ChannelOpenAckFilter(decoded)); + } + if let Ok(decoded) = ChannelOpenConfirmFilter::decode_log(log) { + return Ok(IBCChannelHandshakeEvents::ChannelOpenConfirmFilter(decoded)); + } + if let Ok(decoded) = ChannelOpenInitFilter::decode_log(log) { + return Ok(IBCChannelHandshakeEvents::ChannelOpenInitFilter(decoded)); + } + if let Ok(decoded) = ChannelOpenTryFilter::decode_log(log) { + return Ok(IBCChannelHandshakeEvents::ChannelOpenTryFilter(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData) + } + } + impl ::core::fmt::Display for IBCChannelHandshakeEvents { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::ChannelCloseConfirmFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::ChannelCloseInitFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::ChannelOpenAckFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::ChannelOpenConfirmFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::ChannelOpenInitFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::ChannelOpenTryFilter(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for IBCChannelHandshakeEvents { + fn from(value: ChannelCloseConfirmFilter) -> Self { + Self::ChannelCloseConfirmFilter(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeEvents { + fn from(value: ChannelCloseInitFilter) -> Self { + Self::ChannelCloseInitFilter(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeEvents { + fn from(value: ChannelOpenAckFilter) -> Self { + Self::ChannelOpenAckFilter(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeEvents { + fn from(value: ChannelOpenConfirmFilter) -> Self { + Self::ChannelOpenConfirmFilter(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeEvents { + fn from(value: ChannelOpenInitFilter) -> Self { + Self::ChannelOpenInitFilter(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeEvents { + fn from(value: ChannelOpenTryFilter) -> Self { + Self::ChannelOpenTryFilter(value) + } + } + ///Container type for all input parameters for the `COMMITMENT_PREFIX` function with signature `COMMITMENT_PREFIX()` and selector `0xa9550dac` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "COMMITMENT_PREFIX", abi = "COMMITMENT_PREFIX()")] + pub struct CommitmentPrefixCall; + ///Container type for all input parameters for the `bindPort` function with signature `bindPort(string,address)` and selector `0x117e886a` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "bindPort", abi = "bindPort(string,address)")] + pub struct BindPortCall { + pub port_id: ::std::string::String, + pub module_address: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `capabilities` function with signature `capabilities(string)` and selector `0x5717bcf5` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "capabilities", abi = "capabilities(string)")] + pub struct CapabilitiesCall(pub ::std::string::String); + ///Container type for all input parameters for the `channelCapabilityPath` function with signature `channelCapabilityPath(string,string)` and selector `0x3bc3339f` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "channelCapabilityPath", + abi = "channelCapabilityPath(string,string)" + )] + pub struct ChannelCapabilityPathCall { + pub port_id: ::std::string::String, + pub channel_id: ::std::string::String, + } + ///Container type for all input parameters for the `channelCloseConfirm` function with signature `channelCloseConfirm((string,string,bytes,(uint64,uint64)))` and selector `0x25cbc3a6` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "channelCloseConfirm", + abi = "channelCloseConfirm((string,string,bytes,(uint64,uint64)))" + )] + pub struct ChannelCloseConfirmCall { + pub msg: MsgChannelCloseConfirm, + } + ///Container type for all input parameters for the `channelCloseInit` function with signature `channelCloseInit((string,string))` and selector `0xa06cb3a2` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "channelCloseInit", abi = "channelCloseInit((string,string))")] + pub struct ChannelCloseInitCall { + pub msg: MsgChannelCloseInit, + } + ///Container type for all input parameters for the `channelOpenAck` function with signature `channelOpenAck((string,string,string,string,bytes,(uint64,uint64)))` and selector `0x256c4199` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "channelOpenAck", + abi = "channelOpenAck((string,string,string,string,bytes,(uint64,uint64)))" + )] + pub struct ChannelOpenAckCall { + pub msg: MsgChannelOpenAck, + } + ///Container type for all input parameters for the `channelOpenConfirm` function with signature `channelOpenConfirm((string,string,bytes,(uint64,uint64)))` and selector `0x5bd51b62` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "channelOpenConfirm", + abi = "channelOpenConfirm((string,string,bytes,(uint64,uint64)))" + )] + pub struct ChannelOpenConfirmCall { + pub msg: MsgChannelOpenConfirm, + } + ///Container type for all input parameters for the `channelOpenInit` function with signature `channelOpenInit((string,(uint8,uint8,(string,string),string[],string)))` and selector `0xdd3469fc` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "channelOpenInit", + abi = "channelOpenInit((string,(uint8,uint8,(string,string),string[],string)))" + )] + pub struct ChannelOpenInitCall { + pub msg: MsgChannelOpenInit, + } + ///Container type for all input parameters for the `channelOpenTry` function with signature `channelOpenTry((string,(uint8,uint8,(string,string),string[],string),string,bytes,(uint64,uint64)))` and selector `0x11b88a15` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "channelOpenTry", + abi = "channelOpenTry((string,(uint8,uint8,(string,string),string[],string),string,bytes,(uint64,uint64)))" + )] + pub struct ChannelOpenTryCall { + pub msg: MsgChannelOpenTry, + } + ///Container type for all input parameters for the `channels` function with signature `channels(string,string)` and selector `0x5b3de260` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "channels", abi = "channels(string,string)")] + pub struct ChannelsCall(pub ::std::string::String, pub ::std::string::String); + ///Container type for all input parameters for the `clientImpls` function with signature `clientImpls(string)` and selector `0xd1297b8d` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "clientImpls", abi = "clientImpls(string)")] + pub struct ClientImplsCall(pub ::std::string::String); + ///Container type for all input parameters for the `clientRegistry` function with signature `clientRegistry(string)` and selector `0x990491a5` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "clientRegistry", abi = "clientRegistry(string)")] + pub struct ClientRegistryCall(pub ::std::string::String); + ///Container type for all input parameters for the `clientTypes` function with signature `clientTypes(string)` and selector `0xc2380105` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "clientTypes", abi = "clientTypes(string)")] + pub struct ClientTypesCall(pub ::std::string::String); + ///Container type for all input parameters for the `commitments` function with signature `commitments(bytes32)` and selector `0x839df945` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "commitments", abi = "commitments(bytes32)")] + pub struct CommitmentsCall(pub [u8; 32]); + ///Container type for all input parameters for the `connections` function with signature `connections(string)` and selector `0x31973f00` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "connections", abi = "connections(string)")] + pub struct ConnectionsCall(pub ::std::string::String); + ///Container type for all input parameters for the `getClient` function with signature `getClient(string)` and selector `0x7eb78932` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "getClient", abi = "getClient(string)")] + pub struct GetClientCall { + pub client_id: ::std::string::String, + } + ///Container type for all input parameters for the `nextChannelSequence` function with signature `nextChannelSequence()` and selector `0x7926b8a9` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextChannelSequence", abi = "nextChannelSequence()")] + pub struct NextChannelSequenceCall; + ///Container type for all input parameters for the `nextClientSequence` function with signature `nextClientSequence()` and selector `0xe1b17b43` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextClientSequence", abi = "nextClientSequence()")] + pub struct NextClientSequenceCall; + ///Container type for all input parameters for the `nextConnectionSequence` function with signature `nextConnectionSequence()` and selector `0xa049e677` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextConnectionSequence", abi = "nextConnectionSequence()")] + pub struct NextConnectionSequenceCall; + ///Container type for all input parameters for the `nextSequenceAcks` function with signature `nextSequenceAcks(string,string)` and selector `0x1390d28d` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextSequenceAcks", abi = "nextSequenceAcks(string,string)")] + pub struct NextSequenceAcksCall(pub ::std::string::String, pub ::std::string::String); + ///Container type for all input parameters for the `nextSequenceRecvs` function with signature `nextSequenceRecvs(string,string)` and selector `0xc930b1b0` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextSequenceRecvs", abi = "nextSequenceRecvs(string,string)")] + pub struct NextSequenceRecvsCall(pub ::std::string::String, pub ::std::string::String); + ///Container type for all input parameters for the `nextSequenceSends` function with signature `nextSequenceSends(string,string)` and selector `0x821cb5d0` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextSequenceSends", abi = "nextSequenceSends(string,string)")] + pub struct NextSequenceSendsCall(pub ::std::string::String, pub ::std::string::String); + ///Container type for all input parameters for the `packetReceipts` function with signature `packetReceipts(string,string,uint64)` and selector `0x26078437` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "packetReceipts", abi = "packetReceipts(string,string,uint64)")] + pub struct PacketReceiptsCall( + pub ::std::string::String, + pub ::std::string::String, + pub u64, + ); + ///Container type for all input parameters for the `portCapabilityPath` function with signature `portCapabilityPath(string)` and selector `0x2570dae0` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "portCapabilityPath", abi = "portCapabilityPath(string)")] + pub struct PortCapabilityPathCall { + pub port_id: ::std::string::String, + } + ///Container type for all of the contract's call + #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] + pub enum IBCChannelHandshakeCalls { + CommitmentPrefix(CommitmentPrefixCall), + BindPort(BindPortCall), + Capabilities(CapabilitiesCall), + ChannelCapabilityPath(ChannelCapabilityPathCall), + ChannelCloseConfirm(ChannelCloseConfirmCall), + ChannelCloseInit(ChannelCloseInitCall), + ChannelOpenAck(ChannelOpenAckCall), + ChannelOpenConfirm(ChannelOpenConfirmCall), + ChannelOpenInit(ChannelOpenInitCall), + ChannelOpenTry(ChannelOpenTryCall), + Channels(ChannelsCall), + ClientImpls(ClientImplsCall), + ClientRegistry(ClientRegistryCall), + ClientTypes(ClientTypesCall), + Commitments(CommitmentsCall), + Connections(ConnectionsCall), + GetClient(GetClientCall), + NextChannelSequence(NextChannelSequenceCall), + NextClientSequence(NextClientSequenceCall), + NextConnectionSequence(NextConnectionSequenceCall), + NextSequenceAcks(NextSequenceAcksCall), + NextSequenceRecvs(NextSequenceRecvsCall), + NextSequenceSends(NextSequenceSendsCall), + PacketReceipts(PacketReceiptsCall), + PortCapabilityPath(PortCapabilityPathCall), + } + impl ::ethers::core::abi::AbiDecode for IBCChannelHandshakeCalls { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::CommitmentPrefix(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::BindPort(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::Capabilities(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ChannelCapabilityPath(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ChannelCloseConfirm(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ChannelCloseInit(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ChannelOpenAck(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ChannelOpenConfirm(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ChannelOpenInit(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ChannelOpenTry(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Channels(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::ClientImpls(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ClientRegistry(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::ClientTypes(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Commitments(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Connections(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::GetClient(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextChannelSequence(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextClientSequence(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextConnectionSequence(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextSequenceAcks(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextSequenceRecvs(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextSequenceSends(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::PacketReceipts(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::PortCapabilityPath(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for IBCChannelHandshakeCalls { + fn encode(self) -> Vec { + match self { + Self::CommitmentPrefix(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::BindPort(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Capabilities(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ChannelCapabilityPath(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ChannelCloseConfirm(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ChannelCloseInit(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ChannelOpenAck(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ChannelOpenConfirm(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ChannelOpenInit(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ChannelOpenTry(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Channels(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ClientImpls(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ClientRegistry(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ClientTypes(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Commitments(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Connections(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::GetClient(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::NextChannelSequence(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::NextClientSequence(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::NextConnectionSequence(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::NextSequenceAcks(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::NextSequenceRecvs(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::NextSequenceSends(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::PacketReceipts(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::PortCapabilityPath(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + } + } + } + impl ::core::fmt::Display for IBCChannelHandshakeCalls { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::CommitmentPrefix(element) => ::core::fmt::Display::fmt(element, f), + Self::BindPort(element) => ::core::fmt::Display::fmt(element, f), + Self::Capabilities(element) => ::core::fmt::Display::fmt(element, f), + Self::ChannelCapabilityPath(element) => ::core::fmt::Display::fmt(element, f), + Self::ChannelCloseConfirm(element) => ::core::fmt::Display::fmt(element, f), + Self::ChannelCloseInit(element) => ::core::fmt::Display::fmt(element, f), + Self::ChannelOpenAck(element) => ::core::fmt::Display::fmt(element, f), + Self::ChannelOpenConfirm(element) => ::core::fmt::Display::fmt(element, f), + Self::ChannelOpenInit(element) => ::core::fmt::Display::fmt(element, f), + Self::ChannelOpenTry(element) => ::core::fmt::Display::fmt(element, f), + Self::Channels(element) => ::core::fmt::Display::fmt(element, f), + Self::ClientImpls(element) => ::core::fmt::Display::fmt(element, f), + Self::ClientRegistry(element) => ::core::fmt::Display::fmt(element, f), + Self::ClientTypes(element) => ::core::fmt::Display::fmt(element, f), + Self::Commitments(element) => ::core::fmt::Display::fmt(element, f), + Self::Connections(element) => ::core::fmt::Display::fmt(element, f), + Self::GetClient(element) => ::core::fmt::Display::fmt(element, f), + Self::NextChannelSequence(element) => ::core::fmt::Display::fmt(element, f), + Self::NextClientSequence(element) => ::core::fmt::Display::fmt(element, f), + Self::NextConnectionSequence(element) => ::core::fmt::Display::fmt(element, f), + Self::NextSequenceAcks(element) => ::core::fmt::Display::fmt(element, f), + Self::NextSequenceRecvs(element) => ::core::fmt::Display::fmt(element, f), + Self::NextSequenceSends(element) => ::core::fmt::Display::fmt(element, f), + Self::PacketReceipts(element) => ::core::fmt::Display::fmt(element, f), + Self::PortCapabilityPath(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for IBCChannelHandshakeCalls { + fn from(value: CommitmentPrefixCall) -> Self { + Self::CommitmentPrefix(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeCalls { + fn from(value: BindPortCall) -> Self { + Self::BindPort(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeCalls { + fn from(value: CapabilitiesCall) -> Self { + Self::Capabilities(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeCalls { + fn from(value: ChannelCapabilityPathCall) -> Self { + Self::ChannelCapabilityPath(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeCalls { + fn from(value: ChannelCloseConfirmCall) -> Self { + Self::ChannelCloseConfirm(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeCalls { + fn from(value: ChannelCloseInitCall) -> Self { + Self::ChannelCloseInit(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeCalls { + fn from(value: ChannelOpenAckCall) -> Self { + Self::ChannelOpenAck(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeCalls { + fn from(value: ChannelOpenConfirmCall) -> Self { + Self::ChannelOpenConfirm(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeCalls { + fn from(value: ChannelOpenInitCall) -> Self { + Self::ChannelOpenInit(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeCalls { + fn from(value: ChannelOpenTryCall) -> Self { + Self::ChannelOpenTry(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeCalls { + fn from(value: ChannelsCall) -> Self { + Self::Channels(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeCalls { + fn from(value: ClientImplsCall) -> Self { + Self::ClientImpls(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeCalls { + fn from(value: ClientRegistryCall) -> Self { + Self::ClientRegistry(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeCalls { + fn from(value: ClientTypesCall) -> Self { + Self::ClientTypes(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeCalls { + fn from(value: CommitmentsCall) -> Self { + Self::Commitments(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeCalls { + fn from(value: ConnectionsCall) -> Self { + Self::Connections(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeCalls { + fn from(value: GetClientCall) -> Self { + Self::GetClient(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeCalls { + fn from(value: NextChannelSequenceCall) -> Self { + Self::NextChannelSequence(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeCalls { + fn from(value: NextClientSequenceCall) -> Self { + Self::NextClientSequence(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeCalls { + fn from(value: NextConnectionSequenceCall) -> Self { + Self::NextConnectionSequence(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeCalls { + fn from(value: NextSequenceAcksCall) -> Self { + Self::NextSequenceAcks(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeCalls { + fn from(value: NextSequenceRecvsCall) -> Self { + Self::NextSequenceRecvs(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeCalls { + fn from(value: NextSequenceSendsCall) -> Self { + Self::NextSequenceSends(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeCalls { + fn from(value: PacketReceiptsCall) -> Self { + Self::PacketReceipts(value) + } + } + impl ::core::convert::From for IBCChannelHandshakeCalls { + fn from(value: PortCapabilityPathCall) -> Self { + Self::PortCapabilityPath(value) + } + } + ///Container type for all return fields from the `COMMITMENT_PREFIX` function with signature `COMMITMENT_PREFIX()` and selector `0xa9550dac` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct CommitmentPrefixReturn(pub ::std::string::String); + ///Container type for all return fields from the `capabilities` function with signature `capabilities(string)` and selector `0x5717bcf5` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct CapabilitiesReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `channelCapabilityPath` function with signature `channelCapabilityPath(string,string)` and selector `0x3bc3339f` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ChannelCapabilityPathReturn(pub ::std::string::String); + ///Container type for all return fields from the `channelOpenInit` function with signature `channelOpenInit((string,(uint8,uint8,(string,string),string[],string)))` and selector `0xdd3469fc` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ChannelOpenInitReturn(pub ::std::string::String); + ///Container type for all return fields from the `channelOpenTry` function with signature `channelOpenTry((string,(uint8,uint8,(string,string),string[],string),string,bytes,(uint64,uint64)))` and selector `0x11b88a15` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ChannelOpenTryReturn(pub ::std::string::String); + ///Container type for all return fields from the `channels` function with signature `channels(string,string)` and selector `0x5b3de260` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ChannelsReturn { + pub state: u8, + pub ordering: u8, + pub counterparty: IbcCoreChannelV1CounterpartyData, + pub version: ::std::string::String, + } + ///Container type for all return fields from the `clientImpls` function with signature `clientImpls(string)` and selector `0xd1297b8d` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ClientImplsReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `clientRegistry` function with signature `clientRegistry(string)` and selector `0x990491a5` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ClientRegistryReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `clientTypes` function with signature `clientTypes(string)` and selector `0xc2380105` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ClientTypesReturn(pub ::std::string::String); + ///Container type for all return fields from the `commitments` function with signature `commitments(bytes32)` and selector `0x839df945` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct CommitmentsReturn(pub [u8; 32]); + ///Container type for all return fields from the `connections` function with signature `connections(string)` and selector `0x31973f00` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ConnectionsReturn { + pub client_id: ::std::string::String, + pub state: u8, + pub counterparty: IbcCoreConnectionV1CounterpartyData, + pub delay_period: u64, + } + ///Container type for all return fields from the `getClient` function with signature `getClient(string)` and selector `0x7eb78932` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct GetClientReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `nextChannelSequence` function with signature `nextChannelSequence()` and selector `0x7926b8a9` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextChannelSequenceReturn(pub u64); + ///Container type for all return fields from the `nextClientSequence` function with signature `nextClientSequence()` and selector `0xe1b17b43` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextClientSequenceReturn(pub u64); + ///Container type for all return fields from the `nextConnectionSequence` function with signature `nextConnectionSequence()` and selector `0xa049e677` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextConnectionSequenceReturn(pub u64); + ///Container type for all return fields from the `nextSequenceAcks` function with signature `nextSequenceAcks(string,string)` and selector `0x1390d28d` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextSequenceAcksReturn(pub u64); + ///Container type for all return fields from the `nextSequenceRecvs` function with signature `nextSequenceRecvs(string,string)` and selector `0xc930b1b0` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextSequenceRecvsReturn(pub u64); + ///Container type for all return fields from the `nextSequenceSends` function with signature `nextSequenceSends(string,string)` and selector `0x821cb5d0` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextSequenceSendsReturn(pub u64); + ///Container type for all return fields from the `packetReceipts` function with signature `packetReceipts(string,string,uint64)` and selector `0x26078437` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct PacketReceiptsReturn(pub u8); + ///Container type for all return fields from the `portCapabilityPath` function with signature `portCapabilityPath(string)` and selector `0x2570dae0` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct PortCapabilityPathReturn(pub ::std::string::String); +} diff --git a/generated/contracts/src/ibc_client.rs b/generated/contracts/src/ibc_client.rs new file mode 100644 index 0000000000..1f9dbae22c --- /dev/null +++ b/generated/contracts/src/ibc_client.rs @@ -0,0 +1,1909 @@ +pub use ibc_client::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod ibc_client { + pub use super::super::shared_types::*; + #[cfg(feature = "providers")] + #[allow(deprecated)] + #[cfg(feature = "providers")] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("COMMITMENT_PREFIX"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("COMMITMENT_PREFIX"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("capabilities"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("capabilities"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("channels"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("channels"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("state"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(8usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "enum IbcCoreChannelV1GlobalEnums.State", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("ordering"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(8usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "enum IbcCoreChannelV1GlobalEnums.Order", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("counterparty"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IbcCoreChannelV1Counterparty.Data", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("version"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("clientImpls"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("clientImpls"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("clientRegistry"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("clientRegistry"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("clientTypes"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("clientTypes"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("commitments"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("commitments"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("connections"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("connections"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("client_id"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("state"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(8usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "enum IbcCoreConnectionV1GlobalEnums.State", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("counterparty"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Bytes + ],), + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IbcCoreConnectionV1Counterparty.Data", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("delay_period"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("createClient"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("createClient"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("msg_"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("struct IBCMsgs.MsgCreateClient",), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("clientId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("getClient"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("getClient"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("clientId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("contract ILightClient"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextChannelSequence"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextChannelSequence",), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextClientSequence"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextClientSequence"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextConnectionSequence"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextConnectionSequence",), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextSequenceAcks"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextSequenceAcks"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextSequenceRecvs"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextSequenceRecvs"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextSequenceSends"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextSequenceSends"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("packetReceipts"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("packetReceipts"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(8usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint8"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("registerClient"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("registerClient"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("clientType"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("client"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("contract ILightClient"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("updateClient"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("updateClient"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("msg_"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("struct IBCMsgs.MsgUpdateClient",), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ]), + events: ::core::convert::From::from([( + ::std::borrow::ToOwned::to_owned("GeneratedClientIdentifier"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("GeneratedClientIdentifier",), + inputs: ::std::vec![::ethers::core::abi::ethabi::EventParam { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + },], + anonymous: false, + },], + )]), + errors: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("ErrClientMustNotBeSelf"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrClientMustNotBeSelf",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrClientNotFound"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrClientNotFound"), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrClientTypeAlreadyExists"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrClientTypeAlreadyExists",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrClientTypeNotFound"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrClientTypeNotFound",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrFailedToCreateClient"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrFailedToCreateClient",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrFailedToUpdateClient"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrFailedToUpdateClient",), + inputs: ::std::vec![], + },], + ), + ]), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + #[cfg(feature = "providers")] + pub static IBCCLIENT_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + #[cfg(feature = "providers")] + const __BYTECODE: &[u8] = b"`\x80\x80`@R4a\0\x16Wa\x1Ch\x90\x81a\0\x1C\x829\xF3[`\0\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x12W`\0\x80\xFD[`\x005`\xE0\x1C\x80c\x13\x90\xD2\x8D\x14a\x15aW\x80c\x18\xC1\x98p\x14a\x14\x1BW\x80c&\x07\x847\x14a\x13`W\x80c1\x97?\0\x14a\x11\xA1W\x80cW\x17\xBC\xF5\x14a\x11#W\x80c[=\xE2`\x14a\x0F\xDEW\x80cy&\xB8\xA9\x14a\x0F\x95W\x80c~\xB7\x892\x14a\x0F#W\x80c\x82\x1C\xB5\xD0\x14a\x0E\xF3W\x80c\x83\x9D\xF9E\x14a\x0E\xA9W\x80c\x99\x04\x91\xA5\x14a\x0E+W\x80c\xA0I\xE6w\x14a\r\xE2W\x80c\xA9U\r\xAC\x14a\rfW\x80c\xC28\x01\x05\x14a\x0C\xD8W\x80c\xC90\xB1\xB0\x14a\x0C\x89W\x80c\xD1){\x8D\x14a\x0B\xF8W\x80c\xD5\xA2D\x81\x14a\x04WW\x80c\xDAl\xEAU\x14a\x018Wc\xE1\xB1{C\x14a\0\xEDW`\0\x80\xFD[4a\x013W`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x013W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT\x16`@Q\x90\x81R\xF3[`\0\x80\xFD[4a\x013W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x90\x80\x826\x01\x12a\x013W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11a\x013W\x81`\x04\x01\x91`@\x85\x826\x03\x01\x12a\x013Wa\x01\xAAa\x01\xA5a\x01\x9E\x85\x80a\x18\xB5V[6\x91a\x16(V[a\x1A!V[\x84\x81Q\x91\x01 `\0R`\0\x84R`@`\0 T\x15a\x04-Wa\x02R`\0\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xF2a\x01\xEDa\x01\x9E\x88\x80a\x18\xB5V[a\x18rV[\x16\x90\x83`$a\x02aa\x02\x11a\x02\x07\x8A\x80a\x18\xB5V[\x93\x90\x95\x01\x8Aa\x18\xB5V[`@\x9C\x91\x9CQ\x9C\x8D\x98\x89\x97\x88\x96\x7Fo\xBF\x80y\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x88R`@`\x04\x89\x01R`D\x88\x01\x91a\x19\x9FV[\x92\x85\x84\x03\x01`$\x86\x01Ra\x19\x9FV[\x03\x92Z\xF1\x80\x15a\x04!W`\0\x90`\0\x95`\0\x91a\x03@W[P\x15a\x03\x16Wa\x02\x8Fa\x01\xA5a\x01\x9E\x85\x80a\x18\xB5V[\x84\x81Q\x91\x01 `\0R`\0\x84R`@`\0 U`\0[\x84Q\x81\x10\x15a\x03\x14W\x80a\x02\xBB`\x01\x92\x87a\x19\xDEV[QQa\x03\x01a\x02\xFC\x88a\x02\xCE\x88\x80a\x18\xB5V[\x92\x90\x88\x8B\x80a\x02\xEE\x8A\x84\x83a\x02\xE3\x83\x8Ba\x19\xDEV[Q\x01QQ\x16\x97a\x19\xDEV[Q\x01Q\x01Q\x16\x936\x91a\x16(V[a\x1A\x9BV[`\0R`\0\x86R`@`\0 U\x01a\x02\xA5V[\0[`\x04`@Q\x7F\xF1i\x119\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x95PPP=\x80`\0\x86>a\x03T\x81\x86a\x15\xADV[\x84\x01``\x94``\x81\x83\x03\x12a\x013W\x80Q\x95\x85\x82\x01Q\x84\x81\x11a\x013W\x82\x01\x83`\x1F\x82\x01\x12\x15a\x013W\x80Q\x85\x81\x11a\x03\xF2W`@Q\x94a\x03\x9A\x89\x83`\x05\x1B\x01\x87a\x15\xADV[\x81\x86R\x88``\x81\x88\x01\x93\x02\x84\x01\x01\x92\x81\x84\x11a\x013W\x89\x80\x91\x01\x92[\x84\x84\x10a\x03\xD8WPPPPPP`@a\x03\xCF\x91\x01a\x19\x92V[\x94\x90\x94\x86a\x02yV[\x90\x85\x91a\x03\xE5\x84\x86a\x19\x1BV[\x81R\x01\x92\x01\x91\x89\x90a\x03\xB6V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`A`\x04R`$`\0\xFD[`@Q=`\0\x82>=\x90\xFD[`\x04`@Q\x7F\xB6\xC7\x1F}\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[4a\x013W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x013Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x11a\x013W``\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC`\x0456\x03\x01\x12a\x013Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF` a\x04\xEA`\x04\x805\x01\x80a\x18\xB5V[\x91\x90\x82`@Q\x93\x84\x92\x837\x81\x01`\x01\x81R\x03\x01\x90 T\x16\x80\x15a\x0B\xCEWa\x05\x15`\x04\x805\x01\x80a\x18\xB5V[`\x0BT\x90\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90`\0\x82\x80z\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x80\x82\x10\x15a\x0B\xBFW[P`\n\x90m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x80\x82\x10\x15a\x0B\xB2W[Pf#\x86\xF2o\xC1\0\0\x80\x82\x10\x15a\x0B\xA5W[Pc\x05\xF5\xE1\0\x80\x82\x10\x15a\x0B\x98W[Pa'\x10\x80\x82\x10\x15a\x0B\x8BW[P`d\x81\x10\x15a\x0B}W[\x10\x15a\x0BrW[`\n\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`!`\x01\x85\x01\x94\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0a\x06\x18a\x06\x02\x88a\x15\xEEV[\x97a\x06\x10`@Q\x99\x8Aa\x15\xADV[\x80\x89Ra\x15\xEEV[\x016` \x88\x017\x85\x01\x01[\x01\x91\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x82\x06\x1A\x83S\x04\x90\x81\x15a\x06~W`\n\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90a\x06#V[PPa\x06\xDD\x91`!\x91\x86`@Q\x97\x88\x93` \x85\x017\x82\x01\x7F-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01Ra\x06\xCE\x82Q\x80\x93` \x87\x85\x01\x91\x01a\x16\xDFV[\x01\x03`\x01\x81\x01\x86R\x01\x84a\x15\xADV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x14a\x0BCWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x92\x01\x16\x91\x16\x17`\x0BUa\x075`\x045`\x04\x01`\x045`\x04\x01a\x18\xB5V[`@\x93\x91\x93Q` \x81\x85Qa\x07M\x81\x83\x85\x8A\x01a\x16\xDFV[\x81\x01`\x02\x81R\x03\x01\x90 \x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\xF2Wa\x07q\x82Ta\x17(V[`\x1F\x81\x11a\n\xFFW[P`\0`\x1F\x82\x11`\x01\x14a\n1W\x91\x81`\xA0\x94\x92a\x08\xB8\x94a\x08\xE8\x98`\0\x92a\n&W[PP\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90U[`@Q` \x81\x86Qa\x07\xE5\x81\x83\x85\x8B\x01a\x16\xDFV[\x81\x01`\x03\x81R\x03\x01\x90 \x81\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90U`\0a\x08-`$`\x045\x01`\x045`\x04\x01a\x18\xB5V[a\x08D`D`\x04\x94\x93\x945\x01`\x045`\x04\x01a\x18\xB5V[\x98\x90`@Q\x99\x8A\x97\x88\x96\x87\x95\x7F&)ck\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87R```\x04\x88\x01Ra\x08\x88\x8D`d\x89\x01\x90a\x18/V[\x91\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x88\x84\x03\x01`$\x89\x01Ra\x19\x9FV[\x91\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x85\x84\x03\x01`D\x86\x01Ra\x19\x9FV[\x03\x92Z\xF1\x91\x82\x15a\x04!W`\0\x92`\0\x91`\0\x91a\t\xD6W[P\x15a\t\xACWa\t\xA8\x92a\t\x14\x83a\x1A!V[` \x81Q\x91\x01 `\0R`\0` R`@`\0 Ua\tM` \x82Q\x92\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF` \x81\x83Q\x16\x92\x01Q\x16\x90\x84a\x1A\x9BV[`\0R`\0` R`@`\0 U\x7F`\x1B\xFC\xC4U\xD5\xD4\xD7s\x8F\x8Cj\xC22\xE0\xD7\xCC\x9C1\xDA\xB8\x11\xF1\xD8|\x10\n\xF0\xB7\xFC: `@Q` \x81R\x80a\t\x91` \x82\x01\x85a\x18/V[\x03\x90\xA1`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x18/V[\x03\x90\xF3[`\x04`@Q\x7F\x8B\x9F\x95\xB2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x93PPP`\xA0=`\xA0\x11a\n\x1FW[a\t\xEF\x81\x84a\x15\xADV[\x82\x01`\xA0\x83\x82\x03\x12a\x013Wa\n\x16`\x80a\n\x0F\x85Q\x93` \x87\x01a\x19\x1BV[\x94\x01a\x19\x92V[\x90\x92\x90\x84a\t\x01V[P=a\t\xE5V[\x015\x90P\x88\x80a\x07\x9EV[\x82`\0R` `\0 \x90`\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x84\x16\x81\x10a\n\xE7WP\x82a\x08\xB8\x94\x92a\x08\xE8\x98`\x01\x93\x83\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\xA0\x9A\x98\x16\x10a\n\xAFW[PPP\x81\x1B\x01\x90Ua\x07\xD0V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U\x88\x80\x80a\n\xA2V[\x90\x91` `\x01\x81\x92\x85\x8B\x015\x81U\x01\x93\x01\x91\x01a\n>V[\x82`\0R` `\0 `\x1F\x83\x01`\x05\x1C\x81\x01` \x84\x10a\x0Ba\x03T\x81\x86a\x15\xADV[\x84\x01``\x94``\x81\x83\x03\x12a\x013W\x80Q\x95\x85\x82\x01Q\x84\x81\x11a\x013W\x82\x01\x83`\x1F\x82\x01\x12\x15a\x013W\x80Q\x85\x81\x11a\x03\xF2W`@Q\x94a\x03\x9A\x89\x83`\x05\x1B\x01\x87a\x15\xADV[\x81\x86R\x88``\x81\x88\x01\x93\x02\x84\x01\x01\x92\x81\x84\x11a\x013W\x89\x80\x91\x01\x92[\x84\x84\x10a\x03\xD8WPPPPPP`@a\x03\xCF\x91\x01a\x19\x92V[\x94\x90\x94\x86a\x02yV[\x90\x85\x91a\x03\xE5\x84\x86a\x19\x1BV[\x81R\x01\x92\x01\x91\x89\x90a\x03\xB6V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`A`\x04R`$`\0\xFD[`@Q=`\0\x82>=\x90\xFD[`\x04`@Q\x7F\xB6\xC7\x1F}\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[4a\x013W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x013Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x11a\x013W``\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC`\x0456\x03\x01\x12a\x013Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF` a\x04\xEA`\x04\x805\x01\x80a\x18\xB5V[\x91\x90\x82`@Q\x93\x84\x92\x837\x81\x01`\x01\x81R\x03\x01\x90 T\x16\x80\x15a\x0B\xCEWa\x05\x15`\x04\x805\x01\x80a\x18\xB5V[`\x0BT\x90\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90`\0\x82\x80z\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x80\x82\x10\x15a\x0B\xBFW[P`\n\x90m\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x80\x82\x10\x15a\x0B\xB2W[Pf#\x86\xF2o\xC1\0\0\x80\x82\x10\x15a\x0B\xA5W[Pc\x05\xF5\xE1\0\x80\x82\x10\x15a\x0B\x98W[Pa'\x10\x80\x82\x10\x15a\x0B\x8BW[P`d\x81\x10\x15a\x0B}W[\x10\x15a\x0BrW[`\n\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`!`\x01\x85\x01\x94\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0a\x06\x18a\x06\x02\x88a\x15\xEEV[\x97a\x06\x10`@Q\x99\x8Aa\x15\xADV[\x80\x89Ra\x15\xEEV[\x016` \x88\x017\x85\x01\x01[\x01\x91\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x82\x06\x1A\x83S\x04\x90\x81\x15a\x06~W`\n\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90a\x06#V[PPa\x06\xDD\x91`!\x91\x86`@Q\x97\x88\x93` \x85\x017\x82\x01\x7F-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01Ra\x06\xCE\x82Q\x80\x93` \x87\x85\x01\x91\x01a\x16\xDFV[\x01\x03`\x01\x81\x01\x86R\x01\x84a\x15\xADV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x14a\x0BCWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x92\x01\x16\x91\x16\x17`\x0BUa\x075`\x045`\x04\x01`\x045`\x04\x01a\x18\xB5V[`@\x93\x91\x93Q` \x81\x85Qa\x07M\x81\x83\x85\x8A\x01a\x16\xDFV[\x81\x01`\x02\x81R\x03\x01\x90 \x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\xF2Wa\x07q\x82Ta\x17(V[`\x1F\x81\x11a\n\xFFW[P`\0`\x1F\x82\x11`\x01\x14a\n1W\x91\x81`\xA0\x94\x92a\x08\xB8\x94a\x08\xE8\x98`\0\x92a\n&W[PP\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90U[`@Q` \x81\x86Qa\x07\xE5\x81\x83\x85\x8B\x01a\x16\xDFV[\x81\x01`\x03\x81R\x03\x01\x90 \x81\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90U`\0a\x08-`$`\x045\x01`\x045`\x04\x01a\x18\xB5V[a\x08D`D`\x04\x94\x93\x945\x01`\x045`\x04\x01a\x18\xB5V[\x98\x90`@Q\x99\x8A\x97\x88\x96\x87\x95\x7F&)ck\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87R```\x04\x88\x01Ra\x08\x88\x8D`d\x89\x01\x90a\x18/V[\x91\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x88\x84\x03\x01`$\x89\x01Ra\x19\x9FV[\x91\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x85\x84\x03\x01`D\x86\x01Ra\x19\x9FV[\x03\x92Z\xF1\x91\x82\x15a\x04!W`\0\x92`\0\x91`\0\x91a\t\xD6W[P\x15a\t\xACWa\t\xA8\x92a\t\x14\x83a\x1A!V[` \x81Q\x91\x01 `\0R`\0` R`@`\0 Ua\tM` \x82Q\x92\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF` \x81\x83Q\x16\x92\x01Q\x16\x90\x84a\x1A\x9BV[`\0R`\0` R`@`\0 U\x7F`\x1B\xFC\xC4U\xD5\xD4\xD7s\x8F\x8Cj\xC22\xE0\xD7\xCC\x9C1\xDA\xB8\x11\xF1\xD8|\x10\n\xF0\xB7\xFC: `@Q` \x81R\x80a\t\x91` \x82\x01\x85a\x18/V[\x03\x90\xA1`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x18/V[\x03\x90\xF3[`\x04`@Q\x7F\x8B\x9F\x95\xB2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x93PPP`\xA0=`\xA0\x11a\n\x1FW[a\t\xEF\x81\x84a\x15\xADV[\x82\x01`\xA0\x83\x82\x03\x12a\x013Wa\n\x16`\x80a\n\x0F\x85Q\x93` \x87\x01a\x19\x1BV[\x94\x01a\x19\x92V[\x90\x92\x90\x84a\t\x01V[P=a\t\xE5V[\x015\x90P\x88\x80a\x07\x9EV[\x82`\0R` `\0 \x90`\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x84\x16\x81\x10a\n\xE7WP\x82a\x08\xB8\x94\x92a\x08\xE8\x98`\x01\x93\x83\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\xA0\x9A\x98\x16\x10a\n\xAFW[PPP\x81\x1B\x01\x90Ua\x07\xD0V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U\x88\x80\x80a\n\xA2V[\x90\x91` `\x01\x81\x92\x85\x8B\x015\x81U\x01\x93\x01\x91\x01a\n>V[\x82`\0R` `\0 `\x1F\x83\x01`\x05\x1C\x81\x01` \x84\x10a\x0B(::ethers::contract::Contract); + #[cfg(feature = "providers")] + impl ::core::clone::Clone for IBCClient { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + #[cfg(feature = "providers")] + impl ::core::ops::Deref for IBCClient { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + #[cfg(feature = "providers")] + impl ::core::ops::DerefMut for IBCClient { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + #[cfg(feature = "providers")] + impl ::core::fmt::Debug for IBCClient { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(IBCClient)) + .field(&self.address()) + .finish() + } + } + #[cfg(feature = "providers")] + impl IBCClient { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + IBCCLIENT_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + IBCCLIENT_ABI.clone(), + IBCCLIENT_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + ///Calls the contract's `COMMITMENT_PREFIX` (0xa9550dac) function + pub fn commitment_prefix( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([169, 85, 13, 172], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `capabilities` (0x5717bcf5) function + pub fn capabilities( + &self, + p0: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([87, 23, 188, 245], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `channels` (0x5b3de260) function + pub fn channels( + &self, + p0: ::std::string::String, + p1: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall< + M, + ( + u8, + u8, + IbcCoreChannelV1CounterpartyData, + ::std::string::String, + ), + > { + self.0 + .method_hash([91, 61, 226, 96], (p0, p1)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `clientImpls` (0xd1297b8d) function + pub fn client_impls( + &self, + p0: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([209, 41, 123, 141], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `clientRegistry` (0x990491a5) function + pub fn client_registry( + &self, + p0: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([153, 4, 145, 165], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `clientTypes` (0xc2380105) function + pub fn client_types( + &self, + p0: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([194, 56, 1, 5], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `commitments` (0x839df945) function + pub fn commitments( + &self, + p0: [u8; 32], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([131, 157, 249, 69], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `connections` (0x31973f00) function + pub fn connections( + &self, + p0: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall< + M, + ( + ::std::string::String, + u8, + IbcCoreConnectionV1CounterpartyData, + u64, + ), + > { + self.0 + .method_hash([49, 151, 63, 0], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `createClient` (0xd5a24481) function + pub fn create_client( + &self, + msg: MsgCreateClient, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([213, 162, 68, 129], (msg,)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `getClient` (0x7eb78932) function + pub fn get_client( + &self, + client_id: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([126, 183, 137, 50], client_id) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextChannelSequence` (0x7926b8a9) function + pub fn next_channel_sequence(&self) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([121, 38, 184, 169], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextClientSequence` (0xe1b17b43) function + pub fn next_client_sequence(&self) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([225, 177, 123, 67], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextConnectionSequence` (0xa049e677) function + pub fn next_connection_sequence( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([160, 73, 230, 119], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextSequenceAcks` (0x1390d28d) function + pub fn next_sequence_acks( + &self, + p0: ::std::string::String, + p1: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([19, 144, 210, 141], (p0, p1)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextSequenceRecvs` (0xc930b1b0) function + pub fn next_sequence_recvs( + &self, + p0: ::std::string::String, + p1: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([201, 48, 177, 176], (p0, p1)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextSequenceSends` (0x821cb5d0) function + pub fn next_sequence_sends( + &self, + p0: ::std::string::String, + p1: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([130, 28, 181, 208], (p0, p1)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `packetReceipts` (0x26078437) function + pub fn packet_receipts( + &self, + p0: ::std::string::String, + p1: ::std::string::String, + p2: u64, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([38, 7, 132, 55], (p0, p1, p2)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `registerClient` (0x18c19870) function + pub fn register_client( + &self, + client_type: ::std::string::String, + client: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([24, 193, 152, 112], (client_type, client)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `updateClient` (0xda6cea55) function + pub fn update_client( + &self, + msg: MsgUpdateClient, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([218, 108, 234, 85], (msg,)) + .expect("method not found (this should never happen)") + } + ///Gets the contract's `GeneratedClientIdentifier` event + pub fn generated_client_identifier_filter( + &self, + ) -> ::ethers::contract::builders::Event< + ::std::sync::Arc, + M, + GeneratedClientIdentifierFilter, + > { + self.0.event() + } + /// Returns an `Event` builder for all the events of this contract. + pub fn events( + &self, + ) -> ::ethers::contract::builders::Event< + ::std::sync::Arc, + M, + GeneratedClientIdentifierFilter, + > { + self.0 + .event_with_filter(::core::default::Default::default()) + } + } + #[cfg(feature = "providers")] + impl From<::ethers::contract::Contract> for IBCClient { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + ///Custom Error type `ErrClientMustNotBeSelf` with signature `ErrClientMustNotBeSelf()` and selector `0x468ef787` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrClientMustNotBeSelf", abi = "ErrClientMustNotBeSelf()")] + pub struct ErrClientMustNotBeSelf; + ///Custom Error type `ErrClientNotFound` with signature `ErrClientNotFound()` and selector `0xb6c71f7d` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrClientNotFound", abi = "ErrClientNotFound()")] + pub struct ErrClientNotFound; + ///Custom Error type `ErrClientTypeAlreadyExists` with signature `ErrClientTypeAlreadyExists()` and selector `0x0c7cc9b9` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrClientTypeAlreadyExists", + abi = "ErrClientTypeAlreadyExists()" + )] + pub struct ErrClientTypeAlreadyExists; + ///Custom Error type `ErrClientTypeNotFound` with signature `ErrClientTypeNotFound()` and selector `0xaa478af9` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrClientTypeNotFound", abi = "ErrClientTypeNotFound()")] + pub struct ErrClientTypeNotFound; + ///Custom Error type `ErrFailedToCreateClient` with signature `ErrFailedToCreateClient()` and selector `0x8b9f95b2` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrFailedToCreateClient", abi = "ErrFailedToCreateClient()")] + pub struct ErrFailedToCreateClient; + ///Custom Error type `ErrFailedToUpdateClient` with signature `ErrFailedToUpdateClient()` and selector `0xf1691139` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrFailedToUpdateClient", abi = "ErrFailedToUpdateClient()")] + pub struct ErrFailedToUpdateClient; + ///Container type for all of the contract's custom errors + #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] + pub enum IBCClientErrors { + ErrClientMustNotBeSelf(ErrClientMustNotBeSelf), + ErrClientNotFound(ErrClientNotFound), + ErrClientTypeAlreadyExists(ErrClientTypeAlreadyExists), + ErrClientTypeNotFound(ErrClientTypeNotFound), + ErrFailedToCreateClient(ErrFailedToCreateClient), + ErrFailedToUpdateClient(ErrFailedToUpdateClient), + /// The standard solidity revert string, with selector + /// Error(string) -- 0x08c379a0 + RevertString(::std::string::String), + } + impl ::ethers::core::abi::AbiDecode for IBCClientErrors { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + <::std::string::String as ::ethers::core::abi::AbiDecode>::decode(data) + { + return Ok(Self::RevertString(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrClientMustNotBeSelf(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::ErrClientNotFound(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrClientTypeAlreadyExists(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrClientTypeNotFound(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrFailedToCreateClient(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrFailedToUpdateClient(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for IBCClientErrors { + fn encode(self) -> ::std::vec::Vec { + match self { + Self::ErrClientMustNotBeSelf(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrClientNotFound(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ErrClientTypeAlreadyExists(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrClientTypeNotFound(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrFailedToCreateClient(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrFailedToUpdateClient(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::RevertString(s) => ::ethers::core::abi::AbiEncode::encode(s), + } + } + } + impl ::ethers::contract::ContractRevert for IBCClientErrors { + fn valid_selector(selector: [u8; 4]) -> bool { + match selector { + [0x08, 0xc3, 0x79, 0xa0] => true, + _ if selector + == ::selector() => + { + true + } + _ if selector + == ::selector() => + { + true + } + _ if selector + == ::selector() => + { + true + } + _ if selector + == ::selector() => + { + true + } + _ if selector + == ::selector() => + { + true + } + _ if selector + == ::selector() => + { + true + } + _ => false, + } + } + } + impl ::core::fmt::Display for IBCClientErrors { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::ErrClientMustNotBeSelf(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrClientNotFound(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrClientTypeAlreadyExists(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrClientTypeNotFound(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrFailedToCreateClient(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrFailedToUpdateClient(element) => ::core::fmt::Display::fmt(element, f), + Self::RevertString(s) => ::core::fmt::Display::fmt(s, f), + } + } + } + impl ::core::convert::From<::std::string::String> for IBCClientErrors { + fn from(value: String) -> Self { + Self::RevertString(value) + } + } + impl ::core::convert::From for IBCClientErrors { + fn from(value: ErrClientMustNotBeSelf) -> Self { + Self::ErrClientMustNotBeSelf(value) + } + } + impl ::core::convert::From for IBCClientErrors { + fn from(value: ErrClientNotFound) -> Self { + Self::ErrClientNotFound(value) + } + } + impl ::core::convert::From for IBCClientErrors { + fn from(value: ErrClientTypeAlreadyExists) -> Self { + Self::ErrClientTypeAlreadyExists(value) + } + } + impl ::core::convert::From for IBCClientErrors { + fn from(value: ErrClientTypeNotFound) -> Self { + Self::ErrClientTypeNotFound(value) + } + } + impl ::core::convert::From for IBCClientErrors { + fn from(value: ErrFailedToCreateClient) -> Self { + Self::ErrFailedToCreateClient(value) + } + } + impl ::core::convert::From for IBCClientErrors { + fn from(value: ErrFailedToUpdateClient) -> Self { + Self::ErrFailedToUpdateClient(value) + } + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent( + name = "GeneratedClientIdentifier", + abi = "GeneratedClientIdentifier(string)" + )] + pub struct GeneratedClientIdentifierFilter(pub ::std::string::String); + ///Container type for all input parameters for the `COMMITMENT_PREFIX` function with signature `COMMITMENT_PREFIX()` and selector `0xa9550dac` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "COMMITMENT_PREFIX", abi = "COMMITMENT_PREFIX()")] + pub struct CommitmentPrefixCall; + ///Container type for all input parameters for the `capabilities` function with signature `capabilities(string)` and selector `0x5717bcf5` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "capabilities", abi = "capabilities(string)")] + pub struct CapabilitiesCall(pub ::std::string::String); + ///Container type for all input parameters for the `channels` function with signature `channels(string,string)` and selector `0x5b3de260` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "channels", abi = "channels(string,string)")] + pub struct ChannelsCall(pub ::std::string::String, pub ::std::string::String); + ///Container type for all input parameters for the `clientImpls` function with signature `clientImpls(string)` and selector `0xd1297b8d` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "clientImpls", abi = "clientImpls(string)")] + pub struct ClientImplsCall(pub ::std::string::String); + ///Container type for all input parameters for the `clientRegistry` function with signature `clientRegistry(string)` and selector `0x990491a5` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "clientRegistry", abi = "clientRegistry(string)")] + pub struct ClientRegistryCall(pub ::std::string::String); + ///Container type for all input parameters for the `clientTypes` function with signature `clientTypes(string)` and selector `0xc2380105` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "clientTypes", abi = "clientTypes(string)")] + pub struct ClientTypesCall(pub ::std::string::String); + ///Container type for all input parameters for the `commitments` function with signature `commitments(bytes32)` and selector `0x839df945` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "commitments", abi = "commitments(bytes32)")] + pub struct CommitmentsCall(pub [u8; 32]); + ///Container type for all input parameters for the `connections` function with signature `connections(string)` and selector `0x31973f00` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "connections", abi = "connections(string)")] + pub struct ConnectionsCall(pub ::std::string::String); + ///Container type for all input parameters for the `createClient` function with signature `createClient((string,bytes,bytes))` and selector `0xd5a24481` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "createClient", abi = "createClient((string,bytes,bytes))")] + pub struct CreateClientCall { + pub msg: MsgCreateClient, + } + ///Container type for all input parameters for the `getClient` function with signature `getClient(string)` and selector `0x7eb78932` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "getClient", abi = "getClient(string)")] + pub struct GetClientCall { + pub client_id: ::std::string::String, + } + ///Container type for all input parameters for the `nextChannelSequence` function with signature `nextChannelSequence()` and selector `0x7926b8a9` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextChannelSequence", abi = "nextChannelSequence()")] + pub struct NextChannelSequenceCall; + ///Container type for all input parameters for the `nextClientSequence` function with signature `nextClientSequence()` and selector `0xe1b17b43` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextClientSequence", abi = "nextClientSequence()")] + pub struct NextClientSequenceCall; + ///Container type for all input parameters for the `nextConnectionSequence` function with signature `nextConnectionSequence()` and selector `0xa049e677` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextConnectionSequence", abi = "nextConnectionSequence()")] + pub struct NextConnectionSequenceCall; + ///Container type for all input parameters for the `nextSequenceAcks` function with signature `nextSequenceAcks(string,string)` and selector `0x1390d28d` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextSequenceAcks", abi = "nextSequenceAcks(string,string)")] + pub struct NextSequenceAcksCall(pub ::std::string::String, pub ::std::string::String); + ///Container type for all input parameters for the `nextSequenceRecvs` function with signature `nextSequenceRecvs(string,string)` and selector `0xc930b1b0` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextSequenceRecvs", abi = "nextSequenceRecvs(string,string)")] + pub struct NextSequenceRecvsCall(pub ::std::string::String, pub ::std::string::String); + ///Container type for all input parameters for the `nextSequenceSends` function with signature `nextSequenceSends(string,string)` and selector `0x821cb5d0` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextSequenceSends", abi = "nextSequenceSends(string,string)")] + pub struct NextSequenceSendsCall(pub ::std::string::String, pub ::std::string::String); + ///Container type for all input parameters for the `packetReceipts` function with signature `packetReceipts(string,string,uint64)` and selector `0x26078437` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "packetReceipts", abi = "packetReceipts(string,string,uint64)")] + pub struct PacketReceiptsCall( + pub ::std::string::String, + pub ::std::string::String, + pub u64, + ); + ///Container type for all input parameters for the `registerClient` function with signature `registerClient(string,address)` and selector `0x18c19870` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "registerClient", abi = "registerClient(string,address)")] + pub struct RegisterClientCall { + pub client_type: ::std::string::String, + pub client: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `updateClient` function with signature `updateClient((string,bytes))` and selector `0xda6cea55` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "updateClient", abi = "updateClient((string,bytes))")] + pub struct UpdateClientCall { + pub msg: MsgUpdateClient, + } + ///Container type for all of the contract's call + #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] + pub enum IBCClientCalls { + CommitmentPrefix(CommitmentPrefixCall), + Capabilities(CapabilitiesCall), + Channels(ChannelsCall), + ClientImpls(ClientImplsCall), + ClientRegistry(ClientRegistryCall), + ClientTypes(ClientTypesCall), + Commitments(CommitmentsCall), + Connections(ConnectionsCall), + CreateClient(CreateClientCall), + GetClient(GetClientCall), + NextChannelSequence(NextChannelSequenceCall), + NextClientSequence(NextClientSequenceCall), + NextConnectionSequence(NextConnectionSequenceCall), + NextSequenceAcks(NextSequenceAcksCall), + NextSequenceRecvs(NextSequenceRecvsCall), + NextSequenceSends(NextSequenceSendsCall), + PacketReceipts(PacketReceiptsCall), + RegisterClient(RegisterClientCall), + UpdateClient(UpdateClientCall), + } + impl ::ethers::core::abi::AbiDecode for IBCClientCalls { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::CommitmentPrefix(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::Capabilities(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Channels(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::ClientImpls(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ClientRegistry(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::ClientTypes(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Commitments(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Connections(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::CreateClient(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::GetClient(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextChannelSequence(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextClientSequence(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextConnectionSequence(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextSequenceAcks(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextSequenceRecvs(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextSequenceSends(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::PacketReceipts(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::RegisterClient(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::UpdateClient(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for IBCClientCalls { + fn encode(self) -> Vec { + match self { + Self::CommitmentPrefix(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Capabilities(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Channels(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ClientImpls(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ClientRegistry(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ClientTypes(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Commitments(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Connections(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::CreateClient(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::GetClient(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::NextChannelSequence(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::NextClientSequence(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::NextConnectionSequence(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::NextSequenceAcks(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::NextSequenceRecvs(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::NextSequenceSends(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::PacketReceipts(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::RegisterClient(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::UpdateClient(element) => ::ethers::core::abi::AbiEncode::encode(element), + } + } + } + impl ::core::fmt::Display for IBCClientCalls { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::CommitmentPrefix(element) => ::core::fmt::Display::fmt(element, f), + Self::Capabilities(element) => ::core::fmt::Display::fmt(element, f), + Self::Channels(element) => ::core::fmt::Display::fmt(element, f), + Self::ClientImpls(element) => ::core::fmt::Display::fmt(element, f), + Self::ClientRegistry(element) => ::core::fmt::Display::fmt(element, f), + Self::ClientTypes(element) => ::core::fmt::Display::fmt(element, f), + Self::Commitments(element) => ::core::fmt::Display::fmt(element, f), + Self::Connections(element) => ::core::fmt::Display::fmt(element, f), + Self::CreateClient(element) => ::core::fmt::Display::fmt(element, f), + Self::GetClient(element) => ::core::fmt::Display::fmt(element, f), + Self::NextChannelSequence(element) => ::core::fmt::Display::fmt(element, f), + Self::NextClientSequence(element) => ::core::fmt::Display::fmt(element, f), + Self::NextConnectionSequence(element) => ::core::fmt::Display::fmt(element, f), + Self::NextSequenceAcks(element) => ::core::fmt::Display::fmt(element, f), + Self::NextSequenceRecvs(element) => ::core::fmt::Display::fmt(element, f), + Self::NextSequenceSends(element) => ::core::fmt::Display::fmt(element, f), + Self::PacketReceipts(element) => ::core::fmt::Display::fmt(element, f), + Self::RegisterClient(element) => ::core::fmt::Display::fmt(element, f), + Self::UpdateClient(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for IBCClientCalls { + fn from(value: CommitmentPrefixCall) -> Self { + Self::CommitmentPrefix(value) + } + } + impl ::core::convert::From for IBCClientCalls { + fn from(value: CapabilitiesCall) -> Self { + Self::Capabilities(value) + } + } + impl ::core::convert::From for IBCClientCalls { + fn from(value: ChannelsCall) -> Self { + Self::Channels(value) + } + } + impl ::core::convert::From for IBCClientCalls { + fn from(value: ClientImplsCall) -> Self { + Self::ClientImpls(value) + } + } + impl ::core::convert::From for IBCClientCalls { + fn from(value: ClientRegistryCall) -> Self { + Self::ClientRegistry(value) + } + } + impl ::core::convert::From for IBCClientCalls { + fn from(value: ClientTypesCall) -> Self { + Self::ClientTypes(value) + } + } + impl ::core::convert::From for IBCClientCalls { + fn from(value: CommitmentsCall) -> Self { + Self::Commitments(value) + } + } + impl ::core::convert::From for IBCClientCalls { + fn from(value: ConnectionsCall) -> Self { + Self::Connections(value) + } + } + impl ::core::convert::From for IBCClientCalls { + fn from(value: CreateClientCall) -> Self { + Self::CreateClient(value) + } + } + impl ::core::convert::From for IBCClientCalls { + fn from(value: GetClientCall) -> Self { + Self::GetClient(value) + } + } + impl ::core::convert::From for IBCClientCalls { + fn from(value: NextChannelSequenceCall) -> Self { + Self::NextChannelSequence(value) + } + } + impl ::core::convert::From for IBCClientCalls { + fn from(value: NextClientSequenceCall) -> Self { + Self::NextClientSequence(value) + } + } + impl ::core::convert::From for IBCClientCalls { + fn from(value: NextConnectionSequenceCall) -> Self { + Self::NextConnectionSequence(value) + } + } + impl ::core::convert::From for IBCClientCalls { + fn from(value: NextSequenceAcksCall) -> Self { + Self::NextSequenceAcks(value) + } + } + impl ::core::convert::From for IBCClientCalls { + fn from(value: NextSequenceRecvsCall) -> Self { + Self::NextSequenceRecvs(value) + } + } + impl ::core::convert::From for IBCClientCalls { + fn from(value: NextSequenceSendsCall) -> Self { + Self::NextSequenceSends(value) + } + } + impl ::core::convert::From for IBCClientCalls { + fn from(value: PacketReceiptsCall) -> Self { + Self::PacketReceipts(value) + } + } + impl ::core::convert::From for IBCClientCalls { + fn from(value: RegisterClientCall) -> Self { + Self::RegisterClient(value) + } + } + impl ::core::convert::From for IBCClientCalls { + fn from(value: UpdateClientCall) -> Self { + Self::UpdateClient(value) + } + } + ///Container type for all return fields from the `COMMITMENT_PREFIX` function with signature `COMMITMENT_PREFIX()` and selector `0xa9550dac` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct CommitmentPrefixReturn(pub ::std::string::String); + ///Container type for all return fields from the `capabilities` function with signature `capabilities(string)` and selector `0x5717bcf5` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct CapabilitiesReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `channels` function with signature `channels(string,string)` and selector `0x5b3de260` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ChannelsReturn { + pub state: u8, + pub ordering: u8, + pub counterparty: IbcCoreChannelV1CounterpartyData, + pub version: ::std::string::String, + } + ///Container type for all return fields from the `clientImpls` function with signature `clientImpls(string)` and selector `0xd1297b8d` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ClientImplsReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `clientRegistry` function with signature `clientRegistry(string)` and selector `0x990491a5` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ClientRegistryReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `clientTypes` function with signature `clientTypes(string)` and selector `0xc2380105` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ClientTypesReturn(pub ::std::string::String); + ///Container type for all return fields from the `commitments` function with signature `commitments(bytes32)` and selector `0x839df945` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct CommitmentsReturn(pub [u8; 32]); + ///Container type for all return fields from the `connections` function with signature `connections(string)` and selector `0x31973f00` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ConnectionsReturn { + pub client_id: ::std::string::String, + pub state: u8, + pub counterparty: IbcCoreConnectionV1CounterpartyData, + pub delay_period: u64, + } + ///Container type for all return fields from the `createClient` function with signature `createClient((string,bytes,bytes))` and selector `0xd5a24481` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct CreateClientReturn { + pub client_id: ::std::string::String, + } + ///Container type for all return fields from the `getClient` function with signature `getClient(string)` and selector `0x7eb78932` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct GetClientReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `nextChannelSequence` function with signature `nextChannelSequence()` and selector `0x7926b8a9` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextChannelSequenceReturn(pub u64); + ///Container type for all return fields from the `nextClientSequence` function with signature `nextClientSequence()` and selector `0xe1b17b43` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextClientSequenceReturn(pub u64); + ///Container type for all return fields from the `nextConnectionSequence` function with signature `nextConnectionSequence()` and selector `0xa049e677` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextConnectionSequenceReturn(pub u64); + ///Container type for all return fields from the `nextSequenceAcks` function with signature `nextSequenceAcks(string,string)` and selector `0x1390d28d` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextSequenceAcksReturn(pub u64); + ///Container type for all return fields from the `nextSequenceRecvs` function with signature `nextSequenceRecvs(string,string)` and selector `0xc930b1b0` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextSequenceRecvsReturn(pub u64); + ///Container type for all return fields from the `nextSequenceSends` function with signature `nextSequenceSends(string,string)` and selector `0x821cb5d0` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextSequenceSendsReturn(pub u64); + ///Container type for all return fields from the `packetReceipts` function with signature `packetReceipts(string,string,uint64)` and selector `0x26078437` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct PacketReceiptsReturn(pub u8); +} diff --git a/generated/contracts/src/ibc_connection.rs b/generated/contracts/src/ibc_connection.rs new file mode 100644 index 0000000000..32b5d1fb26 --- /dev/null +++ b/generated/contracts/src/ibc_connection.rs @@ -0,0 +1,2245 @@ +pub use ibc_connection::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod ibc_connection { + pub use super::super::shared_types::*; + #[cfg(feature = "providers")] + #[allow(deprecated)] + #[cfg(feature = "providers")] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("COMMITMENT_PREFIX"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("COMMITMENT_PREFIX"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("capabilities"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("capabilities"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("channels"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("channels"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("state"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(8usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "enum IbcCoreChannelV1GlobalEnums.State", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("ordering"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(8usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "enum IbcCoreChannelV1GlobalEnums.Order", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("counterparty"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IbcCoreChannelV1Counterparty.Data", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("version"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("clientImpls"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("clientImpls"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("clientRegistry"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("clientRegistry"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("clientTypes"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("clientTypes"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("commitments"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("commitments"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("connectionOpenAck"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("connectionOpenAck"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("msg_"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::String, + ), + ), + ],), + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IBCMsgs.MsgConnectionOpenAck", + ), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("connectionOpenConfirm"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("connectionOpenConfirm",), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("msg_"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IBCMsgs.MsgConnectionOpenConfirm", + ), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("connectionOpenInit"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("connectionOpenInit"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("msg_"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Bytes + ],), + ],), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IBCMsgs.MsgConnectionOpenInit", + ), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("connectionOpenTry"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("connectionOpenTry"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("msg_"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Bytes + ],), + ],), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Array( + ::std::boxed::Box::new( + ::ethers::core::abi::ethabi::ParamType::String, + ), + ), + ],), + ), + ), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IBCMsgs.MsgConnectionOpenTry", + ), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("connections"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("connections"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("client_id"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("state"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(8usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "enum IbcCoreConnectionV1GlobalEnums.State", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("counterparty"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Bytes + ],), + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IbcCoreConnectionV1Counterparty.Data", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("delay_period"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("getClient"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("getClient"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("clientId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("contract ILightClient"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextChannelSequence"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextChannelSequence",), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextClientSequence"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextClientSequence"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextConnectionSequence"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextConnectionSequence",), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextSequenceAcks"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextSequenceAcks"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextSequenceRecvs"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextSequenceRecvs"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextSequenceSends"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextSequenceSends"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("packetReceipts"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("packetReceipts"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(8usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint8"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ]), + events: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("ConnectionOpenAck"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("ConnectionOpenAck"), + inputs: ::std::vec![::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("connectionId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + },], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ConnectionOpenConfirm"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("ConnectionOpenConfirm",), + inputs: ::std::vec![::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("connectionId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + },], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ConnectionOpenInit"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("ConnectionOpenInit"), + inputs: ::std::vec![::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("connectionId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + },], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ConnectionOpenTry"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("ConnectionOpenTry"), + inputs: ::std::vec![::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("connectionId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + },], + anonymous: false, + },], + ), + ]), + errors: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("ErrClientNotFound"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrClientNotFound"), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrConnectionAlreadyExists"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrConnectionAlreadyExists",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrInvalidConnectionState"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrInvalidConnectionState",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrInvalidProof"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrInvalidProof"), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrNoCounterpartyVersion"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrNoCounterpartyVersion",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrUnsupportedVersion"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrUnsupportedVersion",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrValidateSelfClient"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrValidateSelfClient",), + inputs: ::std::vec![], + },], + ), + ]), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + #[cfg(feature = "providers")] + pub static IBCCONNECTION_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + #[cfg(feature = "providers")] + const __BYTECODE: &[u8] = b"`\x80\x80`@R4a\0\x16Wa76\x90\x81a\0\x1C\x829\xF3[`\0\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x12W`\0\x80\xFD[`\x005`\xE0\x1C\x80c\x01\xC6@\x0F\x14a\x01WW\x80c\x04\xF6\x8E\\\x14a\x01RW\x80c\x13\x90\xD2\x8D\x14a\x01MW\x80c&\x07\x847\x14a\x01HW\x80c1\x97?\0\x14a\x01CW\x80cW\x17\xBC\xF5\x14a\x01>W\x80c[=\xE2`\x14a\x019W\x80cjr\x8F,\x14a\x014W\x80cy&\xB8\xA9\x14a\x01/W\x80c~\xB7\x892\x14a\x01*W\x80c\x82\x1C\xB5\xD0\x14a\x01%W\x80c\x83\x9D\xF9E\x14a\x01 W\x80c\x99\x04\x91\xA5\x14a\x01\x1BW\x80c\xA0I\xE6w\x14a\x01\x16W\x80c\xA9U\r\xAC\x14a\x01\x11W\x80c\xB51\x86\x1F\x14a\x01\x0CW\x80c\xC28\x01\x05\x14a\x01\x07W\x80c\xC90\xB1\xB0\x14a\x01\x02W\x80c\xD1){\x8D\x14a\0\xFDWc\xE1\xB1{C\x14a\0\xF8W`\0\x80\xFD[a\x186V[a\x18\tV[a\x17\xD9V[a\x17\xA7V[a\x14TV[a\x14\x06V[a\x13qV[a\x134V[a\x12\xEAV[a\x12\xBAV[a\x12\x84V[a\x12;V[a\x0F\xF1V[a\x0FMV[a\x0E\x8CV[a\r\xB7V[a\nsV[a\n\x12V[a\x03~V[a\x01\xD6V[`\0[\x83\x81\x10a\x01oWPP`\0\x91\x01RV[\x81\x81\x01Q\x83\x82\x01R` \x01a\x01_V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x93a\x01\xBB\x81Q\x80\x92\x81\x87R\x87\x80\x88\x01\x91\x01a\x01\\V[\x01\x16\x01\x01\x90V[\x90` a\x01\xD3\x92\x81\x81R\x01\x90a\x01\x7FV[\x90V[4a\x03yW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC` \x816\x01\x12a\x03yW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03yW``\x82`\x04\x01\x91\x836\x03\x01\x12a\x03yWa\x021a!}V[\x90a\x02;\x82a\t\xA0V[`\x02\x81\x01`\xFF\x81T\x16a\x02M\x81a\r\xA8V[a\x03OWa\x02\xFD\x83`$a\x03K\x97a\x02\xAF`\x03\x95a\x02xa\x02q\x86a\x03\x04\x9Ba\x18|V[\x90\x8Aa\x19QV[a\x02\x84`\x01\x89\x01a&\x0EV[`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[a\x02\xF6a\x02\xBE`D\x83\x01a\x1AyV[`\x06\x88\x01\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[\x01\x90a\x1A\x83V[\x91\x01a\x1B\xCEV[a\x03\r\x81a(\x05V[\x7F\xE0 :F\x1F\x16\xC0\xA8\xA8\xDD\xEA\x13\xBB\xE0\xF9\xBB\x1EO\xDF\xEA<\x0E\xC4$\n52`\xFD\x0F\x88\x8A`@Q\x80a\x03<\x84\x82a\x01\xC2V[\x03\x90\xA1`@Q\x91\x82\x91\x82a\x01\xC2V[\x03\x90\xF3[`\x04`@Q\x7F\xF8c'_\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\0\x80\xFD[4a\x03yW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC` \x816\x01\x12a\x03yW`\x04\x90\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03yWa\x01\x80\x81\x84\x01\x92\x826\x03\x01\x12a\x03yW`d\x81\x01\x91a\x03\xEBa\x03\xE4\x84\x83a\x18|V[6\x91a\x08\xD5V[P`\x84\x82\x01\x91a\x03\xFB\x83\x83a\x1D9V[\x90P\x15a\x07mWa\x04,a\x04(a\x04#a\x04\x1Ea\x04\x18\x87\x87a\x1D9V[\x90a\x1D\xEFV[a\x1E\xDDV[a)\x02V[\x15\x90V[a\x07DWa\x048a!}V[\x93a\x04B\x85a\t\xA0V[\x92`\x02\x84\x01\x90a\x04S\x82T`\xFF\x16\x90V[a\x04\\\x81a\r\xA8V[a\x07\x1BW`D\x84\x01\x91a\x04o\x83\x83a\x18|V[a\x04y\x91\x88a\x19QV[a\x04\x85`\x01\x87\x01a&\x0EV[\x80T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16`\x02\x17\x90U`$\x84\x01\x91a\x04\xBC\x83a\x1AyV[`\x06\x87\x01\x90a\x04\xF9\x91\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[a\x05\x03\x82\x80a\x1A\x83V[\x90`\x03\x87\x01\x91a\x05\x13\x90\x83a\x1B\xCEV[a\x05\x1D\x83\x80a\x1A\x83V[\x80a\x05'\x91a\x18|V[\x94\x90\x98a\x054\x90\x85a\x1D9V[\x91a\x05>\x90a\x1AyV[\x92a\x05I\x90\x86a\x18|V[\x92\x90\x9Aa\x05Ta\x13\xCDV[\x9Ba\x05]a\x08_V[\x9C\x8DRa\x05ha\x08nV[\x946\x90a\x05t\x92a\x08\xD5V[\x84Ra\x05~a\x13\xBAV[` \x85\x01R`@\x9B\x8C\x85\x01Ra\x05\x92a\x08{V[\x976\x90a\x05\x9E\x92a\x08\xD5V[\x87R6\x90a\x05\xAB\x92a\x1E\xE8V[` \x86\x01R`\x01\x89\x86\x01R``\x85\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x80\x84\x01Ra\x01\x04\x85\x01\x92a\x05\xDD`\xA4\x87\x01\x84a\x18|V[\x91\x90a\x05\xE9\x85\x80a\x1A\x83V[` \x81\x01a\x05\xF6\x91a\x18|V[\x91a\x06\x016\x89a\x1FdV[\x946\x90a\x06\r\x92a\x08\xD5V[\x916\x90a\x06\x19\x92a\x08\xD5V[\x90a\x06$\x93\x8Aa*\xA6V[\x15a\x06\xF3W\x92a\x06xa\x06p\x93a\x06pa\x04(\x97\x94a\x06fa\x06^`\xC4a\x06Va\x06Qa\x06~\x9E\x9Ca\x0C\x93V[a+mV[\x98\x01\x83a\x18|V[\x96\x90\x92a\x18|V[\x97\x90\x936\x90a\x1FdV[\x946\x91a\x08\xD5V[\x93a+\xE7V[a\x06\xCBWa\x03K\x92Pa\x06\x90\x82a(\x05V[\x7Fz4\x06\xDFm\xA8`\x0F\x12{\t4\xD0G/\x87?\x8F\xE3M\xBF\x9C;<\xB9\xAD\xF5\x99\x1C\xC9\x1DJ\x81Q\x80a\x06\xBE\x85\x82a\x01\xC2V[\x03\x90\xA1Q\x91\x82\x91\x82a\x01\xC2V[\x90PQ\x7F\x14 \x992\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x88\x87Q\x7F\x14 \x992\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x87`@Q\x7F\xF8c'_\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x84`@Q\x7F\xBC\xDFl\xCA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x84`@Q\x7F3\xCA(\x94\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`A`\x04R`$`\0\xFD[`@\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\xE1W`@RV[a\x07\x96V[` \x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\xE1W`@RV[``\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\xE1W`@RV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\xE1W`@RV[`@Q\x90a\x08l\x82a\x07\xE6V[V[`@Q\x90a\x08l\x82a\x08\x02V[`@Q\x90`\xA0\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\xE1W`@RV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\xE1W`\x1F\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x16` \x01\x90V[\x92\x91\x92a\x08\xE1\x82a\x08\x9BV[\x91a\x08\xEF`@Q\x93\x84a\x08\x1EV[\x82\x94\x81\x84R\x81\x83\x01\x11a\x03yW\x82\x81` \x93\x84`\0\x96\x017\x01\x01RV[\x90\x80`\x1F\x83\x01\x12\x15a\x03yW\x81` a\x01\xD3\x935\x91\x01a\x08\xD5V[\x90`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x83\x01\x12a\x03yWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x03yW\x83a\tr\x91`\x04\x01a\t\x0CV[\x92`$5\x91\x82\x11a\x03yWa\x01\xD3\x91`\x04\x01a\t\x0CV[\x90a\t\x9C` \x92\x82\x81Q\x94\x85\x92\x01a\x01\\V[\x01\x90V[` a\t\xB9\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x01\\V[\x81\x01`\x04\x81R\x03\x01\x90 \x90V[` a\t\xDF\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x01\\V[\x81\x01`\x03\x81R\x03\x01\x90 \x90V[` \x90a\n\x06\x92\x82`@Q\x94\x83\x86\x80\x95Q\x93\x84\x92\x01a\x01\\V[\x82\x01\x90\x81R\x03\x01\x90 \x90V[4a\x03yW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\nW\x82a\nGa\n26a\t'V[\x92\x90\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x01\\V[\x81\x01`\x08\x81R\x03\x01\x90 \x90a\t\xECV[T\x16`@Q\x90\x81R\xF3[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x03a\x03yWV[4a\x03yW``\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03yWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x03yWa\n\xC3\x906\x90`\x04\x01a\t\x0CV[\x90`$5\x81\x81\x11a\x03yWa\n\xDFa\x0B\x14\x916\x90`\x04\x01a\t\x0CV[a\x0B\x04` `D5\x95a\n\xF1\x87a\naV[\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x01\\V[\x81\x01`\t\x81R\x03\x01\x90 \x90a\t\xECV[\x91\x16`\0R` Ra\x03Ka\x0B/`@`\0 `\xFF\x90T\x16\x90V[`@Q`\xFF\x90\x91\x16\x81R\x90\x81\x90` \x82\x01\x90V[` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x82\x01\x12a\x03yW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03yWa\x01\xD3\x91`\x04\x01a\t\x0CV[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a\x0B\xD5W[` \x83\x10\x14a\x0B\xA6WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\"`\x04R`$`\0\xFD[\x91`\x7F\x16\x91a\x0B\x9BV[\x80T`\0\x93\x92a\x0B\xEE\x82a\x0B\x8CV[\x91\x82\x82R` \x93`\x01\x91`\x01\x81\x16\x90\x81`\0\x14a\x0CVWP`\x01\x14a\x0C\x15W[PPPPPV[\x90\x93\x94\x95P`\0\x92\x91\x92R\x83`\0 \x92\x84`\0\x94[\x83\x86\x10a\x0CBWPPPP\x01\x01\x908\x80\x80\x80\x80a\x0C\x0EV[\x80T\x85\x87\x01\x83\x01R\x94\x01\x93\x85\x90\x82\x01a\x0C*V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16\x86\x85\x01RPPP\x90\x15\x15`\x05\x1B\x01\x01\x91P8\x80\x80\x80\x80a\x0C\x0EV[\x90a\x08la\x0C\xA7\x92`@Q\x93\x84\x80\x92a\x0B\xDFV[\x03\x83a\x08\x1EV[\x90`@\x91\x82Q\x92``\x84\x01\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x86\x10\x81\x87\x11\x17a\x07\xE1W\x85\x83R\x81\x95a\r\n\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xA0\x84a\r\x02\x84\x89a\x0B\xDFV[\x03\x01\x82a\x08\x1EV[\x82R\x82Qa\r&\x81a\r\x1F\x81`\x01\x89\x01a\x0B\xDFV[\x03\x82a\x08\x1EV[` \x83\x01R\x82Q\x93` \x85\x01\x91\x85\x83\x10\x90\x83\x11\x17a\x07\xE1W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x85a\r\x02\x84`\x02a\rs\x95\x82\x8AR\x01a\x0B\xDFV[\x83R\x01RV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`!`\x04R`$`\0\xFD[`\x04\x11\x15a\r\xB2WV[a\ryV[4a\x03yWa\r\xCDa\r\xC86a\x0BCV[a\t\xA0V[`@Q\x90a\r\xDF\x82a\x0C\xA7\x81\x84a\x0B\xDFV[`\xFF`\x02\x82\x01T\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x06a\r\xFE`\x03\x85\x01a\x0C\xAEV[\x93\x01T\x16\x90a\x0E\x18`@Q\x94`\x80\x86R`\x80\x86\x01\x90a\x01\x7FV[`\x04\x82\x10\x15a\r\xB2W\x84\x93` a\x0Ey\x92a\x03K\x94\x82\x88\x01R\x86\x81\x03`@\x88\x01R`@a\x0Eaa\x0EQ\x85Q``\x85R``\x85\x01\x90a\x01\x7FV[\x84\x86\x01Q\x84\x82\x03\x86\x86\x01Ra\x01\x7FV[\x93\x01Q\x90`@\x81\x85\x03\x91\x01RQ\x91\x81\x81R\x01\x90a\x01\x7FV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x92\x16``\x84\x01RV[4a\x03yW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x0E\xB5\x82a\n\xF16a\x0BCV[\x81\x01`\n\x81R\x03\x01\x90 T\x16`@Q\x90\x81R\xF3[\x92\x93\x91\x90`\x05\x81\x10\x15a\r\xB2W\x83R`\x03\x81\x10\x15a\r\xB2Wa\x01\xD3\x93a\x0F?\x91` \x85\x01R`\x80`@\x85\x01R` a\x0F\r\x82Q`@`\x80\x88\x01R`\xC0\x87\x01\x90a\x01\x7FV[\x91\x01Q\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x85\x83\x03\x01`\xA0\x86\x01Ra\x01\x7FV[\x91``\x81\x84\x03\x91\x01Ra\x01\x7FV[4a\x03yWa\x0F\x89a\x0F^6a\t'V[a\x0Fy` `@\x94\x93\x81\x86Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x01\\V[\x81\x01`\x05\x81R\x03\x01\x90 \x90a\t\xECV[\x90a\x03K`\x04\x83T\x92a\x0F\xDD\x81Q\x95a\x0F\xA1\x87a\x07\xC5V[\x82Qa\x0F\xB4\x81a\r\x1F\x81`\x01\x86\x01a\x0B\xDFV[\x87R\x82Qa\x0F\xC9\x81a\r\x1F\x81`\x02\x86\x01a\x0B\xDFV[` \x88\x01Ra\x0C\xA7\x83Q\x80\x95\x81\x93\x01a\x0B\xDFV[Q\x93\x83`\xFF\x80\x87\x96`\x08\x1C\x16\x91\x16\x85a\x0E\xC9V[4a\x03yW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC` \x816\x01\x12a\x03yW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03yW`\x80\x81`\x04\x01\x92\x826\x03\x01\x12a\x03yWa\x10Va\x10P\x83\x80a\x18|V[\x90a\x1F\x9EV[\x90`\x02\x82\x01\x91`\x02a\x10i\x84T`\xFF\x16\x90V[a\x10r\x81a\r\xA8V[\x03a\x12\x11Wa\x11_\x91a\x04(\x91a\x11Da\x11La\x10\x8F\x88\x80a\x18|V[\x94\x90a\x10\xC3a\x10\x9Ca\x13\xCDV[\x91a\x10\xA5a\x08_V[\x92\x83Ra\x10\xB0a\x08nV[\x97a\x10\xBA\x88a\x0C\x93V[\x89R6\x91a\x08\xD5V[` \x87\x01R`@\x86\x01Ra\x11*a\x10\xE5`\x06\x86\x01Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[a\x10\xEDa\x08{V[\x96a\x10\xFA`\x03\x88\x01a\x0C\x93V[\x88Ra\x11\x08`\x01\x88\x01a\x1F\xB7V[` \x89\x01R`\x03`@\x89\x01R``\x88\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x80\x87\x01RV[a\x117`$\x82\x01\x8Aa\x18|V[\x93\x90\x91`D6\x91\x01a\x1FdV[\x926\x91a\x08\xD5V[\x90a\x11Y`\x04\x84\x01a\x0C\x93V[\x92a*\xA6V[a\x11\xE7W\x7F\x9B\x91\x99#D@\xA2\xEE\x894\xBA\x890\x03\xCB\xA9\x94)Qm\xF8\xF1]\xDA\x11\xBA\x90k\xC7\x07d\xE4\x91a\x11\xB7a\x11\xD2\x92`\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[a\x11\xCCa\x11\xC7a\x03\xE4\x83\x80a\x18|V[a(\x05V[\x80a\x18|V[\x90a\x11\xE2`@Q\x92\x83\x92\x83a \x97V[\x03\x90\xA1\0[`\x04`@Q\x7F\x14 \x992\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04`@Q\x7F\x8C\xA9\x89\x90\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[4a\x03yW`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03yW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT`\x80\x1C\x16`@Q\x90\x81R\xF3[4a\x03yW` a\x12\x9Ca\x12\x976a\x0BCV[a \xDDV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[4a\x03yW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\nW\x82a\x12\xDAa\n26a\t'V[\x81\x01`\x06\x81R\x03\x01\x90 \x90a\t\xECV[4a\x03yW` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03yW`\x045`\0R`\0` R` `@`\0 T`@Q\x90\x81R\xF3[4a\x03yW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x13]\x82a\n\xF16a\x0BCV[\x81\x01`\x01\x81R\x03\x01\x90 T\x16`@Q\x90\x81R\xF3[4a\x03yW`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03yW` `\x0BTg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91`@\x1C\x16\x81R\xF3[`@Q\x90a\x13\xC7\x82a\x07\xE6V[`\0\x82RV[`@Q\x90a\x13\xDA\x82a\x07\xC5V[`\x03\x82R\x7Fibc\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x83\x01RV[4a\x03yW`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03yWa\x03Ka\x14@a\x13\xCDV[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x01\x7FV[4a\x03yW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC` \x816\x01\x12a\x03yW`\x04\x90\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03yWa\x01`\x81\x84\x01\x92\x826\x03\x01\x12a\x03yWa\x14\xB5a\x10P\x83\x80a\x18|V[\x90`\x02\x82\x01`\x01a\x14\xC7\x82T`\xFF\x16\x90V[a\x14\xD0\x81a\r\xA8V[\x03a\x17OW`D\x82\x01\x90a\x14\xEDa\x04(a\x04#a\x04\x1E\x85\x89a\x1D\xBCV[a\x17&W\x82`$\x86\x94\x01\x92a\x15\x05a\x03\xE4\x85\x87a\x18|V[Pa\x15\x10\x85\x80a\x18|V[\x94\x90a\x15;a\x15\x1Da\x13\xCDV[\x91a\x15&a\x08_V[\x92\x83Ra\x151a\x08nV[\x97a\x10\xBA\x8Ba\x0C\x93V[` \x87\x01R`@\x86\x01Ra\x15^a\x15Ya\x04\x1E`\x03\x8A\x01\x94\x89a\x1D\xBCV[a,YV[\x94a\x15\xAFa\x15w`\x06\x8A\x01Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[a\x15\x7Fa\x08{V[\x92a\x15\x89\x86a\x0C\x93V[\x84R` \x84\x01\x98\x89R`\x02`@\x85\x01R``\x84\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x80\x83\x01RV[a\x15\xFAa\x04(`\xE4\x86\x01\x92a\x15\xF3a\x11Da\x15\xCD`\x84\x8A\x01\x8Da\x18|V[\x92\x90a\x15\xDE`d\x8C\x01\x9E\x8F\x90a\x18|V[\x93\x90\x91a\x15\xEB6\x8Ba\x1FdV[\x956\x91a\x08\xD5V[\x91\x8Da*\xA6V[a\x16\xFDWa\x16U\x93a\x16Na\x16>\x92a\x16F\x8Ca\x164a\x16,`\xA4a\x16$a\x06Qa\x04(\x9Ca\x0C\x93V[\x97\x01\x83a\x18|V[\x98\x90\x92a\x18|V[\x96\x90\x936\x90a\x1FdV[\x966\x91a\x08\xD5V[\x936\x91a\x08\xD5V[\x92\x89a+\xE7V[a\x16\xD4W\x92a\x16\xCBa\x11\xB7\x93a\x16\xC5\x7F\xF8\xF9MW\x9E\x8F\x94\xB2\x11\x11B\xA3\x97\xC6\x1F\xBA\xBC\x0B\xC6d\xD4\xF8p\x05\x0E\xBE\xCCB\n\xFA\xA1\x94\x98\x94a\x16\xBAa\x11\xD2\x99\x98`\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[Q`\x01\x85\x01\x90a,\xB9V[\x85a\x18|V[\x92\x90\x91\x01a\x19QV[\x85`@Q\x7F\x14 \x992\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x89`@Q\x7F\x14 \x992\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x85`@Q\x7F\xBC\xDFl\xCA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x84`@Q\x7F\x8C\xA9\x89\x90\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\0`\x04R`$`\0\xFD[4a\x03yWa\x03Ka\r\x1Fa\x14@a\x17\xC3` a\n\xF16a\x0BCV[\x81\x01`\x02\x81R\x03\x01\x90 `@Q\x92\x83\x80\x92a\x0B\xDFV[4a\x03yW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\nW\x82a\x17\xF9a\n26a\t'V[\x81\x01`\x07\x81R\x03\x01\x90 \x90a\t\xECV[4a\x03yW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\nWa\x1816a\x0BCV[a\t\xC6V[4a\x03yW`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03yW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT\x16`@Q\x90\x81R\xF3[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\x03yW\x01\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03yW` \x01\x91\x816\x03\x83\x13a\x03yWV[\x81\x81\x10a\x18\xD8WPPV[`\0\x81U`\x01\x01a\x18\xCDV[\x90`\x1F\x81\x11a\x18\xF1WPPV[a\x08l\x91`\0R`\x1F` `\0 \x91\x01`\x05\x1C\x81\x01\x90a\x18\xCDV[\x91\x90`\x1F\x81\x11a\x19\x1BWPPPV[a\x08l\x92`\0R` `\0 \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x19GW[`\x1F\x01`\x05\x1C\x01\x90a\x18\xCDV[\x90\x91P\x81\x90a\x19:V[\x90\x92\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\xE1Wa\x19w\x81a\x19q\x84Ta\x0B\x8CV[\x84a\x19\x0CV[`\0`\x1F\x82\x11`\x01\x14a\x19\xD5W\x81\x90a\x19\xC6\x93\x94\x95`\0\x92a\x19\xCAW[PP\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[\x90UV[\x015\x90P8\x80a\x19\x94V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x82\x16\x94a\x1A\x08\x84`\0R` `\0 \x90V[\x91\x80[\x87\x81\x10a\x1AaWP\x83`\x01\x95\x96\x97\x10a\x1A)W[PPP\x81\x1B\x01\x90UV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U8\x80\x80a\x1A\x1FV[\x90\x92` `\x01\x81\x92\x86\x86\x015\x81U\x01\x94\x01\x91\x01a\x1A\x0BV[5a\x01\xD3\x81a\naV[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xA1\x816\x03\x01\x82\x12\x15a\x03yW\x01\x90V[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\x03yW\x01\x90V[\x91\x90a\x1A\xF5\x90\x80a\x18|V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x94\x92\x94\x11a\x07\xE1Wa\x1B\x15\x81a\x19q\x84Ta\x0B\x8CV[`\0`\x1F\x82\x11`\x01\x14a\x1BcW\x81\x90a\x19\xC6\x93\x94\x95`\0\x92a\x19\xCAWPP\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x82\x16\x94a\x1B\x96\x84`\0R` `\0 \x90V[\x91\x80[\x87\x81\x10a\x1B\xB6WP\x83`\x01\x95\x96\x97\x10a\x1A)WPPP\x81\x1B\x01\x90UV[\x90\x92` `\x01\x81\x92\x86\x86\x015\x81U\x01\x94\x01\x91\x01a\x1B\x99V[\x91\x90\x91a\x1B\xDB\x83\x80a\x18|V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x95\x92\x95\x11a\x07\xE1Wa\x1C\x01\x81a\x1B\xFB\x85Ta\x0B\x8CV[\x85a\x19\x0CV[`\0`\x1F\x82\x11`\x01\x14a\x1C\x86W\x91a\x1CX\x82a\x1C\x7F\x93`\x02\x95a\x08l\x98\x99`\0\x92a\x19\xCAWPP\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[\x84U[a\x1Cua\x1Ck` \x83\x01\x83a\x18|V[\x90`\x01\x87\x01a\x19QV[`@\x81\x01\x90a\x1A\xB6V[\x91\x01a\x1A\xE9V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x82\x16\x90a\x1C\xB9\x85`\0R` `\0 \x90V[\x91\x81[\x81\x81\x10a\x1D!WP\x92`\x02\x94\x92a\x08l\x97\x98`\x01\x93\x83a\x1C\x7F\x97\x10a\x1C\xE9W[PPP\x81\x1B\x01\x84Ua\x1C[V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U8\x80\x80a\x1C\xDCV[\x91\x92` `\x01\x81\x92\x86\x8C\x015\x81U\x01\x94\x01\x92\x01a\x1C\xBCV[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\x03yW\x01\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03yW` \x01\x91\x81`\x05\x1B6\x03\x83\x13a\x03yWV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`2`\x04R`$`\0\xFD[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC1\x816\x03\x01\x82\x12\x15a\x03yW\x01\x90V[\x90\x15a\x1D\xFFW\x80a\x01\xD3\x91a\x1D\xBCV[a\x1D\x8DV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\xE1W`\x05\x1B` \x01\x90V[\x91\x90`@\x83\x82\x03\x12a\x03yW`@Q\x92a\x1E5\x84a\x07\xC5V[\x83\x815\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x93\x84\x81\x11a\x03yW\x81a\x1EV\x91\x85\x01a\t\x0CV[\x82R` \x92\x83\x81\x015\x90\x85\x82\x11a\x03yW\x01\x81`\x1F\x82\x01\x12\x15a\x03yW\x805a\x1E~\x81a\x1E\x04V[\x95a\x1E\x8C`@Q\x97\x88a\x08\x1EV[\x81\x87R\x85\x80\x88\x01\x92`\x05\x1B\x84\x01\x01\x93\x80\x85\x11a\x03yW\x86\x84\x01\x92[\x85\x84\x10a\x1E\xB8WPPPPPP\x01RV[\x835\x83\x81\x11a\x03yW\x88\x91a\x1E\xD2\x84\x84\x80\x94\x8A\x01\x01a\t\x0CV[\x81R\x01\x93\x01\x92a\x1E\xA7V[a\x01\xD3\x906\x90a\x1E\x1CV[\x92\x91\x90\x92a\x1E\xF5\x84a\x1E\x04V[\x91a\x1F\x03`@Q\x93\x84a\x08\x1EV[\x82\x94\x80\x84R` \x80\x94\x01\x90`\x05\x1B\x83\x01\x92\x82\x84\x11a\x03yW\x80\x91[\x84\x83\x10a\x1F-WPPPPPPV[\x825g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03yW\x86\x91a\x1FM\x86\x84\x93\x86\x01a\x1E\x1CV[\x81R\x01\x92\x01\x91a\x1F\x1EV[`\x04\x82\x10\x15a\r\xB2WRV[\x91\x90\x82`@\x91\x03\x12a\x03yW`@Qa\x1F|\x81a\x07\xC5V[` \x80\x82\x94\x805a\x1F\x8C\x81a\naV[\x84R\x015\x91a\x1F\x9A\x83a\naV[\x01RV[` \x90\x82`@Q\x93\x84\x92\x837\x81\x01`\x04\x81R\x03\x01\x90 \x90V[\x90\x81T\x91a\x1F\xC4\x83a\x1E\x04V[\x92`@\x93a\x1F\xD5`@Q\x91\x82a\x08\x1EV[\x81\x81R\x80\x94` \x80\x92\x01\x93`\0\x90\x81R\x82\x81 \x91\x81\x95[\x85\x87\x10a\x1F\xFCWPPPPPPPV[\x84\x82Qa \x08\x81a\x07\xC5V[\x83Qa \x18\x81a\r\x1F\x81\x8Aa\x0B\xDFV[\x81R`\x01\x80\x87\x01\x90\x81Ta +\x81a\x1E\x04V[\x92a 8\x88Q\x94\x85a\x08\x1EV[\x81\x84R\x88R\x84\x88 \x88\x86\x85\x01[\x83\x82\x10a kWPPPPP\x92\x81`\x01\x94\x84`\x02\x95\x94\x01R\x81R\x01\x94\x01\x96\x01\x95\x92a\x1F\xECV[\x93\x80\x95\x96\x97\x81\x92\x93\x94\x95\x8BQa \x85\x81a\r\x1F\x81\x8Aa\x0B\xDFV[\x81R\x01\x93\x01\x91\x01\x8B\x96\x95\x94\x93\x92a EV[\x90`\x1F\x83`@\x94\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x93` \x86R\x81` \x87\x01R\x86\x86\x017`\0\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[a \xFBs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91a\t\xC6V[T\x16\x80\x15a!\x06W\x90V[`\x04`@Q\x7F\xB6\xC7\x1F}\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\x11`\x04R`$`\0\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x91\x16\x90\x81\x14a!xW`\x01\x01\x90V[a!0V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT`@\x1C\x16\x80\x81`\0\x92z\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x80\x82\x10\x15a#\xAAW[Pm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x80\x83\x10\x15a#\x9BW[Pf#\x86\xF2o\xC1\0\0\x80\x83\x10\x15a#\x8CW[Pc\x05\xF5\xE1\0\x80\x83\x10\x15a#}W[Pa'\x10\x80\x83\x10\x15a#nW[P`d\x82\x10\x15a#^W[`\n\x80\x92\x10\x15a#TW[`\x01\x90\x81`!a\"&`\x01\x88\x01a-NV[\x96\x87\x01\x01\x90[a\"\xF3W[PPPPa\"\xB1a\x01\xD3\x91a\"\xACa\"\x80\x94`@Q\x95\x86\x91a\"z` \x84\x01`\x0B\x90\x7Fconnection-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\x01\x90V[\x90a\t\x89V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x86R\x85a\x08\x1EV[a!_V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFo\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0`\x0BT\x92`@\x1B\x16\x91\x16\x17`\x0BUV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x91\x01\x91\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x82\x06\x1A\x83S\x04\x91\x82\x15a#OW\x91\x90\x82a\",V[a\"1V[\x92`\x01\x01\x92a\"\x14V[\x92\x90`d`\x02\x91\x04\x91\x01\x92a\"\tV[`\x04\x91\x94\x92\x04\x91\x01\x928a!\xFEV[`\x08\x91\x94\x92\x04\x91\x01\x928a!\xF1V[`\x10\x91\x94\x92\x04\x91\x01\x928a!\xE2V[` \x91\x94\x92\x04\x91\x01\x928a!\xD0V[`@\x94P\x81\x04\x91P8a!\xB7V[`@\x90`@Q\x91a#\xC8\x83a\x08\x02V[`\x02\x83R\x82`\0[\x82\x81\x10a#\xDCWPPPV[\x80``` \x80\x93\x85\x01\x01R\x01a#\xD0V[`@Q\x90a#\xFA\x82a\x07\xC5V[`\x01\x82R\x7F1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x83\x01RV[\x80T\x15a\x1D\xFFW`\0R` `\0 \x90`\0\x90V[\x80T\x82\x10\x15a\x1D\xFFW`\0R` `\0 \x90`\x01\x1B\x01\x90`\0\x90V[\x91\x90\x91\x82Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\xE1Wa$y\x81a\x19q\x84Ta\x0B\x8CV[` \x80`\x1F\x83\x11`\x01\x14a$\xD4WP\x81\x90a\x19\xC6\x93\x94\x95`\0\x92a$\xC9WPP\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[\x01Q\x90P8\x80a\x19\x94V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x83\x16\x95a%\x08\x85`\0R` `\0 \x90V[\x92`\0\x90[\x88\x82\x10a%bWPP\x83`\x01\x95\x96\x97\x10a%+WPPP\x81\x1B\x01\x90UV[\x01Q\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U8\x80\x80a\x1A\x1FV[\x80`\x01\x85\x96\x82\x94\x96\x86\x01Q\x81U\x01\x95\x01\x93\x01\x90a%\rV[\x80T`\x01\x10\x15a\x1D\xFFW`\0R`\x01` `\0 \x01\x90`\0\x90V[\x90a%\xD2Wa%\xADa%\xA7\x82Ta\x0B\x8CV[\x82a\x18\xE4V[\x7FORDER_ORDERED\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x1A\x90UV[a\x17xV[\x90a%\xD2Wa%\xE9a%\xA7\x82Ta\x0B\x8CV[\x7FORDER_UNORDERED\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x1E\x90UV[\x80T\x90\x81a'\x81Wa&\x1Ea#\xB8V[`@Q\x90a&+\x82a\x07\xC5V[a&3a#\xEDV[\x82R` \x80\x83\x01\x91\x82Rh\x01\0\0\0\0\0\0\0\0\x92\x83\x86\x10\x15a\x07\xE1Wa&a`\x01\x96\x87\x81\x01\x87U\x86a$;V[a%\xD2Wa&q\x87\x92Q\x82a$WV[\x01\x91Q\x80Q\x93\x84\x11a\x07\xE1W\x82T\x84\x84U\x80\x85\x10a&\xF8W[P` a&\x9E\x91\x01\x92`\0R` `\0 \x90V[`\0\x92[\x84\x84\x10a&\xDDWPPPPPa\x08l\x91a&\xBEa&\xD7\x92a$&V[P\x01a&\xD2a&\xCC\x82a$&V[\x90a%\x95V[a%zV[\x90a%\xD7V[\x86\x83\x82a&\xEC\x83\x94Q\x86a$WV[\x01\x92\x01\x93\x01\x92\x90a&\xA2V[`\0\x84`\0R\x87\x86` `\0 \x93\x84\x01\x93\x01[\x83\x81\x10a'\x1AWPPPa&\x8AV[a'$\x81Ta\x0B\x8CV[\x80a'3W[P\x01\x88\x90a'\x0BV[`\x1F\x90\x83\x82\x82\x11`\x01\x14a'NWPPP\x82\x81U[8a'*V[a'o\x92a'a\x85`\0R` `\0 \x90V[\x92\x01`\x05\x1C\x82\x01\x91\x01a\x18\xCDV[`\0\x81\x81R` \x81 \x81\x83UUa'HV[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`,`$\x82\x01R\x7FsetSupportedVersions: versions m`D\x82\x01R\x7Fust be empty\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[a(\x0E\x81a\t\xA0V[`@Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91`\xA0\x82\x01\x91\x83\x83\x11\x81\x84\x10\x17a\x07\xE1Wa(\xCE\x93`\x06a(\xB1\x93\x85a(\xBE\x96`@Ra(l\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x86a\r\x02\x84\x86a\x0B\xDFV[\x84Ra(z`\x01\x82\x01a\x1F\xB7V[` \x85\x01Ra(\x93`\xFF`\x02\x83\x01T\x16`@\x86\x01a\x1FXV[a(\x9F`\x03\x82\x01a\x0C\xAEV[``\x85\x01R\x01T\x16`\x80\x82\x01Ra-\x9DV[` \x81Q\x91\x01 \x92a.tV[`\0R`\0` R`@`\0 \x90V[UV[\x80Q\x15a\x1D\xFFW` \x01\x90V[\x80Q`\x01\x10\x15a\x1D\xFFW`@\x01\x90V[\x80Q\x82\x10\x15a\x1D\xFFW` \x91`\x05\x1B\x01\x01\x90V[a)\na#\xB8V[\x90`@Q\x90a)\x18\x82a\x07\xC5V[a) a#\xEDV[\x82R` \x92\x83\x83\x01\x81\x81R`@Qa)7\x81a\x07\xC5V[`\r\x81R\x7FORDER_ORDERED\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86\x82\x01R\x82Q\x15a\x1D\xFFW\x82a)x\x91\x87a)\xBE\x95\x01Ra(\xD1V[PQ`@Qa)\x86\x81a\x07\xC5V[`\x0F\x81R\x7FORDER_UNORDERED\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86\x82\x01Ra)\xB8\x82a(\xDEV[Ra(\xDEV[P\x82a)\xDBa)\xD4a)\xCF\x84a0\xF7V[a-NV[\x80\x93a3\xBAV[\x91\x82\x81R\x01 \x91a)\xF1a)\xD4a)\xCF\x84a0\xF7V[\x91\x82\x81R\x01 \x14\x90V[\x90\x81` \x91\x03\x12a\x03yWQ\x80\x15\x15\x81\x03a\x03yW\x90V[\x94\x91\x93a*oa\x01\xD3\x97\x95a*\x8B\x95a*7a*}\x95a\x01 \x80\x8CR\x8B\x01\x90a\x0B\xDFV[\x91` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x82\x81Q\x16\x82\x8D\x01R\x01Q\x16`@\x8A\x01R`\0``\x8A\x01R`\0`\x80\x8A\x01R\x88\x82\x03`\xA0\x8A\x01Ra\x01\x7FV[\x90\x86\x82\x03`\xC0\x88\x01Ra\x0B\xDFV[\x90\x84\x82\x03`\xE0\x86\x01Ra\x01\x7FV[\x91a\x01\0\x81\x84\x03\x91\x01Ra\x01\x7FV[`@Q=`\0\x82>=\x90\xFD[\x91`\0` \x94\x92a+)a*\xEEa*\xE8s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa*\xE1a\r\x1Fa\x12\x97\x8B`@Q\x92\x83\x80\x92a\x0B\xDFV[\x16\x96a.\x87V[\x98a-\x9DV[`@Q\x98\x89\x97\x88\x96\x87\x95\x7F\xF9\xBBZQ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87R`\x05\x83\x01\x92`\x04\x88\x01a*\x13V[\x03\x92Z\xF1\x90\x81\x15a+hW`\0\x91a+?WP\x90V[a\x01\xD3\x91P` =` \x11a+aW[a+Y\x81\x83a\x08\x1EV[\x81\x01\x90a)\xFBV[P=a+OV[a*\x9AV[a\x01\xD3`4`@Q\x80\x93\x7Fclients/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x83\x01Ra+\xB1\x81Q\x80\x92` `(\x86\x01\x91\x01a\x01\\V[\x81\x01\x7F/clientState\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`(\x82\x01R\x03`\x14\x81\x01\x84R\x01\x82a\x08\x1EV[\x91\x93\x90\x92`\0` \x94a+)s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa,\x1C`@Qa\x12\x97\x81a\r\x1F\x81\x8Ca\x0B\xDFV[\x16\x94`@Q\x98\x89\x97\x88\x96\x87\x95\x7F\xF9\xBBZQ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87R`\x05\x83\x01\x92`\x04\x88\x01a*\x13V[\x90`@\x91`@Q\x92a,j\x84a\x07\xC5V[`\x01\x84R` \x90`\0[\x82\x81\x10a,\x97WPPP\x82\x80Q\x15a\x1D\xFFWa,\x94\x91` \x82\x01Ra(\xD1V[PV[\x82\x90\x82Qa,\xA4\x81a\x07\xC5V[``\x80\x82R\x83\x82\x01R\x82\x82\x89\x01\x01R\x01a,tV[\x91\x90`\0[\x83Q\x81\x10\x15a-HWa,\xD4\x81\x85\x94\x93\x94a(\xEEV[Q\x91a,\xE0\x82\x85a$;V[P\x94a,\xED\x84Q\x87a$WV[` \x93\x84\x01\x94`\0[\x86Q\x80Q\x82\x10\x15a-5W\x81a-\x0B\x91a(\xEEV[Q\x90`\x01\x89\x01\x80T\x82\x10\x15a\x1D\xFFW`\x01\x92a-/\x91`\0R\x82\x89`\0 \x01a$WV[\x01a,\xF6V[PP\x95P\x92P\x92P`\x01\x01\x92\x90\x92a,\xBEV[PP\x90PV[\x90a-X\x82a\x08\x9BV[a-e`@Q\x91\x82a\x08\x1EV[\x82\x81R\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0a-\x93\x82\x94a\x08\x9BV[\x01\x90` 6\x91\x017V[\x90a-\xB1a-\xAC\x83QQa0\xE2V[a.\xDAV[`\0\x90[` \x84\x01Q\x80Q\x83\x10\x15a-\xF5W`\x01\x91a-\xE7a-\xACa-\xE2a-\xDC\x87a-\xED\x96a(\xEEV[Qa0\xF7V[a0\xE2V[\x90a/\x04V[\x91\x01\x90a-\xB5V[Pa.o\x91Pa)\xCFa.Ha.5a.h\x93\x96\x95\x96a-\xE7a-\xACa.0a.*`@\x8B\x01Qa.%\x81a\r\xA8V[a1oV[`\x03\x0B\x90V[a1\xCDV[a-\xE7a-\xACa-\xE2``\x89\x01Qa1\xF4V[a-\xE7a-\xACa.c`\x80\x88\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[a1\xE1V[\x80\x92a/xV[\x81R\x90V[a.}\x90a.\x87V[` \x81Q\x91\x01 \x90V[a\x01\xD3`,`@Q\x80\x93\x7Fconnections/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x83\x01Ra.\xCA\x81Q\x80\x92` \x86\x86\x01\x91\x01a\x01\\V[\x81\x01\x03`\x0C\x81\x01\x84R\x01\x82a\x08\x1EV[`\x01\x01\x90\x81`\x01\x11a!xWV[\x90` \x82\x01\x80\x92\x11a!xWV[` \x01\x90\x81` \x11a!xWV[\x91\x90\x82\x01\x80\x92\x11a!xWV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x82\x01\x91\x82\x11a!xWV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x01\x91\x82\x11a!xWV[\x91\x90\x82\x03\x91\x82\x11a!xWV[\x90` `\0\x83QQa0\xBAW[` \x84\x01\x90\x81QQa0gW[PP\x90`\x80a/\xDAa/\xCB\x85\x94\x84`@a\x01\xD3\x98\x01\x80Qa/\xB2\x81a\r\xA8V[a/\xBB\x81a\r\xA8V[a0:W[Pa-\xE7\x90\x82a4\xF1V[a-\xE7\x84\x82``\x88\x01Qa2\xD1V[\x92\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa/\xF7\x82Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x16a0\x04W[PPa/\x11V[\x81a-\xE7\x91a0\x1D\x85a-\xE7a0.\x96a03\x98a4\xFEV[\x93\x84\x91Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[a2\xBCV[8\x80a/\xFDV[\x81a-\xE7\x91a0S\x85a-\xE7a0.\x96a0`\x98a4\xE4V[\x93\x84\x91Qa.%\x81a\r\xA8V[\x848a/\xC0V[\x94\x90\x92\x93\x94\x91[\x83QQ\x83\x10\x15a0\xA9Wa0\xA1a0\x8B\x82a-\xE7\x88`\x01\x95a4\xD7V[a-\xE7\x87\x82a0\x9B\x88\x8AQa(\xEEV[Qa2ZV[\x92\x01\x91a0nV[\x90\x94\x93\x92P\x90P`\x80a/\xDAa/\x92V[\x90Pa0\xDCa0\xD0a0\xCB\x84a4\x9FV[a.\xF6V[a-\xE7\x84\x82\x87Qa5TV[\x90a/\x85V[a0\xEB\x81a4dV[\x81\x01\x80\x91\x11a!xW\x90V[a1\x02\x81QQa0\xE2V[`\x01\x90\x81\x01\x80\x82\x11a!xW\x81\x90\x92`\0\x92[a1 W[PPP\x90V[` \x81\x94\x92\x93\x94\x01Q\x80Q\x85\x10\x15a1fWa1?\x85a1F\x92a(\xEEV[QQa0\xE2V[\x80\x84\x01\x84\x11a!xW\x83\x90\x83\x01\x01\x80\x92\x11a!xW\x82\x80\x92\x94\x01\x92a1\x15V[P\x81\x93Pa1\x1AV[`\x04\x81\x10\x15a\r\xB2W\x80\x15a1\xC7Wa1\x87\x81a\r\xA8V[`\x01\x81\x14a1\xC1Wa1\x98\x81a\r\xA8V[`\x02\x81\x14a1\xBBW\x80a1\xAC`\x03\x92a\r\xA8V[\x14a1\xB6W`\0\x80\xFD[`\x03\x90V[P`\x02\x90V[P`\x01\x90V[P`\0\x90V[`\0\x81`\x07\x0B\x12`\0\x14a1\xE1WP`\n\x90V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xD3\x91\x16a4dV[a1\xFF\x81QQa0\xE2V[\x90`\x01\x82\x81\x01\x92\x83\x82\x11a!xWa2\x1B` \x84\x01QQa0\xE2V[\x90\x81\x83\x01\x83\x11a!xW\x01\x91`\x02\x83\x01\x80\x94\x11a!xWa-\xE2`@a2B\x92\x01Qa4\x86V[\x90\x81\x81\x01\x10a!xW`\x03\x91\x01\x01\x80\x91\x11a!xW\x90V[\x91a2qa2ja)\xCF\x85a0\xF7V[\x80\x94a3\xBAV[\x90a2}\x81\x84\x84a5\x18V[\x83\x01\x93\x84\x84\x11a!xW` \x81\x01\x80\x91\x11a!xW\x84\x82\x01\x80\x92\x11a!xWa2\xA7\x91\x83\x91a5\xB0V[\x82\x01\x80\x92\x11a!xW\x81\x03\x90\x81\x11a!xW\x90V[\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xD3\x93\x92\x16a5\x18V[\x91a2\xDEa)\xCF\x84a1\xF4V[\x90` \x84QQa3\x8BW[a3]\x83a3W\x93a32a3-`@a-\xE7a3b\x99\x8Ca3#a3Q\x9Aa\x01\xD3\x9F` \x01\x84\x81QQa3gW[a-\xE7\x91P\x82a5\x0BV[\x93\x84\x91\x01Qa6EV[a/\x11V[\x94\x85\x92a3Ia3C\x84\x8B\x87a5\x18V[\x8Aa/\x04V[\x95\x86\x91a.\xE8V[\x92a/\x04V[\x90a5\xB0V[a/\x04V[a/kV[\x80a3|\x84a-\xE7a-\xE7\x94a3\x84\x97a4\xD7V[\x80\x93Qa5TV[8\x84a3\x18V[a3\x94\x83a4\x9FV[\x90\x81\x81\x01\x91\x82\x82\x11a!xWa3\xAC\x85\x84\x89Qa5TV[\x01\x01\x80\x91\x11a!xWa2\xE9V[\x91\x90\x91` \x90`\0\x90\x80QQa43W[` \x01\x90\x81QQa3\xE4W[PPa\x01\xD3\x91\x92Pa/\x11V[\x90\x91[\x82QQ\x82\x10\x15a4\"Wa4\x1Aa4\x04\x82a-\xE7\x88`\x01\x95a4\xD7V[a-\xE7\x87\x82a4\x14\x87\x89Qa(\xEEV[Qa5TV[\x91\x01\x90a3\xE7V[\x91PPa\x01\xD3\x91\x92P\x82\x918a3\xD7V[\x91a4=\x85a4\x9FV[\x90\x81\x81\x01\x91\x82\x82\x11a!xWa4U\x87\x84\x87Qa5TV[\x01\x01\x80\x91\x11a!xW\x91a3\xCBV[`\x01\x80\x91`\x07\x90`\x07\x1C\x80[a4zWPPP\x90V[\x92\x82\x01\x92\x81\x1C\x80a4pV[a4\x91\x90QQa0\xE2V[`\x01\x01\x80`\x01\x11a!xW\x90V[`\n\x90`\0\x90` \x01\x82[`\x07\x1C\x92\x83\x15a4\xCDW`\x80\x17\x81S`\x01\x80\x91\x01\x91\x01`\x7F\x83\x16\x92\x91\x90\x91a4\xAAV[\x90`\x01\x93PS\x01\x90V[`\0\x91\x82\x91\x01`\x12a4\xCDV[`\0\x91\x82\x91\x01`\x18a4\xCDV[`\0\x91\x82\x91\x01`\"a4\xCDV[`\0\x91\x82\x91\x01`(a4\xCDV[`\0\x91\x82\x91\x01`\x1Aa4\xCDV[`\x7F\x93\x92`\0\x92\x85\x83\x16\x92\x91\x01\x90[`\x07\x1C\x91\x82\x15a5HW`\x80\x17\x81S`\x01\x92\x83\x01\x92\x85\x83\x16\x92\x91\x01\x90a5'V[\x91P`\x01\x93\x94PS\x01\x90V[\x90\x81Q\x91a5c\x84\x83\x85a5\x18V[\x93` `\0\x91\x86`\0\x95\x01\x01\x92\x01\x91[\x84\x84\x10a5\x8BWPPP\x90P\x81\x01\x80\x91\x11a!xW\x90V[\x82Q\x82\x1A\x81S`\x01\x93\x84\x01\x93\x92\x83\x01\x92\x01a5sV[`\x1F\x81\x11a!xWa\x01\0\n\x90V[\x91\x92\x90\x83\x15a6?W\x92\x91[` \x93\x84\x84\x11\x15a6\x10W\x81Q\x81R\x84\x81\x01\x80\x91\x11a!xW\x93\x81\x01\x80\x91\x11a!xW\x91\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x90\x81\x11a!xW\x91a5\xBCV[\x92\x90\x91\x93P` \x03` \x81\x11a!xWa6,a61\x91a5\xA1V[a/>V[\x90Q\x82Q\x82\x16\x91\x19\x16\x17\x90RV[P\x91PPV[\x91a6Ra)\xCF\x84a4\x86V[\x92` \x90\x80QQa6\xD0W[P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x82\x82\x01\x82\x81\x11a!xWa6\x96\x82\x86\x83a5\x18V[\x85\x01\x95\x86\x86\x11a!xWa6\xA9\x90a.\xE8V[\x91\x86\x81\x01\x80\x91\x11a!xWa6\xBD\x92a5\xB0V[\x83\x01\x01\x80\x92\x11a!xWa\x01\xD3\x91a/kV[\x90a6\xDA\x85a4\x9FV[\x80\x82\x01\x92\x83\x83\x11a!xW\x86\x84a6\xF1\x92Qa5TV[\x01\x01\x80\x91\x11a!xW8a6^V\xFE\xA2dipfsX\"\x12 \xE0I\xFD\x01-Q\xD2)\x99ZI\xBD\x0F\x92hw\xED l\x15\x03\xE5\x84=\x1A>8M\xB8\x03\x808dsolcC\0\x08\x17\x003"; + /// The bytecode of the contract. + #[cfg(feature = "providers")] + pub static IBCCONNECTION_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__BYTECODE); + #[rustfmt::skip] + #[cfg(feature = "providers")] + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R`\x046\x10\x15a\0\x12W`\0\x80\xFD[`\x005`\xE0\x1C\x80c\x01\xC6@\x0F\x14a\x01WW\x80c\x04\xF6\x8E\\\x14a\x01RW\x80c\x13\x90\xD2\x8D\x14a\x01MW\x80c&\x07\x847\x14a\x01HW\x80c1\x97?\0\x14a\x01CW\x80cW\x17\xBC\xF5\x14a\x01>W\x80c[=\xE2`\x14a\x019W\x80cjr\x8F,\x14a\x014W\x80cy&\xB8\xA9\x14a\x01/W\x80c~\xB7\x892\x14a\x01*W\x80c\x82\x1C\xB5\xD0\x14a\x01%W\x80c\x83\x9D\xF9E\x14a\x01 W\x80c\x99\x04\x91\xA5\x14a\x01\x1BW\x80c\xA0I\xE6w\x14a\x01\x16W\x80c\xA9U\r\xAC\x14a\x01\x11W\x80c\xB51\x86\x1F\x14a\x01\x0CW\x80c\xC28\x01\x05\x14a\x01\x07W\x80c\xC90\xB1\xB0\x14a\x01\x02W\x80c\xD1){\x8D\x14a\0\xFDWc\xE1\xB1{C\x14a\0\xF8W`\0\x80\xFD[a\x186V[a\x18\tV[a\x17\xD9V[a\x17\xA7V[a\x14TV[a\x14\x06V[a\x13qV[a\x134V[a\x12\xEAV[a\x12\xBAV[a\x12\x84V[a\x12;V[a\x0F\xF1V[a\x0FMV[a\x0E\x8CV[a\r\xB7V[a\nsV[a\n\x12V[a\x03~V[a\x01\xD6V[`\0[\x83\x81\x10a\x01oWPP`\0\x91\x01RV[\x81\x81\x01Q\x83\x82\x01R` \x01a\x01_V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x93a\x01\xBB\x81Q\x80\x92\x81\x87R\x87\x80\x88\x01\x91\x01a\x01\\V[\x01\x16\x01\x01\x90V[\x90` a\x01\xD3\x92\x81\x81R\x01\x90a\x01\x7FV[\x90V[4a\x03yW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC` \x816\x01\x12a\x03yW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03yW``\x82`\x04\x01\x91\x836\x03\x01\x12a\x03yWa\x021a!}V[\x90a\x02;\x82a\t\xA0V[`\x02\x81\x01`\xFF\x81T\x16a\x02M\x81a\r\xA8V[a\x03OWa\x02\xFD\x83`$a\x03K\x97a\x02\xAF`\x03\x95a\x02xa\x02q\x86a\x03\x04\x9Ba\x18|V[\x90\x8Aa\x19QV[a\x02\x84`\x01\x89\x01a&\x0EV[`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[a\x02\xF6a\x02\xBE`D\x83\x01a\x1AyV[`\x06\x88\x01\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[\x01\x90a\x1A\x83V[\x91\x01a\x1B\xCEV[a\x03\r\x81a(\x05V[\x7F\xE0 :F\x1F\x16\xC0\xA8\xA8\xDD\xEA\x13\xBB\xE0\xF9\xBB\x1EO\xDF\xEA<\x0E\xC4$\n52`\xFD\x0F\x88\x8A`@Q\x80a\x03<\x84\x82a\x01\xC2V[\x03\x90\xA1`@Q\x91\x82\x91\x82a\x01\xC2V[\x03\x90\xF3[`\x04`@Q\x7F\xF8c'_\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\0\x80\xFD[4a\x03yW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC` \x816\x01\x12a\x03yW`\x04\x90\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03yWa\x01\x80\x81\x84\x01\x92\x826\x03\x01\x12a\x03yW`d\x81\x01\x91a\x03\xEBa\x03\xE4\x84\x83a\x18|V[6\x91a\x08\xD5V[P`\x84\x82\x01\x91a\x03\xFB\x83\x83a\x1D9V[\x90P\x15a\x07mWa\x04,a\x04(a\x04#a\x04\x1Ea\x04\x18\x87\x87a\x1D9V[\x90a\x1D\xEFV[a\x1E\xDDV[a)\x02V[\x15\x90V[a\x07DWa\x048a!}V[\x93a\x04B\x85a\t\xA0V[\x92`\x02\x84\x01\x90a\x04S\x82T`\xFF\x16\x90V[a\x04\\\x81a\r\xA8V[a\x07\x1BW`D\x84\x01\x91a\x04o\x83\x83a\x18|V[a\x04y\x91\x88a\x19QV[a\x04\x85`\x01\x87\x01a&\x0EV[\x80T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16`\x02\x17\x90U`$\x84\x01\x91a\x04\xBC\x83a\x1AyV[`\x06\x87\x01\x90a\x04\xF9\x91\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[a\x05\x03\x82\x80a\x1A\x83V[\x90`\x03\x87\x01\x91a\x05\x13\x90\x83a\x1B\xCEV[a\x05\x1D\x83\x80a\x1A\x83V[\x80a\x05'\x91a\x18|V[\x94\x90\x98a\x054\x90\x85a\x1D9V[\x91a\x05>\x90a\x1AyV[\x92a\x05I\x90\x86a\x18|V[\x92\x90\x9Aa\x05Ta\x13\xCDV[\x9Ba\x05]a\x08_V[\x9C\x8DRa\x05ha\x08nV[\x946\x90a\x05t\x92a\x08\xD5V[\x84Ra\x05~a\x13\xBAV[` \x85\x01R`@\x9B\x8C\x85\x01Ra\x05\x92a\x08{V[\x976\x90a\x05\x9E\x92a\x08\xD5V[\x87R6\x90a\x05\xAB\x92a\x1E\xE8V[` \x86\x01R`\x01\x89\x86\x01R``\x85\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x80\x84\x01Ra\x01\x04\x85\x01\x92a\x05\xDD`\xA4\x87\x01\x84a\x18|V[\x91\x90a\x05\xE9\x85\x80a\x1A\x83V[` \x81\x01a\x05\xF6\x91a\x18|V[\x91a\x06\x016\x89a\x1FdV[\x946\x90a\x06\r\x92a\x08\xD5V[\x916\x90a\x06\x19\x92a\x08\xD5V[\x90a\x06$\x93\x8Aa*\xA6V[\x15a\x06\xF3W\x92a\x06xa\x06p\x93a\x06pa\x04(\x97\x94a\x06fa\x06^`\xC4a\x06Va\x06Qa\x06~\x9E\x9Ca\x0C\x93V[a+mV[\x98\x01\x83a\x18|V[\x96\x90\x92a\x18|V[\x97\x90\x936\x90a\x1FdV[\x946\x91a\x08\xD5V[\x93a+\xE7V[a\x06\xCBWa\x03K\x92Pa\x06\x90\x82a(\x05V[\x7Fz4\x06\xDFm\xA8`\x0F\x12{\t4\xD0G/\x87?\x8F\xE3M\xBF\x9C;<\xB9\xAD\xF5\x99\x1C\xC9\x1DJ\x81Q\x80a\x06\xBE\x85\x82a\x01\xC2V[\x03\x90\xA1Q\x91\x82\x91\x82a\x01\xC2V[\x90PQ\x7F\x14 \x992\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x88\x87Q\x7F\x14 \x992\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x87`@Q\x7F\xF8c'_\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x84`@Q\x7F\xBC\xDFl\xCA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x84`@Q\x7F3\xCA(\x94\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`A`\x04R`$`\0\xFD[`@\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\xE1W`@RV[a\x07\x96V[` \x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\xE1W`@RV[``\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\xE1W`@RV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\xE1W`@RV[`@Q\x90a\x08l\x82a\x07\xE6V[V[`@Q\x90a\x08l\x82a\x08\x02V[`@Q\x90`\xA0\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\xE1W`@RV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\xE1W`\x1F\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x16` \x01\x90V[\x92\x91\x92a\x08\xE1\x82a\x08\x9BV[\x91a\x08\xEF`@Q\x93\x84a\x08\x1EV[\x82\x94\x81\x84R\x81\x83\x01\x11a\x03yW\x82\x81` \x93\x84`\0\x96\x017\x01\x01RV[\x90\x80`\x1F\x83\x01\x12\x15a\x03yW\x81` a\x01\xD3\x935\x91\x01a\x08\xD5V[\x90`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x83\x01\x12a\x03yWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x03yW\x83a\tr\x91`\x04\x01a\t\x0CV[\x92`$5\x91\x82\x11a\x03yWa\x01\xD3\x91`\x04\x01a\t\x0CV[\x90a\t\x9C` \x92\x82\x81Q\x94\x85\x92\x01a\x01\\V[\x01\x90V[` a\t\xB9\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x01\\V[\x81\x01`\x04\x81R\x03\x01\x90 \x90V[` a\t\xDF\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x01\\V[\x81\x01`\x03\x81R\x03\x01\x90 \x90V[` \x90a\n\x06\x92\x82`@Q\x94\x83\x86\x80\x95Q\x93\x84\x92\x01a\x01\\V[\x82\x01\x90\x81R\x03\x01\x90 \x90V[4a\x03yW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\nW\x82a\nGa\n26a\t'V[\x92\x90\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x01\\V[\x81\x01`\x08\x81R\x03\x01\x90 \x90a\t\xECV[T\x16`@Q\x90\x81R\xF3[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x03a\x03yWV[4a\x03yW``\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03yWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x03yWa\n\xC3\x906\x90`\x04\x01a\t\x0CV[\x90`$5\x81\x81\x11a\x03yWa\n\xDFa\x0B\x14\x916\x90`\x04\x01a\t\x0CV[a\x0B\x04` `D5\x95a\n\xF1\x87a\naV[\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x01\\V[\x81\x01`\t\x81R\x03\x01\x90 \x90a\t\xECV[\x91\x16`\0R` Ra\x03Ka\x0B/`@`\0 `\xFF\x90T\x16\x90V[`@Q`\xFF\x90\x91\x16\x81R\x90\x81\x90` \x82\x01\x90V[` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x82\x01\x12a\x03yW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03yWa\x01\xD3\x91`\x04\x01a\t\x0CV[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a\x0B\xD5W[` \x83\x10\x14a\x0B\xA6WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\"`\x04R`$`\0\xFD[\x91`\x7F\x16\x91a\x0B\x9BV[\x80T`\0\x93\x92a\x0B\xEE\x82a\x0B\x8CV[\x91\x82\x82R` \x93`\x01\x91`\x01\x81\x16\x90\x81`\0\x14a\x0CVWP`\x01\x14a\x0C\x15W[PPPPPV[\x90\x93\x94\x95P`\0\x92\x91\x92R\x83`\0 \x92\x84`\0\x94[\x83\x86\x10a\x0CBWPPPP\x01\x01\x908\x80\x80\x80\x80a\x0C\x0EV[\x80T\x85\x87\x01\x83\x01R\x94\x01\x93\x85\x90\x82\x01a\x0C*V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16\x86\x85\x01RPPP\x90\x15\x15`\x05\x1B\x01\x01\x91P8\x80\x80\x80\x80a\x0C\x0EV[\x90a\x08la\x0C\xA7\x92`@Q\x93\x84\x80\x92a\x0B\xDFV[\x03\x83a\x08\x1EV[\x90`@\x91\x82Q\x92``\x84\x01\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x86\x10\x81\x87\x11\x17a\x07\xE1W\x85\x83R\x81\x95a\r\n\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xA0\x84a\r\x02\x84\x89a\x0B\xDFV[\x03\x01\x82a\x08\x1EV[\x82R\x82Qa\r&\x81a\r\x1F\x81`\x01\x89\x01a\x0B\xDFV[\x03\x82a\x08\x1EV[` \x83\x01R\x82Q\x93` \x85\x01\x91\x85\x83\x10\x90\x83\x11\x17a\x07\xE1W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x85a\r\x02\x84`\x02a\rs\x95\x82\x8AR\x01a\x0B\xDFV[\x83R\x01RV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`!`\x04R`$`\0\xFD[`\x04\x11\x15a\r\xB2WV[a\ryV[4a\x03yWa\r\xCDa\r\xC86a\x0BCV[a\t\xA0V[`@Q\x90a\r\xDF\x82a\x0C\xA7\x81\x84a\x0B\xDFV[`\xFF`\x02\x82\x01T\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x06a\r\xFE`\x03\x85\x01a\x0C\xAEV[\x93\x01T\x16\x90a\x0E\x18`@Q\x94`\x80\x86R`\x80\x86\x01\x90a\x01\x7FV[`\x04\x82\x10\x15a\r\xB2W\x84\x93` a\x0Ey\x92a\x03K\x94\x82\x88\x01R\x86\x81\x03`@\x88\x01R`@a\x0Eaa\x0EQ\x85Q``\x85R``\x85\x01\x90a\x01\x7FV[\x84\x86\x01Q\x84\x82\x03\x86\x86\x01Ra\x01\x7FV[\x93\x01Q\x90`@\x81\x85\x03\x91\x01RQ\x91\x81\x81R\x01\x90a\x01\x7FV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x92\x16``\x84\x01RV[4a\x03yW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x0E\xB5\x82a\n\xF16a\x0BCV[\x81\x01`\n\x81R\x03\x01\x90 T\x16`@Q\x90\x81R\xF3[\x92\x93\x91\x90`\x05\x81\x10\x15a\r\xB2W\x83R`\x03\x81\x10\x15a\r\xB2Wa\x01\xD3\x93a\x0F?\x91` \x85\x01R`\x80`@\x85\x01R` a\x0F\r\x82Q`@`\x80\x88\x01R`\xC0\x87\x01\x90a\x01\x7FV[\x91\x01Q\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x85\x83\x03\x01`\xA0\x86\x01Ra\x01\x7FV[\x91``\x81\x84\x03\x91\x01Ra\x01\x7FV[4a\x03yWa\x0F\x89a\x0F^6a\t'V[a\x0Fy` `@\x94\x93\x81\x86Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a\x01\\V[\x81\x01`\x05\x81R\x03\x01\x90 \x90a\t\xECV[\x90a\x03K`\x04\x83T\x92a\x0F\xDD\x81Q\x95a\x0F\xA1\x87a\x07\xC5V[\x82Qa\x0F\xB4\x81a\r\x1F\x81`\x01\x86\x01a\x0B\xDFV[\x87R\x82Qa\x0F\xC9\x81a\r\x1F\x81`\x02\x86\x01a\x0B\xDFV[` \x88\x01Ra\x0C\xA7\x83Q\x80\x95\x81\x93\x01a\x0B\xDFV[Q\x93\x83`\xFF\x80\x87\x96`\x08\x1C\x16\x91\x16\x85a\x0E\xC9V[4a\x03yW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC` \x816\x01\x12a\x03yW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03yW`\x80\x81`\x04\x01\x92\x826\x03\x01\x12a\x03yWa\x10Va\x10P\x83\x80a\x18|V[\x90a\x1F\x9EV[\x90`\x02\x82\x01\x91`\x02a\x10i\x84T`\xFF\x16\x90V[a\x10r\x81a\r\xA8V[\x03a\x12\x11Wa\x11_\x91a\x04(\x91a\x11Da\x11La\x10\x8F\x88\x80a\x18|V[\x94\x90a\x10\xC3a\x10\x9Ca\x13\xCDV[\x91a\x10\xA5a\x08_V[\x92\x83Ra\x10\xB0a\x08nV[\x97a\x10\xBA\x88a\x0C\x93V[\x89R6\x91a\x08\xD5V[` \x87\x01R`@\x86\x01Ra\x11*a\x10\xE5`\x06\x86\x01Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[a\x10\xEDa\x08{V[\x96a\x10\xFA`\x03\x88\x01a\x0C\x93V[\x88Ra\x11\x08`\x01\x88\x01a\x1F\xB7V[` \x89\x01R`\x03`@\x89\x01R``\x88\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x80\x87\x01RV[a\x117`$\x82\x01\x8Aa\x18|V[\x93\x90\x91`D6\x91\x01a\x1FdV[\x926\x91a\x08\xD5V[\x90a\x11Y`\x04\x84\x01a\x0C\x93V[\x92a*\xA6V[a\x11\xE7W\x7F\x9B\x91\x99#D@\xA2\xEE\x894\xBA\x890\x03\xCB\xA9\x94)Qm\xF8\xF1]\xDA\x11\xBA\x90k\xC7\x07d\xE4\x91a\x11\xB7a\x11\xD2\x92`\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[a\x11\xCCa\x11\xC7a\x03\xE4\x83\x80a\x18|V[a(\x05V[\x80a\x18|V[\x90a\x11\xE2`@Q\x92\x83\x92\x83a \x97V[\x03\x90\xA1\0[`\x04`@Q\x7F\x14 \x992\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04`@Q\x7F\x8C\xA9\x89\x90\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[4a\x03yW`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03yW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT`\x80\x1C\x16`@Q\x90\x81R\xF3[4a\x03yW` a\x12\x9Ca\x12\x976a\x0BCV[a \xDDV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[4a\x03yW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\nW\x82a\x12\xDAa\n26a\t'V[\x81\x01`\x06\x81R\x03\x01\x90 \x90a\t\xECV[4a\x03yW` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03yW`\x045`\0R`\0` R` `@`\0 T`@Q\x90\x81R\xF3[4a\x03yW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x13]\x82a\n\xF16a\x0BCV[\x81\x01`\x01\x81R\x03\x01\x90 T\x16`@Q\x90\x81R\xF3[4a\x03yW`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03yW` `\x0BTg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91`@\x1C\x16\x81R\xF3[`@Q\x90a\x13\xC7\x82a\x07\xE6V[`\0\x82RV[`@Q\x90a\x13\xDA\x82a\x07\xC5V[`\x03\x82R\x7Fibc\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x83\x01RV[4a\x03yW`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03yWa\x03Ka\x14@a\x13\xCDV[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x01\x7FV[4a\x03yW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC` \x816\x01\x12a\x03yW`\x04\x90\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03yWa\x01`\x81\x84\x01\x92\x826\x03\x01\x12a\x03yWa\x14\xB5a\x10P\x83\x80a\x18|V[\x90`\x02\x82\x01`\x01a\x14\xC7\x82T`\xFF\x16\x90V[a\x14\xD0\x81a\r\xA8V[\x03a\x17OW`D\x82\x01\x90a\x14\xEDa\x04(a\x04#a\x04\x1E\x85\x89a\x1D\xBCV[a\x17&W\x82`$\x86\x94\x01\x92a\x15\x05a\x03\xE4\x85\x87a\x18|V[Pa\x15\x10\x85\x80a\x18|V[\x94\x90a\x15;a\x15\x1Da\x13\xCDV[\x91a\x15&a\x08_V[\x92\x83Ra\x151a\x08nV[\x97a\x10\xBA\x8Ba\x0C\x93V[` \x87\x01R`@\x86\x01Ra\x15^a\x15Ya\x04\x1E`\x03\x8A\x01\x94\x89a\x1D\xBCV[a,YV[\x94a\x15\xAFa\x15w`\x06\x8A\x01Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[a\x15\x7Fa\x08{V[\x92a\x15\x89\x86a\x0C\x93V[\x84R` \x84\x01\x98\x89R`\x02`@\x85\x01R``\x84\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x80\x83\x01RV[a\x15\xFAa\x04(`\xE4\x86\x01\x92a\x15\xF3a\x11Da\x15\xCD`\x84\x8A\x01\x8Da\x18|V[\x92\x90a\x15\xDE`d\x8C\x01\x9E\x8F\x90a\x18|V[\x93\x90\x91a\x15\xEB6\x8Ba\x1FdV[\x956\x91a\x08\xD5V[\x91\x8Da*\xA6V[a\x16\xFDWa\x16U\x93a\x16Na\x16>\x92a\x16F\x8Ca\x164a\x16,`\xA4a\x16$a\x06Qa\x04(\x9Ca\x0C\x93V[\x97\x01\x83a\x18|V[\x98\x90\x92a\x18|V[\x96\x90\x936\x90a\x1FdV[\x966\x91a\x08\xD5V[\x936\x91a\x08\xD5V[\x92\x89a+\xE7V[a\x16\xD4W\x92a\x16\xCBa\x11\xB7\x93a\x16\xC5\x7F\xF8\xF9MW\x9E\x8F\x94\xB2\x11\x11B\xA3\x97\xC6\x1F\xBA\xBC\x0B\xC6d\xD4\xF8p\x05\x0E\xBE\xCCB\n\xFA\xA1\x94\x98\x94a\x16\xBAa\x11\xD2\x99\x98`\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[Q`\x01\x85\x01\x90a,\xB9V[\x85a\x18|V[\x92\x90\x91\x01a\x19QV[\x85`@Q\x7F\x14 \x992\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x89`@Q\x7F\x14 \x992\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x85`@Q\x7F\xBC\xDFl\xCA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x84`@Q\x7F\x8C\xA9\x89\x90\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\0`\x04R`$`\0\xFD[4a\x03yWa\x03Ka\r\x1Fa\x14@a\x17\xC3` a\n\xF16a\x0BCV[\x81\x01`\x02\x81R\x03\x01\x90 `@Q\x92\x83\x80\x92a\x0B\xDFV[4a\x03yW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\nW\x82a\x17\xF9a\n26a\t'V[\x81\x01`\x07\x81R\x03\x01\x90 \x90a\t\xECV[4a\x03yW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\nWa\x1816a\x0BCV[a\t\xC6V[4a\x03yW`\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x03yW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT\x16`@Q\x90\x81R\xF3[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\x03yW\x01\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03yW` \x01\x91\x816\x03\x83\x13a\x03yWV[\x81\x81\x10a\x18\xD8WPPV[`\0\x81U`\x01\x01a\x18\xCDV[\x90`\x1F\x81\x11a\x18\xF1WPPV[a\x08l\x91`\0R`\x1F` `\0 \x91\x01`\x05\x1C\x81\x01\x90a\x18\xCDV[\x91\x90`\x1F\x81\x11a\x19\x1BWPPPV[a\x08l\x92`\0R` `\0 \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x19GW[`\x1F\x01`\x05\x1C\x01\x90a\x18\xCDV[\x90\x91P\x81\x90a\x19:V[\x90\x92\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\xE1Wa\x19w\x81a\x19q\x84Ta\x0B\x8CV[\x84a\x19\x0CV[`\0`\x1F\x82\x11`\x01\x14a\x19\xD5W\x81\x90a\x19\xC6\x93\x94\x95`\0\x92a\x19\xCAW[PP\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[\x90UV[\x015\x90P8\x80a\x19\x94V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x82\x16\x94a\x1A\x08\x84`\0R` `\0 \x90V[\x91\x80[\x87\x81\x10a\x1AaWP\x83`\x01\x95\x96\x97\x10a\x1A)W[PPP\x81\x1B\x01\x90UV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U8\x80\x80a\x1A\x1FV[\x90\x92` `\x01\x81\x92\x86\x86\x015\x81U\x01\x94\x01\x91\x01a\x1A\x0BV[5a\x01\xD3\x81a\naV[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xA1\x816\x03\x01\x82\x12\x15a\x03yW\x01\x90V[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\x03yW\x01\x90V[\x91\x90a\x1A\xF5\x90\x80a\x18|V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x94\x92\x94\x11a\x07\xE1Wa\x1B\x15\x81a\x19q\x84Ta\x0B\x8CV[`\0`\x1F\x82\x11`\x01\x14a\x1BcW\x81\x90a\x19\xC6\x93\x94\x95`\0\x92a\x19\xCAWPP\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x82\x16\x94a\x1B\x96\x84`\0R` `\0 \x90V[\x91\x80[\x87\x81\x10a\x1B\xB6WP\x83`\x01\x95\x96\x97\x10a\x1A)WPPP\x81\x1B\x01\x90UV[\x90\x92` `\x01\x81\x92\x86\x86\x015\x81U\x01\x94\x01\x91\x01a\x1B\x99V[\x91\x90\x91a\x1B\xDB\x83\x80a\x18|V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x95\x92\x95\x11a\x07\xE1Wa\x1C\x01\x81a\x1B\xFB\x85Ta\x0B\x8CV[\x85a\x19\x0CV[`\0`\x1F\x82\x11`\x01\x14a\x1C\x86W\x91a\x1CX\x82a\x1C\x7F\x93`\x02\x95a\x08l\x98\x99`\0\x92a\x19\xCAWPP\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[\x84U[a\x1Cua\x1Ck` \x83\x01\x83a\x18|V[\x90`\x01\x87\x01a\x19QV[`@\x81\x01\x90a\x1A\xB6V[\x91\x01a\x1A\xE9V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x82\x16\x90a\x1C\xB9\x85`\0R` `\0 \x90V[\x91\x81[\x81\x81\x10a\x1D!WP\x92`\x02\x94\x92a\x08l\x97\x98`\x01\x93\x83a\x1C\x7F\x97\x10a\x1C\xE9W[PPP\x81\x1B\x01\x84Ua\x1C[V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U8\x80\x80a\x1C\xDCV[\x91\x92` `\x01\x81\x92\x86\x8C\x015\x81U\x01\x94\x01\x92\x01a\x1C\xBCV[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\x03yW\x01\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03yW` \x01\x91\x81`\x05\x1B6\x03\x83\x13a\x03yWV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`2`\x04R`$`\0\xFD[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC1\x816\x03\x01\x82\x12\x15a\x03yW\x01\x90V[\x90\x15a\x1D\xFFW\x80a\x01\xD3\x91a\x1D\xBCV[a\x1D\x8DV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\xE1W`\x05\x1B` \x01\x90V[\x91\x90`@\x83\x82\x03\x12a\x03yW`@Q\x92a\x1E5\x84a\x07\xC5V[\x83\x815\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x93\x84\x81\x11a\x03yW\x81a\x1EV\x91\x85\x01a\t\x0CV[\x82R` \x92\x83\x81\x015\x90\x85\x82\x11a\x03yW\x01\x81`\x1F\x82\x01\x12\x15a\x03yW\x805a\x1E~\x81a\x1E\x04V[\x95a\x1E\x8C`@Q\x97\x88a\x08\x1EV[\x81\x87R\x85\x80\x88\x01\x92`\x05\x1B\x84\x01\x01\x93\x80\x85\x11a\x03yW\x86\x84\x01\x92[\x85\x84\x10a\x1E\xB8WPPPPPP\x01RV[\x835\x83\x81\x11a\x03yW\x88\x91a\x1E\xD2\x84\x84\x80\x94\x8A\x01\x01a\t\x0CV[\x81R\x01\x93\x01\x92a\x1E\xA7V[a\x01\xD3\x906\x90a\x1E\x1CV[\x92\x91\x90\x92a\x1E\xF5\x84a\x1E\x04V[\x91a\x1F\x03`@Q\x93\x84a\x08\x1EV[\x82\x94\x80\x84R` \x80\x94\x01\x90`\x05\x1B\x83\x01\x92\x82\x84\x11a\x03yW\x80\x91[\x84\x83\x10a\x1F-WPPPPPPV[\x825g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03yW\x86\x91a\x1FM\x86\x84\x93\x86\x01a\x1E\x1CV[\x81R\x01\x92\x01\x91a\x1F\x1EV[`\x04\x82\x10\x15a\r\xB2WRV[\x91\x90\x82`@\x91\x03\x12a\x03yW`@Qa\x1F|\x81a\x07\xC5V[` \x80\x82\x94\x805a\x1F\x8C\x81a\naV[\x84R\x015\x91a\x1F\x9A\x83a\naV[\x01RV[` \x90\x82`@Q\x93\x84\x92\x837\x81\x01`\x04\x81R\x03\x01\x90 \x90V[\x90\x81T\x91a\x1F\xC4\x83a\x1E\x04V[\x92`@\x93a\x1F\xD5`@Q\x91\x82a\x08\x1EV[\x81\x81R\x80\x94` \x80\x92\x01\x93`\0\x90\x81R\x82\x81 \x91\x81\x95[\x85\x87\x10a\x1F\xFCWPPPPPPPV[\x84\x82Qa \x08\x81a\x07\xC5V[\x83Qa \x18\x81a\r\x1F\x81\x8Aa\x0B\xDFV[\x81R`\x01\x80\x87\x01\x90\x81Ta +\x81a\x1E\x04V[\x92a 8\x88Q\x94\x85a\x08\x1EV[\x81\x84R\x88R\x84\x88 \x88\x86\x85\x01[\x83\x82\x10a kWPPPPP\x92\x81`\x01\x94\x84`\x02\x95\x94\x01R\x81R\x01\x94\x01\x96\x01\x95\x92a\x1F\xECV[\x93\x80\x95\x96\x97\x81\x92\x93\x94\x95\x8BQa \x85\x81a\r\x1F\x81\x8Aa\x0B\xDFV[\x81R\x01\x93\x01\x91\x01\x8B\x96\x95\x94\x93\x92a EV[\x90`\x1F\x83`@\x94\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x93` \x86R\x81` \x87\x01R\x86\x86\x017`\0\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[a \xFBs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91a\t\xC6V[T\x16\x80\x15a!\x06W\x90V[`\x04`@Q\x7F\xB6\xC7\x1F}\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\x11`\x04R`$`\0\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x91\x16\x90\x81\x14a!xW`\x01\x01\x90V[a!0V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT`@\x1C\x16\x80\x81`\0\x92z\x18O\x03\xE9?\xF9\xF4\xDA\xA7\x97\xEDn8\xEDd\xBFj\x1F\x01\0\0\0\0\0\0\0\0\x80\x82\x10\x15a#\xAAW[Pm\x04\xEE-mA[\x85\xAC\xEF\x81\0\0\0\0\x80\x83\x10\x15a#\x9BW[Pf#\x86\xF2o\xC1\0\0\x80\x83\x10\x15a#\x8CW[Pc\x05\xF5\xE1\0\x80\x83\x10\x15a#}W[Pa'\x10\x80\x83\x10\x15a#nW[P`d\x82\x10\x15a#^W[`\n\x80\x92\x10\x15a#TW[`\x01\x90\x81`!a\"&`\x01\x88\x01a-NV[\x96\x87\x01\x01\x90[a\"\xF3W[PPPPa\"\xB1a\x01\xD3\x91a\"\xACa\"\x80\x94`@Q\x95\x86\x91a\"z` \x84\x01`\x0B\x90\x7Fconnection-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\x01\x90V[\x90a\t\x89V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x86R\x85a\x08\x1EV[a!_V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFo\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0`\x0BT\x92`@\x1B\x16\x91\x16\x17`\x0BUV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x91\x01\x91\x7F0123456789abcdef\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x82\x06\x1A\x83S\x04\x91\x82\x15a#OW\x91\x90\x82a\",V[a\"1V[\x92`\x01\x01\x92a\"\x14V[\x92\x90`d`\x02\x91\x04\x91\x01\x92a\"\tV[`\x04\x91\x94\x92\x04\x91\x01\x928a!\xFEV[`\x08\x91\x94\x92\x04\x91\x01\x928a!\xF1V[`\x10\x91\x94\x92\x04\x91\x01\x928a!\xE2V[` \x91\x94\x92\x04\x91\x01\x928a!\xD0V[`@\x94P\x81\x04\x91P8a!\xB7V[`@\x90`@Q\x91a#\xC8\x83a\x08\x02V[`\x02\x83R\x82`\0[\x82\x81\x10a#\xDCWPPPV[\x80``` \x80\x93\x85\x01\x01R\x01a#\xD0V[`@Q\x90a#\xFA\x82a\x07\xC5V[`\x01\x82R\x7F1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x83\x01RV[\x80T\x15a\x1D\xFFW`\0R` `\0 \x90`\0\x90V[\x80T\x82\x10\x15a\x1D\xFFW`\0R` `\0 \x90`\x01\x1B\x01\x90`\0\x90V[\x91\x90\x91\x82Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\xE1Wa$y\x81a\x19q\x84Ta\x0B\x8CV[` \x80`\x1F\x83\x11`\x01\x14a$\xD4WP\x81\x90a\x19\xC6\x93\x94\x95`\0\x92a$\xC9WPP\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[\x01Q\x90P8\x80a\x19\x94V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x83\x16\x95a%\x08\x85`\0R` `\0 \x90V[\x92`\0\x90[\x88\x82\x10a%bWPP\x83`\x01\x95\x96\x97\x10a%+WPPP\x81\x1B\x01\x90UV[\x01Q\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U8\x80\x80a\x1A\x1FV[\x80`\x01\x85\x96\x82\x94\x96\x86\x01Q\x81U\x01\x95\x01\x93\x01\x90a%\rV[\x80T`\x01\x10\x15a\x1D\xFFW`\0R`\x01` `\0 \x01\x90`\0\x90V[\x90a%\xD2Wa%\xADa%\xA7\x82Ta\x0B\x8CV[\x82a\x18\xE4V[\x7FORDER_ORDERED\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x1A\x90UV[a\x17xV[\x90a%\xD2Wa%\xE9a%\xA7\x82Ta\x0B\x8CV[\x7FORDER_UNORDERED\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x1E\x90UV[\x80T\x90\x81a'\x81Wa&\x1Ea#\xB8V[`@Q\x90a&+\x82a\x07\xC5V[a&3a#\xEDV[\x82R` \x80\x83\x01\x91\x82Rh\x01\0\0\0\0\0\0\0\0\x92\x83\x86\x10\x15a\x07\xE1Wa&a`\x01\x96\x87\x81\x01\x87U\x86a$;V[a%\xD2Wa&q\x87\x92Q\x82a$WV[\x01\x91Q\x80Q\x93\x84\x11a\x07\xE1W\x82T\x84\x84U\x80\x85\x10a&\xF8W[P` a&\x9E\x91\x01\x92`\0R` `\0 \x90V[`\0\x92[\x84\x84\x10a&\xDDWPPPPPa\x08l\x91a&\xBEa&\xD7\x92a$&V[P\x01a&\xD2a&\xCC\x82a$&V[\x90a%\x95V[a%zV[\x90a%\xD7V[\x86\x83\x82a&\xEC\x83\x94Q\x86a$WV[\x01\x92\x01\x93\x01\x92\x90a&\xA2V[`\0\x84`\0R\x87\x86` `\0 \x93\x84\x01\x93\x01[\x83\x81\x10a'\x1AWPPPa&\x8AV[a'$\x81Ta\x0B\x8CV[\x80a'3W[P\x01\x88\x90a'\x0BV[`\x1F\x90\x83\x82\x82\x11`\x01\x14a'NWPPP\x82\x81U[8a'*V[a'o\x92a'a\x85`\0R` `\0 \x90V[\x92\x01`\x05\x1C\x82\x01\x91\x01a\x18\xCDV[`\0\x81\x81R` \x81 \x81\x83UUa'HV[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`,`$\x82\x01R\x7FsetSupportedVersions: versions m`D\x82\x01R\x7Fust be empty\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[a(\x0E\x81a\t\xA0V[`@Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91`\xA0\x82\x01\x91\x83\x83\x11\x81\x84\x10\x17a\x07\xE1Wa(\xCE\x93`\x06a(\xB1\x93\x85a(\xBE\x96`@Ra(l\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x86a\r\x02\x84\x86a\x0B\xDFV[\x84Ra(z`\x01\x82\x01a\x1F\xB7V[` \x85\x01Ra(\x93`\xFF`\x02\x83\x01T\x16`@\x86\x01a\x1FXV[a(\x9F`\x03\x82\x01a\x0C\xAEV[``\x85\x01R\x01T\x16`\x80\x82\x01Ra-\x9DV[` \x81Q\x91\x01 \x92a.tV[`\0R`\0` R`@`\0 \x90V[UV[\x80Q\x15a\x1D\xFFW` \x01\x90V[\x80Q`\x01\x10\x15a\x1D\xFFW`@\x01\x90V[\x80Q\x82\x10\x15a\x1D\xFFW` \x91`\x05\x1B\x01\x01\x90V[a)\na#\xB8V[\x90`@Q\x90a)\x18\x82a\x07\xC5V[a) a#\xEDV[\x82R` \x92\x83\x83\x01\x81\x81R`@Qa)7\x81a\x07\xC5V[`\r\x81R\x7FORDER_ORDERED\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86\x82\x01R\x82Q\x15a\x1D\xFFW\x82a)x\x91\x87a)\xBE\x95\x01Ra(\xD1V[PQ`@Qa)\x86\x81a\x07\xC5V[`\x0F\x81R\x7FORDER_UNORDERED\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86\x82\x01Ra)\xB8\x82a(\xDEV[Ra(\xDEV[P\x82a)\xDBa)\xD4a)\xCF\x84a0\xF7V[a-NV[\x80\x93a3\xBAV[\x91\x82\x81R\x01 \x91a)\xF1a)\xD4a)\xCF\x84a0\xF7V[\x91\x82\x81R\x01 \x14\x90V[\x90\x81` \x91\x03\x12a\x03yWQ\x80\x15\x15\x81\x03a\x03yW\x90V[\x94\x91\x93a*oa\x01\xD3\x97\x95a*\x8B\x95a*7a*}\x95a\x01 \x80\x8CR\x8B\x01\x90a\x0B\xDFV[\x91` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x82\x81Q\x16\x82\x8D\x01R\x01Q\x16`@\x8A\x01R`\0``\x8A\x01R`\0`\x80\x8A\x01R\x88\x82\x03`\xA0\x8A\x01Ra\x01\x7FV[\x90\x86\x82\x03`\xC0\x88\x01Ra\x0B\xDFV[\x90\x84\x82\x03`\xE0\x86\x01Ra\x01\x7FV[\x91a\x01\0\x81\x84\x03\x91\x01Ra\x01\x7FV[`@Q=`\0\x82>=\x90\xFD[\x91`\0` \x94\x92a+)a*\xEEa*\xE8s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa*\xE1a\r\x1Fa\x12\x97\x8B`@Q\x92\x83\x80\x92a\x0B\xDFV[\x16\x96a.\x87V[\x98a-\x9DV[`@Q\x98\x89\x97\x88\x96\x87\x95\x7F\xF9\xBBZQ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87R`\x05\x83\x01\x92`\x04\x88\x01a*\x13V[\x03\x92Z\xF1\x90\x81\x15a+hW`\0\x91a+?WP\x90V[a\x01\xD3\x91P` =` \x11a+aW[a+Y\x81\x83a\x08\x1EV[\x81\x01\x90a)\xFBV[P=a+OV[a*\x9AV[a\x01\xD3`4`@Q\x80\x93\x7Fclients/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x83\x01Ra+\xB1\x81Q\x80\x92` `(\x86\x01\x91\x01a\x01\\V[\x81\x01\x7F/clientState\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`(\x82\x01R\x03`\x14\x81\x01\x84R\x01\x82a\x08\x1EV[\x91\x93\x90\x92`\0` \x94a+)s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa,\x1C`@Qa\x12\x97\x81a\r\x1F\x81\x8Ca\x0B\xDFV[\x16\x94`@Q\x98\x89\x97\x88\x96\x87\x95\x7F\xF9\xBBZQ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87R`\x05\x83\x01\x92`\x04\x88\x01a*\x13V[\x90`@\x91`@Q\x92a,j\x84a\x07\xC5V[`\x01\x84R` \x90`\0[\x82\x81\x10a,\x97WPPP\x82\x80Q\x15a\x1D\xFFWa,\x94\x91` \x82\x01Ra(\xD1V[PV[\x82\x90\x82Qa,\xA4\x81a\x07\xC5V[``\x80\x82R\x83\x82\x01R\x82\x82\x89\x01\x01R\x01a,tV[\x91\x90`\0[\x83Q\x81\x10\x15a-HWa,\xD4\x81\x85\x94\x93\x94a(\xEEV[Q\x91a,\xE0\x82\x85a$;V[P\x94a,\xED\x84Q\x87a$WV[` \x93\x84\x01\x94`\0[\x86Q\x80Q\x82\x10\x15a-5W\x81a-\x0B\x91a(\xEEV[Q\x90`\x01\x89\x01\x80T\x82\x10\x15a\x1D\xFFW`\x01\x92a-/\x91`\0R\x82\x89`\0 \x01a$WV[\x01a,\xF6V[PP\x95P\x92P\x92P`\x01\x01\x92\x90\x92a,\xBEV[PP\x90PV[\x90a-X\x82a\x08\x9BV[a-e`@Q\x91\x82a\x08\x1EV[\x82\x81R\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0a-\x93\x82\x94a\x08\x9BV[\x01\x90` 6\x91\x017V[\x90a-\xB1a-\xAC\x83QQa0\xE2V[a.\xDAV[`\0\x90[` \x84\x01Q\x80Q\x83\x10\x15a-\xF5W`\x01\x91a-\xE7a-\xACa-\xE2a-\xDC\x87a-\xED\x96a(\xEEV[Qa0\xF7V[a0\xE2V[\x90a/\x04V[\x91\x01\x90a-\xB5V[Pa.o\x91Pa)\xCFa.Ha.5a.h\x93\x96\x95\x96a-\xE7a-\xACa.0a.*`@\x8B\x01Qa.%\x81a\r\xA8V[a1oV[`\x03\x0B\x90V[a1\xCDV[a-\xE7a-\xACa-\xE2``\x89\x01Qa1\xF4V[a-\xE7a-\xACa.c`\x80\x88\x01Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[a1\xE1V[\x80\x92a/xV[\x81R\x90V[a.}\x90a.\x87V[` \x81Q\x91\x01 \x90V[a\x01\xD3`,`@Q\x80\x93\x7Fconnections/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x83\x01Ra.\xCA\x81Q\x80\x92` \x86\x86\x01\x91\x01a\x01\\V[\x81\x01\x03`\x0C\x81\x01\x84R\x01\x82a\x08\x1EV[`\x01\x01\x90\x81`\x01\x11a!xWV[\x90` \x82\x01\x80\x92\x11a!xWV[` \x01\x90\x81` \x11a!xWV[\x91\x90\x82\x01\x80\x92\x11a!xWV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x82\x01\x91\x82\x11a!xWV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x01\x91\x82\x11a!xWV[\x91\x90\x82\x03\x91\x82\x11a!xWV[\x90` `\0\x83QQa0\xBAW[` \x84\x01\x90\x81QQa0gW[PP\x90`\x80a/\xDAa/\xCB\x85\x94\x84`@a\x01\xD3\x98\x01\x80Qa/\xB2\x81a\r\xA8V[a/\xBB\x81a\r\xA8V[a0:W[Pa-\xE7\x90\x82a4\xF1V[a-\xE7\x84\x82``\x88\x01Qa2\xD1V[\x92\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa/\xF7\x82Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x16a0\x04W[PPa/\x11V[\x81a-\xE7\x91a0\x1D\x85a-\xE7a0.\x96a03\x98a4\xFEV[\x93\x84\x91Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[a2\xBCV[8\x80a/\xFDV[\x81a-\xE7\x91a0S\x85a-\xE7a0.\x96a0`\x98a4\xE4V[\x93\x84\x91Qa.%\x81a\r\xA8V[\x848a/\xC0V[\x94\x90\x92\x93\x94\x91[\x83QQ\x83\x10\x15a0\xA9Wa0\xA1a0\x8B\x82a-\xE7\x88`\x01\x95a4\xD7V[a-\xE7\x87\x82a0\x9B\x88\x8AQa(\xEEV[Qa2ZV[\x92\x01\x91a0nV[\x90\x94\x93\x92P\x90P`\x80a/\xDAa/\x92V[\x90Pa0\xDCa0\xD0a0\xCB\x84a4\x9FV[a.\xF6V[a-\xE7\x84\x82\x87Qa5TV[\x90a/\x85V[a0\xEB\x81a4dV[\x81\x01\x80\x91\x11a!xW\x90V[a1\x02\x81QQa0\xE2V[`\x01\x90\x81\x01\x80\x82\x11a!xW\x81\x90\x92`\0\x92[a1 W[PPP\x90V[` \x81\x94\x92\x93\x94\x01Q\x80Q\x85\x10\x15a1fWa1?\x85a1F\x92a(\xEEV[QQa0\xE2V[\x80\x84\x01\x84\x11a!xW\x83\x90\x83\x01\x01\x80\x92\x11a!xW\x82\x80\x92\x94\x01\x92a1\x15V[P\x81\x93Pa1\x1AV[`\x04\x81\x10\x15a\r\xB2W\x80\x15a1\xC7Wa1\x87\x81a\r\xA8V[`\x01\x81\x14a1\xC1Wa1\x98\x81a\r\xA8V[`\x02\x81\x14a1\xBBW\x80a1\xAC`\x03\x92a\r\xA8V[\x14a1\xB6W`\0\x80\xFD[`\x03\x90V[P`\x02\x90V[P`\x01\x90V[P`\0\x90V[`\0\x81`\x07\x0B\x12`\0\x14a1\xE1WP`\n\x90V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xD3\x91\x16a4dV[a1\xFF\x81QQa0\xE2V[\x90`\x01\x82\x81\x01\x92\x83\x82\x11a!xWa2\x1B` \x84\x01QQa0\xE2V[\x90\x81\x83\x01\x83\x11a!xW\x01\x91`\x02\x83\x01\x80\x94\x11a!xWa-\xE2`@a2B\x92\x01Qa4\x86V[\x90\x81\x81\x01\x10a!xW`\x03\x91\x01\x01\x80\x91\x11a!xW\x90V[\x91a2qa2ja)\xCF\x85a0\xF7V[\x80\x94a3\xBAV[\x90a2}\x81\x84\x84a5\x18V[\x83\x01\x93\x84\x84\x11a!xW` \x81\x01\x80\x91\x11a!xW\x84\x82\x01\x80\x92\x11a!xWa2\xA7\x91\x83\x91a5\xB0V[\x82\x01\x80\x92\x11a!xW\x81\x03\x90\x81\x11a!xW\x90V[\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xD3\x93\x92\x16a5\x18V[\x91a2\xDEa)\xCF\x84a1\xF4V[\x90` \x84QQa3\x8BW[a3]\x83a3W\x93a32a3-`@a-\xE7a3b\x99\x8Ca3#a3Q\x9Aa\x01\xD3\x9F` \x01\x84\x81QQa3gW[a-\xE7\x91P\x82a5\x0BV[\x93\x84\x91\x01Qa6EV[a/\x11V[\x94\x85\x92a3Ia3C\x84\x8B\x87a5\x18V[\x8Aa/\x04V[\x95\x86\x91a.\xE8V[\x92a/\x04V[\x90a5\xB0V[a/\x04V[a/kV[\x80a3|\x84a-\xE7a-\xE7\x94a3\x84\x97a4\xD7V[\x80\x93Qa5TV[8\x84a3\x18V[a3\x94\x83a4\x9FV[\x90\x81\x81\x01\x91\x82\x82\x11a!xWa3\xAC\x85\x84\x89Qa5TV[\x01\x01\x80\x91\x11a!xWa2\xE9V[\x91\x90\x91` \x90`\0\x90\x80QQa43W[` \x01\x90\x81QQa3\xE4W[PPa\x01\xD3\x91\x92Pa/\x11V[\x90\x91[\x82QQ\x82\x10\x15a4\"Wa4\x1Aa4\x04\x82a-\xE7\x88`\x01\x95a4\xD7V[a-\xE7\x87\x82a4\x14\x87\x89Qa(\xEEV[Qa5TV[\x91\x01\x90a3\xE7V[\x91PPa\x01\xD3\x91\x92P\x82\x918a3\xD7V[\x91a4=\x85a4\x9FV[\x90\x81\x81\x01\x91\x82\x82\x11a!xWa4U\x87\x84\x87Qa5TV[\x01\x01\x80\x91\x11a!xW\x91a3\xCBV[`\x01\x80\x91`\x07\x90`\x07\x1C\x80[a4zWPPP\x90V[\x92\x82\x01\x92\x81\x1C\x80a4pV[a4\x91\x90QQa0\xE2V[`\x01\x01\x80`\x01\x11a!xW\x90V[`\n\x90`\0\x90` \x01\x82[`\x07\x1C\x92\x83\x15a4\xCDW`\x80\x17\x81S`\x01\x80\x91\x01\x91\x01`\x7F\x83\x16\x92\x91\x90\x91a4\xAAV[\x90`\x01\x93PS\x01\x90V[`\0\x91\x82\x91\x01`\x12a4\xCDV[`\0\x91\x82\x91\x01`\x18a4\xCDV[`\0\x91\x82\x91\x01`\"a4\xCDV[`\0\x91\x82\x91\x01`(a4\xCDV[`\0\x91\x82\x91\x01`\x1Aa4\xCDV[`\x7F\x93\x92`\0\x92\x85\x83\x16\x92\x91\x01\x90[`\x07\x1C\x91\x82\x15a5HW`\x80\x17\x81S`\x01\x92\x83\x01\x92\x85\x83\x16\x92\x91\x01\x90a5'V[\x91P`\x01\x93\x94PS\x01\x90V[\x90\x81Q\x91a5c\x84\x83\x85a5\x18V[\x93` `\0\x91\x86`\0\x95\x01\x01\x92\x01\x91[\x84\x84\x10a5\x8BWPPP\x90P\x81\x01\x80\x91\x11a!xW\x90V[\x82Q\x82\x1A\x81S`\x01\x93\x84\x01\x93\x92\x83\x01\x92\x01a5sV[`\x1F\x81\x11a!xWa\x01\0\n\x90V[\x91\x92\x90\x83\x15a6?W\x92\x91[` \x93\x84\x84\x11\x15a6\x10W\x81Q\x81R\x84\x81\x01\x80\x91\x11a!xW\x93\x81\x01\x80\x91\x11a!xW\x91\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x90\x81\x11a!xW\x91a5\xBCV[\x92\x90\x91\x93P` \x03` \x81\x11a!xWa6,a61\x91a5\xA1V[a/>V[\x90Q\x82Q\x82\x16\x91\x19\x16\x17\x90RV[P\x91PPV[\x91a6Ra)\xCF\x84a4\x86V[\x92` \x90\x80QQa6\xD0W[P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x82\x82\x01\x82\x81\x11a!xWa6\x96\x82\x86\x83a5\x18V[\x85\x01\x95\x86\x86\x11a!xWa6\xA9\x90a.\xE8V[\x91\x86\x81\x01\x80\x91\x11a!xWa6\xBD\x92a5\xB0V[\x83\x01\x01\x80\x92\x11a!xWa\x01\xD3\x91a/kV[\x90a6\xDA\x85a4\x9FV[\x80\x82\x01\x92\x83\x83\x11a!xW\x86\x84a6\xF1\x92Qa5TV[\x01\x01\x80\x91\x11a!xW8a6^V\xFE\xA2dipfsX\"\x12 \xE0I\xFD\x01-Q\xD2)\x99ZI\xBD\x0F\x92hw\xED l\x15\x03\xE5\x84=\x1A>8M\xB8\x03\x808dsolcC\0\x08\x17\x003"; + /// The deployed bytecode of the contract. + #[cfg(feature = "providers")] + pub static IBCCONNECTION_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); + #[cfg(feature = "providers")] + pub struct IBCConnection(::ethers::contract::Contract); + #[cfg(feature = "providers")] + impl ::core::clone::Clone for IBCConnection { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + #[cfg(feature = "providers")] + impl ::core::ops::Deref for IBCConnection { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + #[cfg(feature = "providers")] + impl ::core::ops::DerefMut for IBCConnection { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + #[cfg(feature = "providers")] + impl ::core::fmt::Debug for IBCConnection { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(IBCConnection)) + .field(&self.address()) + .finish() + } + } + #[cfg(feature = "providers")] + impl IBCConnection { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + IBCCONNECTION_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + IBCCONNECTION_ABI.clone(), + IBCCONNECTION_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + ///Calls the contract's `COMMITMENT_PREFIX` (0xa9550dac) function + pub fn commitment_prefix( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([169, 85, 13, 172], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `capabilities` (0x5717bcf5) function + pub fn capabilities( + &self, + p0: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([87, 23, 188, 245], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `channels` (0x5b3de260) function + pub fn channels( + &self, + p0: ::std::string::String, + p1: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall< + M, + (u8, u8, IbcCoreChannelV1ChannelData, ::std::string::String), + > { + self.0 + .method_hash([91, 61, 226, 96], (p0, p1)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `clientImpls` (0xd1297b8d) function + pub fn client_impls( + &self, + p0: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([209, 41, 123, 141], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `clientRegistry` (0x990491a5) function + pub fn client_registry( + &self, + p0: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([153, 4, 145, 165], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `clientTypes` (0xc2380105) function + pub fn client_types( + &self, + p0: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([194, 56, 1, 5], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `commitments` (0x839df945) function + pub fn commitments( + &self, + p0: [u8; 32], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([131, 157, 249, 69], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `connectionOpenAck` (0xb531861f) function + pub fn connection_open_ack( + &self, + msg: MsgConnectionOpenAck, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([181, 49, 134, 31], (msg,)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `connectionOpenConfirm` (0x6a728f2c) function + pub fn connection_open_confirm( + &self, + msg: MsgConnectionOpenConfirm, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([106, 114, 143, 44], (msg,)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `connectionOpenInit` (0x01c6400f) function + pub fn connection_open_init( + &self, + msg: MsgConnectionOpenInit, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([1, 198, 64, 15], (msg,)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `connectionOpenTry` (0x04f68e5c) function + pub fn connection_open_try( + &self, + msg: MsgConnectionOpenTry, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([4, 246, 142, 92], (msg,)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `connections` (0x31973f00) function + pub fn connections( + &self, + p0: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall< + M, + ( + ::std::string::String, + u8, + IbcCoreConnectionV1CounterpartyData, + u64, + ), + > { + self.0 + .method_hash([49, 151, 63, 0], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `getClient` (0x7eb78932) function + pub fn get_client( + &self, + client_id: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([126, 183, 137, 50], client_id) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextChannelSequence` (0x7926b8a9) function + pub fn next_channel_sequence(&self) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([121, 38, 184, 169], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextClientSequence` (0xe1b17b43) function + pub fn next_client_sequence(&self) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([225, 177, 123, 67], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextConnectionSequence` (0xa049e677) function + pub fn next_connection_sequence( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([160, 73, 230, 119], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextSequenceAcks` (0x1390d28d) function + pub fn next_sequence_acks( + &self, + p0: ::std::string::String, + p1: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([19, 144, 210, 141], (p0, p1)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextSequenceRecvs` (0xc930b1b0) function + pub fn next_sequence_recvs( + &self, + p0: ::std::string::String, + p1: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([201, 48, 177, 176], (p0, p1)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextSequenceSends` (0x821cb5d0) function + pub fn next_sequence_sends( + &self, + p0: ::std::string::String, + p1: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([130, 28, 181, 208], (p0, p1)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `packetReceipts` (0x26078437) function + pub fn packet_receipts( + &self, + p0: ::std::string::String, + p1: ::std::string::String, + p2: u64, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([38, 7, 132, 55], (p0, p1, p2)) + .expect("method not found (this should never happen)") + } + ///Gets the contract's `ConnectionOpenAck` event + pub fn connection_open_ack_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ConnectionOpenAckFilter> + { + self.0.event() + } + ///Gets the contract's `ConnectionOpenConfirm` event + pub fn connection_open_confirm_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ConnectionOpenConfirmFilter> + { + self.0.event() + } + ///Gets the contract's `ConnectionOpenInit` event + pub fn connection_open_init_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ConnectionOpenInitFilter> + { + self.0.event() + } + ///Gets the contract's `ConnectionOpenTry` event + pub fn connection_open_try_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ConnectionOpenTryFilter> + { + self.0.event() + } + /// Returns an `Event` builder for all the events of this contract. + pub fn events( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, IBCConnectionEvents> + { + self.0 + .event_with_filter(::core::default::Default::default()) + } + } + #[cfg(feature = "providers")] + impl From<::ethers::contract::Contract> + for IBCConnection + { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + ///Custom Error type `ErrClientNotFound` with signature `ErrClientNotFound()` and selector `0xb6c71f7d` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrClientNotFound", abi = "ErrClientNotFound()")] + pub struct ErrClientNotFound; + ///Custom Error type `ErrConnectionAlreadyExists` with signature `ErrConnectionAlreadyExists()` and selector `0xf863275f` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrConnectionAlreadyExists", + abi = "ErrConnectionAlreadyExists()" + )] + pub struct ErrConnectionAlreadyExists; + ///Custom Error type `ErrInvalidConnectionState` with signature `ErrInvalidConnectionState()` and selector `0x8ca98990` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrInvalidConnectionState", + abi = "ErrInvalidConnectionState()" + )] + pub struct ErrInvalidConnectionState; + ///Custom Error type `ErrInvalidProof` with signature `ErrInvalidProof()` and selector `0x14209932` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrInvalidProof", abi = "ErrInvalidProof()")] + pub struct ErrInvalidProof; + ///Custom Error type `ErrNoCounterpartyVersion` with signature `ErrNoCounterpartyVersion()` and selector `0x33ca2894` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrNoCounterpartyVersion", abi = "ErrNoCounterpartyVersion()")] + pub struct ErrNoCounterpartyVersion; + ///Custom Error type `ErrUnsupportedVersion` with signature `ErrUnsupportedVersion()` and selector `0xbcdf6cca` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrUnsupportedVersion", abi = "ErrUnsupportedVersion()")] + pub struct ErrUnsupportedVersion; + ///Custom Error type `ErrValidateSelfClient` with signature `ErrValidateSelfClient()` and selector `0x58a3849b` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrValidateSelfClient", abi = "ErrValidateSelfClient()")] + pub struct ErrValidateSelfClient; + ///Container type for all of the contract's custom errors + #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] + pub enum IBCConnectionErrors { + ErrClientNotFound(ErrClientNotFound), + ErrConnectionAlreadyExists(ErrConnectionAlreadyExists), + ErrInvalidConnectionState(ErrInvalidConnectionState), + ErrInvalidProof(ErrInvalidProof), + ErrNoCounterpartyVersion(ErrNoCounterpartyVersion), + ErrUnsupportedVersion(ErrUnsupportedVersion), + ErrValidateSelfClient(ErrValidateSelfClient), + /// The standard solidity revert string, with selector + /// Error(string) -- 0x08c379a0 + RevertString(::std::string::String), + } + impl ::ethers::core::abi::AbiDecode for IBCConnectionErrors { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + <::std::string::String as ::ethers::core::abi::AbiDecode>::decode(data) + { + return Ok(Self::RevertString(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::ErrClientNotFound(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrConnectionAlreadyExists(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrInvalidConnectionState(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::ErrInvalidProof(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrNoCounterpartyVersion(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrUnsupportedVersion(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrValidateSelfClient(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for IBCConnectionErrors { + fn encode(self) -> ::std::vec::Vec { + match self { + Self::ErrClientNotFound(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ErrConnectionAlreadyExists(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrInvalidConnectionState(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrInvalidProof(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ErrNoCounterpartyVersion(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrUnsupportedVersion(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrValidateSelfClient(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::RevertString(s) => ::ethers::core::abi::AbiEncode::encode(s), + } + } + } + impl ::ethers::contract::ContractRevert for IBCConnectionErrors { + fn valid_selector(selector: [u8; 4]) -> bool { + match selector { + [0x08, 0xc3, 0x79, 0xa0] => true, + _ if selector + == ::selector() => + { + true + } + _ if selector + == ::selector() => + { + true + } + _ if selector + == ::selector() => + { + true + } + _ if selector == ::selector() => { + true + } + _ if selector + == ::selector() => + { + true + } + _ if selector + == ::selector() => + { + true + } + _ if selector + == ::selector() => + { + true + } + _ => false, + } + } + } + impl ::core::fmt::Display for IBCConnectionErrors { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::ErrClientNotFound(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrConnectionAlreadyExists(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrInvalidConnectionState(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrInvalidProof(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrNoCounterpartyVersion(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrUnsupportedVersion(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrValidateSelfClient(element) => ::core::fmt::Display::fmt(element, f), + Self::RevertString(s) => ::core::fmt::Display::fmt(s, f), + } + } + } + impl ::core::convert::From<::std::string::String> for IBCConnectionErrors { + fn from(value: String) -> Self { + Self::RevertString(value) + } + } + impl ::core::convert::From for IBCConnectionErrors { + fn from(value: ErrClientNotFound) -> Self { + Self::ErrClientNotFound(value) + } + } + impl ::core::convert::From for IBCConnectionErrors { + fn from(value: ErrConnectionAlreadyExists) -> Self { + Self::ErrConnectionAlreadyExists(value) + } + } + impl ::core::convert::From for IBCConnectionErrors { + fn from(value: ErrInvalidConnectionState) -> Self { + Self::ErrInvalidConnectionState(value) + } + } + impl ::core::convert::From for IBCConnectionErrors { + fn from(value: ErrInvalidProof) -> Self { + Self::ErrInvalidProof(value) + } + } + impl ::core::convert::From for IBCConnectionErrors { + fn from(value: ErrNoCounterpartyVersion) -> Self { + Self::ErrNoCounterpartyVersion(value) + } + } + impl ::core::convert::From for IBCConnectionErrors { + fn from(value: ErrUnsupportedVersion) -> Self { + Self::ErrUnsupportedVersion(value) + } + } + impl ::core::convert::From for IBCConnectionErrors { + fn from(value: ErrValidateSelfClient) -> Self { + Self::ErrValidateSelfClient(value) + } + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "ConnectionOpenAck", abi = "ConnectionOpenAck(string)")] + pub struct ConnectionOpenAckFilter { + pub connection_id: ::std::string::String, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "ConnectionOpenConfirm", abi = "ConnectionOpenConfirm(string)")] + pub struct ConnectionOpenConfirmFilter { + pub connection_id: ::std::string::String, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "ConnectionOpenInit", abi = "ConnectionOpenInit(string)")] + pub struct ConnectionOpenInitFilter { + pub connection_id: ::std::string::String, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent(name = "ConnectionOpenTry", abi = "ConnectionOpenTry(string)")] + pub struct ConnectionOpenTryFilter { + pub connection_id: ::std::string::String, + } + ///Container type for all of the contract's events + #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] + pub enum IBCConnectionEvents { + ConnectionOpenAckFilter(ConnectionOpenAckFilter), + ConnectionOpenConfirmFilter(ConnectionOpenConfirmFilter), + ConnectionOpenInitFilter(ConnectionOpenInitFilter), + ConnectionOpenTryFilter(ConnectionOpenTryFilter), + } + impl ::ethers::contract::EthLogDecode for IBCConnectionEvents { + fn decode_log( + log: &::ethers::core::abi::RawLog, + ) -> ::core::result::Result { + if let Ok(decoded) = ConnectionOpenAckFilter::decode_log(log) { + return Ok(IBCConnectionEvents::ConnectionOpenAckFilter(decoded)); + } + if let Ok(decoded) = ConnectionOpenConfirmFilter::decode_log(log) { + return Ok(IBCConnectionEvents::ConnectionOpenConfirmFilter(decoded)); + } + if let Ok(decoded) = ConnectionOpenInitFilter::decode_log(log) { + return Ok(IBCConnectionEvents::ConnectionOpenInitFilter(decoded)); + } + if let Ok(decoded) = ConnectionOpenTryFilter::decode_log(log) { + return Ok(IBCConnectionEvents::ConnectionOpenTryFilter(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData) + } + } + impl ::core::fmt::Display for IBCConnectionEvents { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::ConnectionOpenAckFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::ConnectionOpenConfirmFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::ConnectionOpenInitFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::ConnectionOpenTryFilter(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for IBCConnectionEvents { + fn from(value: ConnectionOpenAckFilter) -> Self { + Self::ConnectionOpenAckFilter(value) + } + } + impl ::core::convert::From for IBCConnectionEvents { + fn from(value: ConnectionOpenConfirmFilter) -> Self { + Self::ConnectionOpenConfirmFilter(value) + } + } + impl ::core::convert::From for IBCConnectionEvents { + fn from(value: ConnectionOpenInitFilter) -> Self { + Self::ConnectionOpenInitFilter(value) + } + } + impl ::core::convert::From for IBCConnectionEvents { + fn from(value: ConnectionOpenTryFilter) -> Self { + Self::ConnectionOpenTryFilter(value) + } + } + ///Container type for all input parameters for the `COMMITMENT_PREFIX` function with signature `COMMITMENT_PREFIX()` and selector `0xa9550dac` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "COMMITMENT_PREFIX", abi = "COMMITMENT_PREFIX()")] + pub struct CommitmentPrefixCall; + ///Container type for all input parameters for the `capabilities` function with signature `capabilities(string)` and selector `0x5717bcf5` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "capabilities", abi = "capabilities(string)")] + pub struct CapabilitiesCall(pub ::std::string::String); + ///Container type for all input parameters for the `channels` function with signature `channels(string,string)` and selector `0x5b3de260` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "channels", abi = "channels(string,string)")] + pub struct ChannelsCall(pub ::std::string::String, pub ::std::string::String); + ///Container type for all input parameters for the `clientImpls` function with signature `clientImpls(string)` and selector `0xd1297b8d` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "clientImpls", abi = "clientImpls(string)")] + pub struct ClientImplsCall(pub ::std::string::String); + ///Container type for all input parameters for the `clientRegistry` function with signature `clientRegistry(string)` and selector `0x990491a5` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "clientRegistry", abi = "clientRegistry(string)")] + pub struct ClientRegistryCall(pub ::std::string::String); + ///Container type for all input parameters for the `clientTypes` function with signature `clientTypes(string)` and selector `0xc2380105` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "clientTypes", abi = "clientTypes(string)")] + pub struct ClientTypesCall(pub ::std::string::String); + ///Container type for all input parameters for the `commitments` function with signature `commitments(bytes32)` and selector `0x839df945` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "commitments", abi = "commitments(bytes32)")] + pub struct CommitmentsCall(pub [u8; 32]); + ///Container type for all input parameters for the `connectionOpenAck` function with signature `connectionOpenAck((string,bytes,(string,string[]),string,bytes,bytes,bytes,(uint64,uint64),(uint64,uint64)))` and selector `0xb531861f` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "connectionOpenAck", + abi = "connectionOpenAck((string,bytes,(string,string[]),string,bytes,bytes,bytes,(uint64,uint64),(uint64,uint64)))" + )] + pub struct ConnectionOpenAckCall { + pub msg: MsgConnectionOpenAck, + } + ///Container type for all input parameters for the `connectionOpenConfirm` function with signature `connectionOpenConfirm((string,bytes,(uint64,uint64)))` and selector `0x6a728f2c` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "connectionOpenConfirm", + abi = "connectionOpenConfirm((string,bytes,(uint64,uint64)))" + )] + pub struct ConnectionOpenConfirmCall { + pub msg: MsgConnectionOpenConfirm, + } + ///Container type for all input parameters for the `connectionOpenInit` function with signature `connectionOpenInit((string,(string,string,(bytes)),uint64))` and selector `0x01c6400f` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "connectionOpenInit", + abi = "connectionOpenInit((string,(string,string,(bytes)),uint64))" + )] + pub struct ConnectionOpenInitCall { + pub msg: MsgConnectionOpenInit, + } + ///Container type for all input parameters for the `connectionOpenTry` function with signature `connectionOpenTry(((string,string,(bytes)),uint64,string,bytes,(string,string[])[],bytes,bytes,bytes,(uint64,uint64),(uint64,uint64)))` and selector `0x04f68e5c` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "connectionOpenTry", + abi = "connectionOpenTry(((string,string,(bytes)),uint64,string,bytes,(string,string[])[],bytes,bytes,bytes,(uint64,uint64),(uint64,uint64)))" + )] + pub struct ConnectionOpenTryCall { + pub msg: MsgConnectionOpenTry, + } + ///Container type for all input parameters for the `connections` function with signature `connections(string)` and selector `0x31973f00` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "connections", abi = "connections(string)")] + pub struct ConnectionsCall(pub ::std::string::String); + ///Container type for all input parameters for the `getClient` function with signature `getClient(string)` and selector `0x7eb78932` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "getClient", abi = "getClient(string)")] + pub struct GetClientCall { + pub client_id: ::std::string::String, + } + ///Container type for all input parameters for the `nextChannelSequence` function with signature `nextChannelSequence()` and selector `0x7926b8a9` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextChannelSequence", abi = "nextChannelSequence()")] + pub struct NextChannelSequenceCall; + ///Container type for all input parameters for the `nextClientSequence` function with signature `nextClientSequence()` and selector `0xe1b17b43` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextClientSequence", abi = "nextClientSequence()")] + pub struct NextClientSequenceCall; + ///Container type for all input parameters for the `nextConnectionSequence` function with signature `nextConnectionSequence()` and selector `0xa049e677` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextConnectionSequence", abi = "nextConnectionSequence()")] + pub struct NextConnectionSequenceCall; + ///Container type for all input parameters for the `nextSequenceAcks` function with signature `nextSequenceAcks(string,string)` and selector `0x1390d28d` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextSequenceAcks", abi = "nextSequenceAcks(string,string)")] + pub struct NextSequenceAcksCall(pub ::std::string::String, pub ::std::string::String); + ///Container type for all input parameters for the `nextSequenceRecvs` function with signature `nextSequenceRecvs(string,string)` and selector `0xc930b1b0` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextSequenceRecvs", abi = "nextSequenceRecvs(string,string)")] + pub struct NextSequenceRecvsCall(pub ::std::string::String, pub ::std::string::String); + ///Container type for all input parameters for the `nextSequenceSends` function with signature `nextSequenceSends(string,string)` and selector `0x821cb5d0` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextSequenceSends", abi = "nextSequenceSends(string,string)")] + pub struct NextSequenceSendsCall(pub ::std::string::String, pub ::std::string::String); + ///Container type for all input parameters for the `packetReceipts` function with signature `packetReceipts(string,string,uint64)` and selector `0x26078437` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "packetReceipts", abi = "packetReceipts(string,string,uint64)")] + pub struct PacketReceiptsCall( + pub ::std::string::String, + pub ::std::string::String, + pub u64, + ); + ///Container type for all of the contract's call + #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] + pub enum IBCConnectionCalls { + CommitmentPrefix(CommitmentPrefixCall), + Capabilities(CapabilitiesCall), + Channels(ChannelsCall), + ClientImpls(ClientImplsCall), + ClientRegistry(ClientRegistryCall), + ClientTypes(ClientTypesCall), + Commitments(CommitmentsCall), + ConnectionOpenAck(ConnectionOpenAckCall), + ConnectionOpenConfirm(ConnectionOpenConfirmCall), + ConnectionOpenInit(ConnectionOpenInitCall), + ConnectionOpenTry(ConnectionOpenTryCall), + Connections(ConnectionsCall), + GetClient(GetClientCall), + NextChannelSequence(NextChannelSequenceCall), + NextClientSequence(NextClientSequenceCall), + NextConnectionSequence(NextConnectionSequenceCall), + NextSequenceAcks(NextSequenceAcksCall), + NextSequenceRecvs(NextSequenceRecvsCall), + NextSequenceSends(NextSequenceSendsCall), + PacketReceipts(PacketReceiptsCall), + } + impl ::ethers::core::abi::AbiDecode for IBCConnectionCalls { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::CommitmentPrefix(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::Capabilities(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Channels(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::ClientImpls(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ClientRegistry(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::ClientTypes(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Commitments(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ConnectionOpenAck(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ConnectionOpenConfirm(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ConnectionOpenInit(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ConnectionOpenTry(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Connections(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::GetClient(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextChannelSequence(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextClientSequence(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextConnectionSequence(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextSequenceAcks(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextSequenceRecvs(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextSequenceSends(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::PacketReceipts(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for IBCConnectionCalls { + fn encode(self) -> Vec { + match self { + Self::CommitmentPrefix(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Capabilities(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Channels(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ClientImpls(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ClientRegistry(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ClientTypes(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Commitments(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ConnectionOpenAck(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ConnectionOpenConfirm(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ConnectionOpenInit(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ConnectionOpenTry(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Connections(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::GetClient(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::NextChannelSequence(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::NextClientSequence(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::NextConnectionSequence(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::NextSequenceAcks(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::NextSequenceRecvs(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::NextSequenceSends(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::PacketReceipts(element) => ::ethers::core::abi::AbiEncode::encode(element), + } + } + } + impl ::core::fmt::Display for IBCConnectionCalls { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::CommitmentPrefix(element) => ::core::fmt::Display::fmt(element, f), + Self::Capabilities(element) => ::core::fmt::Display::fmt(element, f), + Self::Channels(element) => ::core::fmt::Display::fmt(element, f), + Self::ClientImpls(element) => ::core::fmt::Display::fmt(element, f), + Self::ClientRegistry(element) => ::core::fmt::Display::fmt(element, f), + Self::ClientTypes(element) => ::core::fmt::Display::fmt(element, f), + Self::Commitments(element) => ::core::fmt::Display::fmt(element, f), + Self::ConnectionOpenAck(element) => ::core::fmt::Display::fmt(element, f), + Self::ConnectionOpenConfirm(element) => ::core::fmt::Display::fmt(element, f), + Self::ConnectionOpenInit(element) => ::core::fmt::Display::fmt(element, f), + Self::ConnectionOpenTry(element) => ::core::fmt::Display::fmt(element, f), + Self::Connections(element) => ::core::fmt::Display::fmt(element, f), + Self::GetClient(element) => ::core::fmt::Display::fmt(element, f), + Self::NextChannelSequence(element) => ::core::fmt::Display::fmt(element, f), + Self::NextClientSequence(element) => ::core::fmt::Display::fmt(element, f), + Self::NextConnectionSequence(element) => ::core::fmt::Display::fmt(element, f), + Self::NextSequenceAcks(element) => ::core::fmt::Display::fmt(element, f), + Self::NextSequenceRecvs(element) => ::core::fmt::Display::fmt(element, f), + Self::NextSequenceSends(element) => ::core::fmt::Display::fmt(element, f), + Self::PacketReceipts(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for IBCConnectionCalls { + fn from(value: CommitmentPrefixCall) -> Self { + Self::CommitmentPrefix(value) + } + } + impl ::core::convert::From for IBCConnectionCalls { + fn from(value: CapabilitiesCall) -> Self { + Self::Capabilities(value) + } + } + impl ::core::convert::From for IBCConnectionCalls { + fn from(value: ChannelsCall) -> Self { + Self::Channels(value) + } + } + impl ::core::convert::From for IBCConnectionCalls { + fn from(value: ClientImplsCall) -> Self { + Self::ClientImpls(value) + } + } + impl ::core::convert::From for IBCConnectionCalls { + fn from(value: ClientRegistryCall) -> Self { + Self::ClientRegistry(value) + } + } + impl ::core::convert::From for IBCConnectionCalls { + fn from(value: ClientTypesCall) -> Self { + Self::ClientTypes(value) + } + } + impl ::core::convert::From for IBCConnectionCalls { + fn from(value: CommitmentsCall) -> Self { + Self::Commitments(value) + } + } + impl ::core::convert::From for IBCConnectionCalls { + fn from(value: ConnectionOpenAckCall) -> Self { + Self::ConnectionOpenAck(value) + } + } + impl ::core::convert::From for IBCConnectionCalls { + fn from(value: ConnectionOpenConfirmCall) -> Self { + Self::ConnectionOpenConfirm(value) + } + } + impl ::core::convert::From for IBCConnectionCalls { + fn from(value: ConnectionOpenInitCall) -> Self { + Self::ConnectionOpenInit(value) + } + } + impl ::core::convert::From for IBCConnectionCalls { + fn from(value: ConnectionOpenTryCall) -> Self { + Self::ConnectionOpenTry(value) + } + } + impl ::core::convert::From for IBCConnectionCalls { + fn from(value: ConnectionsCall) -> Self { + Self::Connections(value) + } + } + impl ::core::convert::From for IBCConnectionCalls { + fn from(value: GetClientCall) -> Self { + Self::GetClient(value) + } + } + impl ::core::convert::From for IBCConnectionCalls { + fn from(value: NextChannelSequenceCall) -> Self { + Self::NextChannelSequence(value) + } + } + impl ::core::convert::From for IBCConnectionCalls { + fn from(value: NextClientSequenceCall) -> Self { + Self::NextClientSequence(value) + } + } + impl ::core::convert::From for IBCConnectionCalls { + fn from(value: NextConnectionSequenceCall) -> Self { + Self::NextConnectionSequence(value) + } + } + impl ::core::convert::From for IBCConnectionCalls { + fn from(value: NextSequenceAcksCall) -> Self { + Self::NextSequenceAcks(value) + } + } + impl ::core::convert::From for IBCConnectionCalls { + fn from(value: NextSequenceRecvsCall) -> Self { + Self::NextSequenceRecvs(value) + } + } + impl ::core::convert::From for IBCConnectionCalls { + fn from(value: NextSequenceSendsCall) -> Self { + Self::NextSequenceSends(value) + } + } + impl ::core::convert::From for IBCConnectionCalls { + fn from(value: PacketReceiptsCall) -> Self { + Self::PacketReceipts(value) + } + } + ///Container type for all return fields from the `COMMITMENT_PREFIX` function with signature `COMMITMENT_PREFIX()` and selector `0xa9550dac` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct CommitmentPrefixReturn(pub ::std::string::String); + ///Container type for all return fields from the `capabilities` function with signature `capabilities(string)` and selector `0x5717bcf5` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct CapabilitiesReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `channels` function with signature `channels(string,string)` and selector `0x5b3de260` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ChannelsReturn { + pub state: u8, + pub ordering: u8, + pub counterparty: IbcCoreChannelV1ChannelData, + pub version: ::std::string::String, + } + ///Container type for all return fields from the `clientImpls` function with signature `clientImpls(string)` and selector `0xd1297b8d` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ClientImplsReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `clientRegistry` function with signature `clientRegistry(string)` and selector `0x990491a5` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ClientRegistryReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `clientTypes` function with signature `clientTypes(string)` and selector `0xc2380105` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ClientTypesReturn(pub ::std::string::String); + ///Container type for all return fields from the `commitments` function with signature `commitments(bytes32)` and selector `0x839df945` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct CommitmentsReturn(pub [u8; 32]); + ///Container type for all return fields from the `connectionOpenInit` function with signature `connectionOpenInit((string,(string,string,(bytes)),uint64))` and selector `0x01c6400f` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ConnectionOpenInitReturn(pub ::std::string::String); + ///Container type for all return fields from the `connectionOpenTry` function with signature `connectionOpenTry(((string,string,(bytes)),uint64,string,bytes,(string,string[])[],bytes,bytes,bytes,(uint64,uint64),(uint64,uint64)))` and selector `0x04f68e5c` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ConnectionOpenTryReturn(pub ::std::string::String); + ///Container type for all return fields from the `connections` function with signature `connections(string)` and selector `0x31973f00` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ConnectionsReturn { + pub client_id: ::std::string::String, + pub state: u8, + pub counterparty: IbcCoreConnectionV1CounterpartyData, + pub delay_period: u64, + } + ///Container type for all return fields from the `getClient` function with signature `getClient(string)` and selector `0x7eb78932` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct GetClientReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `nextChannelSequence` function with signature `nextChannelSequence()` and selector `0x7926b8a9` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextChannelSequenceReturn(pub u64); + ///Container type for all return fields from the `nextClientSequence` function with signature `nextClientSequence()` and selector `0xe1b17b43` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextClientSequenceReturn(pub u64); + ///Container type for all return fields from the `nextConnectionSequence` function with signature `nextConnectionSequence()` and selector `0xa049e677` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextConnectionSequenceReturn(pub u64); + ///Container type for all return fields from the `nextSequenceAcks` function with signature `nextSequenceAcks(string,string)` and selector `0x1390d28d` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextSequenceAcksReturn(pub u64); + ///Container type for all return fields from the `nextSequenceRecvs` function with signature `nextSequenceRecvs(string,string)` and selector `0xc930b1b0` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextSequenceRecvsReturn(pub u64); + ///Container type for all return fields from the `nextSequenceSends` function with signature `nextSequenceSends(string,string)` and selector `0x821cb5d0` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextSequenceSendsReturn(pub u64); + ///Container type for all return fields from the `packetReceipts` function with signature `packetReceipts(string,string,uint64)` and selector `0x26078437` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct PacketReceiptsReturn(pub u8); +} diff --git a/generated/contracts/src/ibc_handler.rs b/generated/contracts/src/ibc_handler.rs index 6d30f4f1f0..e04dd917e5 100644 --- a/generated/contracts/src/ibc_handler.rs +++ b/generated/contracts/src/ibc_handler.rs @@ -18,6 +18,26 @@ pub mod ibc_handler { ::ethers::core::abi::ethabi::Contract { constructor: ::core::option::Option::None, functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("COMMITMENT_PREFIX"), + ::std::vec![ + ::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("COMMITMENT_PREFIX"), + inputs: ::std::vec![], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + }, + ], + ), ( ::std::borrow::ToOwned::to_owned("acknowledgePacket"), ::std::vec![ @@ -103,18 +123,9 @@ pub mod ibc_handler { inputs: ::std::vec![ ::ethers::core::abi::ethabi::Param { name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::Bytes, - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("bytes"), - ), - }, - ::ethers::core::abi::ethabi::Param { - name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::Uint( - 256usize, - ), + kind: ::ethers::core::abi::ethabi::ParamType::String, internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint256"), + ::std::borrow::ToOwned::to_owned("string"), ), }, ], @@ -158,9 +169,9 @@ pub mod ibc_handler { outputs: ::std::vec![ ::ethers::core::abi::ethabi::Param { name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + kind: ::ethers::core::abi::ethabi::ParamType::String, internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("bytes"), + ::std::borrow::ToOwned::to_owned("string"), ), }, ], @@ -342,7 +353,7 @@ pub mod ibc_handler { ], outputs: ::std::vec![ ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("channelId"), + name: ::std::string::String::new(), kind: ::ethers::core::abi::ethabi::ParamType::String, internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned("string"), @@ -402,7 +413,7 @@ pub mod ibc_handler { ], outputs: ::std::vec![ ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("channelId"), + name: ::std::string::String::new(), kind: ::ethers::core::abi::ethabi::ParamType::String, internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned("string"), @@ -717,7 +728,7 @@ pub mod ibc_handler { ], outputs: ::std::vec![ ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("connectionId"), + name: ::std::string::String::new(), kind: ::ethers::core::abi::ethabi::ParamType::String, internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned("string"), @@ -791,7 +802,7 @@ pub mod ibc_handler { ], outputs: ::std::vec![ ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("connectionId"), + name: ::std::string::String::new(), kind: ::ethers::core::abi::ethabi::ParamType::String, internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned("string"), @@ -888,7 +899,7 @@ pub mod ibc_handler { ], outputs: ::std::vec![ ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("clientId"), + name: ::std::string::String::new(), kind: ::ethers::core::abi::ethabi::ParamType::String, internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned("string"), @@ -900,28 +911,6 @@ pub mod ibc_handler { }, ], ), - ( - ::std::borrow::ToOwned::to_owned("expectedTimePerBlock"), - ::std::vec![ - ::ethers::core::abi::ethabi::Function { - name: ::std::borrow::ToOwned::to_owned( - "expectedTimePerBlock", - ), - inputs: ::std::vec![], - outputs: ::std::vec![ - ::ethers::core::abi::ethabi::Param { - name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint64"), - ), - }, - ], - constant: ::core::option::Option::None, - state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, - }, - ], - ), ( ::std::borrow::ToOwned::to_owned("getChannel"), ::std::vec![ @@ -1163,28 +1152,6 @@ pub mod ibc_handler { }, ], ), - ( - ::std::borrow::ToOwned::to_owned("getExpectedTimePerBlock"), - ::std::vec![ - ::ethers::core::abi::ethabi::Function { - name: ::std::borrow::ToOwned::to_owned( - "getExpectedTimePerBlock", - ), - inputs: ::std::vec![], - outputs: ::std::vec![ - ::ethers::core::abi::ethabi::Param { - name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint64"), - ), - }, - ], - constant: ::core::option::Option::None, - state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, - }, - ], - ), ( ::std::borrow::ToOwned::to_owned( "getHashedPacketAcknowledgementCommitment", @@ -1600,9 +1567,9 @@ pub mod ibc_handler { outputs: ::std::vec![ ::ethers::core::abi::ethabi::Param { name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + kind: ::ethers::core::abi::ethabi::ParamType::String, internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("bytes"), + ::std::borrow::ToOwned::to_owned("string"), ), }, ], @@ -1736,31 +1703,15 @@ pub mod ibc_handler { ), }, ], - outputs: ::std::vec![], - constant: ::core::option::Option::None, - state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("setExpectedTimePerBlock"), - ::std::vec![ - ::ethers::core::abi::ethabi::Function { - name: ::std::borrow::ToOwned::to_owned( - "setExpectedTimePerBlock", - ), - inputs: ::std::vec![ + outputs: ::std::vec![ ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned( - "expectedTimePerBlock_", - ), + name: ::std::string::String::new(), kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned("uint64"), ), }, ], - outputs: ::std::vec![], constant: ::core::option::Option::None, state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, }, @@ -1889,432 +1840,29 @@ pub mod ibc_handler { ], ), ]), - events: ::core::convert::From::from([ - ( - ::std::borrow::ToOwned::to_owned("AcknowledgePacket"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("AcknowledgePacket"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("packet"), - kind: ::ethers::core::abi::ethabi::ParamType::Tuple( - ::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ::ethers::core::abi::ethabi::ParamType::String, - ::ethers::core::abi::ethabi::ParamType::String, - ::ethers::core::abi::ethabi::ParamType::String, - ::ethers::core::abi::ethabi::ParamType::String, - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Tuple( - ::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ], - ), - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ], - ), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("acknowledgement"), - kind: ::ethers::core::abi::ethabi::ParamType::Bytes, - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("ChannelCloseConfirm"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned( - "ChannelCloseConfirm", - ), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("channelId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("portId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("ChannelCloseInit"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("ChannelCloseInit"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("channelId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("portId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("ChannelOpenAck"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("ChannelOpenAck"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("channelId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("portId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("ChannelOpenConfirm"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("ChannelOpenConfirm"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("channelId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("portId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("ChannelOpenInit"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("ChannelOpenInit"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("channelId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("connectionId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("portId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned( - "counterpartyPortId", - ), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("ChannelOpenTry"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("ChannelOpenTry"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("channelId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("connectionId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("portId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned( - "counterpartyPortId", - ), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("version"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("ConnectionOpenAck"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("ConnectionOpenAck"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("connectionId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), + events: ::std::collections::BTreeMap::new(), + errors: ::core::convert::From::from([ ( - ::std::borrow::ToOwned::to_owned("ConnectionOpenConfirm"), + ::std::borrow::ToOwned::to_owned("ErrCapabilityAlreadyClaimed"), ::std::vec![ - ::ethers::core::abi::ethabi::Event { + ::ethers::core::abi::ethabi::AbiError { name: ::std::borrow::ToOwned::to_owned( - "ConnectionOpenConfirm", + "ErrCapabilityAlreadyClaimed", ), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("connectionId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ], - anonymous: false, + inputs: ::std::vec![], }, ], ), ( - ::std::borrow::ToOwned::to_owned("ConnectionOpenInit"), + ::std::borrow::ToOwned::to_owned("ErrClientNotFound"), ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("ConnectionOpenInit"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("connectionId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("ConnectionOpenTry"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("ConnectionOpenTry"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("connectionId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("GeneratedClientIdentifier"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned( - "GeneratedClientIdentifier", - ), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("RecvPacket"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("RecvPacket"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("packet"), - kind: ::ethers::core::abi::ethabi::ParamType::Tuple( - ::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ::ethers::core::abi::ethabi::ParamType::String, - ::ethers::core::abi::ethabi::ParamType::String, - ::ethers::core::abi::ethabi::ParamType::String, - ::ethers::core::abi::ethabi::ParamType::String, - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Tuple( - ::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ], - ), - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ], - ), - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("SendPacket"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("SendPacket"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("sequence"), - kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("sourcePort"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("sourceChannel"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("timeoutHeight"), - kind: ::ethers::core::abi::ethabi::ParamType::Tuple( - ::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ], - ), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("timeoutTimestamp"), - kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("data"), - kind: ::ethers::core::abi::ethabi::ParamType::Bytes, - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("TimeoutPacket"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("TimeoutPacket"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("packet"), - kind: ::ethers::core::abi::ethabi::ParamType::Tuple( - ::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ::ethers::core::abi::ethabi::ParamType::String, - ::ethers::core::abi::ethabi::ParamType::String, - ::ethers::core::abi::ethabi::ParamType::String, - ::ethers::core::abi::ethabi::ParamType::String, - ::ethers::core::abi::ethabi::ParamType::Bytes, - ::ethers::core::abi::ethabi::ParamType::Tuple( - ::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ], - ), - ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - ], - ), - indexed: false, - }, - ], - anonymous: false, - }, - ], - ), - ( - ::std::borrow::ToOwned::to_owned("WriteAcknowledgement"), - ::std::vec![ - ::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned( - "WriteAcknowledgement", - ), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("destinationPortId"), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned( - "destinationChannel", - ), - kind: ::ethers::core::abi::ethabi::ParamType::String, - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("sequence"), - kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), - indexed: false, - }, - ::ethers::core::abi::ethabi::EventParam { - name: ::std::borrow::ToOwned::to_owned("acknowledgement"), - kind: ::ethers::core::abi::ethabi::ParamType::Bytes, - indexed: false, - }, - ], - anonymous: false, + ::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrClientNotFound"), + inputs: ::std::vec![], }, ], ), ]), - errors: ::std::collections::BTreeMap::new(), receive: false, fallback: false, } @@ -2366,6 +1914,14 @@ pub mod ibc_handler { client, )) } + ///Calls the contract's `COMMITMENT_PREFIX` (0xa9550dac) function + pub fn commitment_prefix( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([169, 85, 13, 172], ()) + .expect("method not found (this should never happen)") + } ///Calls the contract's `acknowledgePacket` (0x59f37976) function pub fn acknowledge_packet( &self, @@ -2385,14 +1941,13 @@ pub mod ibc_handler { .method_hash([17, 126, 136, 106], (port_id, module_address)) .expect("method not found (this should never happen)") } - ///Calls the contract's `capabilities` (0xdd5b9f4d) function + ///Calls the contract's `capabilities` (0x5717bcf5) function pub fn capabilities( &self, - p0: ::ethers::core::types::Bytes, - p1: ::ethers::core::types::U256, + p0: ::std::string::String, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([221, 91, 159, 77], (p0, p1)) + .method_hash([87, 23, 188, 245], p0) .expect("method not found (this should never happen)") } ///Calls the contract's `channelCapabilityPath` (0x3bc3339f) function @@ -2400,7 +1955,7 @@ pub mod ibc_handler { &self, port_id: ::std::string::String, channel_id: ::std::string::String, - ) -> ::ethers::contract::builders::ContractCall { + ) -> ::ethers::contract::builders::ContractCall { self.0 .method_hash([59, 195, 51, 159], (port_id, channel_id)) .expect("method not found (this should never happen)") @@ -2575,14 +2130,6 @@ pub mod ibc_handler { .method_hash([213, 162, 68, 129], (msg,)) .expect("method not found (this should never happen)") } - ///Calls the contract's `expectedTimePerBlock` (0xd31407fe) function - pub fn expected_time_per_block( - &self, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([211, 20, 7, 254], ()) - .expect("method not found (this should never happen)") - } ///Calls the contract's `getChannel` (0x3000217a) function pub fn get_channel( &self, @@ -2636,14 +2183,6 @@ pub mod ibc_handler { .method_hash([108, 244, 75, 244], (client_id, height)) .expect("method not found (this should never happen)") } - ///Calls the contract's `getExpectedTimePerBlock` (0xec75d829) function - pub fn get_expected_time_per_block( - &self, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([236, 117, 216, 41], ()) - .expect("method not found (this should never happen)") - } ///Calls the contract's `getHashedPacketAcknowledgementCommitment` (0x5be164ee) function pub fn get_hashed_packet_acknowledgement_commitment( &self, @@ -2752,7 +2291,7 @@ pub mod ibc_handler { pub fn port_capability_path( &self, port_id: ::std::string::String, - ) -> ::ethers::contract::builders::ContractCall { + ) -> ::ethers::contract::builders::ContractCall { self.0 .method_hash([37, 112, 218, 224], port_id) .expect("method not found (this should never happen)") @@ -2783,430 +2322,70 @@ pub mod ibc_handler { source_channel: ::std::string::String, timeout_height: IbcCoreClientV1HeightData, timeout_timestamp: u64, - data: ::ethers::core::types::Bytes, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash( - [174, 76, 210, 1], - ( - source_port, - source_channel, - timeout_height, - timeout_timestamp, - data, - ), - ) - .expect("method not found (this should never happen)") - } - ///Calls the contract's `setExpectedTimePerBlock` (0x27184c13) function - pub fn set_expected_time_per_block( - &self, - expected_time_per_block: u64, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([39, 24, 76, 19], expected_time_per_block) - .expect("method not found (this should never happen)") - } - ///Calls the contract's `timeoutPacket` (0xaa18c8b1) function - pub fn timeout_packet( - &self, - msg: MsgPacketTimeout, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([170, 24, 200, 177], (msg,)) - .expect("method not found (this should never happen)") - } - ///Calls the contract's `updateClient` (0xda6cea55) function - pub fn update_client( - &self, - msg: MsgUpdateClient, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([218, 108, 234, 85], (msg,)) - .expect("method not found (this should never happen)") - } - ///Calls the contract's `writeAcknowledgement` (0xb56e79de) function - pub fn write_acknowledgement( - &self, - destination_port_id: ::std::string::String, - destination_channel: ::std::string::String, - sequence: u64, - acknowledgement: ::ethers::core::types::Bytes, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash( - [181, 110, 121, 222], - ( - destination_port_id, - destination_channel, - sequence, - acknowledgement, - ), - ) - .expect("method not found (this should never happen)") - } - ///Gets the contract's `AcknowledgePacket` event - pub fn acknowledge_packet_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, AcknowledgePacketFilter> - { - self.0.event() - } - ///Gets the contract's `ChannelCloseConfirm` event - pub fn channel_close_confirm_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ChannelCloseConfirmFilter> - { - self.0.event() - } - ///Gets the contract's `ChannelCloseInit` event - pub fn channel_close_init_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ChannelCloseInitFilter> - { - self.0.event() - } - ///Gets the contract's `ChannelOpenAck` event - pub fn channel_open_ack_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ChannelOpenAckFilter> - { - self.0.event() - } - ///Gets the contract's `ChannelOpenConfirm` event - pub fn channel_open_confirm_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ChannelOpenConfirmFilter> - { - self.0.event() - } - ///Gets the contract's `ChannelOpenInit` event - pub fn channel_open_init_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ChannelOpenInitFilter> - { - self.0.event() - } - ///Gets the contract's `ChannelOpenTry` event - pub fn channel_open_try_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ChannelOpenTryFilter> - { - self.0.event() - } - ///Gets the contract's `ConnectionOpenAck` event - pub fn connection_open_ack_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ConnectionOpenAckFilter> - { - self.0.event() - } - ///Gets the contract's `ConnectionOpenConfirm` event - pub fn connection_open_confirm_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ConnectionOpenConfirmFilter> - { - self.0.event() - } - ///Gets the contract's `ConnectionOpenInit` event - pub fn connection_open_init_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ConnectionOpenInitFilter> - { - self.0.event() - } - ///Gets the contract's `ConnectionOpenTry` event - pub fn connection_open_try_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, ConnectionOpenTryFilter> - { - self.0.event() - } - ///Gets the contract's `GeneratedClientIdentifier` event - pub fn generated_client_identifier_filter( - &self, - ) -> ::ethers::contract::builders::Event< - ::std::sync::Arc, - M, - GeneratedClientIdentifierFilter, - > { - self.0.event() - } - ///Gets the contract's `RecvPacket` event - pub fn recv_packet_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, RecvPacketFilter> { - self.0.event() - } - ///Gets the contract's `SendPacket` event - pub fn send_packet_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, SendPacketFilter> { - self.0.event() - } - ///Gets the contract's `TimeoutPacket` event - pub fn timeout_packet_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, TimeoutPacketFilter> - { - self.0.event() - } - ///Gets the contract's `WriteAcknowledgement` event - pub fn write_acknowledgement_filter( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, WriteAcknowledgementFilter> - { - self.0.event() - } - /// Returns an `Event` builder for all the events of this contract. - pub fn events( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, IBCHandlerEvents> { - self.0 - .event_with_filter(::core::default::Default::default()) - } - } - #[cfg(feature = "providers")] - impl From<::ethers::contract::Contract> for IBCHandler { - fn from(contract: ::ethers::contract::Contract) -> Self { - Self::new(contract.address(), contract.client()) - } - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent( - name = "AcknowledgePacket", - abi = "AcknowledgePacket((uint64,string,string,string,string,bytes,(uint64,uint64),uint64),bytes)" - )] - pub struct AcknowledgePacketFilter { - pub packet: IbcCoreChannelV1PacketData, - pub acknowledgement: ::ethers::core::types::Bytes, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent( - name = "ChannelCloseConfirm", - abi = "ChannelCloseConfirm(string,string)" - )] - pub struct ChannelCloseConfirmFilter { - pub channel_id: ::std::string::String, - pub port_id: ::std::string::String, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent(name = "ChannelCloseInit", abi = "ChannelCloseInit(string,string)")] - pub struct ChannelCloseInitFilter { - pub channel_id: ::std::string::String, - pub port_id: ::std::string::String, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent(name = "ChannelOpenAck", abi = "ChannelOpenAck(string,string)")] - pub struct ChannelOpenAckFilter { - pub channel_id: ::std::string::String, - pub port_id: ::std::string::String, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent(name = "ChannelOpenConfirm", abi = "ChannelOpenConfirm(string,string)")] - pub struct ChannelOpenConfirmFilter { - pub channel_id: ::std::string::String, - pub port_id: ::std::string::String, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent( - name = "ChannelOpenInit", - abi = "ChannelOpenInit(string,string,string,string)" - )] - pub struct ChannelOpenInitFilter { - pub channel_id: ::std::string::String, - pub connection_id: ::std::string::String, - pub port_id: ::std::string::String, - pub counterparty_port_id: ::std::string::String, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent( - name = "ChannelOpenTry", - abi = "ChannelOpenTry(string,string,string,string,string)" - )] - pub struct ChannelOpenTryFilter { - pub channel_id: ::std::string::String, - pub connection_id: ::std::string::String, - pub port_id: ::std::string::String, - pub counterparty_port_id: ::std::string::String, - pub version: ::std::string::String, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent(name = "ConnectionOpenAck", abi = "ConnectionOpenAck(string)")] - pub struct ConnectionOpenAckFilter { - pub connection_id: ::std::string::String, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent(name = "ConnectionOpenConfirm", abi = "ConnectionOpenConfirm(string)")] - pub struct ConnectionOpenConfirmFilter { - pub connection_id: ::std::string::String, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent(name = "ConnectionOpenInit", abi = "ConnectionOpenInit(string)")] - pub struct ConnectionOpenInitFilter { - pub connection_id: ::std::string::String, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent(name = "ConnectionOpenTry", abi = "ConnectionOpenTry(string)")] - pub struct ConnectionOpenTryFilter { - pub connection_id: ::std::string::String, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent( - name = "GeneratedClientIdentifier", - abi = "GeneratedClientIdentifier(string)" - )] - pub struct GeneratedClientIdentifierFilter(pub ::std::string::String); - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent( - name = "RecvPacket", - abi = "RecvPacket((uint64,string,string,string,string,bytes,(uint64,uint64),uint64))" - )] - pub struct RecvPacketFilter { - pub packet: IbcCoreChannelV1PacketData, + data: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash( + [174, 76, 210, 1], + ( + source_port, + source_channel, + timeout_height, + timeout_timestamp, + data, + ), + ) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `timeoutPacket` (0xaa18c8b1) function + pub fn timeout_packet( + &self, + msg: MsgPacketTimeout, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([170, 24, 200, 177], (msg,)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `updateClient` (0xda6cea55) function + pub fn update_client( + &self, + msg: MsgUpdateClient, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([218, 108, 234, 85], (msg,)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `writeAcknowledgement` (0xb56e79de) function + pub fn write_acknowledgement( + &self, + destination_port_id: ::std::string::String, + destination_channel: ::std::string::String, + sequence: u64, + acknowledgement: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash( + [181, 110, 121, 222], + ( + destination_port_id, + destination_channel, + sequence, + acknowledgement, + ), + ) + .expect("method not found (this should never happen)") + } } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethevent( - name = "SendPacket", - abi = "SendPacket(uint64,string,string,(uint64,uint64),uint64,bytes)" - )] - pub struct SendPacketFilter { - pub sequence: u64, - pub source_port: ::std::string::String, - pub source_channel: ::std::string::String, - pub timeout_height: IbcCoreClientV1HeightData, - pub timeout_timestamp: u64, - pub data: ::ethers::core::types::Bytes, + #[cfg(feature = "providers")] + impl From<::ethers::contract::Contract> for IBCHandler { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } } + ///Custom Error type `ErrCapabilityAlreadyClaimed` with signature `ErrCapabilityAlreadyClaimed()` and selector `0x463eec90` #[derive( Clone, - ::ethers::contract::EthEvent, + ::ethers::contract::EthError, ::ethers::contract::EthDisplay, Default, Debug, @@ -3214,16 +2393,15 @@ pub mod ibc_handler { Eq, Hash, )] - #[ethevent( - name = "TimeoutPacket", - abi = "TimeoutPacket((uint64,string,string,string,string,bytes,(uint64,uint64),uint64))" + #[etherror( + name = "ErrCapabilityAlreadyClaimed", + abi = "ErrCapabilityAlreadyClaimed()" )] - pub struct TimeoutPacketFilter { - pub packet: IbcCoreChannelV1PacketData, - } + pub struct ErrCapabilityAlreadyClaimed; + ///Custom Error type `ErrClientNotFound` with signature `ErrClientNotFound()` and selector `0xb6c71f7d` #[derive( Clone, - ::ethers::contract::EthEvent, + ::ethers::contract::EthError, ::ethers::contract::EthDisplay, Default, Debug, @@ -3231,195 +2409,106 @@ pub mod ibc_handler { Eq, Hash, )] - #[ethevent( - name = "WriteAcknowledgement", - abi = "WriteAcknowledgement(string,string,uint64,bytes)" - )] - pub struct WriteAcknowledgementFilter { - pub destination_port_id: ::std::string::String, - pub destination_channel: ::std::string::String, - pub sequence: u64, - pub acknowledgement: ::ethers::core::types::Bytes, - } - ///Container type for all of the contract's events + #[etherror(name = "ErrClientNotFound", abi = "ErrClientNotFound()")] + pub struct ErrClientNotFound; + ///Container type for all of the contract's custom errors #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] - pub enum IBCHandlerEvents { - AcknowledgePacketFilter(AcknowledgePacketFilter), - ChannelCloseConfirmFilter(ChannelCloseConfirmFilter), - ChannelCloseInitFilter(ChannelCloseInitFilter), - ChannelOpenAckFilter(ChannelOpenAckFilter), - ChannelOpenConfirmFilter(ChannelOpenConfirmFilter), - ChannelOpenInitFilter(ChannelOpenInitFilter), - ChannelOpenTryFilter(ChannelOpenTryFilter), - ConnectionOpenAckFilter(ConnectionOpenAckFilter), - ConnectionOpenConfirmFilter(ConnectionOpenConfirmFilter), - ConnectionOpenInitFilter(ConnectionOpenInitFilter), - ConnectionOpenTryFilter(ConnectionOpenTryFilter), - GeneratedClientIdentifierFilter(GeneratedClientIdentifierFilter), - RecvPacketFilter(RecvPacketFilter), - SendPacketFilter(SendPacketFilter), - TimeoutPacketFilter(TimeoutPacketFilter), - WriteAcknowledgementFilter(WriteAcknowledgementFilter), - } - impl ::ethers::contract::EthLogDecode for IBCHandlerEvents { - fn decode_log( - log: &::ethers::core::abi::RawLog, - ) -> ::core::result::Result { - if let Ok(decoded) = AcknowledgePacketFilter::decode_log(log) { - return Ok(IBCHandlerEvents::AcknowledgePacketFilter(decoded)); - } - if let Ok(decoded) = ChannelCloseConfirmFilter::decode_log(log) { - return Ok(IBCHandlerEvents::ChannelCloseConfirmFilter(decoded)); - } - if let Ok(decoded) = ChannelCloseInitFilter::decode_log(log) { - return Ok(IBCHandlerEvents::ChannelCloseInitFilter(decoded)); - } - if let Ok(decoded) = ChannelOpenAckFilter::decode_log(log) { - return Ok(IBCHandlerEvents::ChannelOpenAckFilter(decoded)); - } - if let Ok(decoded) = ChannelOpenConfirmFilter::decode_log(log) { - return Ok(IBCHandlerEvents::ChannelOpenConfirmFilter(decoded)); - } - if let Ok(decoded) = ChannelOpenInitFilter::decode_log(log) { - return Ok(IBCHandlerEvents::ChannelOpenInitFilter(decoded)); - } - if let Ok(decoded) = ChannelOpenTryFilter::decode_log(log) { - return Ok(IBCHandlerEvents::ChannelOpenTryFilter(decoded)); - } - if let Ok(decoded) = ConnectionOpenAckFilter::decode_log(log) { - return Ok(IBCHandlerEvents::ConnectionOpenAckFilter(decoded)); - } - if let Ok(decoded) = ConnectionOpenConfirmFilter::decode_log(log) { - return Ok(IBCHandlerEvents::ConnectionOpenConfirmFilter(decoded)); - } - if let Ok(decoded) = ConnectionOpenInitFilter::decode_log(log) { - return Ok(IBCHandlerEvents::ConnectionOpenInitFilter(decoded)); - } - if let Ok(decoded) = ConnectionOpenTryFilter::decode_log(log) { - return Ok(IBCHandlerEvents::ConnectionOpenTryFilter(decoded)); - } - if let Ok(decoded) = GeneratedClientIdentifierFilter::decode_log(log) { - return Ok(IBCHandlerEvents::GeneratedClientIdentifierFilter(decoded)); - } - if let Ok(decoded) = RecvPacketFilter::decode_log(log) { - return Ok(IBCHandlerEvents::RecvPacketFilter(decoded)); - } - if let Ok(decoded) = SendPacketFilter::decode_log(log) { - return Ok(IBCHandlerEvents::SendPacketFilter(decoded)); + pub enum IBCHandlerErrors { + ErrCapabilityAlreadyClaimed(ErrCapabilityAlreadyClaimed), + ErrClientNotFound(ErrClientNotFound), + /// The standard solidity revert string, with selector + /// Error(string) -- 0x08c379a0 + RevertString(::std::string::String), + } + impl ::ethers::core::abi::AbiDecode for IBCHandlerErrors { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + <::std::string::String as ::ethers::core::abi::AbiDecode>::decode(data) + { + return Ok(Self::RevertString(decoded)); } - if let Ok(decoded) = TimeoutPacketFilter::decode_log(log) { - return Ok(IBCHandlerEvents::TimeoutPacketFilter(decoded)); + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrCapabilityAlreadyClaimed(decoded)); } - if let Ok(decoded) = WriteAcknowledgementFilter::decode_log(log) { - return Ok(IBCHandlerEvents::WriteAcknowledgementFilter(decoded)); + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::ErrClientNotFound(decoded)); } - Err(::ethers::core::abi::Error::InvalidData) + Err(::ethers::core::abi::Error::InvalidData.into()) } } - impl ::core::fmt::Display for IBCHandlerEvents { - fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + impl ::ethers::core::abi::AbiEncode for IBCHandlerErrors { + fn encode(self) -> ::std::vec::Vec { match self { - Self::AcknowledgePacketFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::ChannelCloseConfirmFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::ChannelCloseInitFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::ChannelOpenAckFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::ChannelOpenConfirmFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::ChannelOpenInitFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::ChannelOpenTryFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::ConnectionOpenAckFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::ConnectionOpenConfirmFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::ConnectionOpenInitFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::ConnectionOpenTryFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::GeneratedClientIdentifierFilter(element) => { - ::core::fmt::Display::fmt(element, f) + Self::ErrCapabilityAlreadyClaimed(element) => { + ::ethers::core::abi::AbiEncode::encode(element) } - Self::RecvPacketFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::SendPacketFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::TimeoutPacketFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::WriteAcknowledgementFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrClientNotFound(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::RevertString(s) => ::ethers::core::abi::AbiEncode::encode(s), } } } - impl ::core::convert::From for IBCHandlerEvents { - fn from(value: AcknowledgePacketFilter) -> Self { - Self::AcknowledgePacketFilter(value) - } - } - impl ::core::convert::From for IBCHandlerEvents { - fn from(value: ChannelCloseConfirmFilter) -> Self { - Self::ChannelCloseConfirmFilter(value) - } - } - impl ::core::convert::From for IBCHandlerEvents { - fn from(value: ChannelCloseInitFilter) -> Self { - Self::ChannelCloseInitFilter(value) - } - } - impl ::core::convert::From for IBCHandlerEvents { - fn from(value: ChannelOpenAckFilter) -> Self { - Self::ChannelOpenAckFilter(value) - } - } - impl ::core::convert::From for IBCHandlerEvents { - fn from(value: ChannelOpenConfirmFilter) -> Self { - Self::ChannelOpenConfirmFilter(value) - } - } - impl ::core::convert::From for IBCHandlerEvents { - fn from(value: ChannelOpenInitFilter) -> Self { - Self::ChannelOpenInitFilter(value) - } - } - impl ::core::convert::From for IBCHandlerEvents { - fn from(value: ChannelOpenTryFilter) -> Self { - Self::ChannelOpenTryFilter(value) - } - } - impl ::core::convert::From for IBCHandlerEvents { - fn from(value: ConnectionOpenAckFilter) -> Self { - Self::ConnectionOpenAckFilter(value) - } - } - impl ::core::convert::From for IBCHandlerEvents { - fn from(value: ConnectionOpenConfirmFilter) -> Self { - Self::ConnectionOpenConfirmFilter(value) - } - } - impl ::core::convert::From for IBCHandlerEvents { - fn from(value: ConnectionOpenInitFilter) -> Self { - Self::ConnectionOpenInitFilter(value) - } - } - impl ::core::convert::From for IBCHandlerEvents { - fn from(value: ConnectionOpenTryFilter) -> Self { - Self::ConnectionOpenTryFilter(value) - } - } - impl ::core::convert::From for IBCHandlerEvents { - fn from(value: GeneratedClientIdentifierFilter) -> Self { - Self::GeneratedClientIdentifierFilter(value) + impl ::ethers::contract::ContractRevert for IBCHandlerErrors { + fn valid_selector(selector: [u8; 4]) -> bool { + match selector { + [0x08, 0xc3, 0x79, 0xa0] => true, + _ if selector + == ::selector( + ) => + { + true + } + _ if selector + == ::selector() => + { + true + } + _ => false, + } } } - impl ::core::convert::From for IBCHandlerEvents { - fn from(value: RecvPacketFilter) -> Self { - Self::RecvPacketFilter(value) + impl ::core::fmt::Display for IBCHandlerErrors { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::ErrCapabilityAlreadyClaimed(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrClientNotFound(element) => ::core::fmt::Display::fmt(element, f), + Self::RevertString(s) => ::core::fmt::Display::fmt(s, f), + } } } - impl ::core::convert::From for IBCHandlerEvents { - fn from(value: SendPacketFilter) -> Self { - Self::SendPacketFilter(value) + impl ::core::convert::From<::std::string::String> for IBCHandlerErrors { + fn from(value: String) -> Self { + Self::RevertString(value) } } - impl ::core::convert::From for IBCHandlerEvents { - fn from(value: TimeoutPacketFilter) -> Self { - Self::TimeoutPacketFilter(value) + impl ::core::convert::From for IBCHandlerErrors { + fn from(value: ErrCapabilityAlreadyClaimed) -> Self { + Self::ErrCapabilityAlreadyClaimed(value) } } - impl ::core::convert::From for IBCHandlerEvents { - fn from(value: WriteAcknowledgementFilter) -> Self { - Self::WriteAcknowledgementFilter(value) + impl ::core::convert::From for IBCHandlerErrors { + fn from(value: ErrClientNotFound) -> Self { + Self::ErrClientNotFound(value) } } + ///Container type for all input parameters for the `COMMITMENT_PREFIX` function with signature `COMMITMENT_PREFIX()` and selector `0xa9550dac` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "COMMITMENT_PREFIX", abi = "COMMITMENT_PREFIX()")] + pub struct CommitmentPrefixCall; ///Container type for all input parameters for the `acknowledgePacket` function with signature `acknowledgePacket(((uint64,string,string,string,string,bytes,(uint64,uint64),uint64),bytes,bytes,(uint64,uint64)))` and selector `0x59f37976` #[derive( Clone, @@ -3454,7 +2543,7 @@ pub mod ibc_handler { pub port_id: ::std::string::String, pub module_address: ::ethers::core::types::Address, } - ///Container type for all input parameters for the `capabilities` function with signature `capabilities(bytes,uint256)` and selector `0xdd5b9f4d` + ///Container type for all input parameters for the `capabilities` function with signature `capabilities(string)` and selector `0x5717bcf5` #[derive( Clone, ::ethers::contract::EthCall, @@ -3465,11 +2554,8 @@ pub mod ibc_handler { Eq, Hash, )] - #[ethcall(name = "capabilities", abi = "capabilities(bytes,uint256)")] - pub struct CapabilitiesCall( - pub ::ethers::core::types::Bytes, - pub ::ethers::core::types::U256, - ); + #[ethcall(name = "capabilities", abi = "capabilities(string)")] + pub struct CapabilitiesCall(pub ::std::string::String); ///Container type for all input parameters for the `channelCapabilityPath` function with signature `channelCapabilityPath(string,string)` and selector `0x3bc3339f` #[derive( Clone, @@ -3759,19 +2845,6 @@ pub mod ibc_handler { pub struct CreateClientCall { pub msg: MsgCreateClient, } - ///Container type for all input parameters for the `expectedTimePerBlock` function with signature `expectedTimePerBlock()` and selector `0xd31407fe` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethcall(name = "expectedTimePerBlock", abi = "expectedTimePerBlock()")] - pub struct ExpectedTimePerBlockCall; ///Container type for all input parameters for the `getChannel` function with signature `getChannel(string,string)` and selector `0x3000217a` #[derive( Clone, @@ -3852,19 +2925,6 @@ pub mod ibc_handler { pub client_id: ::std::string::String, pub height: IbcCoreClientV1HeightData, } - ///Container type for all input parameters for the `getExpectedTimePerBlock` function with signature `getExpectedTimePerBlock()` and selector `0xec75d829` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethcall(name = "getExpectedTimePerBlock", abi = "getExpectedTimePerBlock()")] - pub struct GetExpectedTimePerBlockCall; ///Container type for all input parameters for the `getHashedPacketAcknowledgementCommitment` function with signature `getHashedPacketAcknowledgementCommitment(string,string,uint64)` and selector `0x5be164ee` #[derive( Clone, @@ -4110,24 +3170,6 @@ pub mod ibc_handler { pub timeout_timestamp: u64, pub data: ::ethers::core::types::Bytes, } - ///Container type for all input parameters for the `setExpectedTimePerBlock` function with signature `setExpectedTimePerBlock(uint64)` and selector `0x27184c13` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethcall( - name = "setExpectedTimePerBlock", - abi = "setExpectedTimePerBlock(uint64)" - )] - pub struct SetExpectedTimePerBlockCall { - pub expected_time_per_block: u64, - } ///Container type for all input parameters for the `timeoutPacket` function with signature `timeoutPacket(((uint64,string,string,string,string,bytes,(uint64,uint64),uint64),bytes,(uint64,uint64),uint64))` and selector `0xaa18c8b1` #[derive( Clone, @@ -4185,6 +3227,7 @@ pub mod ibc_handler { ///Container type for all of the contract's call #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] pub enum IBCHandlerCalls { + CommitmentPrefix(CommitmentPrefixCall), AcknowledgePacket(AcknowledgePacketCall), BindPort(BindPortCall), Capabilities(CapabilitiesCall), @@ -4206,13 +3249,11 @@ pub mod ibc_handler { ConnectionOpenTry(ConnectionOpenTryCall), Connections(ConnectionsCall), CreateClient(CreateClientCall), - ExpectedTimePerBlock(ExpectedTimePerBlockCall), GetChannel(GetChannelCall), GetClient(GetClientCall), GetClientState(GetClientStateCall), GetConnection(GetConnectionCall), GetConsensusState(GetConsensusStateCall), - GetExpectedTimePerBlock(GetExpectedTimePerBlockCall), GetHashedPacketAcknowledgementCommitment(GetHashedPacketAcknowledgementCommitmentCall), GetHashedPacketCommitment(GetHashedPacketCommitmentCall), GetNextSequenceSend(GetNextSequenceSendCall), @@ -4228,7 +3269,6 @@ pub mod ibc_handler { RecvPacket(RecvPacketCall), RegisterClient(RegisterClientCall), SendPacket(SendPacketCall), - SetExpectedTimePerBlock(SetExpectedTimePerBlockCall), TimeoutPacket(TimeoutPacketCall), UpdateClient(UpdateClientCall), WriteAcknowledgement(WriteAcknowledgementCall), @@ -4238,6 +3278,11 @@ pub mod ibc_handler { data: impl AsRef<[u8]>, ) -> ::core::result::Result { let data = data.as_ref(); + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::CommitmentPrefix(decoded)); + } if let Ok(decoded) = ::decode(data) { @@ -4329,11 +3374,6 @@ pub mod ibc_handler { { return Ok(Self::CreateClient(decoded)); } - if let Ok(decoded) = - ::decode(data) - { - return Ok(Self::ExpectedTimePerBlock(decoded)); - } if let Ok(decoded) = ::decode(data) { return Ok(Self::GetChannel(decoded)); } @@ -4354,11 +3394,6 @@ pub mod ibc_handler { { return Ok(Self::GetConsensusState(decoded)); } - if let Ok(decoded) = - ::decode(data) - { - return Ok(Self::GetExpectedTimePerBlock(decoded)); - } if let Ok(decoded) = ::decode( data, ) { @@ -4430,11 +3465,6 @@ pub mod ibc_handler { if let Ok(decoded) = ::decode(data) { return Ok(Self::SendPacket(decoded)); } - if let Ok(decoded) = - ::decode(data) - { - return Ok(Self::SetExpectedTimePerBlock(decoded)); - } if let Ok(decoded) = ::decode(data) { return Ok(Self::TimeoutPacket(decoded)); @@ -4454,6 +3484,7 @@ pub mod ibc_handler { impl ::ethers::core::abi::AbiEncode for IBCHandlerCalls { fn encode(self) -> Vec { match self { + Self::CommitmentPrefix(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::AcknowledgePacket(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::BindPort(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::Capabilities(element) => ::ethers::core::abi::AbiEncode::encode(element), @@ -4485,17 +3516,11 @@ pub mod ibc_handler { Self::ConnectionOpenTry(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::Connections(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::CreateClient(element) => ::ethers::core::abi::AbiEncode::encode(element), - Self::ExpectedTimePerBlock(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } Self::GetChannel(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::GetClient(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::GetClientState(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::GetConnection(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::GetConsensusState(element) => ::ethers::core::abi::AbiEncode::encode(element), - Self::GetExpectedTimePerBlock(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } Self::GetHashedPacketAcknowledgementCommitment(element) => { ::ethers::core::abi::AbiEncode::encode(element) } @@ -4525,9 +3550,6 @@ pub mod ibc_handler { Self::RecvPacket(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::RegisterClient(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::SendPacket(element) => ::ethers::core::abi::AbiEncode::encode(element), - Self::SetExpectedTimePerBlock(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } Self::TimeoutPacket(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::UpdateClient(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::WriteAcknowledgement(element) => { @@ -4539,6 +3561,7 @@ pub mod ibc_handler { impl ::core::fmt::Display for IBCHandlerCalls { fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { match self { + Self::CommitmentPrefix(element) => ::core::fmt::Display::fmt(element, f), Self::AcknowledgePacket(element) => ::core::fmt::Display::fmt(element, f), Self::BindPort(element) => ::core::fmt::Display::fmt(element, f), Self::Capabilities(element) => ::core::fmt::Display::fmt(element, f), @@ -4560,13 +3583,11 @@ pub mod ibc_handler { Self::ConnectionOpenTry(element) => ::core::fmt::Display::fmt(element, f), Self::Connections(element) => ::core::fmt::Display::fmt(element, f), Self::CreateClient(element) => ::core::fmt::Display::fmt(element, f), - Self::ExpectedTimePerBlock(element) => ::core::fmt::Display::fmt(element, f), Self::GetChannel(element) => ::core::fmt::Display::fmt(element, f), Self::GetClient(element) => ::core::fmt::Display::fmt(element, f), Self::GetClientState(element) => ::core::fmt::Display::fmt(element, f), Self::GetConnection(element) => ::core::fmt::Display::fmt(element, f), Self::GetConsensusState(element) => ::core::fmt::Display::fmt(element, f), - Self::GetExpectedTimePerBlock(element) => ::core::fmt::Display::fmt(element, f), Self::GetHashedPacketAcknowledgementCommitment(element) => { ::core::fmt::Display::fmt(element, f) } @@ -4584,13 +3605,17 @@ pub mod ibc_handler { Self::RecvPacket(element) => ::core::fmt::Display::fmt(element, f), Self::RegisterClient(element) => ::core::fmt::Display::fmt(element, f), Self::SendPacket(element) => ::core::fmt::Display::fmt(element, f), - Self::SetExpectedTimePerBlock(element) => ::core::fmt::Display::fmt(element, f), Self::TimeoutPacket(element) => ::core::fmt::Display::fmt(element, f), Self::UpdateClient(element) => ::core::fmt::Display::fmt(element, f), Self::WriteAcknowledgement(element) => ::core::fmt::Display::fmt(element, f), } } } + impl ::core::convert::From for IBCHandlerCalls { + fn from(value: CommitmentPrefixCall) -> Self { + Self::CommitmentPrefix(value) + } + } impl ::core::convert::From for IBCHandlerCalls { fn from(value: AcknowledgePacketCall) -> Self { Self::AcknowledgePacket(value) @@ -4696,11 +3721,6 @@ pub mod ibc_handler { Self::CreateClient(value) } } - impl ::core::convert::From for IBCHandlerCalls { - fn from(value: ExpectedTimePerBlockCall) -> Self { - Self::ExpectedTimePerBlock(value) - } - } impl ::core::convert::From for IBCHandlerCalls { fn from(value: GetChannelCall) -> Self { Self::GetChannel(value) @@ -4726,11 +3746,6 @@ pub mod ibc_handler { Self::GetConsensusState(value) } } - impl ::core::convert::From for IBCHandlerCalls { - fn from(value: GetExpectedTimePerBlockCall) -> Self { - Self::GetExpectedTimePerBlock(value) - } - } impl ::core::convert::From for IBCHandlerCalls { fn from(value: GetHashedPacketAcknowledgementCommitmentCall) -> Self { Self::GetHashedPacketAcknowledgementCommitment(value) @@ -4806,11 +3821,6 @@ pub mod ibc_handler { Self::SendPacket(value) } } - impl ::core::convert::From for IBCHandlerCalls { - fn from(value: SetExpectedTimePerBlockCall) -> Self { - Self::SetExpectedTimePerBlock(value) - } - } impl ::core::convert::From for IBCHandlerCalls { fn from(value: TimeoutPacketCall) -> Self { Self::TimeoutPacket(value) @@ -4826,7 +3836,19 @@ pub mod ibc_handler { Self::WriteAcknowledgement(value) } } - ///Container type for all return fields from the `capabilities` function with signature `capabilities(bytes,uint256)` and selector `0xdd5b9f4d` + ///Container type for all return fields from the `COMMITMENT_PREFIX` function with signature `COMMITMENT_PREFIX()` and selector `0xa9550dac` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct CommitmentPrefixReturn(pub ::std::string::String); + ///Container type for all return fields from the `capabilities` function with signature `capabilities(string)` and selector `0x5717bcf5` #[derive( Clone, ::ethers::contract::EthAbiType, @@ -4849,7 +3871,7 @@ pub mod ibc_handler { Eq, Hash, )] - pub struct ChannelCapabilityPathReturn(pub ::ethers::core::types::Bytes); + pub struct ChannelCapabilityPathReturn(pub ::std::string::String); ///Container type for all return fields from the `channelOpenInit` function with signature `channelOpenInit((string,(uint8,uint8,(string,string),string[],string)))` and selector `0xdd3469fc` #[derive( Clone, @@ -4861,9 +3883,7 @@ pub mod ibc_handler { Eq, Hash, )] - pub struct ChannelOpenInitReturn { - pub channel_id: ::std::string::String, - } + pub struct ChannelOpenInitReturn(pub ::std::string::String); ///Container type for all return fields from the `channelOpenTry` function with signature `channelOpenTry((string,(uint8,uint8,(string,string),string[],string),string,bytes,(uint64,uint64)))` and selector `0x11b88a15` #[derive( Clone, @@ -4875,9 +3895,7 @@ pub mod ibc_handler { Eq, Hash, )] - pub struct ChannelOpenTryReturn { - pub channel_id: ::std::string::String, - } + pub struct ChannelOpenTryReturn(pub ::std::string::String); ///Container type for all return fields from the `channels` function with signature `channels(string,string)` and selector `0x5b3de260` #[derive( Clone, @@ -4954,9 +3972,7 @@ pub mod ibc_handler { Eq, Hash, )] - pub struct ConnectionOpenInitReturn { - pub connection_id: ::std::string::String, - } + pub struct ConnectionOpenInitReturn(pub ::std::string::String); ///Container type for all return fields from the `connectionOpenTry` function with signature `connectionOpenTry(((string,string,(bytes)),uint64,string,bytes,(string,string[])[],bytes,bytes,bytes,(uint64,uint64),(uint64,uint64)))` and selector `0x04f68e5c` #[derive( Clone, @@ -4968,9 +3984,7 @@ pub mod ibc_handler { Eq, Hash, )] - pub struct ConnectionOpenTryReturn { - pub connection_id: ::std::string::String, - } + pub struct ConnectionOpenTryReturn(pub ::std::string::String); ///Container type for all return fields from the `connections` function with signature `connections(string)` and selector `0x31973f00` #[derive( Clone, @@ -4999,21 +4013,7 @@ pub mod ibc_handler { Eq, Hash, )] - pub struct CreateClientReturn { - pub client_id: ::std::string::String, - } - ///Container type for all return fields from the `expectedTimePerBlock` function with signature `expectedTimePerBlock()` and selector `0xd31407fe` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - pub struct ExpectedTimePerBlockReturn(pub u64); + pub struct CreateClientReturn(pub ::std::string::String); ///Container type for all return fields from the `getChannel` function with signature `getChannel(string,string)` and selector `0x3000217a` #[derive( Clone, @@ -5077,18 +4077,6 @@ pub mod ibc_handler { pub consensus_state_bytes: ::ethers::core::types::Bytes, pub p1: bool, } - ///Container type for all return fields from the `getExpectedTimePerBlock` function with signature `getExpectedTimePerBlock()` and selector `0xec75d829` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - pub struct GetExpectedTimePerBlockReturn(pub u64); ///Container type for all return fields from the `getHashedPacketAcknowledgementCommitment` function with signature `getHashedPacketAcknowledgementCommitment(string,string,uint64)` and selector `0x5be164ee` #[derive( Clone, @@ -5232,5 +4220,17 @@ pub mod ibc_handler { Eq, Hash, )] - pub struct PortCapabilityPathReturn(pub ::ethers::core::types::Bytes); + pub struct PortCapabilityPathReturn(pub ::std::string::String); + ///Container type for all return fields from the `sendPacket` function with signature `sendPacket(string,string,(uint64,uint64),uint64,bytes)` and selector `0xae4cd201` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct SendPacketReturn(pub u64); } diff --git a/generated/contracts/src/ibc_packet.rs b/generated/contracts/src/ibc_packet.rs new file mode 100644 index 0000000000..21d6376e2f --- /dev/null +++ b/generated/contracts/src/ibc_packet.rs @@ -0,0 +1,3614 @@ +pub use ibc_packet::*; +/// This module was auto-generated with ethers-rs Abigen. +/// More information at: +#[allow( + clippy::enum_variant_names, + clippy::too_many_arguments, + clippy::upper_case_acronyms, + clippy::type_complexity, + dead_code, + non_camel_case_types +)] +pub mod ibc_packet { + pub use super::super::shared_types::*; + #[cfg(feature = "providers")] + #[allow(deprecated)] + #[cfg(feature = "providers")] + fn __abi() -> ::ethers::core::abi::Abi { + ::ethers::core::abi::ethabi::Contract { + constructor: ::core::option::Option::None, + functions: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("COMMITMENT_PREFIX"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("COMMITMENT_PREFIX"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("acknowledgePacket"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("acknowledgePacket"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("msg_"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IBCMsgs.MsgPacketAcknowledgement", + ), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("bindPort"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("bindPort"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("portId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("moduleAddress"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("capabilities"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("capabilities"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("channelCapabilityPath"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("channelCapabilityPath",), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("portId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("channelId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Pure, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("channels"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("channels"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("state"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(8usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "enum IbcCoreChannelV1GlobalEnums.State", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("ordering"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(8usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "enum IbcCoreChannelV1GlobalEnums.Order", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("counterparty"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IbcCoreChannelV1Counterparty.Data", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("version"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("clientImpls"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("clientImpls"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("clientRegistry"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("clientRegistry"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("clientTypes"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("clientTypes"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("commitments"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("commitments"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::FixedBytes(32usize,), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes32"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("connections"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("connections"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("client_id"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("state"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(8usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "enum IbcCoreConnectionV1GlobalEnums.State", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("counterparty"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Bytes + ],), + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IbcCoreConnectionV1Counterparty.Data", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("delay_period"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + }, + ], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("getClient"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("getClient"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("clientId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("contract ILightClient"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextChannelSequence"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextChannelSequence",), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextClientSequence"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextClientSequence"), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextConnectionSequence"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextConnectionSequence",), + inputs: ::std::vec![], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextSequenceAcks"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextSequenceAcks"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextSequenceRecvs"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextSequenceRecvs"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("nextSequenceSends"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("nextSequenceSends"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("packetReceipts"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("packetReceipts"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(8usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint8"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("portCapabilityPath"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("portCapabilityPath"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("portId"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::Pure, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("recvPacket"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("recvPacket"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("msg_"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("struct IBCMsgs.MsgPacketRecv",), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("sendPacket"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("sendPacket"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("sourcePort"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("sourceChannel"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("timeoutHeight"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned( + "struct IbcCoreClientV1Height.Data", + ), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("timeoutTimestamp"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("data"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + },], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("timeoutPacket"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("timeoutPacket"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("msg_"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("struct IBCMsgs.MsgPacketTimeout",), + ), + },], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("writeAcknowledgement"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("writeAcknowledgement",), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("destinationPort"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("destinationChannel",), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("sequence"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("uint64"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("acknowledgement"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("bytes"), + ), + }, + ], + outputs: ::std::vec![], + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, + },], + ), + ]), + events: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("AcknowledgePacket"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("AcknowledgePacket"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("packet"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("acknowledgement"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + indexed: false, + }, + ], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("RecvPacket"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("RecvPacket"), + inputs: ::std::vec![::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("packet"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + indexed: false, + },], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("SendPacket"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("SendPacket"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("sequence"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("sourcePort"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("sourceChannel"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("timeoutHeight"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("timeoutTimestamp"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("data"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + indexed: false, + }, + ], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("TimeoutPacket"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("TimeoutPacket"), + inputs: ::std::vec![::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("packet"), + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::Bytes, + ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + ],), + indexed: false, + },], + anonymous: false, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("WriteAcknowledgement"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("WriteAcknowledgement",), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("destinationPort"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("destinationChannel",), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("sequence"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(64usize), + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("acknowledgement"), + kind: ::ethers::core::abi::ethabi::ParamType::Bytes, + indexed: false, + }, + ], + anonymous: false, + },], + ), + ]), + errors: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("ErrAcknowledgementAlreadyExists"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrAcknowledgementAlreadyExists",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrAcknowledgementIsEmpty"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrAcknowledgementIsEmpty",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrCapabilityAlreadyClaimed"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrCapabilityAlreadyClaimed",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrClientNotFound"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrClientNotFound"), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned( + "ErrDestinationAndCounterpartyChannelMismatch", + ), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned( + "ErrDestinationAndCounterpartyChannelMismatch", + ), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrDestinationAndCounterpartyPortMismatch"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned( + "ErrDestinationAndCounterpartyPortMismatch", + ), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrHeightTimeout"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrHeightTimeout"), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrInvalidChannelState"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrInvalidChannelState",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrInvalidConnectionState"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrInvalidConnectionState",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrInvalidPacketCommitment"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrInvalidPacketCommitment",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrInvalidProof"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrInvalidProof"), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrInvalidTimeoutHeight"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrInvalidTimeoutHeight",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrInvalidTimeoutTimestamp"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrInvalidTimeoutTimestamp",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrLatestHeightNotFound"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrLatestHeightNotFound",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrLatestTimestampNotFound"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrLatestTimestampNotFound",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrModuleNotFound"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrModuleNotFound"), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned( + "ErrNextSequenceMustBeGreaterThanTimeoutSequence", + ), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned( + "ErrNextSequenceMustBeGreaterThanTimeoutSequence", + ), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrPacketAlreadyReceived"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrPacketAlreadyReceived",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrPacketCommitmentNotFound"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrPacketCommitmentNotFound",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrPacketSequenceNextSequenceMismatch"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned( + "ErrPacketSequenceNextSequenceMismatch", + ), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrPacketWithoutTimeout"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrPacketWithoutTimeout",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrSourceAndCounterpartyChannelMismatch"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned( + "ErrSourceAndCounterpartyChannelMismatch", + ), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrSourceAndCounterpartyPortMismatch"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned( + "ErrSourceAndCounterpartyPortMismatch", + ), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrTimeoutHeightNotReached"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrTimeoutHeightNotReached",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrTimeoutTimestampNotReached"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrTimeoutTimestampNotReached",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrTimestampTimeout"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrTimestampTimeout",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrUnauthorized"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrUnauthorized"), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrUnknownChannelOrdering"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrUnknownChannelOrdering",), + inputs: ::std::vec![], + },], + ), + ]), + receive: false, + fallback: false, + } + } + ///The parsed JSON ABI of the contract. + #[cfg(feature = "providers")] + pub static IBCPACKET_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = + ::ethers::contract::Lazy::new(__abi); + #[rustfmt::skip] + #[cfg(feature = "providers")] + const __BYTECODE: &[u8] = b"`\x80\x80`@R4a\0\x16Wa<\x12\x90\x81a\0\x1C\x829\xF3[`\0\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x12W`\0\x80\xFD[`\0\x805`\xE0\x1C\x80c\x11~\x88j\x14a*ZW\x80c\x13\x90\xD2\x8D\x14a*)W\x80c#n\xBDp\x14a\"\x98W\x80c%p\xDA\xE0\x14a\"EW\x80c&\x07\x847\x14a!\x8FW\x80c1\x97?\0\x14a\x1FjW\x80c;\xC33\x9F\x14a\x1FUW\x80cW\x17\xBC\xF5\x14a\x1E\xD6W\x80cY\xF3yv\x14a\x19\xBBW\x80c[=\xE2`\x14a\x18GW\x80cy&\xB8\xA9\x14a\x17\xFEW\x80c~\xB7\x892\x14a\x17\x8BW\x80c\x82\x1C\xB5\xD0\x14a\x17ZW\x80c\x83\x9D\xF9E\x14a\x17\x13W\x80c\x99\x04\x91\xA5\x14a\x16\x94W\x80c\xA0I\xE6w\x14a\x16KW\x80c\xA9U\r\xAC\x14a\x15\xCFW\x80c\xAA\x18\xC8\xB1\x14a\n\x9CW\x80c\xAEL\xD2\x01\x14a\x03\xEBW\x80c\xB5ny\xDE\x14a\x02\xE2W\x80c\xC28\x01\x05\x14a\x02OW\x80c\xC90\xB1\xB0\x14a\x01\xFFW\x80c\xD1){\x8D\x14a\x01mWc\xE1\xB1{C\x14a\x01%W`\0\x80\xFD[4a\x01jW\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT\x16`@Q\x90\x81R\xF3[\x80\xFD[P4a\x01jW` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01jW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xEB\x82a\x01\xD86`\x04\x88\x01a,\xC0V[\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a-@V[\x81\x01`\x03\x81R\x03\x01\x90 T\x16`@Q\x90\x81R\xF3[P4a\x01jW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x02E\x82a\x025a\x02 6a,\xDEV[\x92\x90\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a-@V[\x81\x01`\x07\x81R\x03\x01\x90 \x90a-cV[T\x16`@Q\x90\x81R\xF3[P4a\x01jW` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01jWa\x02\xDEa\x02\xC3a\x02\xCAa\x02\xAD` a\x01\xD86`\x04\x89\x01a,\xC0V[\x81\x01`\x02\x81R\x03\x01\x90 `@Q\x92\x83\x80\x92a.KV[\x03\x82a,\x0EV[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a-\x89V[\x03\x90\xF3[P4a\x01jW`\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x03\xE7Wa\x033\x906\x90`\x04\x01a+\x81V[\x91`$5\x81\x81\x11a\x03\xE3Wa\x03L\x906\x90`\x04\x01a+\x81V[\x90a\x03Ua-\xCCV[\x92`d5\x90\x81\x11a\x03\xDFWa\x03n\x906\x90`\x04\x01a+\x81V[a\x03\x98a\x03\x93a\x03\x82\x98\x93\x986\x85\x8Aa,\x89V[a\x03\x8D6\x88\x88a,\x89V[\x90a3\x06V[a:\xFAV[\x15a\x03\xB5Wa\x03\xB2\x96a\x03\xAC\x916\x91a,\x89V[\x94a89V[\x80\xF3[`\x04`@Q\x7F\xCC\x12\xCE\xF6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x86\x80\xFD[\x84\x80\xFD[\x82\x80\xFD[P4a\x01jW`\xC0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\n\x98Wa\x04;\x906\x90`\x04\x01a+\x81V[\x90`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\n\x94Wa\x04\\\x906\x90`\x04\x01a+\x81V[\x92\x90`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xBC6\x01\x12a\x03\xE3Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x845\x16`\x845\x03a\x08\xC5W`\xA45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\n\x90Wa\x04\xBD\x906\x90`\x04\x01a+\x81V[\x90\x91a\x04\xDBa\x03\x93a\x04\xD06\x87\x89a,\x89V[a\x03\x8D6\x8A\x86a,\x89V[\x15a\x03\xB5Wa\x02\xC3a\x05\x12a\x05\x06a\x05\0`\x03a\x04\xFA\x8B\x87\x8B\x8Da4\xBBV[\x01a/\xD3V[Pa0\x17V[`@Q\x92\x83\x80\x92a.KV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x050\x82a3tV[\x16\x90`@Q\x90\x7F2\x96\x81\xD0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R` `\x04\x83\x01R``\x82\x80a\x05q`$\x82\x01\x85a-\x89V[\x03\x81\x86Z\xFA\x80\x15a\n\x85W\x8A\x92\x8B\x91a\n\rW[P\x15a\t\xE3Wa\x05\x9Ca\x05\x976a4$V[a:~V[\x15\x80a\t\xCBW[a\t\xA1Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92a\x05\xF7` \x92`@\x94\x85Q\x96\x87\x95\x86\x94\x85\x94\x7FK\x0B\xBD\xC4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86R```\x04\x87\x01R`d\x86\x01\x90a-\x89V[\x92\x82\x81Q\x16`$\x86\x01R\x01Q\x16`D\x83\x01R\x03\x91Z\xFA\x80\x15a\t\x96W\x88\x91\x89\x91a\teW[P\x15a\t;Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x845\x16\x15\x15\x90\x81a\t!W[Pa\x08\xF7Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x06e`@Q\x86\x88\x827` \x81\x88\x81\x01`\x06\x81R\x03\x01\x90 \x88\x84a0\xDFV[T\x16\x95`\x01\x87\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x08\xCAWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x06\xA3`@Q\x88\x8A\x827` \x81\x8A\x81\x01`\x06\x81R\x03\x01\x90 \x84\x86a0\xDFV[\x91\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x82T\x16\x17\x90Ug\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`D5\x16`D5\x03a\x08\xC5Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`d5\x16`d5\x03a\x08\xC5W` \x88`@Q\x85\x87\x827\x80\x86\x81\x01\x83\x81R\x03\x90`\x02Z\xFA\x15a\x08\xBAW` \x88a\x07\xBB\x81Q`@Qa\x07\xAA\x81a\x07~\x87\x82\x01\x94`d5`D5`\x845\x88\x92`8\x94\x92\x91\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x92\x83\x80\x92`\xC0\x1B\x16\x86R`\xC0\x1B\x16`\x08\x85\x01R`\xC0\x1B\x16`\x10\x83\x01R`\x18\x82\x01R\x01\x90V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a,\x0EV[`@Q\x92\x83\x92\x83\x92Q\x92\x83\x91a-@V[\x81\x01\x03\x90`\x02Z\xFA\x15a\x08\xBAW\x91a\x08k\x7F*\x89\xCA\x0E\x96*a\xB8\x11Uu\xDAc\xF5K\xB2I\xCF\x017\x94\x7F\xC9\xAB\x01j\xC9\xDF\x88\xAA4~\x96\x95\x94\x92a\x08\xAF\x94\x8A`@` \x9CQ\x81Q\x8E\x81\x01\x91\x82R\x8E\x81Ra\x08\x10\x81a+\xF2V[Q\x90 \x91a\x084\x8Da\x08#6\x8D\x8Fa,\x89V[a\x08.6\x88\x8Aa,\x89V[\x90a5}V[\x8E\x81Q\x91\x01 \x81R\x80\x8ER Ua\x08]`@Q\x98\x89\x98\x8C\x8AR`\xE0\x8E\x8B\x01R`\xE0\x8A\x01\x91a1\x90V[\x91\x87\x83\x03`@\x89\x01Ra1\x90V[\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`D5\x16``\x86\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`d5\x16`\x80\x86\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x845\x16`\xA0\x86\x01R\x84\x83\x03`\xC0\x86\x01Ra1\x90V[\x03\x90\xA1`@Q\x90\x81R\xF3[`@Q=\x89\x82>=\x90\xFD[`\0\x80\xFD[`$\x89\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x11`\x04R\xFD[`\x04`@Q\x7F\xE6'|\xE0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80`\x845\x16\x91\x16\x10\x158a\x068V[`\x04`@Q\x7F\x9Bl\x9A\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x90Pa\t\x89\x91P`@=`@\x11a\t\x8FW[a\t\x81\x81\x83a,\x0EV[\x81\x01\x90a4\x03V[8a\x06\x1CV[P=a\twV[`@Q=\x8A\x82>=\x90\xFD[`\x04`@Q\x7F\xC8\xE1\xD2d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[Pa\t\xDEa\t\xD86a4$V[\x83a:\xA2V[a\x05\xA3V[`\x04`@Q\x7F\xE5=N7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x92PP``=``\x11a\n~W[a\n%\x81\x84a,\x0EV[``\x83\x82\x81\x01\x03\x12a\nzW\x82`@\x91\x81\x01\x03\x12a\nvWa\np`@\x80Q\x93a\nN\x85a+\xF2V[a\nW\x81a3\xE1V[\x85Ra\ne` \x82\x01a3\xE1V[` \x86\x01R\x01a3\xF6V[8a\x05\x85V[\x89\x80\xFD[\x8A\x80\xFD[P=a\n\x1BV[`@Q=\x8C\x82>=\x90\xFD[\x85\x80\xFD[\x83\x80\xFD[P\x80\xFD[P4a\x01jWa\n\xAB6a.\xFFV[a\n\xB5\x81\x80a/OV[a\n\xE7a\n\xC7` \x92\x83\x81\x01\x90a/\x82V[\x90a\n\xDFa\n\xD5\x86\x80a/OV[`@\x81\x01\x90a/\x82V[\x92\x90\x91a4\xBBV[a\x0B\x10a\x0B\x0Ba\x0B\x04a\n\xFA\x86\x80a/OV[``\x81\x01\x90a/\x82V[6\x91a,\x89V[a5MV[a\x0B'`@Qa\x0B\x0B\x81a\x02\xC3\x81`\x01\x88\x01a.KV[\x03a\x15\xA5Wa\x0BIa\x0B\x0Ba\x0B\x04a\x0B?\x86\x80a/OV[`\x80\x81\x01\x90a/\x82V[a\x0B``@Qa\x0B\x0B\x81a\x02\xC3\x81`\x02\x88\x01a.KV[\x03a\x15{Wa\x0Bta\x05\0`\x03\x83\x01a/\xD3V[\x90`\xFF`\x02\x83\x01T\x16`\x04\x81\x10\x15a\x15NW`\x03\x03a\x15$Wa\x0B\xE0a\x08.a\x0B\xD8a\x0B\xACa\x0B\xA3\x88\x80a/OV[\x87\x81\x01\x90a/\x82V[\x92\x90a\x0B\xBBa\n\xD5\x8A\x80a/OV[\x93\x90\x91a\x0B\xD0a\x0B\xCB\x8C\x80a/OV[a0\xCAV[\x956\x91a,\x89V[\x926\x91a,\x89V[\x83\x81Q\x91\x01 \x90\x81\x86R\x85\x84R`@\x86 T\x80\x15a\x14\xFAWa\x01\0\x90\x86\x88a\x0C\x12\x84a\x0C\x0C\x84\x80a/OV[\x01a0\xCAV[a\x0C!`\xC0a\x0C\x0C\x85\x80a/OV[\x90\x89\x83a\x0CJa\x0C@a\x0C9`\xE0a\x0C\x0C\x8A\x80a/OV[\x97\x80a/OV[`\xA0\x81\x01\x90a/\x82V[\x90\x81`@Q\x92\x83\x92\x837\x81\x01\x83\x81R\x03\x90`\x02Z\xFA\x15a\x10yW\x89\x93a\x07\xAAa\x0C\xC9\x93a\x07~\x86Q`@Q\x94\x85\x93\x8A\x85\x01\x97\x88\x92`8\x94\x92\x91\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x92\x83\x80\x92`\xC0\x1B\x16\x86R`\xC0\x1B\x16`\x08\x85\x01R`\xC0\x1B\x16`\x10\x83\x01R`\x18\x82\x01R\x01\x90V[\x81\x01\x03\x90`\x02Z\xFA\x15a\x08\xBAW\x87Q`@Q\x87\x81\x01\x91\x82R\x87\x81Ra\x0C\xED\x81a+\xF2V[Q\x90 \x03a\x14\xD0Wa\r'\x93`@Qa\r\n\x81a\x02\xC3\x81\x85a.KV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x95\x86\x91a3tV[\x16`@\x88\x01\x92`@\x80Q\x80\x93\x7FK\x0B\xBD\xC4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R```\x04\x83\x01R\x81\x80a\rl`d\x82\x01\x89a.KV[a\ry`$\x83\x01\x8Ba1\xCFV[\x03\x91Z\xFA\x80\x15a\n\x85W\x8A\x92\x8B\x91a\x14\xABW[P\x15a\t;Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x82a\r\xAB\x83a\x0C\x0C\x8D\x80a/OV[\x16\x15\x80a\x14\x92W[a\x14hW\x89\x90\x83\x83\x81a\r\xCA\x82a\x0C\x0C\x87\x80a/OV[\x16\x15\x15\x93\x84a\x14GW[PPPPa\x14\x1DWa\r\xF5a\x05\x976`\xC0a\r\xEF\x8D\x80a/OV[\x01a4\x85V[\x15\x80a\x13\xF4W[a\x13\xCAW`\xFF\x85T`\x08\x1C\x16`\x03\x81\x10\x15a\x13\x9DW`\x02\x81\x03a\x11\x05WPP`\x80\x88\x01\x90a\x0E)\x82a0\xCAV[\x90\x80a\x0E8a\x0B\xCB\x8C\x80a/OV[\x16\x91\x16\x11\x15a\x10\xDBW\x87\x87a\x0F\\\x94a\x0F\x1Ca\x0F\r\x94a\x0B\xCB`Aa\x0E_\x86\x88\x01\x88a/\x82V[\x97\x90\x96a\x0E\x96a\x0B?a\x0E\x8Ea\x0E\x84a\x0E{a\n\xFA\x87\x80a/OV[\x93\x90\x96\x80a/OV[\x95\x90\x926\x91a,\x89V[\x936\x91a,\x89V[\x90`@Q\x9A\x8B\x93\x7FnextSequenceRecv/ports/\0\0\0\0\0\0\0\0\0\x83\x86\x01Ra\x0E\xD5\x81Q\x80\x92\x85`7\x89\x01\x91\x01a-@V[\x84\x01\x91\x7F/channels/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`7\x84\x01R\x83Q\x93\x84\x91\x87\x85\x01\x91\x01a-@V[\x01\x03`!\x81\x01\x89R\x01\x87a,\x0EV[\x94\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`@Q\x96`\xC0\x1B\x16\x8B\x87\x01R`\x08\x86Ra\x0FW\x86a+\xF2V[a6\\V[\x15a\x10\xB1W`\xFF`\x05\x91T\x16\x10\x15a\x10\x84W\x90\x84\x91[\x82R\x81\x83R\x81`@\x81 Ua\x0F\xBCa\x0F\xB6a\x0F\x99a\x0F\x90\x87\x80a/OV[\x86\x81\x01\x90a/\x82V[a\x0B\xD8a\x0F\xACa\n\xD5\x8A\x80\x96\x95\x96a/OV[\x94\x90\x926\x91a,\x89V[\x90a7\xD6V[\x16a\x0F\xC7\x84\x80a/OV[\x90\x80;\x15a\x03\xE7Wa\x10\x0E\x83\x92\x91\x83\x92`@Q\x94\x85\x80\x94\x81\x93\x7FR\xC7\x15}\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R3\x90`\x04\x84\x01a2\xD2V[\x03\x92Z\xF1\x80\x15a\x10yWa\x10eW[PPa\x10J\x82\x7F\xA6\xCC\xDF\xD0b\x94\xBB\xB4\x81\xB7\xB0\x8A\xB1p\xC17|\xCC\xDC\xAA\x9E5\xB2\xE3F\xA3n\xE3*\x1F\x8F\x06\x93a/OV[\x90a\x10_`@Q\x92\x82\x84\x93\x84R\x83\x01\x90a1\xF9V[\x03\x90\xA1\x80\xF3[a\x10n\x90a+\xAFV[a\x03\xE7W\x828a\x10\x1DV[`@Q=\x84\x82>=\x90\xFD[`$\x85\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`!`\x04R\xFD[`\x04`@Q\x7F\x14 \x992\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04`@Q\x7F\xE7X\xEF\x82\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x95\x96\x95\x93\x94P\x91\x92`\x01\x03a\x13sW\x86\x92\x89a\x11u\x93a\x13\x14\x8Ba\x11ma\x12?`Da\x0B\xCBa\x11|\x8Aa\x11:\x8E\x88\x01\x88a/\x82V[\x9D\x90\x97a\x11Ja\n\xFA\x82\x80a/OV[\x98\x90a\x11ea\x11\\a\x0B?\x85\x80a/OV[\x98\x90\x94\x80a/OV[\x996\x91a,\x89V[\x946\x91a,\x89V[\x95\x16a;9V[\x8Ca\x120`@Q\x96\x87\x94\x7Freceipts/ports/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84\x87\x01Ra\x11\xBE\x81Q\x80\x92\x86`/\x8A\x01\x91\x01a-@V[\x85\x01\x7F/channels/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`/\x82\x01Ra\x11\xF9\x82Q\x80\x93\x86`9\x85\x01\x91\x01a-@V[\x01\x91\x7F/sequences/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`9\x84\x01R\x83Q\x93\x84\x91\x87\x85\x01\x91\x01a-@V[\x01\x03`$\x81\x01\x84R\x01\x82a,\x0EV[a\x13\x05\x8Ba\x12\\`@Qa\x12W\x81a\x02\xC3\x81\x8Da.KV[a3tV[\x16\x97`\x06\x88\x01T\x16\x96`\x05a\x12\xF4`@Q\x9D\x8E\x9C\x8D\x9B\x8C\x9A\x7F\x99\x9F\xBB\xB3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8CR`\x04\x8C\x01Ra\x12\xB8a\x12\xADa\x01\x04\x8D\x01\x88a.KV[\x93`$\x8D\x01\x90a1\xCFV[`d\x8B\x01R\x8A`\x84\x8B\x01R\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x97\x88\x8B\x84\x03\x01`\xA4\x8C\x01Ra1\x90V[\x91\x85\x88\x84\x03\x01`\xC4\x89\x01R\x01a.KV[\x91\x84\x83\x03\x01`\xE4\x85\x01Ra-\x89V[\x03\x92Z\xF1\x90\x81\x15a\x13hW\x86\x91a\x133W[P\x15a\x10\xB1W\x84\x91a\x0FrV[\x90P\x83\x81\x81=\x83\x11a\x13aW[a\x13J\x81\x83a,\x0EV[\x81\x01\x03\x12a\n\x90Wa\x13[\x90a3\xF6V[8a\x13&V[P=a\x13@V[`@Q=\x88\x82>=\x90\xFD[`\x04`@Q\x7Fl\xC7\x9C\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`$\x8B\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`!`\x04R\xFD[`\x04`@Q\x7F\x12\xC5\x1Cd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[Pa\x14\x18a\x14\x086`\xC0a\r\xEF\x8D\x80a/OV[a\x14\x126\x87a4\x85V[\x90a:\xA2V[a\r\xFCV[`\x04`@Q\x7F\x85Q\xD25\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x82\x93\x94P\x90a\x0C\x0C\x82a\x14Y\x93a/OV[\x92\x16\x91\x16\x10\x158\x83\x83\x8Ca\r\xD4V[`\x04`@Q\x7FW4@\x0C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[Pa\x14\xA6a\x05\x976`\xC0a\r\xEF\x8E\x80a/OV[a\r\xB3V[\x90Pa\x14\xC7\x91\x92P`@=`@\x11a\t\x8FWa\t\x81\x81\x83a,\x0EV[\x91\x90\x918a\r\x8CV[`\x04`@Q\x7FC\x8A\x8D\x16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04`@Q\x7FM|\xFCW\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04`@Q\x7F\x8C\xA9\x89\x90\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`$\x86\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`!`\x04R\xFD[`\x04`@Q\x7F\x93\x87\xF5\xD0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04`@Q\x7F\xA6\x07`C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[P4a\x01jW\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jWa\x02\xDE`@Qa\x16\r\x81a+\xF2V[`\x03\x81R\x7Fibc\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R`@Q\x91\x82\x91` \x83R` \x83\x01\x90a-\x89V[P4a\x01jW\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT`@\x1C\x16`@Q\x90\x81R\xF3[P4a\x01jW` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01jW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x16\xFF\x82a\x01\xD86`\x04\x88\x01a,\xC0V[\x81\x01`\x01\x81R\x03\x01\x90 T\x16`@Q\x90\x81R\xF3[P4a\x01jW` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jW`@` \x91`\x045\x81R\x80\x83R T`@Q\x90\x81R\xF3[P4a\x01jW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x02E\x82a\x17{a\x02 6a,\xDEV[\x81\x01`\x06\x81R\x03\x01\x90 \x90a-cV[P4a\x01jW` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01jW` a\x17\xE0a\x12W6`\x04\x86\x01a,\xC0V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[P4a\x01jW\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT`\x80\x1C\x16`@Q\x90\x81R\xF3[P4a\x01jW`\x04a\x18p` a\x18`a\x02 6a,\xDEV[\x81\x01`\x05\x81R\x03\x01\x90 \x90a-cV[\x80T\x92`\xFF\x80\x85\x16\x94`\x08\x1C\x16`@Q\x91a\x18\x8A\x83a+\xF2V[`@Qa\x18\x9E\x81a\x02\xC3\x81`\x01\x89\x01a.KV[\x83Ra\x18\xDD`@Q\x94a\x18\xBF\x86a\x18\xB8\x81`\x02\x85\x01a.KV[\x03\x87a,\x0EV[` \x85\x01\x95\x86Ra\x18\xD6`@Q\x80\x98\x81\x93\x01a.KV[\x03\x86a,\x0EV[`@Q\x95`\x05\x81\x10\x15a\x19\x8EW\x86R`\x03\x82\x10\x15a\x19aWPa\x02\xDE\x92a\x19\"\x86\x95\x93a\x19S\x93` \x88\x01R`\x80`@\x88\x01RQ`@`\x80\x88\x01R`\xC0\x87\x01\x90a-\x89V[\x90Q\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x86\x83\x03\x01`\xA0\x87\x01Ra-\x89V[\x90\x83\x82\x03``\x85\x01Ra-\x89V[\x80\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`$\x92R`!`\x04R\xFD[`$\x82\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`!`\x04R\xFD[P4a\x01jWa\x19\xCA6a.\xFFV[a\x19\xD4\x81\x80a/OV[a\x19\xE6a\n\xC7` \x92\x83\x81\x01\x90a/\x82V[a\x19\xF9a\x0B\x0Ba\x0B\x04a\n\xFA\x86\x80a/OV[a\x1A\x10`@Qa\x0B\x0B\x81a\x02\xC3\x81`\x01\x88\x01a.KV[\x03a\x15\xA5Wa\x1A(a\x0B\x0Ba\x0B\x04a\x0B?\x86\x80a/OV[a\x1A?`@Qa\x0B\x0B\x81a\x02\xC3\x81`\x02\x88\x01a.KV[\x03a\x15{Wa\x1ASa\x05\0`\x03\x83\x01a/\xD3V[\x90`\xFF`\x02\x83\x01T\x16`\x04\x81\x10\x15a\x15NW`\x03\x03a\x15$Wa\x1A\x82a\x08.a\x0B\xD8a\x0B\xACa\x0B\xA3\x88\x80a/OV[\x83\x81Q\x91\x01 \x90\x81\x86R\x85\x84R`@\x86 T\x80\x15a\x14\xFAWa\x1A\xAAa\x01\0a\x0C\x0C\x88\x80a/OV[\x87a\x1A\xBA`\xC0a\x0C\x0C\x8A\x80a/OV[a\x1A\xC9`\xE0a\x0C\x0C\x8B\x80a/OV[\x92\x88\x83a\x1A\xD9a\x0C@\x8D\x80a/OV[\x90\x81`@Q\x92\x83\x92\x837\x81\x01\x83\x81R\x03\x90`\x02Z\xFA\x15a\x10yW\x88\x93a\x07\xAAa\x1BX\x93a\x07~\x86Q`@Q\x94\x85\x93\x8A\x85\x01\x97\x88\x92`8\x94\x92\x91\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x92\x83\x80\x92`\xC0\x1B\x16\x86R`\xC0\x1B\x16`\x08\x85\x01R`\xC0\x1B\x16`\x10\x83\x01R`\x18\x82\x01R\x01\x90V[\x81\x01\x03\x90`\x02Z\xFA\x15a\x13hW\x86Q`@Q\x86\x81\x01\x91\x82R\x86\x81Ra\x1B|\x81a+\xF2V[Q\x90 \x03a\x14\xD0Wa\x1B\x91`@\x86\x01\x86a/\x82V[\x93a\x1B\xCDa\x0B\xD8a\x0B\xCBa\x1B\xC7\x8Aa\x1B\xACa\n\xFA\x82\x80a/OV[\x94\x90a\x0B\xD0a\x1B\xBEa\x0B?\x85\x80a/OV[\x96\x90\x94\x80a/OV[\x90a9\xA0V[\x86\x88\x01\x95\x87\x8Aa\x1B\xDD\x89\x8Ca/\x82V[\x90\x81`@Q\x92\x83\x92\x837\x81\x01\x83\x81R\x03\x90`\x02Z\xFA\x15a\x1E\xCBWa\x1C\x1C\x93\x8AQ\x93`@Q\x94\x8A\x86\x01R\x89\x85Ra\x1C\x12\x85a+\xF2V[``\x8B\x01\x90a6\\V[\x15a\x10\xB1WT`\x08\x1C`\xFF\x16`\x03\x81\x10\x15a\x15NW`\x02\x14a\x1D\xC6W[\x84R\x83\x82R\x83`@\x81 Us\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x1Cla\x0F\xB6a\x0F\x99a\x0F\x90\x87\x80a/OV[\x16\x84a\x1Cx\x85\x80a/OV[\x91a\x1C\x83\x84\x87a/\x82V[\x91\x90\x93\x81;\x15a\n\x94W\x83a\x1C\xD3\x91a\x1D\x03`@Q\x97\x88\x96\x87\x95\x86\x94\x7F\xFB\x8BS.\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86R```\x04\x87\x01R`d\x86\x01\x90a1\xF9V[\x91\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x85\x84\x03\x01`$\x86\x01Ra1\x90V[3`D\x83\x01R\x03\x92Z\xF1\x80\x15a\x1D\xBBWa\x1DxW[P\x91a\x10_a\x1Dk\x92a\x1DV\x7FGG\x14Pv^n\x1B\x0B\x05[\xA2\xA1\xDE\x04\xD4\xCEq\xF7x\xC9+0nrP\x83\xEB\x12\r\xFD\x89\x95a\x1DP\x85\x80a/OV[\x94a/\x82V[\x90`@Q\x95\x86\x95`@\x87R`@\x87\x01\x90a1\xF9V[\x92\x85\x84\x03\x90\x86\x01Ra1\x90V[a\x1Dk\x92a\x1DV\x7FGG\x14Pv^n\x1B\x0B\x05[\xA2\xA1\xDE\x04\xD4\xCEq\xF7x\xC9+0nrP\x83\xEB\x12\r\xFD\x89\x95\x93\x96a\x1D\xAFa\x10_\x94a+\xAFV[\x96\x93\x95PP\x92Pa\x1D\x18V[`@Q=\x87\x82>=\x90\xFD[a\x1D\xD3a\x0B\xCB\x85\x80a/OV[\x83a\x1D\xEAa\x1D\xE1\x87\x80a/OV[\x82\x81\x01\x90a/\x82V[\x91\x90\x82`@Q\x93\x84\x92\x837\x81\x01`\x08\x81R\x03\x01\x90 \x90a\x1E\ra\n\xD5\x87\x80a/OV[\x90a\x1E$g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94\x85\x93\x84\x93a0\xDFV[T\x16\x91\x16\x03a\x1E\xA1Wa\x1Ef\x84a\x1E>a\x1D\xE1\x88\x80a/OV[\x91\x90\x82`@Q\x93\x84\x92\x837\x81\x01`\x08\x81R\x03\x01\x90 a\x1E`a\n\xD5\x88\x80a/OV[\x90a0\xDFV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x82T\x91a\x1E\x96\x81\x84\x16a0\xF8V[\x16\x91\x16\x17\x90Ua\x1C9V[`\x04`@Q\x7F@*\x84\xA3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`@Q=\x8B\x82>=\x90\xFD[P4a\x01jW` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01jW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x1FA\x82a\x01\xD86`\x04\x88\x01a,\xC0V[\x81\x01`\n\x81R\x03\x01\x90 T\x16`@Q\x90\x81R\xF3[P4a\x01jWa\x02\xDEa\x02\xCAa\x03\x8D6a,\xDEV[P4a\x01jW` \x90\x81\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x03\xE7W\x83a\x01\xD8a\x1F\xC1\x926\x90`\x04\x01a,\xC0V[\x81\x01`\x04\x81R\x03\x01\x90 \x92`@Q\x92a\x1F\xE5\x84a\x1F\xDE\x81\x88a.KV[\x03\x85a,\x0EV[`\xFF`\x02\x86\x01T\x16\x92`@Q``\x81\x01\x81\x81\x10\x83\x82\x11\x17a!bW\x80`@Ra >\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xA0\x83a 6\x84`\x03\x8D\x01a.KV[\x03\x01\x82a,\x0EV[\x81R`@Q\x91a \\\x83a U\x81`\x04\x8C\x01a.KV[\x03\x84a,\x0EV[\x84\x82\x01\x92\x83R`@Q\x97\x85\x89\x01\x89\x81\x10\x83\x82\x11\x17a!5W\x90\x81`\x06\x92`@Ra \xAE\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x8Ca 6\x84`\x05\x87\x01a.KV[\x8AR`@\x84\x01\x99\x8AR\x01T\x16\x94a \xD0`@Q\x97`\x80\x89R`\x80\x89\x01\x90a-\x89V[\x93`\x04\x82\x10\x15a\x19aWP\x84\x92a!\x06\x88\x99\x95\x93a!\x14\x93a!+\x98\x8B\x01R\x89\x85\x03`@\x8B\x01RQ``\x85R``\x85\x01\x90a-\x89V[\x90Q\x83\x82\x03\x85\x85\x01Ra-\x89V[\x92Q\x90`@\x81\x85\x03\x91\x01RQ\x91\x81\x81R\x01\x90a-\x89V[\x90``\x83\x01R\x03\x90\xF3[`$\x86\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`A`\x04R\xFD[`$\x84\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`A`\x04R\xFD[P4a\x01jW``\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x03\xE7Wa!\xE0\x906\x90`\x04\x01a,\xC0V[\x90`$5\x81\x81\x11a\n\x94W\x92`\xFF\x92`@\x92a\"4a\"\x05` \x976\x90`\x04\x01a,\xC0V[a\"$\x88a\"\x11a-\xCCV[\x95\x81\x89Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a-@V[\x81\x01`\t\x81R\x03\x01\x90 \x90a-cV[\x91\x16\x82R\x84R T\x16`@Q\x90\x81R\xF3[P4a\x01jW` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01jWa\x02\xDEa\x02\xCA6`\x04\x85\x01a,\xC0V[P4a\x01jW` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x90\x80\x826\x01\x12a\x03\xE7Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x03\xE3W\x80`\x04\x01\x91`\x80\x80\x95\x836\x03\x01\x12a\n\x90Wa\"\xFA\x83\x80a/OV[\x91a#$a#\r``\x94\x85\x81\x01\x90a/\x82V[\x90a\n\xDFa#\x1B\x88\x80a/OV[\x8A\x81\x01\x90a/\x82V[\x90a#Aa\x0B\x0Ba\x0B\x04a#8\x88\x80a/OV[\x89\x81\x01\x90a/\x82V[a#X`@Qa\x0B\x0B\x81a\x02\xC3\x81`\x01\x89\x01a.KV[\x03a)\xFFWa#pa\x0B\x0Ba\x0B\x04a\n\xD5\x88\x80a/OV[a#\x87`@Qa\x0B\x0B\x81a\x02\xC3\x81`\x02\x89\x01a.KV[\x03a)\xD5Wa#\x9Ba\x05\0`\x03\x84\x01a/\xD3V[\x90`\xFF`\x02\x83\x01T\x16`\x04\x81\x10\x15a)\xA8W`\x03\x03a\x15$W\x83a#\xC4`\xE0a\x0C\x0C\x89\x80a/OV[\x16\x15\x15\x80a)\x8EW[a)dWa\x01\0\x84a#\xE3\x82a\x0C\x0C\x8A\x80a/OV[\x16\x15\x15\x80a)KW[a)!Wa$%\x88\x88\x8Ca$Oa$Da\x08.a\x0B\xD8a$\x0F`$\x8B\x01\x87a/\x82V[\x98\x90\x97a$\x1C\x88\x80a/OV[\x90\x81\x01\x90a/\x82V[\x92\x90a$4a\n\xD5\x89\x80a/OV[\x93\x90\x91a\x0B\xD0a\x0B\xCB\x8B\x80a/OV[\x95a\x0C\x0C\x84\x80a/OV[a$^`\xC0a\x0C\x0C\x85\x80a/OV[\x90\x8D\x83a$va\x0C@a\x0C9`\xE0a\x0C\x0C\x8A\x80a/OV[\x90\x81`@Q\x92\x83\x92\x837\x81\x01\x83\x81R\x03\x90`\x02Z\xFA\x15a\x10yW\x8D\x93a\x07\xAAa$\xF5\x93a\x07~\x86Q`@Q\x94\x85\x93\x8A\x85\x01\x97\x88\x92`8\x94\x92\x91\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x92\x83\x80\x92`\xC0\x1B\x16\x86R`\xC0\x1B\x16`\x08\x85\x01R`\xC0\x1B\x16`\x10\x83\x01R`\x18\x82\x01R\x01\x90V[\x81\x01\x03\x90`\x02Z\xFA\x15a)\x16Wa%&\x94`D\x8DQ\x95`@Q\x96\x8D\x88\x01R\x8C\x87Ra%\x1F\x87a+\xF2V[\x01\x90a6\\V[\x15a\x10\xB1WT`\x08\x1C`\xFF\x16`\x03\x81\x10\x15a(\xE9W`\x01\x81\x03a'\xF6WPa%\x89\x84a%^a%U\x86\x80a/OV[\x85\x81\x01\x90a/\x82V[\x91\x90\x82`@Q\x93\x84\x92\x837\x81\x01`\t\x81R\x03\x01\x90 a\x1E`a%\x80\x86\x80a/OV[\x88\x81\x01\x90a/\x82V[\x81a%\x97a\x0B\xCB\x86\x80a/OV[\x16\x87R\x84R`\xFF`@\x87 T\x16a'\xCCW\x85\x80a&\xA3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa&a\x87a\x0F\xB6a$\x1Ca\x0B\xD8a\x0F\xAC\x8E\x8Ea&\t\x81\x8Fa%\xE7\x90a$\x1C\x8B\x80a/OV[\x91\x90\x82`@Q\x93\x84\x92\x837\x81\x01`\t\x81R\x03\x01\x90 a\x1E`a%U\x8A\x80a/OV[\x90\x8Da&\x18a\x0B\xCB\x8A\x80a/OV[\x16\x8CRR`@\x8A `\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90U[a&X\x8Da$\x1C\x88\x80a/OV[\x94\x90\x96\x80a/OV[\x16a&l\x87\x80a/OV[`@Q\x94\x85\x80\x94\x81\x93\x7F#\x01\xC6\xF5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R3\x90`\x04\x84\x01a2\xD2V[\x03\x92Z\xF1\x91\x82\x15a\x08\xBAW\x87\x92a',W[PP\x90\x81\x7F4oCQ\xEE\x86]\x86\xA6y\xD0\x0F9\x95\xF0R\x0F\x80=:\"v\x04\xAF\x08C\x0E&\xE94Zz\x95a\x10J\x94\x93Qa&\xEFW[PPP\x80a/OV[a'\x10a'\x03a'$\x94a$\x1C\x87\x80a/OV[\x91\x90\x92a$\x1C\x87\x80a/OV[\x91a'\x1Ea\x0B\xCB\x88\x80a/OV[\x93a89V[8\x80\x80a&\xE6V[\x90\x93\x92\x91P=\x80\x88\x86>a'@\x81\x86a,\x0EV[\x84\x01\x93\x85\x81\x86\x03\x12a'\xC8W\x80Q\x91\x82\x11a'\xC8W\x01\x94\x83`\x1F\x87\x01\x12\x15a\x03\xDFW\x85Q\x93a'n\x85a,OV[\x90a'|`@Q\x92\x83a,\x0EV[\x85\x82R\x86\x86\x89\x01\x01\x11a'\xC8Wa'\xBDa\x10J\x95\x7F4oCQ\xEE\x86]\x86\xA6y\xD0\x0F9\x95\xF0R\x0F\x80=:\"v\x04\xAF\x08C\x0E&\xE94Zz\x98\x88\x80\x85\x01\x91\x01a-@V[\x91\x92\x93\x81\x96Pa&\xB5V[\x87\x80\xFD[`\x04`@Q\x7F\xA4k\xBA\xB4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x02\x03a\x13sW\x80a(1\x85a(\x0Fa\x0F\x90\x87\x80a/OV[\x91\x90\x82`@Q\x93\x84\x92\x837\x81\x01`\x07\x81R\x03\x01\x90 a\x1E`a#8\x87\x80a/OV[T\x16\x81a(Aa\x0B\xCB\x86\x80a/OV[\x16\x03a\x1E\xA1W\x85\x80a&\xA3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa&a\x87a\x0F\xB6a$\x1Ca\x0B\xD8a\x0F\xAC\x8Ea(\xAF\x8Fa(\x84\x8Fa$\x1C\x8A\x80a/OV[\x91\x90\x82`@Q\x93\x84\x92\x837\x81\x01`\x07\x81R\x03\x01\x90 a\x1E`a(\xA6\x89\x80a/OV[\x84\x81\x01\x90a/\x82V[\x80T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x8Ea(\xDE\x83\x82\x16a0\xF8V[\x16\x91\x16\x17\x90Ua&JV[`$\x87\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`!`\x04R\xFD[`@Q=\x8D\x82>=\x90\xFD[`\x04`@Q\x7F\xA4\x82\x12p\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[P\x84a)[\x82a\x0C\x0C\x8A\x80a/OV[\x16B\x10\x15a#\xECV[`\x04`@Q\x7F\xA9\xCF\xB7\x05\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[P\x83a)\x9F`\xE0a\x0C\x0C\x89\x80a/OV[\x16C\x10\x15a#\xCDV[`$\x8A\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`!`\x04R\xFD[`\x04`@Q\x7Fwf\x8E\xD1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04`@Q\x7F\xDA\x88\\\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[P4a\x01jW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x02E\x82a*Ja\x02 6a,\xDEV[\x81\x01`\x08\x81R\x03\x01\x90 \x90a-cV[P4a\x01jW`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\n\x98Wa*\xAA\x906\x90`\x04\x01a+\x81V[\x90`$5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x82\x84\x16\x80\x94\x03a\x03\xE3W0\x84\x14a\x03\xE3Wa*\xE1\x916\x91a,\x89V[`@Q\x91\x81Q\x92` \x81\x81\x85\x01\x95a*\xFA\x81\x83\x89a-@V[\x81\x01`\n\x81R\x03\x01\x90 T\x16a+WWa+\"\x91` \x91`@Q\x93\x84\x92\x83\x92Q\x92\x83\x91a-@V[\x81\x01`\n\x81R\x03\x01\x90 \x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90U\x80\xF3[`\x04`@Q\x7FF>\xEC\x90\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x91\x81`\x1F\x84\x01\x12\x15a\x08\xC5W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x08\xC5W` \x83\x81\x86\x01\x95\x01\x01\x11a\x08\xC5WV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a+\xC3W`@RV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`A`\x04R`$`\0\xFD[`@\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a+\xC3W`@RV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a+\xC3W`@RV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a+\xC3W`\x1F\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x16` \x01\x90V[\x92\x91\x92a,\x95\x82a,OV[\x91a,\xA3`@Q\x93\x84a,\x0EV[\x82\x94\x81\x84R\x81\x83\x01\x11a\x08\xC5W\x82\x81` \x93\x84`\0\x96\x017\x01\x01RV[\x90\x80`\x1F\x83\x01\x12\x15a\x08\xC5W\x81` a,\xDB\x935\x91\x01a,\x89V[\x90V[\x90`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x83\x01\x12a\x08\xC5Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x08\xC5W\x83a-)\x91`\x04\x01a,\xC0V[\x92`$5\x91\x82\x11a\x08\xC5Wa,\xDB\x91`\x04\x01a,\xC0V[`\0[\x83\x81\x10a-SWPP`\0\x91\x01RV[\x81\x81\x01Q\x83\x82\x01R` \x01a-CV[` \x90a-}\x92\x82`@Q\x94\x83\x86\x80\x95Q\x93\x84\x92\x01a-@V[\x82\x01\x90\x81R\x03\x01\x90 \x90V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x93a-\xC5\x81Q\x80\x92\x81\x87R\x87\x80\x88\x01\x91\x01a-@V[\x01\x16\x01\x01\x90V[`D5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x08\xC5WV[5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x08\xC5WV[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a.AW[` \x83\x10\x14a.\x12WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\"`\x04R`$`\0\xFD[\x91`\x7F\x16\x91a.\x07V[\x80T`\0\x93\x92a.Z\x82a-\xF8V[\x91\x82\x82R` \x93`\x01\x91`\x01\x81\x16\x90\x81`\0\x14a.\xC2WP`\x01\x14a.\x81W[PPPPPV[\x90\x93\x94\x95P`\0\x92\x91\x92R\x83`\0 \x92\x84`\0\x94[\x83\x86\x10a.\xAEWPPPP\x01\x01\x908\x80\x80\x80\x80a.zV[\x80T\x85\x87\x01\x83\x01R\x94\x01\x93\x85\x90\x82\x01a.\x96V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16\x86\x85\x01RPPP\x90\x15\x15`\x05\x1B\x01\x01\x91P8\x80\x80\x80\x80a.zV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x90` \x82\x82\x01\x12a\x08\xC5W`\x045\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x08\xC5W\x82`\xA0\x92\x03\x01\x12a\x08\xC5W`\x04\x01\x90V[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFE\xE1\x816\x03\x01\x82\x12\x15a\x08\xC5W\x01\x90V[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\x08\xC5W\x01\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x08\xC5W` \x01\x91\x816\x03\x83\x13a\x08\xC5WV[\x80T\x15a/\xE8W`\0R` `\0 \x90`\0\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`2`\x04R`$`\0\xFD[`@Q\x90\x81`\0\x82Ta0)\x81a-\xF8V[\x93`\x01\x91\x80\x83\x16\x90\x81\x15a0\x8FWP`\x01\x14a0QW[PP` \x92P`\x04\x81R\x03\x01\x90 \x90V[\x90\x91P`\0R` \x90` `\0 \x90`\0\x91[\x85\x83\x10a0{WPPPP` \x91\x81\x018\x80a0@V[\x80T\x87\x84\x01R\x86\x94P\x91\x83\x01\x91\x81\x01a0dV[\x91PP` \x94\x92P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x91P\x16\x82R\x80\x15\x15\x02\x81\x018\x80a0@V[5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x08\xC5W\x90V[` \x91\x92\x83`@Q\x94\x85\x93\x847\x82\x01\x90\x81R\x03\x01\x90 \x90V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x91\x16\x90\x81\x14a1\x11W`\x01\x01\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\x11`\x04R`$`\0\xFD[\x905\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x826\x03\x01\x81\x12\x15a\x08\xC5W\x01` \x815\x91\x01\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x08\xC5W\x816\x03\x83\x13a\x08\xC5WV[`\x1F\x82` \x94\x93\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x93\x81\x86R\x86\x86\x017`\0\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[` \x90a1\xF3\x82g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x83a1\xEA\x82a-\xE3V[\x16\x86R\x01a-\xE3V[\x16\x91\x01RV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x90a2\xACa2\x91a2va2[a2@a\x01 \x88a2 \x88a-\xE3V[\x16\x88Ra20` \x88\x01\x88a1@V[\x90\x91\x80` \x8B\x01R\x89\x01\x91a1\x90V[a2M`@\x87\x01\x87a1@V[\x90\x88\x83\x03`@\x8A\x01Ra1\x90V[a2h``\x86\x01\x86a1@V[\x90\x87\x83\x03``\x89\x01Ra1\x90V[a2\x83`\x80\x85\x01\x85a1@V[\x90\x86\x83\x03`\x80\x88\x01Ra1\x90V[a2\x9E`\xA0\x84\x01\x84a1@V[\x90\x85\x83\x03`\xA0\x87\x01Ra1\x90V[\x92a2\xBD`\xC0\x84\x01`\xC0\x84\x01a1\xCFV[a2\xCBa\x01\0\x80\x93\x01a-\xE3V[\x16\x91\x01R\x90V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa2\xFF` \x92\x95\x94\x95`@\x85R`@\x85\x01\x90a1\xF9V[\x94\x16\x91\x01RV[`!a3r\x91\x93\x92\x93`@Q\x94\x81a3(\x87\x93Q\x80\x92` \x80\x87\x01\x91\x01a-@V[\x82\x01\x7F/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01Ra3c\x82Q\x80\x93` \x87\x85\x01\x91\x01a-@V[\x01\x03`\x01\x81\x01\x85R\x01\x83a,\x0EV[V[a3\xA2` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a-@V[\x81\x01`\x03\x81R\x03\x01\x90 T\x16\x80\x15a3\xB7W\x90V[`\x04`@Q\x7F\xB6\xC7\x1F}\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x08\xC5WV[Q\x90\x81\x15\x15\x82\x03a\x08\xC5WV[\x91\x90\x82`@\x91\x03\x12a\x08\xC5Wa,\xDB` a4\x1D\x84a3\xE1V[\x93\x01a3\xF6V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xBC`@\x91\x01\x12a\x08\xC5W`@Q\x90a4[\x82a+\xF2V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82`D5\x82\x81\x16\x81\x03a\x08\xC5W\x81R`d5\x91\x82\x16\x82\x03a\x08\xC5W` \x01RV[\x91\x90\x82`@\x91\x03\x12a\x08\xC5W`@Qa4\x9D\x81a+\xF2V[` a4\xB6\x81\x83\x95a4\xAE\x81a-\xE3V[\x85R\x01a-\xE3V[\x91\x01RV[\x90` a4\xDC\x94\x92\x82`@Q\x93\x84\x92\x837\x81\x01`\x05\x81R\x03\x01\x90 \x91a0\xDFV[`\xFF\x81T\x16`\x05\x81\x10\x15a5\x1EW`\x03\x03a4\xF4W\x90V[`\x04`@Q\x7F\x96\xD0\x91F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`!`\x04R`$`\0\xFD[`@Qa5w` \x82\x81a5j\x81\x83\x01\x96\x87\x81Q\x93\x84\x92\x01a-@V[\x81\x01\x03\x80\x84R\x01\x82a,\x0EV[Q\x90 \x90V[`G\x90a5\x97g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa,\xDB\x94\x95\x16a;9V[`@Q\x94\x85\x92\x7Fcommitments/ports/\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x85\x01Ra5\xD7\x81Q\x80\x92` `2\x88\x01\x91\x01a-@V[\x83\x01\x7F/channels/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`2\x82\x01Ra6\x13\x82Q\x80\x93` `<\x85\x01\x91\x01a-@V[\x01\x7F/sequences/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`<\x82\x01Ra6M\x82Q\x80\x93` \x87\x85\x01\x91\x01a-@V[\x01\x03`'\x81\x01\x84R\x01\x82a,\x0EV[\x93\x90\x94`@Q\x80a6m\x81\x88a.KV[\x03a6x\x90\x82a,\x0EV[a6\x81\x90a3tV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x93`\x06\x86\x01Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x92`@Q\x96\x87\x95\x86\x95\x7F\xF9\xBBZQ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87R`\x04\x87\x01a\x01 \x90Ra\x01$\x87\x01a6\xEB\x90\x84a.KV[\x9A`$\x88\x01a6\xF9\x91a1\xCFV[`d\x87\x01R`\0\x99\x8A`\x84\x88\x01R\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x94\x85\x88\x83\x03\x01`\xA4\x89\x01Ra7<\x92a1\x90V[\x85\x81\x03\x84\x01`\xC4\x87\x01Ra7R\x91`\x05\x01a.KV[\x82\x85\x82\x03\x01`\xE4\x86\x01Ra7e\x91a-\x89V[\x90\x83\x82\x03\x01a\x01\x04\x84\x01Ra7y\x91a-\x89V[\x03\x81\x85Z\x94` \x95\xF1\x91\x82\x15a7\xCAW\x80\x92a7\x94WPP\x90V[\x90\x91P` \x82=` \x11a7\xC2W[\x81a7\xB0` \x93\x83a,\x0EV[\x81\x01\x03\x12a\x01jWPa,\xDB\x90a3\xF6V[=\x91Pa7\xA3V[`@Q\x90=\x90\x82>=\x90\xFD[` a\x01\xD8s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x93a7\xFA\x93a3\x06V[\x81\x01`\n\x81R\x03\x01\x90 T\x16\x80\x15a8\x0FW\x90V[`\x04`@Q\x7F\xC6\x83\x0C\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x93\x91\x95\x94\x90\x92\x81Q\x15a9vWa8R\x81\x88\x86\x88a4\xBBV[Pa8m\x83a8b6\x87\x89a,\x89V[a\x1B\xC76\x85\x8Ca,\x89V[\x80Q` \x80\x92\x01 \x91`\0\x98\x83\x8AR\x89\x83R`@\x93\x84\x8B Ta9MW\x83\x8B\x86Q\x80\x83a8\xA0\x8B\x83\x81Q\x93\x84\x92\x01a-@V[\x81\x01\x03\x90`\x02Z\xFA\x15a9CW\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92a9+\x92\x86\x95a9>\x99\x98\x97\x8E\x7F9\xB1Fh\x93\x0C\x81o$O@s\xC0\xFD\xF4Y\xD3\xDDs\xAEW\x1BW\xB3\xEF\xE8 Y\x19G-*\x9E\x9FQ\x82Q\x87\x81\x01\x91\x82R\x87\x81Ra8\xFD\x81a+\xF2V[Q\x90 \x92\x81R\x80\x86R Ua9\x1E\x86Q\x9B\x8C\x9B`\x80\x8DR`\x80\x8D\x01\x91a1\x90V[\x92\x8A\x84\x03\x90\x8B\x01Ra1\x90V[\x93\x16\x90\x85\x01R\x83\x82\x03``\x85\x01Ra-\x89V[\x03\x90\xA1V[\x84Q=\x8C\x82>=\x90\xFD[`\x04\x85Q\x7F\\mw\x11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04`@Q\x7F$0\xF4\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`@\x90a9\xBAg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa,\xDB\x94\x95\x16a;9V[\x82Q\x94\x85\x92\x7Facks/ports/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x85\x01Ra9\xF9\x81Q\x80\x92` `+\x88\x01\x91\x01a-@V[\x83\x01\x7F/channels/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`+\x82\x01Ra:5\x82Q\x80\x93` `5\x85\x01\x91\x01a-@V[\x01\x7F/sequences/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`5\x82\x01Ra:o\x82Q\x80\x93` \x87\x85\x01\x91\x01a-@V[\x01\x03` \x81\x01\x84R\x01\x82a,\x0EV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82Q\x16\x15\x91\x82a:\x97WPP\x90V[` \x01Q\x16\x15\x91\x90PV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x82\x82Q\x16\x92\x80\x82Q\x16\x80\x85\x11\x94\x85\x15a:\xC8W[PPPPP\x90V[\x14\x93P\x90\x91\x83a:\xE0W[PPP8\x80\x80\x80\x80a:\xC0V[\x81\x92\x93P\x90` \x80\x92\x01Q\x16\x92\x01Q\x16\x11\x158\x80\x80a:\xD3V[a;(` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a-@V[\x81\x01`\n\x81R\x03\x01\x90 T\x163\x14\x90V[\x90`@Q\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x80\x82\x01\x93`\xA0\x83\x01`@R`\0\x85R\x93[\x01\x92`\n\x90\x81\x81\x06`0\x01\x85S\x04\x92\x83\x15a;\xACW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90a;pV[\x92P`\x80\x83\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x92\x03\x01\x92\x01\x91\x82RV\xFE\xA2dipfsX\"\x12 \xD57~\xD6\xCE1\x0EDm\x05\xF2\xB7\x18\xC4\n\t\x0E\xD3\xC3\x08\xBA%\x02\xF2\xD1Sv\xCF\xF4\x91\xCC\\dsolcC\0\x08\x17\x003"; + /// The bytecode of the contract. + #[cfg(feature = "providers")] + pub static IBCPACKET_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__BYTECODE); + #[rustfmt::skip] + #[cfg(feature = "providers")] + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R`\x046\x10\x15a\0\x12W`\0\x80\xFD[`\0\x805`\xE0\x1C\x80c\x11~\x88j\x14a*ZW\x80c\x13\x90\xD2\x8D\x14a*)W\x80c#n\xBDp\x14a\"\x98W\x80c%p\xDA\xE0\x14a\"EW\x80c&\x07\x847\x14a!\x8FW\x80c1\x97?\0\x14a\x1FjW\x80c;\xC33\x9F\x14a\x1FUW\x80cW\x17\xBC\xF5\x14a\x1E\xD6W\x80cY\xF3yv\x14a\x19\xBBW\x80c[=\xE2`\x14a\x18GW\x80cy&\xB8\xA9\x14a\x17\xFEW\x80c~\xB7\x892\x14a\x17\x8BW\x80c\x82\x1C\xB5\xD0\x14a\x17ZW\x80c\x83\x9D\xF9E\x14a\x17\x13W\x80c\x99\x04\x91\xA5\x14a\x16\x94W\x80c\xA0I\xE6w\x14a\x16KW\x80c\xA9U\r\xAC\x14a\x15\xCFW\x80c\xAA\x18\xC8\xB1\x14a\n\x9CW\x80c\xAEL\xD2\x01\x14a\x03\xEBW\x80c\xB5ny\xDE\x14a\x02\xE2W\x80c\xC28\x01\x05\x14a\x02OW\x80c\xC90\xB1\xB0\x14a\x01\xFFW\x80c\xD1){\x8D\x14a\x01mWc\xE1\xB1{C\x14a\x01%W`\0\x80\xFD[4a\x01jW\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT\x16`@Q\x90\x81R\xF3[\x80\xFD[P4a\x01jW` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01jW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xEB\x82a\x01\xD86`\x04\x88\x01a,\xC0V[\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a-@V[\x81\x01`\x03\x81R\x03\x01\x90 T\x16`@Q\x90\x81R\xF3[P4a\x01jW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x02E\x82a\x025a\x02 6a,\xDEV[\x92\x90\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a-@V[\x81\x01`\x07\x81R\x03\x01\x90 \x90a-cV[T\x16`@Q\x90\x81R\xF3[P4a\x01jW` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01jWa\x02\xDEa\x02\xC3a\x02\xCAa\x02\xAD` a\x01\xD86`\x04\x89\x01a,\xC0V[\x81\x01`\x02\x81R\x03\x01\x90 `@Q\x92\x83\x80\x92a.KV[\x03\x82a,\x0EV[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a-\x89V[\x03\x90\xF3[P4a\x01jW`\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x03\xE7Wa\x033\x906\x90`\x04\x01a+\x81V[\x91`$5\x81\x81\x11a\x03\xE3Wa\x03L\x906\x90`\x04\x01a+\x81V[\x90a\x03Ua-\xCCV[\x92`d5\x90\x81\x11a\x03\xDFWa\x03n\x906\x90`\x04\x01a+\x81V[a\x03\x98a\x03\x93a\x03\x82\x98\x93\x986\x85\x8Aa,\x89V[a\x03\x8D6\x88\x88a,\x89V[\x90a3\x06V[a:\xFAV[\x15a\x03\xB5Wa\x03\xB2\x96a\x03\xAC\x916\x91a,\x89V[\x94a89V[\x80\xF3[`\x04`@Q\x7F\xCC\x12\xCE\xF6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x86\x80\xFD[\x84\x80\xFD[\x82\x80\xFD[P4a\x01jW`\xC0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\n\x98Wa\x04;\x906\x90`\x04\x01a+\x81V[\x90`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\n\x94Wa\x04\\\x906\x90`\x04\x01a+\x81V[\x92\x90`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xBC6\x01\x12a\x03\xE3Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x845\x16`\x845\x03a\x08\xC5W`\xA45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\n\x90Wa\x04\xBD\x906\x90`\x04\x01a+\x81V[\x90\x91a\x04\xDBa\x03\x93a\x04\xD06\x87\x89a,\x89V[a\x03\x8D6\x8A\x86a,\x89V[\x15a\x03\xB5Wa\x02\xC3a\x05\x12a\x05\x06a\x05\0`\x03a\x04\xFA\x8B\x87\x8B\x8Da4\xBBV[\x01a/\xD3V[Pa0\x17V[`@Q\x92\x83\x80\x92a.KV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x050\x82a3tV[\x16\x90`@Q\x90\x7F2\x96\x81\xD0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R` `\x04\x83\x01R``\x82\x80a\x05q`$\x82\x01\x85a-\x89V[\x03\x81\x86Z\xFA\x80\x15a\n\x85W\x8A\x92\x8B\x91a\n\rW[P\x15a\t\xE3Wa\x05\x9Ca\x05\x976a4$V[a:~V[\x15\x80a\t\xCBW[a\t\xA1Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92a\x05\xF7` \x92`@\x94\x85Q\x96\x87\x95\x86\x94\x85\x94\x7FK\x0B\xBD\xC4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86R```\x04\x87\x01R`d\x86\x01\x90a-\x89V[\x92\x82\x81Q\x16`$\x86\x01R\x01Q\x16`D\x83\x01R\x03\x91Z\xFA\x80\x15a\t\x96W\x88\x91\x89\x91a\teW[P\x15a\t;Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x845\x16\x15\x15\x90\x81a\t!W[Pa\x08\xF7Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x06e`@Q\x86\x88\x827` \x81\x88\x81\x01`\x06\x81R\x03\x01\x90 \x88\x84a0\xDFV[T\x16\x95`\x01\x87\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x08\xCAWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x06\xA3`@Q\x88\x8A\x827` \x81\x8A\x81\x01`\x06\x81R\x03\x01\x90 \x84\x86a0\xDFV[\x91\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x82T\x16\x17\x90Ug\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`D5\x16`D5\x03a\x08\xC5Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`d5\x16`d5\x03a\x08\xC5W` \x88`@Q\x85\x87\x827\x80\x86\x81\x01\x83\x81R\x03\x90`\x02Z\xFA\x15a\x08\xBAW` \x88a\x07\xBB\x81Q`@Qa\x07\xAA\x81a\x07~\x87\x82\x01\x94`d5`D5`\x845\x88\x92`8\x94\x92\x91\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x92\x83\x80\x92`\xC0\x1B\x16\x86R`\xC0\x1B\x16`\x08\x85\x01R`\xC0\x1B\x16`\x10\x83\x01R`\x18\x82\x01R\x01\x90V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a,\x0EV[`@Q\x92\x83\x92\x83\x92Q\x92\x83\x91a-@V[\x81\x01\x03\x90`\x02Z\xFA\x15a\x08\xBAW\x91a\x08k\x7F*\x89\xCA\x0E\x96*a\xB8\x11Uu\xDAc\xF5K\xB2I\xCF\x017\x94\x7F\xC9\xAB\x01j\xC9\xDF\x88\xAA4~\x96\x95\x94\x92a\x08\xAF\x94\x8A`@` \x9CQ\x81Q\x8E\x81\x01\x91\x82R\x8E\x81Ra\x08\x10\x81a+\xF2V[Q\x90 \x91a\x084\x8Da\x08#6\x8D\x8Fa,\x89V[a\x08.6\x88\x8Aa,\x89V[\x90a5}V[\x8E\x81Q\x91\x01 \x81R\x80\x8ER Ua\x08]`@Q\x98\x89\x98\x8C\x8AR`\xE0\x8E\x8B\x01R`\xE0\x8A\x01\x91a1\x90V[\x91\x87\x83\x03`@\x89\x01Ra1\x90V[\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`D5\x16``\x86\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`d5\x16`\x80\x86\x01Rg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x845\x16`\xA0\x86\x01R\x84\x83\x03`\xC0\x86\x01Ra1\x90V[\x03\x90\xA1`@Q\x90\x81R\xF3[`@Q=\x89\x82>=\x90\xFD[`\0\x80\xFD[`$\x89\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x11`\x04R\xFD[`\x04`@Q\x7F\xE6'|\xE0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x90Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80`\x845\x16\x91\x16\x10\x158a\x068V[`\x04`@Q\x7F\x9Bl\x9A\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x90Pa\t\x89\x91P`@=`@\x11a\t\x8FW[a\t\x81\x81\x83a,\x0EV[\x81\x01\x90a4\x03V[8a\x06\x1CV[P=a\twV[`@Q=\x8A\x82>=\x90\xFD[`\x04`@Q\x7F\xC8\xE1\xD2d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[Pa\t\xDEa\t\xD86a4$V[\x83a:\xA2V[a\x05\xA3V[`\x04`@Q\x7F\xE5=N7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x92PP``=``\x11a\n~W[a\n%\x81\x84a,\x0EV[``\x83\x82\x81\x01\x03\x12a\nzW\x82`@\x91\x81\x01\x03\x12a\nvWa\np`@\x80Q\x93a\nN\x85a+\xF2V[a\nW\x81a3\xE1V[\x85Ra\ne` \x82\x01a3\xE1V[` \x86\x01R\x01a3\xF6V[8a\x05\x85V[\x89\x80\xFD[\x8A\x80\xFD[P=a\n\x1BV[`@Q=\x8C\x82>=\x90\xFD[\x85\x80\xFD[\x83\x80\xFD[P\x80\xFD[P4a\x01jWa\n\xAB6a.\xFFV[a\n\xB5\x81\x80a/OV[a\n\xE7a\n\xC7` \x92\x83\x81\x01\x90a/\x82V[\x90a\n\xDFa\n\xD5\x86\x80a/OV[`@\x81\x01\x90a/\x82V[\x92\x90\x91a4\xBBV[a\x0B\x10a\x0B\x0Ba\x0B\x04a\n\xFA\x86\x80a/OV[``\x81\x01\x90a/\x82V[6\x91a,\x89V[a5MV[a\x0B'`@Qa\x0B\x0B\x81a\x02\xC3\x81`\x01\x88\x01a.KV[\x03a\x15\xA5Wa\x0BIa\x0B\x0Ba\x0B\x04a\x0B?\x86\x80a/OV[`\x80\x81\x01\x90a/\x82V[a\x0B``@Qa\x0B\x0B\x81a\x02\xC3\x81`\x02\x88\x01a.KV[\x03a\x15{Wa\x0Bta\x05\0`\x03\x83\x01a/\xD3V[\x90`\xFF`\x02\x83\x01T\x16`\x04\x81\x10\x15a\x15NW`\x03\x03a\x15$Wa\x0B\xE0a\x08.a\x0B\xD8a\x0B\xACa\x0B\xA3\x88\x80a/OV[\x87\x81\x01\x90a/\x82V[\x92\x90a\x0B\xBBa\n\xD5\x8A\x80a/OV[\x93\x90\x91a\x0B\xD0a\x0B\xCB\x8C\x80a/OV[a0\xCAV[\x956\x91a,\x89V[\x926\x91a,\x89V[\x83\x81Q\x91\x01 \x90\x81\x86R\x85\x84R`@\x86 T\x80\x15a\x14\xFAWa\x01\0\x90\x86\x88a\x0C\x12\x84a\x0C\x0C\x84\x80a/OV[\x01a0\xCAV[a\x0C!`\xC0a\x0C\x0C\x85\x80a/OV[\x90\x89\x83a\x0CJa\x0C@a\x0C9`\xE0a\x0C\x0C\x8A\x80a/OV[\x97\x80a/OV[`\xA0\x81\x01\x90a/\x82V[\x90\x81`@Q\x92\x83\x92\x837\x81\x01\x83\x81R\x03\x90`\x02Z\xFA\x15a\x10yW\x89\x93a\x07\xAAa\x0C\xC9\x93a\x07~\x86Q`@Q\x94\x85\x93\x8A\x85\x01\x97\x88\x92`8\x94\x92\x91\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x92\x83\x80\x92`\xC0\x1B\x16\x86R`\xC0\x1B\x16`\x08\x85\x01R`\xC0\x1B\x16`\x10\x83\x01R`\x18\x82\x01R\x01\x90V[\x81\x01\x03\x90`\x02Z\xFA\x15a\x08\xBAW\x87Q`@Q\x87\x81\x01\x91\x82R\x87\x81Ra\x0C\xED\x81a+\xF2V[Q\x90 \x03a\x14\xD0Wa\r'\x93`@Qa\r\n\x81a\x02\xC3\x81\x85a.KV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x95\x86\x91a3tV[\x16`@\x88\x01\x92`@\x80Q\x80\x93\x7FK\x0B\xBD\xC4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R```\x04\x83\x01R\x81\x80a\rl`d\x82\x01\x89a.KV[a\ry`$\x83\x01\x8Ba1\xCFV[\x03\x91Z\xFA\x80\x15a\n\x85W\x8A\x92\x8B\x91a\x14\xABW[P\x15a\t;Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x82a\r\xAB\x83a\x0C\x0C\x8D\x80a/OV[\x16\x15\x80a\x14\x92W[a\x14hW\x89\x90\x83\x83\x81a\r\xCA\x82a\x0C\x0C\x87\x80a/OV[\x16\x15\x15\x93\x84a\x14GW[PPPPa\x14\x1DWa\r\xF5a\x05\x976`\xC0a\r\xEF\x8D\x80a/OV[\x01a4\x85V[\x15\x80a\x13\xF4W[a\x13\xCAW`\xFF\x85T`\x08\x1C\x16`\x03\x81\x10\x15a\x13\x9DW`\x02\x81\x03a\x11\x05WPP`\x80\x88\x01\x90a\x0E)\x82a0\xCAV[\x90\x80a\x0E8a\x0B\xCB\x8C\x80a/OV[\x16\x91\x16\x11\x15a\x10\xDBW\x87\x87a\x0F\\\x94a\x0F\x1Ca\x0F\r\x94a\x0B\xCB`Aa\x0E_\x86\x88\x01\x88a/\x82V[\x97\x90\x96a\x0E\x96a\x0B?a\x0E\x8Ea\x0E\x84a\x0E{a\n\xFA\x87\x80a/OV[\x93\x90\x96\x80a/OV[\x95\x90\x926\x91a,\x89V[\x936\x91a,\x89V[\x90`@Q\x9A\x8B\x93\x7FnextSequenceRecv/ports/\0\0\0\0\0\0\0\0\0\x83\x86\x01Ra\x0E\xD5\x81Q\x80\x92\x85`7\x89\x01\x91\x01a-@V[\x84\x01\x91\x7F/channels/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`7\x84\x01R\x83Q\x93\x84\x91\x87\x85\x01\x91\x01a-@V[\x01\x03`!\x81\x01\x89R\x01\x87a,\x0EV[\x94\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`@Q\x96`\xC0\x1B\x16\x8B\x87\x01R`\x08\x86Ra\x0FW\x86a+\xF2V[a6\\V[\x15a\x10\xB1W`\xFF`\x05\x91T\x16\x10\x15a\x10\x84W\x90\x84\x91[\x82R\x81\x83R\x81`@\x81 Ua\x0F\xBCa\x0F\xB6a\x0F\x99a\x0F\x90\x87\x80a/OV[\x86\x81\x01\x90a/\x82V[a\x0B\xD8a\x0F\xACa\n\xD5\x8A\x80\x96\x95\x96a/OV[\x94\x90\x926\x91a,\x89V[\x90a7\xD6V[\x16a\x0F\xC7\x84\x80a/OV[\x90\x80;\x15a\x03\xE7Wa\x10\x0E\x83\x92\x91\x83\x92`@Q\x94\x85\x80\x94\x81\x93\x7FR\xC7\x15}\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R3\x90`\x04\x84\x01a2\xD2V[\x03\x92Z\xF1\x80\x15a\x10yWa\x10eW[PPa\x10J\x82\x7F\xA6\xCC\xDF\xD0b\x94\xBB\xB4\x81\xB7\xB0\x8A\xB1p\xC17|\xCC\xDC\xAA\x9E5\xB2\xE3F\xA3n\xE3*\x1F\x8F\x06\x93a/OV[\x90a\x10_`@Q\x92\x82\x84\x93\x84R\x83\x01\x90a1\xF9V[\x03\x90\xA1\x80\xF3[a\x10n\x90a+\xAFV[a\x03\xE7W\x828a\x10\x1DV[`@Q=\x84\x82>=\x90\xFD[`$\x85\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`!`\x04R\xFD[`\x04`@Q\x7F\x14 \x992\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04`@Q\x7F\xE7X\xEF\x82\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x95\x96\x95\x93\x94P\x91\x92`\x01\x03a\x13sW\x86\x92\x89a\x11u\x93a\x13\x14\x8Ba\x11ma\x12?`Da\x0B\xCBa\x11|\x8Aa\x11:\x8E\x88\x01\x88a/\x82V[\x9D\x90\x97a\x11Ja\n\xFA\x82\x80a/OV[\x98\x90a\x11ea\x11\\a\x0B?\x85\x80a/OV[\x98\x90\x94\x80a/OV[\x996\x91a,\x89V[\x946\x91a,\x89V[\x95\x16a;9V[\x8Ca\x120`@Q\x96\x87\x94\x7Freceipts/ports/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84\x87\x01Ra\x11\xBE\x81Q\x80\x92\x86`/\x8A\x01\x91\x01a-@V[\x85\x01\x7F/channels/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`/\x82\x01Ra\x11\xF9\x82Q\x80\x93\x86`9\x85\x01\x91\x01a-@V[\x01\x91\x7F/sequences/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`9\x84\x01R\x83Q\x93\x84\x91\x87\x85\x01\x91\x01a-@V[\x01\x03`$\x81\x01\x84R\x01\x82a,\x0EV[a\x13\x05\x8Ba\x12\\`@Qa\x12W\x81a\x02\xC3\x81\x8Da.KV[a3tV[\x16\x97`\x06\x88\x01T\x16\x96`\x05a\x12\xF4`@Q\x9D\x8E\x9C\x8D\x9B\x8C\x9A\x7F\x99\x9F\xBB\xB3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8CR`\x04\x8C\x01Ra\x12\xB8a\x12\xADa\x01\x04\x8D\x01\x88a.KV[\x93`$\x8D\x01\x90a1\xCFV[`d\x8B\x01R\x8A`\x84\x8B\x01R\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x97\x88\x8B\x84\x03\x01`\xA4\x8C\x01Ra1\x90V[\x91\x85\x88\x84\x03\x01`\xC4\x89\x01R\x01a.KV[\x91\x84\x83\x03\x01`\xE4\x85\x01Ra-\x89V[\x03\x92Z\xF1\x90\x81\x15a\x13hW\x86\x91a\x133W[P\x15a\x10\xB1W\x84\x91a\x0FrV[\x90P\x83\x81\x81=\x83\x11a\x13aW[a\x13J\x81\x83a,\x0EV[\x81\x01\x03\x12a\n\x90Wa\x13[\x90a3\xF6V[8a\x13&V[P=a\x13@V[`@Q=\x88\x82>=\x90\xFD[`\x04`@Q\x7Fl\xC7\x9C\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`$\x8B\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`!`\x04R\xFD[`\x04`@Q\x7F\x12\xC5\x1Cd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[Pa\x14\x18a\x14\x086`\xC0a\r\xEF\x8D\x80a/OV[a\x14\x126\x87a4\x85V[\x90a:\xA2V[a\r\xFCV[`\x04`@Q\x7F\x85Q\xD25\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x82\x93\x94P\x90a\x0C\x0C\x82a\x14Y\x93a/OV[\x92\x16\x91\x16\x10\x158\x83\x83\x8Ca\r\xD4V[`\x04`@Q\x7FW4@\x0C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[Pa\x14\xA6a\x05\x976`\xC0a\r\xEF\x8E\x80a/OV[a\r\xB3V[\x90Pa\x14\xC7\x91\x92P`@=`@\x11a\t\x8FWa\t\x81\x81\x83a,\x0EV[\x91\x90\x918a\r\x8CV[`\x04`@Q\x7FC\x8A\x8D\x16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04`@Q\x7FM|\xFCW\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04`@Q\x7F\x8C\xA9\x89\x90\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`$\x86\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`!`\x04R\xFD[`\x04`@Q\x7F\x93\x87\xF5\xD0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04`@Q\x7F\xA6\x07`C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[P4a\x01jW\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jWa\x02\xDE`@Qa\x16\r\x81a+\xF2V[`\x03\x81R\x7Fibc\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R`@Q\x91\x82\x91` \x83R` \x83\x01\x90a-\x89V[P4a\x01jW\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT`@\x1C\x16`@Q\x90\x81R\xF3[P4a\x01jW` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01jW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x16\xFF\x82a\x01\xD86`\x04\x88\x01a,\xC0V[\x81\x01`\x01\x81R\x03\x01\x90 T\x16`@Q\x90\x81R\xF3[P4a\x01jW` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jW`@` \x91`\x045\x81R\x80\x83R T`@Q\x90\x81R\xF3[P4a\x01jW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x02E\x82a\x17{a\x02 6a,\xDEV[\x81\x01`\x06\x81R\x03\x01\x90 \x90a-cV[P4a\x01jW` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01jW` a\x17\xE0a\x12W6`\x04\x86\x01a,\xC0V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[P4a\x01jW\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x0BT`\x80\x1C\x16`@Q\x90\x81R\xF3[P4a\x01jW`\x04a\x18p` a\x18`a\x02 6a,\xDEV[\x81\x01`\x05\x81R\x03\x01\x90 \x90a-cV[\x80T\x92`\xFF\x80\x85\x16\x94`\x08\x1C\x16`@Q\x91a\x18\x8A\x83a+\xF2V[`@Qa\x18\x9E\x81a\x02\xC3\x81`\x01\x89\x01a.KV[\x83Ra\x18\xDD`@Q\x94a\x18\xBF\x86a\x18\xB8\x81`\x02\x85\x01a.KV[\x03\x87a,\x0EV[` \x85\x01\x95\x86Ra\x18\xD6`@Q\x80\x98\x81\x93\x01a.KV[\x03\x86a,\x0EV[`@Q\x95`\x05\x81\x10\x15a\x19\x8EW\x86R`\x03\x82\x10\x15a\x19aWPa\x02\xDE\x92a\x19\"\x86\x95\x93a\x19S\x93` \x88\x01R`\x80`@\x88\x01RQ`@`\x80\x88\x01R`\xC0\x87\x01\x90a-\x89V[\x90Q\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x86\x83\x03\x01`\xA0\x87\x01Ra-\x89V[\x90\x83\x82\x03``\x85\x01Ra-\x89V[\x80\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`$\x92R`!`\x04R\xFD[`$\x82\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`!`\x04R\xFD[P4a\x01jWa\x19\xCA6a.\xFFV[a\x19\xD4\x81\x80a/OV[a\x19\xE6a\n\xC7` \x92\x83\x81\x01\x90a/\x82V[a\x19\xF9a\x0B\x0Ba\x0B\x04a\n\xFA\x86\x80a/OV[a\x1A\x10`@Qa\x0B\x0B\x81a\x02\xC3\x81`\x01\x88\x01a.KV[\x03a\x15\xA5Wa\x1A(a\x0B\x0Ba\x0B\x04a\x0B?\x86\x80a/OV[a\x1A?`@Qa\x0B\x0B\x81a\x02\xC3\x81`\x02\x88\x01a.KV[\x03a\x15{Wa\x1ASa\x05\0`\x03\x83\x01a/\xD3V[\x90`\xFF`\x02\x83\x01T\x16`\x04\x81\x10\x15a\x15NW`\x03\x03a\x15$Wa\x1A\x82a\x08.a\x0B\xD8a\x0B\xACa\x0B\xA3\x88\x80a/OV[\x83\x81Q\x91\x01 \x90\x81\x86R\x85\x84R`@\x86 T\x80\x15a\x14\xFAWa\x1A\xAAa\x01\0a\x0C\x0C\x88\x80a/OV[\x87a\x1A\xBA`\xC0a\x0C\x0C\x8A\x80a/OV[a\x1A\xC9`\xE0a\x0C\x0C\x8B\x80a/OV[\x92\x88\x83a\x1A\xD9a\x0C@\x8D\x80a/OV[\x90\x81`@Q\x92\x83\x92\x837\x81\x01\x83\x81R\x03\x90`\x02Z\xFA\x15a\x10yW\x88\x93a\x07\xAAa\x1BX\x93a\x07~\x86Q`@Q\x94\x85\x93\x8A\x85\x01\x97\x88\x92`8\x94\x92\x91\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x92\x83\x80\x92`\xC0\x1B\x16\x86R`\xC0\x1B\x16`\x08\x85\x01R`\xC0\x1B\x16`\x10\x83\x01R`\x18\x82\x01R\x01\x90V[\x81\x01\x03\x90`\x02Z\xFA\x15a\x13hW\x86Q`@Q\x86\x81\x01\x91\x82R\x86\x81Ra\x1B|\x81a+\xF2V[Q\x90 \x03a\x14\xD0Wa\x1B\x91`@\x86\x01\x86a/\x82V[\x93a\x1B\xCDa\x0B\xD8a\x0B\xCBa\x1B\xC7\x8Aa\x1B\xACa\n\xFA\x82\x80a/OV[\x94\x90a\x0B\xD0a\x1B\xBEa\x0B?\x85\x80a/OV[\x96\x90\x94\x80a/OV[\x90a9\xA0V[\x86\x88\x01\x95\x87\x8Aa\x1B\xDD\x89\x8Ca/\x82V[\x90\x81`@Q\x92\x83\x92\x837\x81\x01\x83\x81R\x03\x90`\x02Z\xFA\x15a\x1E\xCBWa\x1C\x1C\x93\x8AQ\x93`@Q\x94\x8A\x86\x01R\x89\x85Ra\x1C\x12\x85a+\xF2V[``\x8B\x01\x90a6\\V[\x15a\x10\xB1WT`\x08\x1C`\xFF\x16`\x03\x81\x10\x15a\x15NW`\x02\x14a\x1D\xC6W[\x84R\x83\x82R\x83`@\x81 Us\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x1Cla\x0F\xB6a\x0F\x99a\x0F\x90\x87\x80a/OV[\x16\x84a\x1Cx\x85\x80a/OV[\x91a\x1C\x83\x84\x87a/\x82V[\x91\x90\x93\x81;\x15a\n\x94W\x83a\x1C\xD3\x91a\x1D\x03`@Q\x97\x88\x96\x87\x95\x86\x94\x7F\xFB\x8BS.\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x86R```\x04\x87\x01R`d\x86\x01\x90a1\xF9V[\x91\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x85\x84\x03\x01`$\x86\x01Ra1\x90V[3`D\x83\x01R\x03\x92Z\xF1\x80\x15a\x1D\xBBWa\x1DxW[P\x91a\x10_a\x1Dk\x92a\x1DV\x7FGG\x14Pv^n\x1B\x0B\x05[\xA2\xA1\xDE\x04\xD4\xCEq\xF7x\xC9+0nrP\x83\xEB\x12\r\xFD\x89\x95a\x1DP\x85\x80a/OV[\x94a/\x82V[\x90`@Q\x95\x86\x95`@\x87R`@\x87\x01\x90a1\xF9V[\x92\x85\x84\x03\x90\x86\x01Ra1\x90V[a\x1Dk\x92a\x1DV\x7FGG\x14Pv^n\x1B\x0B\x05[\xA2\xA1\xDE\x04\xD4\xCEq\xF7x\xC9+0nrP\x83\xEB\x12\r\xFD\x89\x95\x93\x96a\x1D\xAFa\x10_\x94a+\xAFV[\x96\x93\x95PP\x92Pa\x1D\x18V[`@Q=\x87\x82>=\x90\xFD[a\x1D\xD3a\x0B\xCB\x85\x80a/OV[\x83a\x1D\xEAa\x1D\xE1\x87\x80a/OV[\x82\x81\x01\x90a/\x82V[\x91\x90\x82`@Q\x93\x84\x92\x837\x81\x01`\x08\x81R\x03\x01\x90 \x90a\x1E\ra\n\xD5\x87\x80a/OV[\x90a\x1E$g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94\x85\x93\x84\x93a0\xDFV[T\x16\x91\x16\x03a\x1E\xA1Wa\x1Ef\x84a\x1E>a\x1D\xE1\x88\x80a/OV[\x91\x90\x82`@Q\x93\x84\x92\x837\x81\x01`\x08\x81R\x03\x01\x90 a\x1E`a\n\xD5\x88\x80a/OV[\x90a0\xDFV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x82T\x91a\x1E\x96\x81\x84\x16a0\xF8V[\x16\x91\x16\x17\x90Ua\x1C9V[`\x04`@Q\x7F@*\x84\xA3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`@Q=\x8B\x82>=\x90\xFD[P4a\x01jW` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01jW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x1FA\x82a\x01\xD86`\x04\x88\x01a,\xC0V[\x81\x01`\n\x81R\x03\x01\x90 T\x16`@Q\x90\x81R\xF3[P4a\x01jWa\x02\xDEa\x02\xCAa\x03\x8D6a,\xDEV[P4a\x01jW` \x90\x81\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x03\xE7W\x83a\x01\xD8a\x1F\xC1\x926\x90`\x04\x01a,\xC0V[\x81\x01`\x04\x81R\x03\x01\x90 \x92`@Q\x92a\x1F\xE5\x84a\x1F\xDE\x81\x88a.KV[\x03\x85a,\x0EV[`\xFF`\x02\x86\x01T\x16\x92`@Q``\x81\x01\x81\x81\x10\x83\x82\x11\x17a!bW\x80`@Ra >\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xA0\x83a 6\x84`\x03\x8D\x01a.KV[\x03\x01\x82a,\x0EV[\x81R`@Q\x91a \\\x83a U\x81`\x04\x8C\x01a.KV[\x03\x84a,\x0EV[\x84\x82\x01\x92\x83R`@Q\x97\x85\x89\x01\x89\x81\x10\x83\x82\x11\x17a!5W\x90\x81`\x06\x92`@Ra \xAE\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x8Ca 6\x84`\x05\x87\x01a.KV[\x8AR`@\x84\x01\x99\x8AR\x01T\x16\x94a \xD0`@Q\x97`\x80\x89R`\x80\x89\x01\x90a-\x89V[\x93`\x04\x82\x10\x15a\x19aWP\x84\x92a!\x06\x88\x99\x95\x93a!\x14\x93a!+\x98\x8B\x01R\x89\x85\x03`@\x8B\x01RQ``\x85R``\x85\x01\x90a-\x89V[\x90Q\x83\x82\x03\x85\x85\x01Ra-\x89V[\x92Q\x90`@\x81\x85\x03\x91\x01RQ\x91\x81\x81R\x01\x90a-\x89V[\x90``\x83\x01R\x03\x90\xF3[`$\x86\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`A`\x04R\xFD[`$\x84\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`A`\x04R\xFD[P4a\x01jW``\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x03\xE7Wa!\xE0\x906\x90`\x04\x01a,\xC0V[\x90`$5\x81\x81\x11a\n\x94W\x92`\xFF\x92`@\x92a\"4a\"\x05` \x976\x90`\x04\x01a,\xC0V[a\"$\x88a\"\x11a-\xCCV[\x95\x81\x89Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a-@V[\x81\x01`\t\x81R\x03\x01\x90 \x90a-cV[\x91\x16\x82R\x84R T\x16`@Q\x90\x81R\xF3[P4a\x01jW` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01jWa\x02\xDEa\x02\xCA6`\x04\x85\x01a,\xC0V[P4a\x01jW` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x90\x80\x826\x01\x12a\x03\xE7Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x03\xE3W\x80`\x04\x01\x91`\x80\x80\x95\x836\x03\x01\x12a\n\x90Wa\"\xFA\x83\x80a/OV[\x91a#$a#\r``\x94\x85\x81\x01\x90a/\x82V[\x90a\n\xDFa#\x1B\x88\x80a/OV[\x8A\x81\x01\x90a/\x82V[\x90a#Aa\x0B\x0Ba\x0B\x04a#8\x88\x80a/OV[\x89\x81\x01\x90a/\x82V[a#X`@Qa\x0B\x0B\x81a\x02\xC3\x81`\x01\x89\x01a.KV[\x03a)\xFFWa#pa\x0B\x0Ba\x0B\x04a\n\xD5\x88\x80a/OV[a#\x87`@Qa\x0B\x0B\x81a\x02\xC3\x81`\x02\x89\x01a.KV[\x03a)\xD5Wa#\x9Ba\x05\0`\x03\x84\x01a/\xD3V[\x90`\xFF`\x02\x83\x01T\x16`\x04\x81\x10\x15a)\xA8W`\x03\x03a\x15$W\x83a#\xC4`\xE0a\x0C\x0C\x89\x80a/OV[\x16\x15\x15\x80a)\x8EW[a)dWa\x01\0\x84a#\xE3\x82a\x0C\x0C\x8A\x80a/OV[\x16\x15\x15\x80a)KW[a)!Wa$%\x88\x88\x8Ca$Oa$Da\x08.a\x0B\xD8a$\x0F`$\x8B\x01\x87a/\x82V[\x98\x90\x97a$\x1C\x88\x80a/OV[\x90\x81\x01\x90a/\x82V[\x92\x90a$4a\n\xD5\x89\x80a/OV[\x93\x90\x91a\x0B\xD0a\x0B\xCB\x8B\x80a/OV[\x95a\x0C\x0C\x84\x80a/OV[a$^`\xC0a\x0C\x0C\x85\x80a/OV[\x90\x8D\x83a$va\x0C@a\x0C9`\xE0a\x0C\x0C\x8A\x80a/OV[\x90\x81`@Q\x92\x83\x92\x837\x81\x01\x83\x81R\x03\x90`\x02Z\xFA\x15a\x10yW\x8D\x93a\x07\xAAa$\xF5\x93a\x07~\x86Q`@Q\x94\x85\x93\x8A\x85\x01\x97\x88\x92`8\x94\x92\x91\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x92\x83\x80\x92`\xC0\x1B\x16\x86R`\xC0\x1B\x16`\x08\x85\x01R`\xC0\x1B\x16`\x10\x83\x01R`\x18\x82\x01R\x01\x90V[\x81\x01\x03\x90`\x02Z\xFA\x15a)\x16Wa%&\x94`D\x8DQ\x95`@Q\x96\x8D\x88\x01R\x8C\x87Ra%\x1F\x87a+\xF2V[\x01\x90a6\\V[\x15a\x10\xB1WT`\x08\x1C`\xFF\x16`\x03\x81\x10\x15a(\xE9W`\x01\x81\x03a'\xF6WPa%\x89\x84a%^a%U\x86\x80a/OV[\x85\x81\x01\x90a/\x82V[\x91\x90\x82`@Q\x93\x84\x92\x837\x81\x01`\t\x81R\x03\x01\x90 a\x1E`a%\x80\x86\x80a/OV[\x88\x81\x01\x90a/\x82V[\x81a%\x97a\x0B\xCB\x86\x80a/OV[\x16\x87R\x84R`\xFF`@\x87 T\x16a'\xCCW\x85\x80a&\xA3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa&a\x87a\x0F\xB6a$\x1Ca\x0B\xD8a\x0F\xAC\x8E\x8Ea&\t\x81\x8Fa%\xE7\x90a$\x1C\x8B\x80a/OV[\x91\x90\x82`@Q\x93\x84\x92\x837\x81\x01`\t\x81R\x03\x01\x90 a\x1E`a%U\x8A\x80a/OV[\x90\x8Da&\x18a\x0B\xCB\x8A\x80a/OV[\x16\x8CRR`@\x8A `\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90U[a&X\x8Da$\x1C\x88\x80a/OV[\x94\x90\x96\x80a/OV[\x16a&l\x87\x80a/OV[`@Q\x94\x85\x80\x94\x81\x93\x7F#\x01\xC6\xF5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R3\x90`\x04\x84\x01a2\xD2V[\x03\x92Z\xF1\x91\x82\x15a\x08\xBAW\x87\x92a',W[PP\x90\x81\x7F4oCQ\xEE\x86]\x86\xA6y\xD0\x0F9\x95\xF0R\x0F\x80=:\"v\x04\xAF\x08C\x0E&\xE94Zz\x95a\x10J\x94\x93Qa&\xEFW[PPP\x80a/OV[a'\x10a'\x03a'$\x94a$\x1C\x87\x80a/OV[\x91\x90\x92a$\x1C\x87\x80a/OV[\x91a'\x1Ea\x0B\xCB\x88\x80a/OV[\x93a89V[8\x80\x80a&\xE6V[\x90\x93\x92\x91P=\x80\x88\x86>a'@\x81\x86a,\x0EV[\x84\x01\x93\x85\x81\x86\x03\x12a'\xC8W\x80Q\x91\x82\x11a'\xC8W\x01\x94\x83`\x1F\x87\x01\x12\x15a\x03\xDFW\x85Q\x93a'n\x85a,OV[\x90a'|`@Q\x92\x83a,\x0EV[\x85\x82R\x86\x86\x89\x01\x01\x11a'\xC8Wa'\xBDa\x10J\x95\x7F4oCQ\xEE\x86]\x86\xA6y\xD0\x0F9\x95\xF0R\x0F\x80=:\"v\x04\xAF\x08C\x0E&\xE94Zz\x98\x88\x80\x85\x01\x91\x01a-@V[\x91\x92\x93\x81\x96Pa&\xB5V[\x87\x80\xFD[`\x04`@Q\x7F\xA4k\xBA\xB4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x02\x03a\x13sW\x80a(1\x85a(\x0Fa\x0F\x90\x87\x80a/OV[\x91\x90\x82`@Q\x93\x84\x92\x837\x81\x01`\x07\x81R\x03\x01\x90 a\x1E`a#8\x87\x80a/OV[T\x16\x81a(Aa\x0B\xCB\x86\x80a/OV[\x16\x03a\x1E\xA1W\x85\x80a&\xA3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa&a\x87a\x0F\xB6a$\x1Ca\x0B\xD8a\x0F\xAC\x8Ea(\xAF\x8Fa(\x84\x8Fa$\x1C\x8A\x80a/OV[\x91\x90\x82`@Q\x93\x84\x92\x837\x81\x01`\x07\x81R\x03\x01\x90 a\x1E`a(\xA6\x89\x80a/OV[\x84\x81\x01\x90a/\x82V[\x80T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x8Ea(\xDE\x83\x82\x16a0\xF8V[\x16\x91\x16\x17\x90Ua&JV[`$\x87\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`!`\x04R\xFD[`@Q=\x8D\x82>=\x90\xFD[`\x04`@Q\x7F\xA4\x82\x12p\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[P\x84a)[\x82a\x0C\x0C\x8A\x80a/OV[\x16B\x10\x15a#\xECV[`\x04`@Q\x7F\xA9\xCF\xB7\x05\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[P\x83a)\x9F`\xE0a\x0C\x0C\x89\x80a/OV[\x16C\x10\x15a#\xCDV[`$\x8A\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`!`\x04R\xFD[`\x04`@Q\x7Fwf\x8E\xD1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04`@Q\x7F\xDA\x88\\\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[P4a\x01jW` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x02E\x82a*Ja\x02 6a,\xDEV[\x81\x01`\x08\x81R\x03\x01\x90 \x90a-cV[P4a\x01jW`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01jW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\n\x98Wa*\xAA\x906\x90`\x04\x01a+\x81V[\x90`$5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x82\x84\x16\x80\x94\x03a\x03\xE3W0\x84\x14a\x03\xE3Wa*\xE1\x916\x91a,\x89V[`@Q\x91\x81Q\x92` \x81\x81\x85\x01\x95a*\xFA\x81\x83\x89a-@V[\x81\x01`\n\x81R\x03\x01\x90 T\x16a+WWa+\"\x91` \x91`@Q\x93\x84\x92\x83\x92Q\x92\x83\x91a-@V[\x81\x01`\n\x81R\x03\x01\x90 \x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90U\x80\xF3[`\x04`@Q\x7FF>\xEC\x90\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x91\x81`\x1F\x84\x01\x12\x15a\x08\xC5W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x08\xC5W` \x83\x81\x86\x01\x95\x01\x01\x11a\x08\xC5WV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a+\xC3W`@RV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`A`\x04R`$`\0\xFD[`@\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a+\xC3W`@RV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a+\xC3W`@RV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a+\xC3W`\x1F\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x16` \x01\x90V[\x92\x91\x92a,\x95\x82a,OV[\x91a,\xA3`@Q\x93\x84a,\x0EV[\x82\x94\x81\x84R\x81\x83\x01\x11a\x08\xC5W\x82\x81` \x93\x84`\0\x96\x017\x01\x01RV[\x90\x80`\x1F\x83\x01\x12\x15a\x08\xC5W\x81` a,\xDB\x935\x91\x01a,\x89V[\x90V[\x90`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x83\x01\x12a\x08\xC5Wg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11a\x08\xC5W\x83a-)\x91`\x04\x01a,\xC0V[\x92`$5\x91\x82\x11a\x08\xC5Wa,\xDB\x91`\x04\x01a,\xC0V[`\0[\x83\x81\x10a-SWPP`\0\x91\x01RV[\x81\x81\x01Q\x83\x82\x01R` \x01a-CV[` \x90a-}\x92\x82`@Q\x94\x83\x86\x80\x95Q\x93\x84\x92\x01a-@V[\x82\x01\x90\x81R\x03\x01\x90 \x90V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x93a-\xC5\x81Q\x80\x92\x81\x87R\x87\x80\x88\x01\x91\x01a-@V[\x01\x16\x01\x01\x90V[`D5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x08\xC5WV[5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x08\xC5WV[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a.AW[` \x83\x10\x14a.\x12WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\"`\x04R`$`\0\xFD[\x91`\x7F\x16\x91a.\x07V[\x80T`\0\x93\x92a.Z\x82a-\xF8V[\x91\x82\x82R` \x93`\x01\x91`\x01\x81\x16\x90\x81`\0\x14a.\xC2WP`\x01\x14a.\x81W[PPPPPV[\x90\x93\x94\x95P`\0\x92\x91\x92R\x83`\0 \x92\x84`\0\x94[\x83\x86\x10a.\xAEWPPPP\x01\x01\x908\x80\x80\x80\x80a.zV[\x80T\x85\x87\x01\x83\x01R\x94\x01\x93\x85\x90\x82\x01a.\x96V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16\x86\x85\x01RPPP\x90\x15\x15`\x05\x1B\x01\x01\x91P8\x80\x80\x80\x80a.zV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x90` \x82\x82\x01\x12a\x08\xC5W`\x045\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x08\xC5W\x82`\xA0\x92\x03\x01\x12a\x08\xC5W`\x04\x01\x90V[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFE\xE1\x816\x03\x01\x82\x12\x15a\x08\xC5W\x01\x90V[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\x08\xC5W\x01\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x08\xC5W` \x01\x91\x816\x03\x83\x13a\x08\xC5WV[\x80T\x15a/\xE8W`\0R` `\0 \x90`\0\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`2`\x04R`$`\0\xFD[`@Q\x90\x81`\0\x82Ta0)\x81a-\xF8V[\x93`\x01\x91\x80\x83\x16\x90\x81\x15a0\x8FWP`\x01\x14a0QW[PP` \x92P`\x04\x81R\x03\x01\x90 \x90V[\x90\x91P`\0R` \x90` `\0 \x90`\0\x91[\x85\x83\x10a0{WPPPP` \x91\x81\x018\x80a0@V[\x80T\x87\x84\x01R\x86\x94P\x91\x83\x01\x91\x81\x01a0dV[\x91PP` \x94\x92P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x91P\x16\x82R\x80\x15\x15\x02\x81\x018\x80a0@V[5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x08\xC5W\x90V[` \x91\x92\x83`@Q\x94\x85\x93\x847\x82\x01\x90\x81R\x03\x01\x90 \x90V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x91\x16\x90\x81\x14a1\x11W`\x01\x01\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\x11`\x04R`$`\0\xFD[\x905\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x826\x03\x01\x81\x12\x15a\x08\xC5W\x01` \x815\x91\x01\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x08\xC5W\x816\x03\x83\x13a\x08\xC5WV[`\x1F\x82` \x94\x93\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x93\x81\x86R\x86\x86\x017`\0\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[` \x90a1\xF3\x82g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x83a1\xEA\x82a-\xE3V[\x16\x86R\x01a-\xE3V[\x16\x91\x01RV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x90a2\xACa2\x91a2va2[a2@a\x01 \x88a2 \x88a-\xE3V[\x16\x88Ra20` \x88\x01\x88a1@V[\x90\x91\x80` \x8B\x01R\x89\x01\x91a1\x90V[a2M`@\x87\x01\x87a1@V[\x90\x88\x83\x03`@\x8A\x01Ra1\x90V[a2h``\x86\x01\x86a1@V[\x90\x87\x83\x03``\x89\x01Ra1\x90V[a2\x83`\x80\x85\x01\x85a1@V[\x90\x86\x83\x03`\x80\x88\x01Ra1\x90V[a2\x9E`\xA0\x84\x01\x84a1@V[\x90\x85\x83\x03`\xA0\x87\x01Ra1\x90V[\x92a2\xBD`\xC0\x84\x01`\xC0\x84\x01a1\xCFV[a2\xCBa\x01\0\x80\x93\x01a-\xE3V[\x16\x91\x01R\x90V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa2\xFF` \x92\x95\x94\x95`@\x85R`@\x85\x01\x90a1\xF9V[\x94\x16\x91\x01RV[`!a3r\x91\x93\x92\x93`@Q\x94\x81a3(\x87\x93Q\x80\x92` \x80\x87\x01\x91\x01a-@V[\x82\x01\x7F/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01Ra3c\x82Q\x80\x93` \x87\x85\x01\x91\x01a-@V[\x01\x03`\x01\x81\x01\x85R\x01\x83a,\x0EV[V[a3\xA2` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a-@V[\x81\x01`\x03\x81R\x03\x01\x90 T\x16\x80\x15a3\xB7W\x90V[`\x04`@Q\x7F\xB6\xC7\x1F}\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x08\xC5WV[Q\x90\x81\x15\x15\x82\x03a\x08\xC5WV[\x91\x90\x82`@\x91\x03\x12a\x08\xC5Wa,\xDB` a4\x1D\x84a3\xE1V[\x93\x01a3\xF6V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xBC`@\x91\x01\x12a\x08\xC5W`@Q\x90a4[\x82a+\xF2V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82`D5\x82\x81\x16\x81\x03a\x08\xC5W\x81R`d5\x91\x82\x16\x82\x03a\x08\xC5W` \x01RV[\x91\x90\x82`@\x91\x03\x12a\x08\xC5W`@Qa4\x9D\x81a+\xF2V[` a4\xB6\x81\x83\x95a4\xAE\x81a-\xE3V[\x85R\x01a-\xE3V[\x91\x01RV[\x90` a4\xDC\x94\x92\x82`@Q\x93\x84\x92\x837\x81\x01`\x05\x81R\x03\x01\x90 \x91a0\xDFV[`\xFF\x81T\x16`\x05\x81\x10\x15a5\x1EW`\x03\x03a4\xF4W\x90V[`\x04`@Q\x7F\x96\xD0\x91F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`!`\x04R`$`\0\xFD[`@Qa5w` \x82\x81a5j\x81\x83\x01\x96\x87\x81Q\x93\x84\x92\x01a-@V[\x81\x01\x03\x80\x84R\x01\x82a,\x0EV[Q\x90 \x90V[`G\x90a5\x97g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa,\xDB\x94\x95\x16a;9V[`@Q\x94\x85\x92\x7Fcommitments/ports/\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x85\x01Ra5\xD7\x81Q\x80\x92` `2\x88\x01\x91\x01a-@V[\x83\x01\x7F/channels/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`2\x82\x01Ra6\x13\x82Q\x80\x93` `<\x85\x01\x91\x01a-@V[\x01\x7F/sequences/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`<\x82\x01Ra6M\x82Q\x80\x93` \x87\x85\x01\x91\x01a-@V[\x01\x03`'\x81\x01\x84R\x01\x82a,\x0EV[\x93\x90\x94`@Q\x80a6m\x81\x88a.KV[\x03a6x\x90\x82a,\x0EV[a6\x81\x90a3tV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x93`\x06\x86\x01Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x92`@Q\x96\x87\x95\x86\x95\x7F\xF9\xBBZQ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87R`\x04\x87\x01a\x01 \x90Ra\x01$\x87\x01a6\xEB\x90\x84a.KV[\x9A`$\x88\x01a6\xF9\x91a1\xCFV[`d\x87\x01R`\0\x99\x8A`\x84\x88\x01R\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x94\x85\x88\x83\x03\x01`\xA4\x89\x01Ra7<\x92a1\x90V[\x85\x81\x03\x84\x01`\xC4\x87\x01Ra7R\x91`\x05\x01a.KV[\x82\x85\x82\x03\x01`\xE4\x86\x01Ra7e\x91a-\x89V[\x90\x83\x82\x03\x01a\x01\x04\x84\x01Ra7y\x91a-\x89V[\x03\x81\x85Z\x94` \x95\xF1\x91\x82\x15a7\xCAW\x80\x92a7\x94WPP\x90V[\x90\x91P` \x82=` \x11a7\xC2W[\x81a7\xB0` \x93\x83a,\x0EV[\x81\x01\x03\x12a\x01jWPa,\xDB\x90a3\xF6V[=\x91Pa7\xA3V[`@Q\x90=\x90\x82>=\x90\xFD[` a\x01\xD8s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x93a7\xFA\x93a3\x06V[\x81\x01`\n\x81R\x03\x01\x90 T\x16\x80\x15a8\x0FW\x90V[`\x04`@Q\x7F\xC6\x83\x0C\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x93\x91\x95\x94\x90\x92\x81Q\x15a9vWa8R\x81\x88\x86\x88a4\xBBV[Pa8m\x83a8b6\x87\x89a,\x89V[a\x1B\xC76\x85\x8Ca,\x89V[\x80Q` \x80\x92\x01 \x91`\0\x98\x83\x8AR\x89\x83R`@\x93\x84\x8B Ta9MW\x83\x8B\x86Q\x80\x83a8\xA0\x8B\x83\x81Q\x93\x84\x92\x01a-@V[\x81\x01\x03\x90`\x02Z\xFA\x15a9CW\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92a9+\x92\x86\x95a9>\x99\x98\x97\x8E\x7F9\xB1Fh\x93\x0C\x81o$O@s\xC0\xFD\xF4Y\xD3\xDDs\xAEW\x1BW\xB3\xEF\xE8 Y\x19G-*\x9E\x9FQ\x82Q\x87\x81\x01\x91\x82R\x87\x81Ra8\xFD\x81a+\xF2V[Q\x90 \x92\x81R\x80\x86R Ua9\x1E\x86Q\x9B\x8C\x9B`\x80\x8DR`\x80\x8D\x01\x91a1\x90V[\x92\x8A\x84\x03\x90\x8B\x01Ra1\x90V[\x93\x16\x90\x85\x01R\x83\x82\x03``\x85\x01Ra-\x89V[\x03\x90\xA1V[\x84Q=\x8C\x82>=\x90\xFD[`\x04\x85Q\x7F\\mw\x11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04`@Q\x7F$0\xF4\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`@\x90a9\xBAg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa,\xDB\x94\x95\x16a;9V[\x82Q\x94\x85\x92\x7Facks/ports/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x85\x01Ra9\xF9\x81Q\x80\x92` `+\x88\x01\x91\x01a-@V[\x83\x01\x7F/channels/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`+\x82\x01Ra:5\x82Q\x80\x93` `5\x85\x01\x91\x01a-@V[\x01\x7F/sequences/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`5\x82\x01Ra:o\x82Q\x80\x93` \x87\x85\x01\x91\x01a-@V[\x01\x03` \x81\x01\x84R\x01\x82a,\x0EV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82Q\x16\x15\x91\x82a:\x97WPP\x90V[` \x01Q\x16\x15\x91\x90PV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x82\x82Q\x16\x92\x80\x82Q\x16\x80\x85\x11\x94\x85\x15a:\xC8W[PPPPP\x90V[\x14\x93P\x90\x91\x83a:\xE0W[PPP8\x80\x80\x80\x80a:\xC0V[\x81\x92\x93P\x90` \x80\x92\x01Q\x16\x92\x01Q\x16\x11\x158\x80\x80a:\xD3V[a;(` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01a-@V[\x81\x01`\n\x81R\x03\x01\x90 T\x163\x14\x90V[\x90`@Q\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x80\x82\x01\x93`\xA0\x83\x01`@R`\0\x85R\x93[\x01\x92`\n\x90\x81\x81\x06`0\x01\x85S\x04\x92\x83\x15a;\xACW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90a;pV[\x92P`\x80\x83\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x92\x03\x01\x92\x01\x91\x82RV\xFE\xA2dipfsX\"\x12 \xD57~\xD6\xCE1\x0EDm\x05\xF2\xB7\x18\xC4\n\t\x0E\xD3\xC3\x08\xBA%\x02\xF2\xD1Sv\xCF\xF4\x91\xCC\\dsolcC\0\x08\x17\x003"; + /// The deployed bytecode of the contract. + #[cfg(feature = "providers")] + pub static IBCPACKET_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = + ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); + #[cfg(feature = "providers")] + pub struct IBCPacket(::ethers::contract::Contract); + #[cfg(feature = "providers")] + impl ::core::clone::Clone for IBCPacket { + fn clone(&self) -> Self { + Self(::core::clone::Clone::clone(&self.0)) + } + } + #[cfg(feature = "providers")] + impl ::core::ops::Deref for IBCPacket { + type Target = ::ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + #[cfg(feature = "providers")] + impl ::core::ops::DerefMut for IBCPacket { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } + } + #[cfg(feature = "providers")] + impl ::core::fmt::Debug for IBCPacket { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple(::core::stringify!(IBCPacket)) + .field(&self.address()) + .finish() + } + } + #[cfg(feature = "providers")] + impl IBCPacket { + /// Creates a new contract instance with the specified `ethers` client at + /// `address`. The contract derefs to a `ethers::Contract` object. + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + Self(::ethers::contract::Contract::new( + address.into(), + IBCPACKET_ABI.clone(), + client, + )) + } + /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. + /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction + /// + /// Notes: + /// - If there are no constructor arguments, you should pass `()` as the argument. + /// - The default poll duration is 7 seconds. + /// - The default number of confirmations is 1 block. + /// + /// + /// # Example + /// + /// Generate contract bindings with `abigen!` and deploy a new contract instance. + /// + /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. + /// + /// ```ignore + /// # async fn deploy(client: ::std::sync::Arc) { + /// abigen!(Greeter, "../greeter.json"); + /// + /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); + /// let msg = greeter_contract.greet().call().await.unwrap(); + /// # } + /// ``` + pub fn deploy( + client: ::std::sync::Arc, + constructor_args: T, + ) -> ::core::result::Result< + ::ethers::contract::builders::ContractDeployer, + ::ethers::contract::ContractError, + > { + let factory = ::ethers::contract::ContractFactory::new( + IBCPACKET_ABI.clone(), + IBCPACKET_BYTECODE.clone().into(), + client, + ); + let deployer = factory.deploy(constructor_args)?; + let deployer = ::ethers::contract::ContractDeployer::new(deployer); + Ok(deployer) + } + ///Calls the contract's `COMMITMENT_PREFIX` (0xa9550dac) function + pub fn commitment_prefix( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([169, 85, 13, 172], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `acknowledgePacket` (0x59f37976) function + pub fn acknowledge_packet( + &self, + msg: MsgPacketAcknowledgement, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([89, 243, 121, 118], (msg,)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `bindPort` (0x117e886a) function + pub fn bind_port( + &self, + port_id: ::std::string::String, + module_address: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([17, 126, 136, 106], (port_id, module_address)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `capabilities` (0x5717bcf5) function + pub fn capabilities( + &self, + p0: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([87, 23, 188, 245], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `channelCapabilityPath` (0x3bc3339f) function + pub fn channel_capability_path( + &self, + port_id: ::std::string::String, + channel_id: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([59, 195, 51, 159], (port_id, channel_id)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `channels` (0x5b3de260) function + pub fn channels( + &self, + p0: ::std::string::String, + p1: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall< + M, + ( + u8, + u8, + IbcCoreChannelV1CounterpartyData, + ::std::string::String, + ), + > { + self.0 + .method_hash([91, 61, 226, 96], (p0, p1)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `clientImpls` (0xd1297b8d) function + pub fn client_impls( + &self, + p0: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([209, 41, 123, 141], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `clientRegistry` (0x990491a5) function + pub fn client_registry( + &self, + p0: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([153, 4, 145, 165], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `clientTypes` (0xc2380105) function + pub fn client_types( + &self, + p0: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([194, 56, 1, 5], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `commitments` (0x839df945) function + pub fn commitments( + &self, + p0: [u8; 32], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([131, 157, 249, 69], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `connections` (0x31973f00) function + pub fn connections( + &self, + p0: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall< + M, + ( + ::std::string::String, + u8, + IbcCoreConnectionV1CounterpartyData, + u64, + ), + > { + self.0 + .method_hash([49, 151, 63, 0], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `getClient` (0x7eb78932) function + pub fn get_client( + &self, + client_id: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([126, 183, 137, 50], client_id) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextChannelSequence` (0x7926b8a9) function + pub fn next_channel_sequence(&self) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([121, 38, 184, 169], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextClientSequence` (0xe1b17b43) function + pub fn next_client_sequence(&self) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([225, 177, 123, 67], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextConnectionSequence` (0xa049e677) function + pub fn next_connection_sequence( + &self, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([160, 73, 230, 119], ()) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextSequenceAcks` (0x1390d28d) function + pub fn next_sequence_acks( + &self, + p0: ::std::string::String, + p1: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([19, 144, 210, 141], (p0, p1)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextSequenceRecvs` (0xc930b1b0) function + pub fn next_sequence_recvs( + &self, + p0: ::std::string::String, + p1: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([201, 48, 177, 176], (p0, p1)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `nextSequenceSends` (0x821cb5d0) function + pub fn next_sequence_sends( + &self, + p0: ::std::string::String, + p1: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([130, 28, 181, 208], (p0, p1)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `packetReceipts` (0x26078437) function + pub fn packet_receipts( + &self, + p0: ::std::string::String, + p1: ::std::string::String, + p2: u64, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([38, 7, 132, 55], (p0, p1, p2)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `portCapabilityPath` (0x2570dae0) function + pub fn port_capability_path( + &self, + port_id: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([37, 112, 218, 224], port_id) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `recvPacket` (0x236ebd70) function + pub fn recv_packet( + &self, + msg: MsgPacketRecv, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([35, 110, 189, 112], (msg,)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `sendPacket` (0xae4cd201) function + pub fn send_packet( + &self, + source_port: ::std::string::String, + source_channel: ::std::string::String, + timeout_height: IbcCoreClientV1HeightData, + timeout_timestamp: u64, + data: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash( + [174, 76, 210, 1], + ( + source_port, + source_channel, + timeout_height, + timeout_timestamp, + data, + ), + ) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `timeoutPacket` (0xaa18c8b1) function + pub fn timeout_packet( + &self, + msg: MsgPacketTimeout, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([170, 24, 200, 177], (msg,)) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `writeAcknowledgement` (0xb56e79de) function + pub fn write_acknowledgement( + &self, + destination_port: ::std::string::String, + destination_channel: ::std::string::String, + sequence: u64, + acknowledgement: ::ethers::core::types::Bytes, + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash( + [181, 110, 121, 222], + ( + destination_port, + destination_channel, + sequence, + acknowledgement, + ), + ) + .expect("method not found (this should never happen)") + } + ///Gets the contract's `AcknowledgePacket` event + pub fn acknowledge_packet_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, AcknowledgePacketFilter> + { + self.0.event() + } + ///Gets the contract's `RecvPacket` event + pub fn recv_packet_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, RecvPacketFilter> { + self.0.event() + } + ///Gets the contract's `SendPacket` event + pub fn send_packet_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, SendPacketFilter> { + self.0.event() + } + ///Gets the contract's `TimeoutPacket` event + pub fn timeout_packet_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, TimeoutPacketFilter> + { + self.0.event() + } + ///Gets the contract's `WriteAcknowledgement` event + pub fn write_acknowledgement_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, WriteAcknowledgementFilter> + { + self.0.event() + } + /// Returns an `Event` builder for all the events of this contract. + pub fn events( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, IBCPacketEvents> { + self.0 + .event_with_filter(::core::default::Default::default()) + } + } + #[cfg(feature = "providers")] + impl From<::ethers::contract::Contract> for IBCPacket { + fn from(contract: ::ethers::contract::Contract) -> Self { + Self::new(contract.address(), contract.client()) + } + } + ///Custom Error type `ErrAcknowledgementAlreadyExists` with signature `ErrAcknowledgementAlreadyExists()` and selector `0x5c6d7711` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrAcknowledgementAlreadyExists", + abi = "ErrAcknowledgementAlreadyExists()" + )] + pub struct ErrAcknowledgementAlreadyExists; + ///Custom Error type `ErrAcknowledgementIsEmpty` with signature `ErrAcknowledgementIsEmpty()` and selector `0x2430f403` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrAcknowledgementIsEmpty", + abi = "ErrAcknowledgementIsEmpty()" + )] + pub struct ErrAcknowledgementIsEmpty; + ///Custom Error type `ErrCapabilityAlreadyClaimed` with signature `ErrCapabilityAlreadyClaimed()` and selector `0x463eec90` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrCapabilityAlreadyClaimed", + abi = "ErrCapabilityAlreadyClaimed()" + )] + pub struct ErrCapabilityAlreadyClaimed; + ///Custom Error type `ErrClientNotFound` with signature `ErrClientNotFound()` and selector `0xb6c71f7d` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrClientNotFound", abi = "ErrClientNotFound()")] + pub struct ErrClientNotFound; + ///Custom Error type `ErrDestinationAndCounterpartyChannelMismatch` with signature `ErrDestinationAndCounterpartyChannelMismatch()` and selector `0x9387f5d0` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrDestinationAndCounterpartyChannelMismatch", + abi = "ErrDestinationAndCounterpartyChannelMismatch()" + )] + pub struct ErrDestinationAndCounterpartyChannelMismatch; + ///Custom Error type `ErrDestinationAndCounterpartyPortMismatch` with signature `ErrDestinationAndCounterpartyPortMismatch()` and selector `0xa6076043` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrDestinationAndCounterpartyPortMismatch", + abi = "ErrDestinationAndCounterpartyPortMismatch()" + )] + pub struct ErrDestinationAndCounterpartyPortMismatch; + ///Custom Error type `ErrHeightTimeout` with signature `ErrHeightTimeout()` and selector `0xa9cfb705` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrHeightTimeout", abi = "ErrHeightTimeout()")] + pub struct ErrHeightTimeout; + ///Custom Error type `ErrInvalidChannelState` with signature `ErrInvalidChannelState()` and selector `0x96d09146` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrInvalidChannelState", abi = "ErrInvalidChannelState()")] + pub struct ErrInvalidChannelState; + ///Custom Error type `ErrInvalidConnectionState` with signature `ErrInvalidConnectionState()` and selector `0x8ca98990` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrInvalidConnectionState", + abi = "ErrInvalidConnectionState()" + )] + pub struct ErrInvalidConnectionState; + ///Custom Error type `ErrInvalidPacketCommitment` with signature `ErrInvalidPacketCommitment()` and selector `0x438a8d16` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrInvalidPacketCommitment", + abi = "ErrInvalidPacketCommitment()" + )] + pub struct ErrInvalidPacketCommitment; + ///Custom Error type `ErrInvalidProof` with signature `ErrInvalidProof()` and selector `0x14209932` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrInvalidProof", abi = "ErrInvalidProof()")] + pub struct ErrInvalidProof; + ///Custom Error type `ErrInvalidTimeoutHeight` with signature `ErrInvalidTimeoutHeight()` and selector `0xc8e1d264` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrInvalidTimeoutHeight", abi = "ErrInvalidTimeoutHeight()")] + pub struct ErrInvalidTimeoutHeight; + ///Custom Error type `ErrInvalidTimeoutTimestamp` with signature `ErrInvalidTimeoutTimestamp()` and selector `0xe6277ce0` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrInvalidTimeoutTimestamp", + abi = "ErrInvalidTimeoutTimestamp()" + )] + pub struct ErrInvalidTimeoutTimestamp; + ///Custom Error type `ErrLatestHeightNotFound` with signature `ErrLatestHeightNotFound()` and selector `0xe53d4e37` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrLatestHeightNotFound", abi = "ErrLatestHeightNotFound()")] + pub struct ErrLatestHeightNotFound; + ///Custom Error type `ErrLatestTimestampNotFound` with signature `ErrLatestTimestampNotFound()` and selector `0x9b6c9adc` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrLatestTimestampNotFound", + abi = "ErrLatestTimestampNotFound()" + )] + pub struct ErrLatestTimestampNotFound; + ///Custom Error type `ErrModuleNotFound` with signature `ErrModuleNotFound()` and selector `0xc6830cff` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrModuleNotFound", abi = "ErrModuleNotFound()")] + pub struct ErrModuleNotFound; + ///Custom Error type `ErrNextSequenceMustBeGreaterThanTimeoutSequence` with signature `ErrNextSequenceMustBeGreaterThanTimeoutSequence()` and selector `0xe758ef82` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrNextSequenceMustBeGreaterThanTimeoutSequence", + abi = "ErrNextSequenceMustBeGreaterThanTimeoutSequence()" + )] + pub struct ErrNextSequenceMustBeGreaterThanTimeoutSequence; + ///Custom Error type `ErrPacketAlreadyReceived` with signature `ErrPacketAlreadyReceived()` and selector `0xa46bbab4` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrPacketAlreadyReceived", abi = "ErrPacketAlreadyReceived()")] + pub struct ErrPacketAlreadyReceived; + ///Custom Error type `ErrPacketCommitmentNotFound` with signature `ErrPacketCommitmentNotFound()` and selector `0x4d7cfc57` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrPacketCommitmentNotFound", + abi = "ErrPacketCommitmentNotFound()" + )] + pub struct ErrPacketCommitmentNotFound; + ///Custom Error type `ErrPacketSequenceNextSequenceMismatch` with signature `ErrPacketSequenceNextSequenceMismatch()` and selector `0x402a84a3` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrPacketSequenceNextSequenceMismatch", + abi = "ErrPacketSequenceNextSequenceMismatch()" + )] + pub struct ErrPacketSequenceNextSequenceMismatch; + ///Custom Error type `ErrPacketWithoutTimeout` with signature `ErrPacketWithoutTimeout()` and selector `0x5734400c` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrPacketWithoutTimeout", abi = "ErrPacketWithoutTimeout()")] + pub struct ErrPacketWithoutTimeout; + ///Custom Error type `ErrSourceAndCounterpartyChannelMismatch` with signature `ErrSourceAndCounterpartyChannelMismatch()` and selector `0x77668ed1` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrSourceAndCounterpartyChannelMismatch", + abi = "ErrSourceAndCounterpartyChannelMismatch()" + )] + pub struct ErrSourceAndCounterpartyChannelMismatch; + ///Custom Error type `ErrSourceAndCounterpartyPortMismatch` with signature `ErrSourceAndCounterpartyPortMismatch()` and selector `0xda885c1d` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrSourceAndCounterpartyPortMismatch", + abi = "ErrSourceAndCounterpartyPortMismatch()" + )] + pub struct ErrSourceAndCounterpartyPortMismatch; + ///Custom Error type `ErrTimeoutHeightNotReached` with signature `ErrTimeoutHeightNotReached()` and selector `0x12c51c64` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrTimeoutHeightNotReached", + abi = "ErrTimeoutHeightNotReached()" + )] + pub struct ErrTimeoutHeightNotReached; + ///Custom Error type `ErrTimeoutTimestampNotReached` with signature `ErrTimeoutTimestampNotReached()` and selector `0x8551d235` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrTimeoutTimestampNotReached", + abi = "ErrTimeoutTimestampNotReached()" + )] + pub struct ErrTimeoutTimestampNotReached; + ///Custom Error type `ErrTimestampTimeout` with signature `ErrTimestampTimeout()` and selector `0xa4821270` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrTimestampTimeout", abi = "ErrTimestampTimeout()")] + pub struct ErrTimestampTimeout; + ///Custom Error type `ErrUnauthorized` with signature `ErrUnauthorized()` and selector `0xcc12cef6` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrUnauthorized", abi = "ErrUnauthorized()")] + pub struct ErrUnauthorized; + ///Custom Error type `ErrUnknownChannelOrdering` with signature `ErrUnknownChannelOrdering()` and selector `0x6cc79c02` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrUnknownChannelOrdering", + abi = "ErrUnknownChannelOrdering()" + )] + pub struct ErrUnknownChannelOrdering; + ///Container type for all of the contract's custom errors + #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] + pub enum IBCPacketErrors { + ErrAcknowledgementAlreadyExists(ErrAcknowledgementAlreadyExists), + ErrAcknowledgementIsEmpty(ErrAcknowledgementIsEmpty), + ErrCapabilityAlreadyClaimed(ErrCapabilityAlreadyClaimed), + ErrClientNotFound(ErrClientNotFound), + ErrDestinationAndCounterpartyChannelMismatch(ErrDestinationAndCounterpartyChannelMismatch), + ErrDestinationAndCounterpartyPortMismatch(ErrDestinationAndCounterpartyPortMismatch), + ErrHeightTimeout(ErrHeightTimeout), + ErrInvalidChannelState(ErrInvalidChannelState), + ErrInvalidConnectionState(ErrInvalidConnectionState), + ErrInvalidPacketCommitment(ErrInvalidPacketCommitment), + ErrInvalidProof(ErrInvalidProof), + ErrInvalidTimeoutHeight(ErrInvalidTimeoutHeight), + ErrInvalidTimeoutTimestamp(ErrInvalidTimeoutTimestamp), + ErrLatestHeightNotFound(ErrLatestHeightNotFound), + ErrLatestTimestampNotFound(ErrLatestTimestampNotFound), + ErrModuleNotFound(ErrModuleNotFound), + ErrNextSequenceMustBeGreaterThanTimeoutSequence( + ErrNextSequenceMustBeGreaterThanTimeoutSequence, + ), + ErrPacketAlreadyReceived(ErrPacketAlreadyReceived), + ErrPacketCommitmentNotFound(ErrPacketCommitmentNotFound), + ErrPacketSequenceNextSequenceMismatch(ErrPacketSequenceNextSequenceMismatch), + ErrPacketWithoutTimeout(ErrPacketWithoutTimeout), + ErrSourceAndCounterpartyChannelMismatch(ErrSourceAndCounterpartyChannelMismatch), + ErrSourceAndCounterpartyPortMismatch(ErrSourceAndCounterpartyPortMismatch), + ErrTimeoutHeightNotReached(ErrTimeoutHeightNotReached), + ErrTimeoutTimestampNotReached(ErrTimeoutTimestampNotReached), + ErrTimestampTimeout(ErrTimestampTimeout), + ErrUnauthorized(ErrUnauthorized), + ErrUnknownChannelOrdering(ErrUnknownChannelOrdering), + /// The standard solidity revert string, with selector + /// Error(string) -- 0x08c379a0 + RevertString(::std::string::String), + } + impl ::ethers::core::abi::AbiDecode for IBCPacketErrors { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + <::std::string::String as ::ethers::core::abi::AbiDecode>::decode(data) + { + return Ok(Self::RevertString(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrAcknowledgementAlreadyExists(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrAcknowledgementIsEmpty(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrCapabilityAlreadyClaimed(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::ErrClientNotFound(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::ErrDestinationAndCounterpartyChannelMismatch(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok(Self::ErrDestinationAndCounterpartyPortMismatch(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::ErrHeightTimeout(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrInvalidChannelState(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrInvalidConnectionState(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrInvalidPacketCommitment(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::ErrInvalidProof(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrInvalidTimeoutHeight(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrInvalidTimeoutTimestamp(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrLatestHeightNotFound(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrLatestTimestampNotFound(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::ErrModuleNotFound(decoded)); + } + if let Ok(decoded) = ::decode( + data, + ) { + return Ok( + Self::ErrNextSequenceMustBeGreaterThanTimeoutSequence(decoded), + ); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrPacketAlreadyReceived(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrPacketCommitmentNotFound(decoded)); + } + if let Ok(decoded) = + ::decode( + data, + ) + { + return Ok(Self::ErrPacketSequenceNextSequenceMismatch(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrPacketWithoutTimeout(decoded)); + } + if let Ok(decoded) = + ::decode( + data, + ) + { + return Ok(Self::ErrSourceAndCounterpartyChannelMismatch(decoded)); + } + if let Ok(decoded) = + ::decode( + data, + ) + { + return Ok(Self::ErrSourceAndCounterpartyPortMismatch(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrTimeoutHeightNotReached(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrTimeoutTimestampNotReached(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrTimestampTimeout(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::ErrUnauthorized(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrUnknownChannelOrdering(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for IBCPacketErrors { + fn encode(self) -> ::std::vec::Vec { + match self { + Self::ErrAcknowledgementAlreadyExists(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrAcknowledgementIsEmpty(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrCapabilityAlreadyClaimed(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrClientNotFound(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ErrDestinationAndCounterpartyChannelMismatch(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrDestinationAndCounterpartyPortMismatch(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrHeightTimeout(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ErrInvalidChannelState(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrInvalidConnectionState(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrInvalidPacketCommitment(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrInvalidProof(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ErrInvalidTimeoutHeight(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrInvalidTimeoutTimestamp(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrLatestHeightNotFound(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrLatestTimestampNotFound(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrModuleNotFound(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ErrNextSequenceMustBeGreaterThanTimeoutSequence(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrPacketAlreadyReceived(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrPacketCommitmentNotFound(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrPacketSequenceNextSequenceMismatch(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrPacketWithoutTimeout(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrSourceAndCounterpartyChannelMismatch(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrSourceAndCounterpartyPortMismatch(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrTimeoutHeightNotReached(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrTimeoutTimestampNotReached(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrTimestampTimeout(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrUnauthorized(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ErrUnknownChannelOrdering(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::RevertString(s) => ::ethers::core::abi::AbiEncode::encode(s), + } + } + } + impl ::ethers::contract::ContractRevert for IBCPacketErrors { + fn valid_selector(selector: [u8; 4]) -> bool { + match selector { + [0x08, 0xc3, 0x79, 0xa0] => true, + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ => false, + } + } + } + impl ::core::fmt::Display for IBCPacketErrors { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::ErrAcknowledgementAlreadyExists(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::ErrAcknowledgementIsEmpty(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrCapabilityAlreadyClaimed(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrClientNotFound(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrDestinationAndCounterpartyChannelMismatch(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::ErrDestinationAndCounterpartyPortMismatch(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::ErrHeightTimeout(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrInvalidChannelState(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrInvalidConnectionState(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrInvalidPacketCommitment(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrInvalidProof(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrInvalidTimeoutHeight(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrInvalidTimeoutTimestamp(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrLatestHeightNotFound(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrLatestTimestampNotFound(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrModuleNotFound(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrNextSequenceMustBeGreaterThanTimeoutSequence(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::ErrPacketAlreadyReceived(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrPacketCommitmentNotFound(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrPacketSequenceNextSequenceMismatch(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::ErrPacketWithoutTimeout(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrSourceAndCounterpartyChannelMismatch(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::ErrSourceAndCounterpartyPortMismatch(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::ErrTimeoutHeightNotReached(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrTimeoutTimestampNotReached(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::ErrTimestampTimeout(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrUnauthorized(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrUnknownChannelOrdering(element) => ::core::fmt::Display::fmt(element, f), + Self::RevertString(s) => ::core::fmt::Display::fmt(s, f), + } + } + } + impl ::core::convert::From<::std::string::String> for IBCPacketErrors { + fn from(value: String) -> Self { + Self::RevertString(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrAcknowledgementAlreadyExists) -> Self { + Self::ErrAcknowledgementAlreadyExists(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrAcknowledgementIsEmpty) -> Self { + Self::ErrAcknowledgementIsEmpty(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrCapabilityAlreadyClaimed) -> Self { + Self::ErrCapabilityAlreadyClaimed(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrClientNotFound) -> Self { + Self::ErrClientNotFound(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrDestinationAndCounterpartyChannelMismatch) -> Self { + Self::ErrDestinationAndCounterpartyChannelMismatch(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrDestinationAndCounterpartyPortMismatch) -> Self { + Self::ErrDestinationAndCounterpartyPortMismatch(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrHeightTimeout) -> Self { + Self::ErrHeightTimeout(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrInvalidChannelState) -> Self { + Self::ErrInvalidChannelState(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrInvalidConnectionState) -> Self { + Self::ErrInvalidConnectionState(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrInvalidPacketCommitment) -> Self { + Self::ErrInvalidPacketCommitment(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrInvalidProof) -> Self { + Self::ErrInvalidProof(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrInvalidTimeoutHeight) -> Self { + Self::ErrInvalidTimeoutHeight(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrInvalidTimeoutTimestamp) -> Self { + Self::ErrInvalidTimeoutTimestamp(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrLatestHeightNotFound) -> Self { + Self::ErrLatestHeightNotFound(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrLatestTimestampNotFound) -> Self { + Self::ErrLatestTimestampNotFound(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrModuleNotFound) -> Self { + Self::ErrModuleNotFound(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrNextSequenceMustBeGreaterThanTimeoutSequence) -> Self { + Self::ErrNextSequenceMustBeGreaterThanTimeoutSequence(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrPacketAlreadyReceived) -> Self { + Self::ErrPacketAlreadyReceived(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrPacketCommitmentNotFound) -> Self { + Self::ErrPacketCommitmentNotFound(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrPacketSequenceNextSequenceMismatch) -> Self { + Self::ErrPacketSequenceNextSequenceMismatch(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrPacketWithoutTimeout) -> Self { + Self::ErrPacketWithoutTimeout(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrSourceAndCounterpartyChannelMismatch) -> Self { + Self::ErrSourceAndCounterpartyChannelMismatch(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrSourceAndCounterpartyPortMismatch) -> Self { + Self::ErrSourceAndCounterpartyPortMismatch(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrTimeoutHeightNotReached) -> Self { + Self::ErrTimeoutHeightNotReached(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrTimeoutTimestampNotReached) -> Self { + Self::ErrTimeoutTimestampNotReached(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrTimestampTimeout) -> Self { + Self::ErrTimestampTimeout(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrUnauthorized) -> Self { + Self::ErrUnauthorized(value) + } + } + impl ::core::convert::From for IBCPacketErrors { + fn from(value: ErrUnknownChannelOrdering) -> Self { + Self::ErrUnknownChannelOrdering(value) + } + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent( + name = "AcknowledgePacket", + abi = "AcknowledgePacket((uint64,string,string,string,string,bytes,(uint64,uint64),uint64),bytes)" + )] + pub struct AcknowledgePacketFilter { + pub packet: IbcCoreChannelV1PacketData, + pub acknowledgement: ::ethers::core::types::Bytes, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent( + name = "RecvPacket", + abi = "RecvPacket((uint64,string,string,string,string,bytes,(uint64,uint64),uint64))" + )] + pub struct RecvPacketFilter { + pub packet: IbcCoreChannelV1PacketData, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent( + name = "SendPacket", + abi = "SendPacket(uint64,string,string,(uint64,uint64),uint64,bytes)" + )] + pub struct SendPacketFilter { + pub sequence: u64, + pub source_port: ::std::string::String, + pub source_channel: ::std::string::String, + pub timeout_height: IbcCoreClientV1HeightData, + pub timeout_timestamp: u64, + pub data: ::ethers::core::types::Bytes, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent( + name = "TimeoutPacket", + abi = "TimeoutPacket((uint64,string,string,string,string,bytes,(uint64,uint64),uint64))" + )] + pub struct TimeoutPacketFilter { + pub packet: IbcCoreChannelV1PacketData, + } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent( + name = "WriteAcknowledgement", + abi = "WriteAcknowledgement(string,string,uint64,bytes)" + )] + pub struct WriteAcknowledgementFilter { + pub destination_port: ::std::string::String, + pub destination_channel: ::std::string::String, + pub sequence: u64, + pub acknowledgement: ::ethers::core::types::Bytes, + } + ///Container type for all of the contract's events + #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] + pub enum IBCPacketEvents { + AcknowledgePacketFilter(AcknowledgePacketFilter), + RecvPacketFilter(RecvPacketFilter), + SendPacketFilter(SendPacketFilter), + TimeoutPacketFilter(TimeoutPacketFilter), + WriteAcknowledgementFilter(WriteAcknowledgementFilter), + } + impl ::ethers::contract::EthLogDecode for IBCPacketEvents { + fn decode_log( + log: &::ethers::core::abi::RawLog, + ) -> ::core::result::Result { + if let Ok(decoded) = AcknowledgePacketFilter::decode_log(log) { + return Ok(IBCPacketEvents::AcknowledgePacketFilter(decoded)); + } + if let Ok(decoded) = RecvPacketFilter::decode_log(log) { + return Ok(IBCPacketEvents::RecvPacketFilter(decoded)); + } + if let Ok(decoded) = SendPacketFilter::decode_log(log) { + return Ok(IBCPacketEvents::SendPacketFilter(decoded)); + } + if let Ok(decoded) = TimeoutPacketFilter::decode_log(log) { + return Ok(IBCPacketEvents::TimeoutPacketFilter(decoded)); + } + if let Ok(decoded) = WriteAcknowledgementFilter::decode_log(log) { + return Ok(IBCPacketEvents::WriteAcknowledgementFilter(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData) + } + } + impl ::core::fmt::Display for IBCPacketEvents { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::AcknowledgePacketFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::RecvPacketFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::SendPacketFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::TimeoutPacketFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::WriteAcknowledgementFilter(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for IBCPacketEvents { + fn from(value: AcknowledgePacketFilter) -> Self { + Self::AcknowledgePacketFilter(value) + } + } + impl ::core::convert::From for IBCPacketEvents { + fn from(value: RecvPacketFilter) -> Self { + Self::RecvPacketFilter(value) + } + } + impl ::core::convert::From for IBCPacketEvents { + fn from(value: SendPacketFilter) -> Self { + Self::SendPacketFilter(value) + } + } + impl ::core::convert::From for IBCPacketEvents { + fn from(value: TimeoutPacketFilter) -> Self { + Self::TimeoutPacketFilter(value) + } + } + impl ::core::convert::From for IBCPacketEvents { + fn from(value: WriteAcknowledgementFilter) -> Self { + Self::WriteAcknowledgementFilter(value) + } + } + ///Container type for all input parameters for the `COMMITMENT_PREFIX` function with signature `COMMITMENT_PREFIX()` and selector `0xa9550dac` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "COMMITMENT_PREFIX", abi = "COMMITMENT_PREFIX()")] + pub struct CommitmentPrefixCall; + ///Container type for all input parameters for the `acknowledgePacket` function with signature `acknowledgePacket(((uint64,string,string,string,string,bytes,(uint64,uint64),uint64),bytes,bytes,(uint64,uint64)))` and selector `0x59f37976` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "acknowledgePacket", + abi = "acknowledgePacket(((uint64,string,string,string,string,bytes,(uint64,uint64),uint64),bytes,bytes,(uint64,uint64)))" + )] + pub struct AcknowledgePacketCall { + pub msg: MsgPacketAcknowledgement, + } + ///Container type for all input parameters for the `bindPort` function with signature `bindPort(string,address)` and selector `0x117e886a` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "bindPort", abi = "bindPort(string,address)")] + pub struct BindPortCall { + pub port_id: ::std::string::String, + pub module_address: ::ethers::core::types::Address, + } + ///Container type for all input parameters for the `capabilities` function with signature `capabilities(string)` and selector `0x5717bcf5` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "capabilities", abi = "capabilities(string)")] + pub struct CapabilitiesCall(pub ::std::string::String); + ///Container type for all input parameters for the `channelCapabilityPath` function with signature `channelCapabilityPath(string,string)` and selector `0x3bc3339f` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "channelCapabilityPath", + abi = "channelCapabilityPath(string,string)" + )] + pub struct ChannelCapabilityPathCall { + pub port_id: ::std::string::String, + pub channel_id: ::std::string::String, + } + ///Container type for all input parameters for the `channels` function with signature `channels(string,string)` and selector `0x5b3de260` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "channels", abi = "channels(string,string)")] + pub struct ChannelsCall(pub ::std::string::String, pub ::std::string::String); + ///Container type for all input parameters for the `clientImpls` function with signature `clientImpls(string)` and selector `0xd1297b8d` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "clientImpls", abi = "clientImpls(string)")] + pub struct ClientImplsCall(pub ::std::string::String); + ///Container type for all input parameters for the `clientRegistry` function with signature `clientRegistry(string)` and selector `0x990491a5` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "clientRegistry", abi = "clientRegistry(string)")] + pub struct ClientRegistryCall(pub ::std::string::String); + ///Container type for all input parameters for the `clientTypes` function with signature `clientTypes(string)` and selector `0xc2380105` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "clientTypes", abi = "clientTypes(string)")] + pub struct ClientTypesCall(pub ::std::string::String); + ///Container type for all input parameters for the `commitments` function with signature `commitments(bytes32)` and selector `0x839df945` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "commitments", abi = "commitments(bytes32)")] + pub struct CommitmentsCall(pub [u8; 32]); + ///Container type for all input parameters for the `connections` function with signature `connections(string)` and selector `0x31973f00` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "connections", abi = "connections(string)")] + pub struct ConnectionsCall(pub ::std::string::String); + ///Container type for all input parameters for the `getClient` function with signature `getClient(string)` and selector `0x7eb78932` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "getClient", abi = "getClient(string)")] + pub struct GetClientCall { + pub client_id: ::std::string::String, + } + ///Container type for all input parameters for the `nextChannelSequence` function with signature `nextChannelSequence()` and selector `0x7926b8a9` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextChannelSequence", abi = "nextChannelSequence()")] + pub struct NextChannelSequenceCall; + ///Container type for all input parameters for the `nextClientSequence` function with signature `nextClientSequence()` and selector `0xe1b17b43` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextClientSequence", abi = "nextClientSequence()")] + pub struct NextClientSequenceCall; + ///Container type for all input parameters for the `nextConnectionSequence` function with signature `nextConnectionSequence()` and selector `0xa049e677` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextConnectionSequence", abi = "nextConnectionSequence()")] + pub struct NextConnectionSequenceCall; + ///Container type for all input parameters for the `nextSequenceAcks` function with signature `nextSequenceAcks(string,string)` and selector `0x1390d28d` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextSequenceAcks", abi = "nextSequenceAcks(string,string)")] + pub struct NextSequenceAcksCall(pub ::std::string::String, pub ::std::string::String); + ///Container type for all input parameters for the `nextSequenceRecvs` function with signature `nextSequenceRecvs(string,string)` and selector `0xc930b1b0` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextSequenceRecvs", abi = "nextSequenceRecvs(string,string)")] + pub struct NextSequenceRecvsCall(pub ::std::string::String, pub ::std::string::String); + ///Container type for all input parameters for the `nextSequenceSends` function with signature `nextSequenceSends(string,string)` and selector `0x821cb5d0` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "nextSequenceSends", abi = "nextSequenceSends(string,string)")] + pub struct NextSequenceSendsCall(pub ::std::string::String, pub ::std::string::String); + ///Container type for all input parameters for the `packetReceipts` function with signature `packetReceipts(string,string,uint64)` and selector `0x26078437` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "packetReceipts", abi = "packetReceipts(string,string,uint64)")] + pub struct PacketReceiptsCall( + pub ::std::string::String, + pub ::std::string::String, + pub u64, + ); + ///Container type for all input parameters for the `portCapabilityPath` function with signature `portCapabilityPath(string)` and selector `0x2570dae0` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall(name = "portCapabilityPath", abi = "portCapabilityPath(string)")] + pub struct PortCapabilityPathCall { + pub port_id: ::std::string::String, + } + ///Container type for all input parameters for the `recvPacket` function with signature `recvPacket(((uint64,string,string,string,string,bytes,(uint64,uint64),uint64),bytes,(uint64,uint64)))` and selector `0x236ebd70` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "recvPacket", + abi = "recvPacket(((uint64,string,string,string,string,bytes,(uint64,uint64),uint64),bytes,(uint64,uint64)))" + )] + pub struct RecvPacketCall { + pub msg: MsgPacketRecv, + } + ///Container type for all input parameters for the `sendPacket` function with signature `sendPacket(string,string,(uint64,uint64),uint64,bytes)` and selector `0xae4cd201` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "sendPacket", + abi = "sendPacket(string,string,(uint64,uint64),uint64,bytes)" + )] + pub struct SendPacketCall { + pub source_port: ::std::string::String, + pub source_channel: ::std::string::String, + pub timeout_height: IbcCoreClientV1HeightData, + pub timeout_timestamp: u64, + pub data: ::ethers::core::types::Bytes, + } + ///Container type for all input parameters for the `timeoutPacket` function with signature `timeoutPacket(((uint64,string,string,string,string,bytes,(uint64,uint64),uint64),bytes,(uint64,uint64),uint64))` and selector `0xaa18c8b1` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "timeoutPacket", + abi = "timeoutPacket(((uint64,string,string,string,string,bytes,(uint64,uint64),uint64),bytes,(uint64,uint64),uint64))" + )] + pub struct TimeoutPacketCall { + pub msg: MsgPacketTimeout, + } + ///Container type for all input parameters for the `writeAcknowledgement` function with signature `writeAcknowledgement(string,string,uint64,bytes)` and selector `0xb56e79de` + #[derive( + Clone, + ::ethers::contract::EthCall, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethcall( + name = "writeAcknowledgement", + abi = "writeAcknowledgement(string,string,uint64,bytes)" + )] + pub struct WriteAcknowledgementCall { + pub destination_port: ::std::string::String, + pub destination_channel: ::std::string::String, + pub sequence: u64, + pub acknowledgement: ::ethers::core::types::Bytes, + } + ///Container type for all of the contract's call + #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] + pub enum IBCPacketCalls { + CommitmentPrefix(CommitmentPrefixCall), + AcknowledgePacket(AcknowledgePacketCall), + BindPort(BindPortCall), + Capabilities(CapabilitiesCall), + ChannelCapabilityPath(ChannelCapabilityPathCall), + Channels(ChannelsCall), + ClientImpls(ClientImplsCall), + ClientRegistry(ClientRegistryCall), + ClientTypes(ClientTypesCall), + Commitments(CommitmentsCall), + Connections(ConnectionsCall), + GetClient(GetClientCall), + NextChannelSequence(NextChannelSequenceCall), + NextClientSequence(NextClientSequenceCall), + NextConnectionSequence(NextConnectionSequenceCall), + NextSequenceAcks(NextSequenceAcksCall), + NextSequenceRecvs(NextSequenceRecvsCall), + NextSequenceSends(NextSequenceSendsCall), + PacketReceipts(PacketReceiptsCall), + PortCapabilityPath(PortCapabilityPathCall), + RecvPacket(RecvPacketCall), + SendPacket(SendPacketCall), + TimeoutPacket(TimeoutPacketCall), + WriteAcknowledgement(WriteAcknowledgementCall), + } + impl ::ethers::core::abi::AbiDecode for IBCPacketCalls { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::CommitmentPrefix(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::AcknowledgePacket(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::BindPort(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::Capabilities(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ChannelCapabilityPath(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Channels(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::ClientImpls(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ClientRegistry(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::ClientTypes(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Commitments(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::Connections(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::GetClient(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextChannelSequence(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextClientSequence(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextConnectionSequence(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextSequenceAcks(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextSequenceRecvs(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::NextSequenceSends(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::PacketReceipts(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::PortCapabilityPath(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::RecvPacket(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::SendPacket(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::TimeoutPacket(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::WriteAcknowledgement(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for IBCPacketCalls { + fn encode(self) -> Vec { + match self { + Self::CommitmentPrefix(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::AcknowledgePacket(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::BindPort(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Capabilities(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ChannelCapabilityPath(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::Channels(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ClientImpls(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ClientRegistry(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ClientTypes(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Commitments(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::Connections(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::GetClient(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::NextChannelSequence(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::NextClientSequence(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::NextConnectionSequence(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::NextSequenceAcks(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::NextSequenceRecvs(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::NextSequenceSends(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::PacketReceipts(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::PortCapabilityPath(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::RecvPacket(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::SendPacket(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::TimeoutPacket(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::WriteAcknowledgement(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + } + } + } + impl ::core::fmt::Display for IBCPacketCalls { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::CommitmentPrefix(element) => ::core::fmt::Display::fmt(element, f), + Self::AcknowledgePacket(element) => ::core::fmt::Display::fmt(element, f), + Self::BindPort(element) => ::core::fmt::Display::fmt(element, f), + Self::Capabilities(element) => ::core::fmt::Display::fmt(element, f), + Self::ChannelCapabilityPath(element) => ::core::fmt::Display::fmt(element, f), + Self::Channels(element) => ::core::fmt::Display::fmt(element, f), + Self::ClientImpls(element) => ::core::fmt::Display::fmt(element, f), + Self::ClientRegistry(element) => ::core::fmt::Display::fmt(element, f), + Self::ClientTypes(element) => ::core::fmt::Display::fmt(element, f), + Self::Commitments(element) => ::core::fmt::Display::fmt(element, f), + Self::Connections(element) => ::core::fmt::Display::fmt(element, f), + Self::GetClient(element) => ::core::fmt::Display::fmt(element, f), + Self::NextChannelSequence(element) => ::core::fmt::Display::fmt(element, f), + Self::NextClientSequence(element) => ::core::fmt::Display::fmt(element, f), + Self::NextConnectionSequence(element) => ::core::fmt::Display::fmt(element, f), + Self::NextSequenceAcks(element) => ::core::fmt::Display::fmt(element, f), + Self::NextSequenceRecvs(element) => ::core::fmt::Display::fmt(element, f), + Self::NextSequenceSends(element) => ::core::fmt::Display::fmt(element, f), + Self::PacketReceipts(element) => ::core::fmt::Display::fmt(element, f), + Self::PortCapabilityPath(element) => ::core::fmt::Display::fmt(element, f), + Self::RecvPacket(element) => ::core::fmt::Display::fmt(element, f), + Self::SendPacket(element) => ::core::fmt::Display::fmt(element, f), + Self::TimeoutPacket(element) => ::core::fmt::Display::fmt(element, f), + Self::WriteAcknowledgement(element) => ::core::fmt::Display::fmt(element, f), + } + } + } + impl ::core::convert::From for IBCPacketCalls { + fn from(value: CommitmentPrefixCall) -> Self { + Self::CommitmentPrefix(value) + } + } + impl ::core::convert::From for IBCPacketCalls { + fn from(value: AcknowledgePacketCall) -> Self { + Self::AcknowledgePacket(value) + } + } + impl ::core::convert::From for IBCPacketCalls { + fn from(value: BindPortCall) -> Self { + Self::BindPort(value) + } + } + impl ::core::convert::From for IBCPacketCalls { + fn from(value: CapabilitiesCall) -> Self { + Self::Capabilities(value) + } + } + impl ::core::convert::From for IBCPacketCalls { + fn from(value: ChannelCapabilityPathCall) -> Self { + Self::ChannelCapabilityPath(value) + } + } + impl ::core::convert::From for IBCPacketCalls { + fn from(value: ChannelsCall) -> Self { + Self::Channels(value) + } + } + impl ::core::convert::From for IBCPacketCalls { + fn from(value: ClientImplsCall) -> Self { + Self::ClientImpls(value) + } + } + impl ::core::convert::From for IBCPacketCalls { + fn from(value: ClientRegistryCall) -> Self { + Self::ClientRegistry(value) + } + } + impl ::core::convert::From for IBCPacketCalls { + fn from(value: ClientTypesCall) -> Self { + Self::ClientTypes(value) + } + } + impl ::core::convert::From for IBCPacketCalls { + fn from(value: CommitmentsCall) -> Self { + Self::Commitments(value) + } + } + impl ::core::convert::From for IBCPacketCalls { + fn from(value: ConnectionsCall) -> Self { + Self::Connections(value) + } + } + impl ::core::convert::From for IBCPacketCalls { + fn from(value: GetClientCall) -> Self { + Self::GetClient(value) + } + } + impl ::core::convert::From for IBCPacketCalls { + fn from(value: NextChannelSequenceCall) -> Self { + Self::NextChannelSequence(value) + } + } + impl ::core::convert::From for IBCPacketCalls { + fn from(value: NextClientSequenceCall) -> Self { + Self::NextClientSequence(value) + } + } + impl ::core::convert::From for IBCPacketCalls { + fn from(value: NextConnectionSequenceCall) -> Self { + Self::NextConnectionSequence(value) + } + } + impl ::core::convert::From for IBCPacketCalls { + fn from(value: NextSequenceAcksCall) -> Self { + Self::NextSequenceAcks(value) + } + } + impl ::core::convert::From for IBCPacketCalls { + fn from(value: NextSequenceRecvsCall) -> Self { + Self::NextSequenceRecvs(value) + } + } + impl ::core::convert::From for IBCPacketCalls { + fn from(value: NextSequenceSendsCall) -> Self { + Self::NextSequenceSends(value) + } + } + impl ::core::convert::From for IBCPacketCalls { + fn from(value: PacketReceiptsCall) -> Self { + Self::PacketReceipts(value) + } + } + impl ::core::convert::From for IBCPacketCalls { + fn from(value: PortCapabilityPathCall) -> Self { + Self::PortCapabilityPath(value) + } + } + impl ::core::convert::From for IBCPacketCalls { + fn from(value: RecvPacketCall) -> Self { + Self::RecvPacket(value) + } + } + impl ::core::convert::From for IBCPacketCalls { + fn from(value: SendPacketCall) -> Self { + Self::SendPacket(value) + } + } + impl ::core::convert::From for IBCPacketCalls { + fn from(value: TimeoutPacketCall) -> Self { + Self::TimeoutPacket(value) + } + } + impl ::core::convert::From for IBCPacketCalls { + fn from(value: WriteAcknowledgementCall) -> Self { + Self::WriteAcknowledgement(value) + } + } + ///Container type for all return fields from the `COMMITMENT_PREFIX` function with signature `COMMITMENT_PREFIX()` and selector `0xa9550dac` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct CommitmentPrefixReturn(pub ::std::string::String); + ///Container type for all return fields from the `capabilities` function with signature `capabilities(string)` and selector `0x5717bcf5` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct CapabilitiesReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `channelCapabilityPath` function with signature `channelCapabilityPath(string,string)` and selector `0x3bc3339f` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ChannelCapabilityPathReturn(pub ::std::string::String); + ///Container type for all return fields from the `channels` function with signature `channels(string,string)` and selector `0x5b3de260` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ChannelsReturn { + pub state: u8, + pub ordering: u8, + pub counterparty: IbcCoreChannelV1CounterpartyData, + pub version: ::std::string::String, + } + ///Container type for all return fields from the `clientImpls` function with signature `clientImpls(string)` and selector `0xd1297b8d` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ClientImplsReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `clientRegistry` function with signature `clientRegistry(string)` and selector `0x990491a5` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ClientRegistryReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `clientTypes` function with signature `clientTypes(string)` and selector `0xc2380105` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ClientTypesReturn(pub ::std::string::String); + ///Container type for all return fields from the `commitments` function with signature `commitments(bytes32)` and selector `0x839df945` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct CommitmentsReturn(pub [u8; 32]); + ///Container type for all return fields from the `connections` function with signature `connections(string)` and selector `0x31973f00` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct ConnectionsReturn { + pub client_id: ::std::string::String, + pub state: u8, + pub counterparty: IbcCoreConnectionV1CounterpartyData, + pub delay_period: u64, + } + ///Container type for all return fields from the `getClient` function with signature `getClient(string)` and selector `0x7eb78932` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct GetClientReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `nextChannelSequence` function with signature `nextChannelSequence()` and selector `0x7926b8a9` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextChannelSequenceReturn(pub u64); + ///Container type for all return fields from the `nextClientSequence` function with signature `nextClientSequence()` and selector `0xe1b17b43` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextClientSequenceReturn(pub u64); + ///Container type for all return fields from the `nextConnectionSequence` function with signature `nextConnectionSequence()` and selector `0xa049e677` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextConnectionSequenceReturn(pub u64); + ///Container type for all return fields from the `nextSequenceAcks` function with signature `nextSequenceAcks(string,string)` and selector `0x1390d28d` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextSequenceAcksReturn(pub u64); + ///Container type for all return fields from the `nextSequenceRecvs` function with signature `nextSequenceRecvs(string,string)` and selector `0xc930b1b0` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextSequenceRecvsReturn(pub u64); + ///Container type for all return fields from the `nextSequenceSends` function with signature `nextSequenceSends(string,string)` and selector `0x821cb5d0` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct NextSequenceSendsReturn(pub u64); + ///Container type for all return fields from the `packetReceipts` function with signature `packetReceipts(string,string,uint64)` and selector `0x26078437` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct PacketReceiptsReturn(pub u8); + ///Container type for all return fields from the `portCapabilityPath` function with signature `portCapabilityPath(string)` and selector `0x2570dae0` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct PortCapabilityPathReturn(pub ::std::string::String); + ///Container type for all return fields from the `sendPacket` function with signature `sendPacket(string,string,(uint64,uint64),uint64,bytes)` and selector `0xae4cd201` + #[derive( + Clone, + ::ethers::contract::EthAbiType, + ::ethers::contract::EthAbiCodec, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + pub struct SendPacketReturn(pub u64); +} diff --git a/generated/contracts/src/lib.rs b/generated/contracts/src/lib.rs index af5609edee..e8c3828def 100644 --- a/generated/contracts/src/lib.rs +++ b/generated/contracts/src/lib.rs @@ -6,6 +6,10 @@ pub mod devnet_ownable_ibc_handler; pub mod erc20; pub mod glue; +pub mod ibc_channel_handshake; +pub mod ibc_client; +pub mod ibc_connection; pub mod ibc_handler; +pub mod ibc_packet; pub mod shared_types; pub mod ucs01_relay; diff --git a/generated/contracts/src/ucs01_relay.rs b/generated/contracts/src/ucs01_relay.rs index 37a8652bcd..be2f3ee320 100644 --- a/generated/contracts/src/ucs01_relay.rs +++ b/generated/contracts/src/ucs01_relay.rs @@ -27,83 +27,95 @@ pub mod ucs01_relay { }), functions: ::core::convert::From::from([ ( - ::std::borrow::ToOwned::to_owned("addressToDenom"), + ::std::borrow::ToOwned::to_owned("getCounterpartyEndpoint"), ::std::vec![::ethers::core::abi::ethabi::Function { - name: ::std::borrow::ToOwned::to_owned("addressToDenom"), - inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("getCounterpartyEndpoint",), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("sourcePort"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("sourceChannel"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("string"), + ), + }, + ], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::Address, + kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ + ::ethers::core::abi::ethabi::ParamType::String, + ::ethers::core::abi::ethabi::ParamType::String, + ],), internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("address"), + ::std::borrow::ToOwned::to_owned( + "struct IbcCoreChannelV1Counterparty.Data", + ), ), },], - outputs: ::std::vec![::ethers::core::abi::ethabi::Param { - name: ::std::string::String::new(), + constant: ::core::option::Option::None, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + },], + ), + ( + ::std::borrow::ToOwned::to_owned("getDenomAddress"), + ::std::vec![::ethers::core::abi::ethabi::Function { + name: ::std::borrow::ToOwned::to_owned("getDenomAddress"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("denom"), kind: ::ethers::core::abi::ethabi::ParamType::String, internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned("string"), ), },], + outputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::string::String::new(), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], constant: ::core::option::Option::None, state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, },], ), ( - ::std::borrow::ToOwned::to_owned("counterpartyEndpoints"), + ::std::borrow::ToOwned::to_owned("getOutstanding"), ::std::vec![::ethers::core::abi::ethabi::Function { - name: ::std::borrow::ToOwned::to_owned("counterpartyEndpoints",), + name: ::std::borrow::ToOwned::to_owned("getOutstanding"), inputs: ::std::vec![ ::ethers::core::abi::ethabi::Param { - name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::String, - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("string"), - ), - }, - ::ethers::core::abi::ethabi::Param { - name: ::std::string::String::new(), + name: ::std::borrow::ToOwned::to_owned("sourcePort"), kind: ::ethers::core::abi::ethabi::ParamType::String, internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned("string"), ), }, - ], - outputs: ::std::vec![ ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("port_id"), + name: ::std::borrow::ToOwned::to_owned("sourceChannel"), kind: ::ethers::core::abi::ethabi::ParamType::String, internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned("string"), ), }, ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("channel_id"), - kind: ::ethers::core::abi::ethabi::ParamType::String, + name: ::std::borrow::ToOwned::to_owned("token"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("string"), + ::std::borrow::ToOwned::to_owned("address"), ), }, ], - constant: ::core::option::Option::None, - state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, - },], - ), - ( - ::std::borrow::ToOwned::to_owned("denomToAddress"), - ::std::vec![::ethers::core::abi::ethabi::Function { - name: ::std::borrow::ToOwned::to_owned("denomToAddress"), - inputs: ::std::vec![::ethers::core::abi::ethabi::Param { - name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::String, - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("string"), - ), - },], outputs: ::std::vec![::ethers::core::abi::ethabi::Param { name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::Address, + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("address"), + ::std::borrow::ToOwned::to_owned("uint256"), ), },], constant: ::core::option::Option::None, @@ -249,7 +261,7 @@ pub mod ucs01_relay { ), }, ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("_counterpartyVersion",), + name: ::std::borrow::ToOwned::to_owned("counterpartyVersion",), kind: ::ethers::core::abi::ethabi::ParamType::String, internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned("string"), @@ -292,7 +304,7 @@ pub mod ucs01_relay { name: ::std::borrow::ToOwned::to_owned("onChanOpenInit"), inputs: ::std::vec![ ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("_order"), + name: ::std::borrow::ToOwned::to_owned("order"), kind: ::ethers::core::abi::ethabi::ParamType::Uint(8usize), internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned( @@ -338,7 +350,7 @@ pub mod ucs01_relay { ), }, ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("_version"), + name: ::std::borrow::ToOwned::to_owned("version"), kind: ::ethers::core::abi::ethabi::ParamType::String, internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned("string"), @@ -356,7 +368,7 @@ pub mod ucs01_relay { name: ::std::borrow::ToOwned::to_owned("onChanOpenTry"), inputs: ::std::vec![ ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("_order"), + name: ::std::borrow::ToOwned::to_owned("order"), kind: ::ethers::core::abi::ethabi::ParamType::Uint(8usize), internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned( @@ -402,14 +414,14 @@ pub mod ucs01_relay { ), }, ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("_version"), + name: ::std::borrow::ToOwned::to_owned("version"), kind: ::ethers::core::abi::ethabi::ParamType::String, internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned("string"), ), }, ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("_counterpartyVersion",), + name: ::std::borrow::ToOwned::to_owned("counterpartyVersion",), kind: ::ethers::core::abi::ethabi::ParamType::String, internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned("string"), @@ -456,7 +468,7 @@ pub mod ucs01_relay { }, ], outputs: ::std::vec![::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("acknowledgement"), + name: ::std::string::String::new(), kind: ::ethers::core::abi::ethabi::ParamType::Bytes, internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned("bytes"), @@ -544,58 +556,20 @@ pub mod ucs01_relay { state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, },], ), - ( - ::std::borrow::ToOwned::to_owned("outstanding"), - ::std::vec![::ethers::core::abi::ethabi::Function { - name: ::std::borrow::ToOwned::to_owned("outstanding"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::Param { - name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::String, - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("string"), - ), - }, - ::ethers::core::abi::ethabi::Param { - name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::String, - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("string"), - ), - }, - ::ethers::core::abi::ethabi::Param { - name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::Address, - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("address"), - ), - }, - ], - outputs: ::std::vec![::ethers::core::abi::ethabi::Param { - name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint256"), - ), - },], - constant: ::core::option::Option::None, - state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, - },], - ), ( ::std::borrow::ToOwned::to_owned("send"), ::std::vec![::ethers::core::abi::ethabi::Function { name: ::std::borrow::ToOwned::to_owned("send"), inputs: ::std::vec![ ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("portId"), + name: ::std::borrow::ToOwned::to_owned("sourcePort"), kind: ::ethers::core::abi::ethabi::ParamType::String, internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned("string"), ), }, ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("channelId"), + name: ::std::borrow::ToOwned::to_owned("sourceChannel"), kind: ::ethers::core::abi::ethabi::ParamType::String, internal_type: ::core::option::Option::Some( ::std::borrow::ToOwned::to_owned("string"), @@ -735,8 +709,147 @@ pub mod ucs01_relay { anonymous: false, },], ), + ( + ::std::borrow::ToOwned::to_owned("Timeout"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("Timeout"), + inputs: ::std::vec![ + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("sender"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("receiver"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("denom"), + kind: ::ethers::core::abi::ethabi::ParamType::String, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("token"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + indexed: false, + }, + ::ethers::core::abi::ethabi::EventParam { + name: ::std::borrow::ToOwned::to_owned("amount"), + kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), + indexed: false, + }, + ], + anonymous: false, + },], + ), + ]), + errors: ::core::convert::From::from([ + ( + ::std::borrow::ToOwned::to_owned("AddressEmptyCode"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("AddressEmptyCode"), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("target"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("AddressInsufficientBalance"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("AddressInsufficientBalance",), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("account"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrInvalidAcknowledgement"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrInvalidAcknowledgement",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrInvalidBytesAddress"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrInvalidBytesAddress",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrInvalidCounterpartyProtocolVersion"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned( + "ErrInvalidCounterpartyProtocolVersion", + ), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrInvalidProtocolOrdering"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrInvalidProtocolOrdering",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrInvalidProtocolVersion"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrInvalidProtocolVersion",), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrNotIBC"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrNotIBC"), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrUnauthorized"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrUnauthorized"), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("ErrUnstoppable"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("ErrUnstoppable"), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("FailedInnerCall"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("FailedInnerCall"), + inputs: ::std::vec![], + },], + ), + ( + ::std::borrow::ToOwned::to_owned("SafeERC20FailedOperation"), + ::std::vec![::ethers::core::abi::ethabi::AbiError { + name: ::std::borrow::ToOwned::to_owned("SafeERC20FailedOperation",), + inputs: ::std::vec![::ethers::core::abi::ethabi::Param { + name: ::std::borrow::ToOwned::to_owned("token"), + kind: ::ethers::core::abi::ethabi::ParamType::Address, + internal_type: ::core::option::Option::Some( + ::std::borrow::ToOwned::to_owned("address"), + ), + },], + },], + ), ]), - errors: ::std::collections::BTreeMap::new(), receive: false, fallback: false, } @@ -745,20 +858,6 @@ pub mod ucs01_relay { #[cfg(feature = "providers")] pub static UCS01RELAY_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = ::ethers::contract::Lazy::new(__abi); - #[rustfmt::skip] - #[cfg(feature = "providers")] - const __BYTECODE: &[u8] = b"`\xA0\x80`@R4b\0\0\xF0W`@Q`\x1Fb\0OC8\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17b\0\0\xDAW\x80\x84\x92` \x94`@R\x839\x81\x01\x03\x12b\0\0\x8AWQ`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x03b\0\0\x85W`\x80R`@QaN\x05\x90\x81b\0\x01>\x829`\x80Q\x81\x81\x81a\x0C\x80\x01R\x81\x81a\x1B\xC5\x01Ra4\xE5\x01R\xF3[`\0\x80\xFD[`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FABI decoding: tuple data too sho`D\x82\x01Ra\x1C\x9D`\xF2\x1B`d\x82\x01R`\x84\x90\xFD[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[bF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FEther sent to non-payable functi`D\x82\x01Ra7\xB7`\xF1\x1B`d\x82\x01R`\x84\x90\xFD\xFE`\x80`@R`\x046\x10b\0\x173W`\x005`\xE0\x1C\x80c\x06\xD8\xAF2\x14b\0\x01&W\x80c#\x01\xC6\xF5\x14b\0\x01 W\x80c@ \xD0\xED\x14b\0\x01\x1AW\x80cD\xDD\x968\x14b\0\x01\x14W\x80cO\x01\xE5.\x14b\0\x01\x0EW\x80cR\xC7\x15}\x14b\0\x01\x08W\x80cij\x9B\xF4\x14b\0\x01\x02W\x80c\x95F\x9D\xF8\x14b\0\0\xFCW\x80c\x98\x13\x89\xF2\x14b\0\0\xF6W\x80c\xA1\x13\xE4\x11\x14b\0\0\xF0W\x80c\xBD\x95\x0F\x89\x14b\0\0\xEAW\x80c\xD7\xC8;\xE5\x14b\0\0\xE4W\x80c\xE7J\x1A\xC2\x14b\0\0\xDEW\x80c\xEFGv\xD2\x14b\0\0\xDEW\x80c\xF6-+\xCC\x14b\0\0\xD8Wc\xFB\x8BS.\x03b\0\x173Wb\0\x15yV[b\0\x14\xCCV[b\0\x13\xC9V[b\0\x13$V[b\0\x0ELV[b\0\x0E-V[b\0\r\tV[b\0\x0C\xB7V[b\0\x0CQV[b\0\x0B\xBCV[b\0\x0B#V[b\0\ncV[b\0\x08\x9EV[b\0\x08_V[b\0\x06\xB8V[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FEther sent to non-payable functi`D\x82\x01R\x7Fon\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FABI decoding: tuple data too sho`D\x82\x01R\x7Frt\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FABI decoding: invalid tuple offs`D\x82\x01R\x7Fet\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`+`$\x82\x01R\x7FABI decoding: invalid calldata a`D\x82\x01R\x7Frray offset\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`'`$\x82\x01R\x7FABI decoding: invalid byte array`D\x82\x01R\x7F length\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`A`\x04R`$`\0\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11b\0\x03\x82W`@RV[b\0\x03>V[`@\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17b\0\x03\x82W`@RV[``\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17b\0\x03\x82W`@RV[`\xA0\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17b\0\x03\x82W`@RV[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17b\0\x03\x82W`@RV[`@Q\x90b\0\x04\x12\x82b\0\x03\xA5V[V[`@Q\x90b\0\x04\x12\x82b\0\x03\x88V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11b\0\x03\x82W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x92\x91\x92b\0\x04N\x82b\0\x04#V[\x91b\0\x04^`@Q\x93\x84b\0\x03\xDFV[\x82\x94\x81\x84R\x81\x83\x01\x11b\0\x04|W\x82\x81` \x93\x84`\0\x96\x017\x01\x01RV[b\0\x02\xD4V[\x90\x80`\x1F\x83\x01\x12\x15b\0\x04\xA3W\x81` b\0\x04\xA0\x935\x91\x01b\0\x04@V[\x90V[b\0\x02jV[`\0[\x83\x81\x10b\0\x04\xBDWPP`\0\x91\x01RV[\x81\x81\x01Q\x83\x82\x01R` \x01b\0\x04\xACV[` b\0\x04\xE9\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01b\0\x04\xA9V[\x81\x01`\x02\x81R\x03\x01\x90 \x90V[` b\0\x05\x11\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01b\0\x04\xA9V[\x81\x01`\0\x81R\x03\x01\x90 \x90V[` b\0\x059\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01b\0\x04\xA9V[\x81\x01`\x03\x81R\x03\x01\x90 \x90V[` \x90b\0\x05b\x92\x82`@Q\x94\x83\x86\x80\x95Q\x93\x84\x92\x01b\0\x04\xA9V[\x82\x01\x90\x81R\x03\x01\x90 \x90V[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15b\0\x05\xB9W[` \x83\x10\x14b\0\x05\x8AWV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\"`\x04R`$`\0\xFD[\x91`\x7F\x16\x91b\0\x05~V[\x90`@Q\x91\x82`\0\x82Tb\0\x05\xD9\x81b\0\x05nV[\x90\x81\x84R` \x94`\x01\x91\x82\x81\x16\x90\x81`\0\x14b\0\x06NWP`\x01\x14b\0\x06\x0BW[PPPb\0\x04\x12\x92P\x03\x83b\0\x03\xDFV[`\0\x90\x81R\x85\x81 \x95\x93P\x91\x90[\x81\x83\x10b\0\x065WPPb\0\x04\x12\x93P\x82\x01\x018\x80\x80b\0\x05\xFAV[\x85T\x88\x84\x01\x85\x01R\x94\x85\x01\x94\x87\x94P\x91\x83\x01\x91b\0\x06\x19V[\x91PPb\0\x04\x12\x95\x93P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x91P\x16\x82\x84\x01R\x15\x15`\x05\x1B\x82\x01\x018\x80\x80b\0\x05\xFAV[\x90`\x1F\x19`\x1F` \x93b\0\x06\xB1\x81Q\x80\x92\x81\x87R\x87\x80\x88\x01\x91\x01b\0\x04\xA9V[\x01\x16\x01\x01\x90V[4b\0\x07wW`@`\x03\x196\x01\x12b\0\x07qWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11b\0\x07kWb\0\x06\xEF\x906\x90`\x04\x01b\0\x04\x82V[\x90`$5\x90\x81\x11b\0\x07kWb\0\x07X\x91b\0\x07\x1Fb\0\x07\x18b\0\x07&\x936\x90`\x04\x01b\0\x04\x82V[\x91b\0\x04\xCEV[\x90b\0\x05FV[b\0\x07gb\0\x07C`\x01b\0\x07;\x84b\0\x05\xC4V[\x93\x01b\0\x05\xC4V[`@Q\x93\x84\x93`@\x85R`@\x85\x01\x90b\0\x06\x91V[\x90\x83\x82\x03` \x85\x01Rb\0\x06\x91V[\x03\x90\xF3[b\0\x02\0V[b\0\x01\x96V[b\0\x01,V[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`'`$\x82\x01R\x7FABI decoding: struct calldata to`D\x82\x01R\x7Fo short\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x90\x81a\x01 \x91\x03\x12b\0\x07\xF7W\x90V[b\0\x07}V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x03b\0\x08\x1CWV[`\0\x80\xFD[`@`\x03\x19\x82\x01\x12b\0\x07qW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11b\0\x07kWb\0\x08P\x91`\x04\x01b\0\x07\xE7V[\x90`$5b\0\x04\xA0\x81b\0\x07\xFDV[4b\0\x07wWb\0\x07gb\0\x08\x89b\0\x08x6b\0\x08!V[\x90b\0\x08\x83b\x004\xCDV[b\x002\xB5V[`@Q\x91\x82\x91` \x83R` \x83\x01\x90b\0\x06\x91V[4b\0\x07wW` `\x03\x196\x01\x12b\0\x07qW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11b\0\x07kWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFb\0\x08\xF5b\0\x08\xEF` \x936\x90`\x04\x01b\0\x04\x82V[b\0\x04\xF6V[T\x16`@Q\x90\x81R\xF3[`\x045\x90`\x03\x82\x10\x15b\0\x08\x1CWV[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`+`$\x82\x01R\x7FABI decoding: invalid calldata a`D\x82\x01R\x7Frray length\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`+`$\x82\x01R\x7FABI decoding: invalid calldata a`D\x82\x01R\x7Frray stride\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x91\x81`\x1F\x84\x01\x12\x15b\0\x04\xA3W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11b\0\n\x1DW` \x80\x85\x01\x94\x84`\x05\x1B\x01\x01\x11b\0\n\x17WV[b\0\tyV[b\0\t\x0FV[\x91\x81`\x1F\x84\x01\x12\x15b\0\x04\xA3W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11b\0\n\x1DW` \x83\x81\x86\x01\x95\x01\x01\x11b\0\n\x17WV[\x90\x81`@\x91\x03\x12b\0\x07\xF7W\x90V[4b\0\x07wW`\xC0`\x03\x196\x01\x12b\0\x07qWb\0\n\x80b\0\x08\xFFV[Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$5\x81\x81\x11b\0\x07kWb\0\n\xA5\x906\x90`\x04\x01b\0\t\xE3V[PP`D5\x81\x81\x11b\0\x07kWb\0\n\xC2\x906\x90`\x04\x01b\0\n#V[`d5\x83\x81\x11b\0\x07kWb\0\n\xDD\x906\x90`\x04\x01b\0\n#V[\x91`\x845\x85\x81\x11b\0\x07kWb\0\n\xF9\x906\x90`\x04\x01b\0\nTV[\x93`\xA45\x95\x86\x11b\0\x07kWb\0\x0B\x19b\0\x0B!\x966\x90`\x04\x01b\0\n#V[PPb\x007PV[\0[4b\0\x07wW`\x80`\x03\x196\x01\x12b\0\x07qWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11b\0\x07kWb\0\x0BZ\x906\x90`\x04\x01b\0\n#V[\x90`$5\x83\x81\x11b\0\x07kWb\0\x0Bv\x906\x90`\x04\x01b\0\n#V[\x90`D5\x85\x81\x11b\0\x07kWb\0\x0B\x92\x906\x90`\x04\x01b\0\n#V[\x94\x90\x93`d5\x96\x87\x11b\0\x07kWb\0\x0B\xB4b\0\x0B!\x976\x90`\x04\x01b\0\n#V[PPb\09[V[4b\0\x07wWb\0\x0B!b\0\x0C5b\0\x0C\x1Eb\0\x0C>b\0\x0B\xDD6b\0\x08!V[Pb\0\x0B\xE8b\x004\xCDV[b\0\x0B\xF7` \x82\x01\x82b\0$uV[\x94\x90b\0\x0C,b\0\x0C&b\0\x0C\x10`@\x86\x01\x86b\0$uV[\x97\x90\x95`\xA0\x81\x01\x90b\0$uV[6\x91b\0\x04@V[b\0/gV[\x956\x91b\0\x04@V[\x926\x91b\0\x04@V[\x90b\x005\x81V[`\0\x91\x03\x12b\0\x07qWV[4b\0\x07wW`\0`\x03\x196\x01\x12b\0\x07qW` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[\x90` b\0\x04\xA0\x92\x81\x81R\x01\x90b\0\x06\x91V[4b\0\x07wW` `\x03\x196\x01\x12b\0\x07qWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045b\0\x0C\xED\x81b\0\x07\xFDV[\x16`\0R`\x01` Rb\0\x07gb\0\x08\x89`@`\0 b\0\x05\xC4V[4b\0\x07wW`\xE0`\x03\x196\x01\x12b\0\x07qWb\0\r&b\0\x08\xFFV[P`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11b\0\x07kWb\0\rL`\x04\x926\x90\x84\x01b\0\t\xE3V[PP`D5\x81\x81\x11b\0\x07kWb\0\rh\x906\x90\x84\x01b\0\n#V[\x90`d5\x83\x81\x11b\0\x07kWb\0\r\x83\x906\x90\x86\x01b\0\n#V[\x92\x90\x91`\x845\x85\x81\x11b\0\x07kWb\0\r\xA0\x906\x90\x88\x01b\0\nTV[\x94`\xA45\x81\x81\x11b\0\x07kWb\0\r\xBB\x906\x90\x89\x01b\0\n#V[PP`\xC45\x90\x81\x11b\0\x07kWb\0\x0B!\x96b\0\x0B\x19\x916\x91\x01b\0\n#V[`@`\x03\x19\x82\x01\x12b\0\x07qWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91`\x045\x83\x81\x11b\0\x07kW\x82b\0\x0E\x0C\x91`\x04\x01b\0\n#V[\x93\x90\x93\x92`$5\x91\x82\x11b\0\x07kWb\0\x0E)\x91`\x04\x01b\0\n#V[\x90\x91V[4b\0\x07wWb\0\x0E>6b\0\r\xDBV[PPPPb\0\x0B!b\x004\xCDV[4b\0\x07wWb\0\x0E\xC4b\0\x0Ea6b\0\x08!V[Pb\0\x0Eo03\x14b\0$)V[b\0\x0E\x86b\0\x0C&b\0\x0C\x1E`\xA0\x84\x01\x84b\0$uV[``\x82\x01\x91b\0\x0E\x97\x83\x82b\0$uV[\x94\x90b\0\x0E\xBD`\x80\x84\x01\x96b\0\x0C5b\0\x0E\xB2\x89\x87b\0$uV[\x94\x90\x926\x91b\0\x04@V[\x90b\0#4V[\x90`\0\x90`@\x80\x85\x01\x95` \x97\x88\x87\x01\x94[\x88Q\x90\x81Q\x81\x10\x15b\0\x0B!W\x8A\x88b\0\x0E\xF2\x83\x86\x95b\0\x19\x10V[Q\x88\x87\x8Bb\0\x0FDb\0\x0F@b\0\x0F,b\0\x0F$b\0\x0F\x1Db\0\x0F\x16\x89Qb\0'1V[\x99b\0'1V[\x89b\0)\x92V[\x93Qb\0.\rV[\x96b\0\x0F9\x87Qb\0'1V[\x90b\0(QV[\x15\x90V[\x15b\0\x10\xC3W\x96b\0\x0F\xA2\x91b\0\x0C5b\0\x0F\x9Bb\0\x0Fgb\0\x0F\x81\x9Bb\0'[V[\x98b\0\x0F\x8Ab\0\x0Fw\x8Bb\0+\xEEV[\x9C\x8D\x95\x89b\0$uV[\x96\x90\x98b\0$uV[\x93\x90\x91\x89\x01\x97\x88Q\x966\x91b\0\x04@V[\x90b\x001+V[Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x86\x16\x80;\x15b\0\x10\xBDW\x89Q\x7F\xA9\x05\x9C\xBB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x85\x16`\x04\x82\x01R`$\x81\x01\x92\x90\x92R\x8F\x90\x82\x90`D\x90\x82\x90`\0\x90Z\xF1\x93\x84\x15b\0\x10\xB7W\x8F\x96b\0\x10}\x97\x8Fb\0\x10d\x90b\0\x10t\x95\x7FO\xBF{72\x0C\xF1\xA4\xB0\xAA\xCFt\x8C\xF3V8(\xE8.\xD2\xA35\x18\x06\x1D\xB1\xD1\xB5#\xFE\x1F.\x99b\0\x10\x83W[P[Qb\0\x1D\xC5V[\x94\x01Q\x91\x8BQ\x95\x86\x95\x86b\0&\xC9V[\x03\x90\xA1b\0\x18\xB4V[b\0\x0E\xD6V[b\0\x10\xA7\x90\x84=\x86\x11b\0\x10\xAFW[b\0\x10\x9E\x81\x83b\0\x03\xDFV[\x81\x01\x90b\0\"\nV[P8b\0\x10[V[P=b\0\x10\x92V[b\0\x1A\x94V[b\0\x19\xA6V[PPb\0\x11\x01\x91\x95Pb\0\x10\xE3b\0\x11\x08\x93\x94b\0\x0C5\x92\x01\x8Bb\0$uV[\x92\x90b\0\x10\xF3\x8B\x8D\x01\x8Db\0$uV[\x93\x90\x91\x89Q\x956\x91b\0\x04@V[\x90b\0*\x0CV[\x90b\0\x112b\0\x11\x18\x83b\0\x04\xF6V[Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x93\x8Ds\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x87\x16\x15b\0\x12 W[\x86\x16\x90\x82\x01Q\x90\x80;\x15b\0\x10\xBDW\x89Q\x7F@\xC1\x0F\x19\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x85\x16`\x04\x82\x01R`$\x81\x01\x92\x90\x92R`\0\x90\x82\x90`D\x90\x82\x90\x84\x90Z\xF1\x93\x84\x15b\0\x10\xB7W\x8F\x96b\0\x10}\x97\x8Fb\0\x10d\x90b\0\x10t\x95\x7FO\xBF{72\x0C\xF1\xA4\xB0\xAA\xCFt\x8C\xF3V8(\xE8.\xD2\xA35\x18\x06\x1D\xB1\xD1\xB5#\xFE\x1F.\x99b\0\x12\x02W[Pb\0\x10]V[\x80b\0\x12\x12b\0\x12\x19\x92b\0\x03mV[\x80b\0\x0CEV[8b\0\x11\xFBV[\x95PP\x87Qa\x13\x91\x80\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17b\0\x03\x82W\x85b\0\x12S\x91\x84\x93b\0:?\x859b\0\x0C\xA4V[\x03\x90`\0\xF0\x80\x15b\0\x10\xB7W\x85\x8F\x91\x16\x95b\0\x12\xB4\x87b\0\x12t\x87b\0\x04\xF6V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[b\0\x12\xEA\x85b\0\x12\xE4\x89s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\0R`\x01` R`@`\0 \x90V[b\0%\xB0V[\x7Fa\x14B\x87\xC6\xE9=\xDD\xDE?P\x0B\x97\xBDL\x13\x98\x06\xA0r\xADA\xE4\x03\xC6\x07\xFC/\xB8\xE3\x7FG\x8AQ\x80b\0\x13\x1B\x8A\x89\x83b\0&\x93V[\x03\x90\xA1b\0\x11SV[4b\0\x07wW```\x03\x196\x01\x12b\0\x07qWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11b\0\x07kWb\0\x13[\x906\x90`\x04\x01b\0\x04\x82V[\x90`$5\x90\x81\x11b\0\x07kW` \x91b\0\x13\x9Bb\0\x13\x82b\0\x13\xC0\x936\x90`\x04\x01b\0\x04\x82V[b\0\x07\x1F`D5\x93b\0\x13\x95\x85b\0\x07\xFDV[b\0\x05\x1EV[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\0R` R`@`\0 \x90V[T`@Q\x90\x81R\xF3[4b\0\x07wWb\0\x13\xDA6b\0\r\xDBV[PPPPb\0\x13\xE8b\x004\xCDV[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7Fucs01-relay: closing a channel i`D\x82\x01R\x7Fs not supported\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x91\x81`\x1F\x84\x01\x12\x15b\0\x04\xA3W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11b\0\n\x1DW` \x80\x85\x01\x94\x84`\x06\x1B\x01\x01\x11b\0\n\x17WV[`\x845\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03b\0\x08\x1CWV[`\xA45\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03b\0\x08\x1CWV[5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03b\0\x08\x1CWV[4b\0\x07wW`\xC0`\x03\x196\x01\x12b\0\x07qWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11b\0\x07kWb\0\x15\x03\x906\x90`\x04\x01b\0\n#V[`$5\x83\x81\x11b\0\x07kWb\0\x15\x1E\x906\x90`\x04\x01b\0\n#V[\x90`D5\x85\x81\x11b\0\x07kWb\0\x15:\x906\x90`\x04\x01b\0\n#V[\x90`d5\x96\x87\x11b\0\x07kWb\0\x15Zb\0\x0B!\x976\x90`\x04\x01b\0\x14RV[\x94\x90\x93b\0\x15gb\0\x14\x86V[\x96b\0\x15rb\0\x14\x9EV[\x98b\0\x1A\xA0V[4b\0\x07wW```\x03\x196\x01\x12b\0\x07qWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11b\0\x07kWb\0\x15\xB0\x906\x90`\x04\x01b\0\x07\xE7V[\x90`$5\x90\x81\x11b\0\x07kWb\0\x15\xCC\x906\x90`\x04\x01b\0\n#V[b\0\x15\xD9`D5b\0\x07\xFDV[b\0\x15\xE3b\x004\xCDV[`\x01\x81\x03b\0\x16\xEFW\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0b\0\x16{b\0\x16U\x7F\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x93b\0\x16Nb\0\x0C&b\0\x0C\x1E`\xA0\x8A\x01\x8Ab\0$uV[\x95b\x005wV[5\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x90V[\x16\x03b\0\x16\xC1WPb\0\x16\xAD\x81b\0\x16\xB8b\0\x16\x9F` b\0\x0B!\x95\x01\x83b\0$uV[\x93\x90\x92`@\x81\x01\x90b\0$uV[\x92\x90\x936\x91b\0\x04@V[P6\x91b\0\x04@V[\x81b\0\x0C>b\0\x0E\xB2b\0\x0C5b\0\x16\xE1` b\0\x0B!\x97\x01\x85b\0$uV[\x92\x90\x94`@\x81\x01\x90b\0$uV[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7Fucs01-relay: single byte ack\0\0\0\0`D\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`5`$\x82\x01R\x7FContract does not have fallback `D\x82\x01R\x7Fnor receive functions\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[` \x90\x82`@Q\x93\x84\x92\x837\x81\x01`\x02\x81R\x03\x01\x90 \x90V[` \x91\x92\x83`@Q\x94\x85\x93\x847\x82\x01\x90\x81R\x03\x01\x90 \x90V[\x90`@Qb\0\x17\xDE\x81b\0\x03\x88V[` b\0\x17\xFC`\x01\x83\x95b\0\x17\xF3\x81b\0\x05\xC4V[\x85R\x01b\0\x05\xC4V[\x91\x01RV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11b\0\x03\x82W`\x05\x1B` \x01\x90V[\x90b\0\x18&\x82b\0\x18\x01V[`@\x90b\0\x187\x82Q\x91\x82b\0\x03\xDFV[\x83\x81R`\x1F\x19b\0\x18I\x82\x95b\0\x18\x01V[\x01\x91`\0\x90\x81[\x84\x81\x10b\0\x18_WPPPPPV[` \x90\x82Qb\0\x18o\x81b\0\x03\x88V[``\x81R\x82\x85\x81\x83\x01R\x82\x87\x01\x01R\x01b\0\x18PV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\x11`\x04R`$`\0\xFD[`\0\x19\x81\x14b\0\x18\xC4W`\x01\x01\x90V[b\0\x18\x85V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`2`\x04R`$`\0\xFD[\x91\x90\x81\x10\x15b\0\x19\nW`\x06\x1B\x01\x90V[b\0\x18\xCAV[\x80Q\x82\x10\x15b\0\x19\nW` \x91`\x05\x1B\x01\x01\x90V[5o\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x03b\0\x08\x1CW\x90V[5b\0\x04\xA0\x81b\0\x07\xFDV[\x91`\x80\x93b\0\x19\x8Cb\0\x19\x9B\x92\x98\x97\x96\x98s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x95\x16\x86R`\xA0` \x87\x01R`\xA0\x86\x01\x90b\0\x06\x91V[\x90\x84\x82\x03`@\x86\x01Rb\0\x06\x91V[\x95\x16``\x82\x01R\x01RV[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FTarget contract does not contain`D\x82\x01R\x7F code\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x1F\x82` \x94\x93`\x1F\x19\x93\x81\x86R\x86\x86\x017`\0\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x92\x90\x93b\0\x1ARb\0\x04\xA0\x97\x95b\0\x1Aa\x94`\xC0\x87R`\xC0\x87\x01\x91b\0\x1A\x10V[\x91\x84\x83\x03` \x86\x01Rb\0\x1A\x10V[\x92` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x82\x81Q\x16`@\x85\x01R\x01Q\x16``\x82\x01R`\0`\x80\x82\x01R`\xA0\x81\x84\x03\x91\x01Rb\0\x06\x91V[`@Q=`\0\x82>=\x90\xFD[\x93\x83\x99\x93\x92\x97\x91\x95\x96b\0\x1A\xCBb\0\x1A\xC5b\0\x1A\xBD\x89\x89b\0\x17\x9DV[\x86\x8Cb\0\x17\xB6V[b\0\x17\xCFV[\x87b\0\x1A\xD7\x85b\0\x18\x1AV[\x94`\0\x8B\x8D\x8B` \x9A\x8B\x88\x01\x96[\x86\x86\x10b\0\x1CYWPPPPPPPPPP\x90b\0\x1Brb\0\x1B\xAA\x94\x93\x92b\0\x1B\x0E3b\0\x1DMV[P`@Q\x98b\0\x1B]\x8Ab\0\x1BN3\x88\x83\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0`\x14\x92``\x1B\x16\x81R\x01\x90V[\x03`\x1F\x19\x81\x01\x8CR\x8Bb\0\x03\xDFV[b\0\x1Bgb\0\x04\x03V[\x99\x8AR6\x91b\0\x04@V[\x82\x88\x01R`@\x87\x01Rb\0\x1B\x99b\0\x1B\x89b\0\x04\x14V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x99\x16\x89RV[\x87\x01\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90RV[b\0\x1B\xECs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x93b\0\x1ECV[\x90\x83;\x15b\0\x10\xBDWb\0\x1C6`\0\x96\x92\x87\x93`@Q\x99\x8A\x98\x89\x97\x88\x96\x7F\xAEL\xD2\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x88R`\x04\x88\x01b\0\x1A1V[\x03\x92Z\xF1\x80\x15b\0\x10\xB7Wb\0\x1CIWPV[\x80b\0\x12\x12b\0\x04\x12\x92b\0\x03mV[b\0\x1Cf\x86\x88\x8Cb\0\x18\xF9V[\x93\x84\x92\x8AQ\x91\x8AQ\x93b\0\x1Cz\x96b\0\x1F\x16V[\x90\x81b\0\x1C\x88\x85\x8Cb\0\x19\x10V[QR\x8A\x81\x01\x92\x84\x8C\x8Cb\0\x1C\x9C\x87b\0\x19%V[o\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x92b\0\x1C\xBA\x91b\0\x19\x10V[Q\x01R6b\0\x1C\xCA\x91\x8Bb\0\x04@V[b\0\x1C\xD5\x90b\0\x1D\xC5V[\x90b\0\x1C\xE1\x90b\0\x19CV[\x92b\0\x1C\xED\x90b\0\x19%V[o\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`@Q\x93\x84\x93b\0\x1D\x12\x933\x86b\0\x19OV[\x03\x7F\x02dZt\x85g\xCE\xD8\x0CS\xF7H\x08\x92\x02\xF0\xE8I\x17\xCD\xE6^>)\xC1d\x1F\xA1\x89G\x841\x91\xA1b\0\x1DA\x90b\0\x18\xB4V[\x8B\x8F\x8B\x8F\x91\x8Eb\0\x1A\xE5V[\x90`@Q\x91`\x80\x83\x01`@R`\x0Fo0123456789abcdef\x81R`\x02\x84\x01\x91`(\x83R`\0`J\x86\x01R``\x1B\x90`\x01`\0[\x80\x80\x01\x87\x01`\"\x85\x83\x1A\x85\x81\x16Q`#\x84\x01S`\x04\x1CQ\x91\x01S\x01`\x14\x81\x14b\0\x1D\xB4W`\x01\x90b\0\x1D\x87V[PPPa0x`\x02\x82Q\x01\x91R\x82RV[\x90\x81\x80Q\x90`@Q\x93`\x02\x90\x81\x86\x01\x93\x80\x80\x01\x85R`\x0F\x90o0123456789abcdef\x82R`\"\x88\x01\x94\x01\x91[\x82\x81\x03b\0\x1E\x1AWPPP` \x82`\0a0x\x94R\x01`@R\x82Q\x01\x91R\x82RV[\x90\x91\x92\x80\x94`\x01\x80\x93\x01\x92\x84\x84Q\x16Q\x90\x82\x01S\x83\x83Q`\x04\x1C\x16Q\x81S\x01\x93\x92\x91\x90b\0\x1D\xF8V[b\0\x1Et\x90\x80Q\x90` \x91\x82\x82\x01Q\x91`@\x80\x91\x01Q\x93b\0\x1E\x87\x82Q\x96\x87\x94``\x84\x87\x01R`\x80\x86\x01\x90b\0\x06\x91V[`\x1F\x19\x95\x86\x86\x83\x03\x01\x85\x87\x01Rb\0\x06\x91V[\x90\x84\x84\x83\x03\x01``\x85\x01R\x85Q\x91\x82\x81R\x81\x81\x01\x82\x80\x85`\x05\x1B\x84\x01\x01\x98\x01\x94`\0\x92[\x85\x84\x10b\0\x1E\xCCWPPPPPPPb\0\x04\xA0\x92\x03\x90\x81\x01\x83R\x82b\0\x03\xDFV[\x91\x93`\x01\x91\x93\x95\x97P\x80\x8A\x8A\x85\x83\x9A\x9C\x9D\x03\x01\x87R\x8AQ\x90\x82\x80b\0\x1E\xF9\x84Q\x8A\x85R\x8A\x85\x01\x90b\0\x06\x91V[\x93\x01Q\x91\x01R\x99\x01\x94\x01\x94\x01\x91\x89\x96\x94\x91\x98\x97\x98\x95\x93\x95b\0\x1E\xABV[\x96\x95\x93\x94\x96\x91\x90\x91b\0\x1F\xCBb\0\x1FJb\0\x1F1\x87b\0\x19CV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x96b\0\x1F\x83` \x88\x01\x98b\0\x1Fxb\0\x1Fc\x8Bb\0\x19%V[o\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x900\x903\x90b\0 \xB7V[b\0\x1F\xC2b\0\x1F\xBCb\0\x1F\x96\x89b\0\x19CV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\0R`\x01` R`@`\0 \x90V[b\0\x05\xC4V[\x99\x8A\x91b\0\"\xF3V[\x15b\0 _WPPPPb\0\x1F\xECb\0\x1F1b\0\x1F1b\0\x1F\xF3\x93b\0\x19CV[\x91b\0\x19%V[\x90\x80;\x15b\0\x10\xBDW`@Q\x7F\x9D\xC2\x9F\xAC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R0`\x04\x82\x01Ro\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x90\x92\x16`$\x83\x01R`\0\x90\x82\x90`D\x90\x82\x90\x84\x90Z\xF1\x80\x15b\0\x10\xB7Wb\0\x1CIWPV[b\0\x04\xA0\x96\x97P\x91o\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFb\0 \xA2b\0 \xB1\x97\x93b\0\x0C,b\0 \xAB\x97\x96b\0\x0C,b\0 \x9B\x8Bb\0\x19CV[\x97b\0\x19%V[\x91\x16\x92b\0#\xADV[b\0\x19CV[b\0\x1DMV[\x90`\0\x80b\0!w\x94`@Q\x94` \x97\x88\x87\x01\x95\x7F#\xB8r\xDD\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x93\x84\x80\x92\x16`$\x8A\x01R\x16`D\x88\x01R`d\x87\x01R`d\x86Rb\0!'\x86b\0\x03\xC2V[\x16\x92`@Q\x94b\0!8\x86b\0\x03\x88V[\x87\x86R\x7FSafeERC20: low-level call failed\x88\x87\x01RQ\x90\x82\x85Z\xF1b\0!pb\0\"$V[\x91b\0\"YV[\x80Q\x90\x81b\0!\x85WPPPV[\x82\x80b\0!\x97\x93\x83\x01\x01\x91\x01b\0\"\nV[\x15b\0!\xA0WPV[`\x84\x90`@Q\x90bF\x1B\xCD`\xE5\x1B\x82R`\x04\x82\x01R`*`$\x82\x01R\x7FSafeERC20: ERC20 operation did n`D\x82\x01R\x7Fot succeed\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x90\x81` \x91\x03\x12b\0\x07qWQ\x80\x15\x15\x81\x03b\0\x08\x1CW\x90V[=\x15b\0\"TW=\x90b\0\"8\x82b\0\x04#V[\x91b\0\"H`@Q\x93\x84b\0\x03\xDFV[\x82R=`\0` \x84\x01>V[``\x90V[\x91\x92\x90\x15b\0\"\xBDWP\x81Q\x15b\0\"oWP\x90V[;\x15b\0\"yW\x90V[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1D`$\x82\x01R\x7FAddress: call to non-contract\0\0\0`D\x82\x01R\xFD[\x82Q\x90\x91P\x15b\0\"\xD1WP\x80Q\x90` \x01\xFD[b\0\"\xEF\x90`@Q\x91\x82\x91bF\x1B\xCD`\xE5\x1B\x83R`\x04\x83\x01b\0\x0C\xA4V[\x03\x90\xFD[\x91\x90\x81Q\x15\x15\x92\x83b\0#\x07W[PPP\x90V[` \x92\x93P\x90b\0#\x18\x91b\0#4V[\x80Q\x91\x82\x91\x01 \x81` \x84\x01 \x14\x91Q\x10\x15\x168\x80\x80b\0#\x01V[`\"b\0\x04\xA0\x91`@Q\x93\x81b\0#V\x86\x93Q\x80\x92` \x80\x87\x01\x91\x01b\0\x04\xA9V[\x82\x01\x90\x7F/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x91\x82` \x82\x01Rb\0#\x97\x82Q\x80\x93` `!\x85\x01\x91\x01b\0\x04\xA9V[\x01\x90`!\x82\x01R\x03`\x02\x81\x01\x84R\x01\x82b\0\x03\xDFV[\x91\x90\x91b\0#\xCB\x82b\0\x13\x9Bb\0#\xC4\x84b\0\x05\x1EV[\x86b\0\x05FV[T\x93\x84\x01\x80\x94\x11b\0\x18\xC4Wb\0#\xEB\x92b\0\x07\x1Fb\0\x13\x9B\x92b\0\x05\x1EV[UV[\x90` \x82\x01\x80\x92\x11b\0\x18\xC4WV[\x90`\x02\x82\x01\x80\x92\x11b\0\x18\xC4WV[\x90`\x01\x82\x01\x80\x92\x11b\0\x18\xC4WV[\x91\x90\x82\x01\x80\x92\x11b\0\x18\xC4WV[\x15b\0\x08\x1CWV[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FCalldata tail too short\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15b\0%\x13W\x01\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11b\0$\xCFW` \x01\x91\x816\x03\x83\x13b\0$\xC9WV[b\0$1V[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FInvalid calldata tail length\0\0\0\0`D\x82\x01R\xFD[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FInvalid calldata tail offset\0\0\0\0`D\x82\x01R\xFD[\x90`\x1F\x81\x11b\0%fWPPPV[`\0\x91\x82R` \x82 \x90` `\x1F\x85\x01`\x05\x1C\x83\x01\x94\x10b\0%\xA5W[`\x1F\x01`\x05\x1C\x01\x91[\x82\x81\x10b\0%\x99WPPPV[\x81\x81U`\x01\x01b\0%\x8CV[\x90\x92P\x82\x90b\0%\x83V[\x91\x90\x91\x82Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11b\0\x03\x82Wb\0%\xDD\x81b\0%\xD6\x84Tb\0\x05nV[\x84b\0%WV[` \x80`\x1F\x83\x11`\x01\x14b\0&#WP\x81\x90b\0&\x13\x93\x94\x95`\0\x92b\0&\x17W[PP`\0\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[\x90UV[\x01Q\x90P8\x80b\0%\xFFV[\x90`\x1F\x19\x83\x16\x95b\0&:\x85`\0R` `\0 \x90V[\x92`\0\x90[\x88\x82\x10b\0&zWPP\x83`\x01\x95\x96\x97\x10b\0&`W[PPP\x81\x1B\x01\x90UV[\x01Q`\0\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U8\x80\x80b\0&VV[\x80`\x01\x85\x96\x82\x94\x96\x86\x01Q\x81U\x01\x95\x01\x93\x01\x90b\0&?V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFb\0&\xC2` \x92\x95\x94\x95`@\x85R`@\x85\x01\x90b\0\x06\x91V[\x94\x16\x91\x01RV[\x91\x90`\x80\x93b\0&\xEAb\0\x19\x9B\x92\x98\x97\x96\x98`\xA0\x86R`\xA0\x86\x01\x90b\0\x06\x91V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x94\x16` \x86\x01R\x84\x82\x03`@\x86\x01Rb\0\x06\x91V[`@Q\x90b\0'%\x82b\0\x03\x88V[`\0` \x83\x82\x81R\x01RV[b\0';b\0'\x16V[P` \x81Q\x91`@Q\x92b\0'P\x84b\0\x03\x88V[\x83R\x01` \x82\x01R\x90V[\x80Q\x90b\0'\x86b\0'm\x83b\0\x04#V[\x92b\0'}`@Q\x94\x85b\0\x03\xDFV[\x80\x84Rb\0\x04#V[\x90` \x80\x84\x01\x90`\x1F\x19\x80\x94\x016\x837\x80\x83\x01Q\x92Q\x92\x91\x93[\x81\x84\x10\x15b\0'\xF1WP`\0\x19\x92\x80b\0'\xC5W[PPQ\x82Q\x82\x16\x91\x19\x16\x17\x90R\x90V[\x90\x80\x92\x93P\x03\x90\x81\x11b\0\x18\xC4Wb\0'\xE2b\0'\xE8\x91b\0(AV[b\0(\"V[\x908\x80b\0'\xB5V[\x92\x91\x93\x84Q\x81R\x81\x81\x01\x80\x91\x11b\0\x18\xC4W\x93\x81\x81\x01\x80\x91\x11b\0\x18\xC4W\x91\x83\x81\x01\x90\x81\x11b\0\x18\xC4W\x92b\0'\xA0V[\x90`\0\x19\x82\x01\x91\x82\x11b\0\x18\xC4WV[` \x03\x90` \x82\x11b\0\x18\xC4WV[`\x1F\x81\x11b\0\x18\xC4Wa\x01\0\n\x90V[\x90b\0\x0F@\x91b\0(\xB8V[\x90\x81`\x03\x1B\x91\x7F\x1F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x03b\0\x18\xC4WV[`\xFF\x81\x11b\0\x18\xC4W`\x01\x90\x1B\x90V[\x81\x81\x03\x92\x91`\0\x13\x80\x15\x82\x85\x13\x16\x91\x84\x12\x16\x17b\0\x18\xC4WV[\x91\x90\x82Q\x92\x81Q\x84\x81\x10b\0)\x89W[P` \x80\x82\x01Q\x94\x81\x84\x01Q\x90`\0\x96[\x81\x88\x10b\0(\xF6WPPPPb\0\x04\xA0\x92\x93PQ\x90Q\x90b\0(\x9EV[\x80Q\x83Q\x90\x81\x81\x03b\0)/W[PPb\0) b\0)\x19b\0)'\x92b\0#\xEEV[\x93b\0#\xEEV[\x97b\0#\xEEV[\x96\x91b\0(\xD9V[`\0\x19\x86\x85\x10b\0)SW[\x91\x82\x16\x91\x16\x81\x81\x14b\0)\x04W\x03\x97PPPPPPPV[Pb\0)\x82b\0'\xE2b\0)|b\0)v\x8Db\0)p\x89b\0(2V[b\0$\x1BV[b\0(]V[b\0(\x8EV[\x19b\0);V[\x93P8b\0(\xC8V[\x90b\0)\x9Db\0'\x16V[P\x81Q\x90\x80Q\x91\x82\x81\x10b\0#\x01W`\x01\x92` \x85\x01\x93\x84Q\x82` \x86\x01Q\x80\x83\x03b\0)\xFBW[PPPb\0)\xD5W[PPPP\x90V[\x81\x03\x90\x81\x11b\0\x18\xC4W\x83RQ\x90\x80Q\x91\x82\x01\x80\x92\x11b\0\x18\xC4WR8\x80\x80\x80b\0)\xCEV[\x81\x92\x93P \x91 \x148\x82\x81b\0)\xC5V[b\0*\x1Eb\0\x04\xA0\x92` \x92b\0#4V[`@Q\x93\x81b\0*8\x86\x93Q\x80\x92\x86\x80\x87\x01\x91\x01b\0\x04\xA9V[\x82\x01b\0*N\x82Q\x80\x93\x86\x80\x85\x01\x91\x01b\0\x04\xA9V[\x01\x03\x80\x84R\x01\x82b\0\x03\xDFV[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x92`\x08\x1B\x16\x91\x80\x83\x04a\x01\0\x14\x90\x15\x17\x15b\0\x18\xC4WV[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xF0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x92`\x04\x1B\x16\x91\x80\x83\x04`\x10\x14\x90\x15\x17\x15b\0\x18\xC4WV[\x90\x81Q\x81\x10\x15b\0\x19\nW\x01` \x01\x90V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xD0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x93\x16\x01\x91\x82\x11b\0\x18\xC4WV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC9s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x93\x16\x01\x91\x82\x11b\0\x18\xC4WV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xA9s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x93\x16\x01\x91\x82\x11b\0\x18\xC4WV[\x91\x90\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x80\x94\x16\x91\x16\x01\x91\x82\x11b\0\x18\xC4WV[`\0`\x02\x91[`*\x83\x10b\0,\x19WPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91P\x16\x90V[\x90b\0-\x11b\0,-b\0-\x18\x92b\0*[V[b\0-\nb\0,{b\0,ub\0,ob\0,I\x89\x89b\0*\xE4V[Q\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x90V[`\xF8\x1C\x90V[`\xFF\x16\x90V[b\0,\x9Db\0,ub\0,ob\0,Ib\0,\x96\x8Bb\0$\x0CV[\x8Ab\0*\xE4V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90`a\x90\x82\x81\x16\x82\x81\x10\x15\x80b\0.\x01W[\x15b\0-\xA0WPb\0,\xD7\x90b\0+\x80V[\x91[\x83\x16\x90\x81\x10\x15\x80b\0-\x94W[\x15b\0- WP\x90b\0,\xFDb\0-\x04\x91b\0+\x80V[\x91b\0*\xA0V[b\0+\xC5V[\x90b\0+\xC5V[\x92b\0#\xFDV[\x91\x90b\0+\xF4V[`A\x81\x10\x15\x80b\0-\x88W[\x15b\0-CWP\x90b\0,\xFDb\0-\x04\x91b\0+;V[`0\x81\x10\x15\x90\x81b\0-{W[Pb\0-bW[b\0-\x04\x90b\0*\xA0V[\x90b\0-rb\0-\x04\x91b\0*\xF6V[\x91\x90Pb\0-WV[`9\x91P\x11\x158b\0-PV[P`F\x81\x11\x15b\0-,V[P`f\x81\x11\x15b\0,\xE6V[`A\x81\x10\x15\x80b\0-\xF5W[\x15b\0-\xC5WPb\0-\xBE\x90b\0+;V[\x91b\0,\xD9V[`0\x81\x94\x92\x94\x10\x15\x90\x81b\0-\xE8W[P\x15b\0,\xD9W\x91b\0-\xBE\x90b\0*\xF6V[`9\x91P\x11\x158b\0-\xD5V[P`F\x81\x11\x15b\0-\xACV[P`f\x81\x11\x15b\0,\xC5V[`\x14\x81Q\x03b\0.oW` \x81Q\x91\x01Q\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\x91\x82\x81\x16\x91`\x14\x81\x10b\0.YW[PP\x90P``\x1C\x90V[\x83\x91\x92P`\x14\x03`\x03\x1B\x1B\x16\x16\x808\x80b\0.OV[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x10`$\x82\x01R\x7FInvalid address.\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x81`\x1F\x82\x01\x12\x15b\0\x04\xA3W\x80Qb\0.\xCC\x81b\0\x04#V[\x92b\0.\xDC`@Q\x94\x85b\0\x03\xDFV[\x81\x84R` \x82\x84\x01\x01\x11b\0\x04|Wb\0\x04\xA0\x91` \x80\x85\x01\x91\x01b\0\x04\xA9V[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`#`$\x82\x01R\x7FABI decoding: invalid struct off`D\x82\x01R\x7Fset\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`@\x80Q\x90b\0/w\x82b\0\x03\xA5V[``\x92\x83\x83R\x83\x82` \x94\x82\x86\x82\x01R\x01R\x80Q\x81\x01\x92\x80\x84\x01\x94\x80\x83\x86\x03\x12b\0\x07qW\x81\x83\x01Q\x94g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x95\x86\x81\x11b\0\x07kW\x87\x84b\0/\xC3\x92\x87\x01\x01b\0.\xB3V[\x96\x85\x85\x01Q\x87\x81\x11b\0\x07kW\x81\x85b\0/\xE0\x92\x88\x01\x01b\0.\xB3V[\x94\x83\x81\x01Q\x90\x88\x82\x11b\0\x07kW\x01\x92\x81`?\x85\x01\x12\x15b\0\x04\xA3W\x84\x84\x01Q\x92b\x000\x0C\x84b\0\x18\x01V[\x98b\x000\x1B\x89Q\x9A\x8Bb\0\x03\xDFV[\x84\x8AR\x88\x87\x8B\x01\x95`\x05\x1B\x87\x01\x01\x95\x84\x87\x11b\0\n\x17W\x89\x81\x01\x95[\x87\x87\x10b\x000]WPPPPPPPPb\x000Qb\0\x04\x03V[\x94\x85R\x84\x01R\x82\x01R\x90V[\x86Q\x83\x81\x11b\0\x04\xA3W\x82\x01\x8B`\x1F\x19\x82\x87\x03\x01\x12b\x000\xC2W\x8BQ\x91b\x000\x85\x83b\0\x03\x88V[\x8C\x82\x01Q\x92\x85\x84\x11b\x000\xBCW\x87\x83\x8F\x8B\x8F\x97\x91b\x000\xA8\x92\x89\x98\x01\x01b\0.\xB3V[\x83R\x01Q\x83\x82\x01R\x81R\x01\x96\x01\x95b\x0007V[b\0.\xFDV[`\x84\x8A\x8DQ\x90bF\x1B\xCD`\xE5\x1B\x82R`\x04\x82\x01R`#`$\x82\x01R\x7FABI decoding: struct data too sh`D\x82\x01R\x7Fort\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x91\x90\x91b\x001B\x82b\0\x13\x9Bb\0#\xC4\x84b\0\x05\x1EV[T\x93\x84\x03\x93\x84\x11b\0\x18\xC4Wb\0#\xEB\x92b\0\x07\x1Fb\0\x13\x9B\x92b\0\x05\x1EV[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1E`$\x82\x01R\x7FInvalid calldata access stride\0\0`D\x82\x01R\xFD[\x905\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x826\x03\x01\x81\x12\x15b\x002CW\x01` \x815\x91\x01\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11b\x001\xFFW\x816\x03\x83\x13b\x001\xF9WV[b\x001bV[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1E`$\x82\x01R\x7FInvalid calldata access length\0\0`D\x82\x01R\xFD[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1E`$\x82\x01R\x7FInvalid calldata access offset\0\0`D\x82\x01R\xFD[` \x90b\x002\xAF\x82g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x83b\x002\xA5\x82b\0\x14\xB6V[\x16\x86R\x01b\0\x14\xB6V[\x16\x91\x01RV[\x90`\0\x80\x91`@Q\x80\x94b\x004C` \x83\x01\x93\x7F\xBD\x95\x0F\x89\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85R`@`$\x85\x01Rb\x003\x13`d\x85\x01b\x003\x05\x85b\0\x14\xB6V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90RV[b\x004&b\x004\x14a\x01\0b\x003\xF9\x87b\x003\xD8b\x003\xB8b\x003\x98b\x003Vb\x003B` \x8D\x01\x8Db\x001\xA6V[a\x01 `\x84\x88\x01Ra\x01\x84\x87\x01\x91b\0\x1A\x10V[b\x003e`@\x8D\x01\x8Db\x001\xA6V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x9C\x96`\xA4\x88\x82\x86\x03\x01\x91\x01Rb\0\x1A\x10V[b\x003\xA7``\x8C\x01\x8Cb\x001\xA6V[\x8D\x83\x03\x86\x01`\xC4\x8F\x01R\x90b\0\x1A\x10V[b\x003\xC7`\x80\x8B\x01\x8Bb\x001\xA6V[\x8C\x83\x03\x85\x01`\xE4\x8E\x01R\x90b\0\x1A\x10V[\x90b\x003\xE8`\xA0\x8A\x01\x8Ab\x001\xA6V[\x91\x8B\x84\x03\x01a\x01\x04\x8C\x01Rb\0\x1A\x10V[\x95b\x004\ra\x01$\x89\x01`\xC0\x83\x01b\x002\x87V[\x01b\0\x14\xB6V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x01d\x86\x01RV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`D\x84\x01RV[\x03\x93b\x004Y`\x1F\x19\x95\x86\x81\x01\x83R\x82b\0\x03\xDFV[Q\x90\x820Z\xF1b\x004ib\0\"$V[P\x15b\x004\xB2W`@Q\x7F\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R\x90b\0\x04\xA0\x90\x82`!\x81\x01[\x03\x90\x81\x01\x83R\x82b\0\x03\xDFV[`@Q`\0` \x82\x01R\x90b\0\x04\xA0\x90\x82`!\x81\x01b\x004\xA5V[3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x03b\x005\rWV[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`)`$\x82\x01R\x7F_checkIBC: caller is not the IBC`D\x82\x01R\x7F contract\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x90\x15b\0\x19\nW\x90V[\x92\x91\x92b\x005\x90\x84Qb\0.\rV[\x90`\0\x92\x83[`@\x90\x81\x88\x01Q\x80Q\x82\x10\x15b\x007EW\x81b\x005\xB3\x91b\0\x19\x10V[Q\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x83b\x005\xDCb\0\x11\x18\x83Qb\0\x04\xF6V[\x16\x93\x84\x15b\x006\x80WP` \x01Q\x90\x83;\x15b\0\x10\xBDWQ\x7F@\xC1\x0F\x19\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x87\x16`\x04\x82\x01R`$\x81\x01\x91\x90\x91R\x91\x86\x90\x83\x90`D\x90\x82\x90\x84\x90Z\xF1\x91\x82\x15b\0\x10\xB7Wb\x006c\x92b\x006iW[Pb\0\x18\xB4V[b\x005\x96V[\x80b\0\x12\x12b\x006y\x92b\0\x03mV[8b\x006\\V[\x93P\x90b\x006\x8F\x82Qb\0+\xEEV[\x93` \x80\x93\x01\x94b\x006\xA5\x86Q\x82\x89\x8Bb\x001+V[\x16\x93Q\x90\x84;\x15b\0\x10\xBDWQ\x7F\xA9\x05\x9C\xBB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16`\x04\x82\x01R`$\x81\x01\x91\x90\x91R\x92\x81\x90\x84\x90`D\x90\x82\x90\x8B\x90Z\xF1\x92\x83\x15b\0\x10\xB7Wb\x006c\x93b\x007\"W[PPb\0\x18\xB4V[\x81b\x007<\x92\x90=\x10b\0\x10\xAFWb\0\x10\x9E\x81\x83b\0\x03\xDFV[P8\x80b\x007\x1AV[PPPPPPP\x90PV[\x92b\x007\x82\x92\x91\x94\x93b\x007cb\x004\xCDV[\x85`@Q\x96\x87\x92\x837\x81\x01`\x02\x81R` \x96\x87\x91\x03\x01\x90 \x91b\0\x17\xB6V[\x91b\x007\x8F\x82\x80b\0$uV[\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11b\0\x03\x82Wb\x007\xB8\x82b\x007\xB1\x87Tb\0\x05nV[\x87b\0%WV[`\0\x90`\x1F\x83\x11`\x01\x14b\08\x1AW\x92b\x007\xF8\x83b\08\x04\x94`\x01\x97\x94b\0\x04\x12\x99\x97`\0\x92b\08\x0EWPP`\0\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[\x84U[\x81\x01\x90b\0$uV[\x92\x90\x91\x01b\08\x98V[\x015\x90P8\x80b\0%\xFFV[`\x1F\x19\x83\x16\x91b\080\x87`\0R` `\0 \x90V[\x92\x81[\x81\x81\x10b\08\x80WP\x93`\x01\x96\x93b\0\x04\x12\x98\x96\x93\x88\x93\x83b\08\x04\x98\x10b\08eW[PPP\x81\x1B\x01\x84Ub\x007\xFBV[`\0\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U8\x80\x80b\08WV[\x91\x93\x86`\x01\x81\x92\x87\x87\x015\x81U\x01\x95\x01\x92\x01b\083V[\x90\x92\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11b\0\x03\x82Wb\08\xBC\x81b\0%\xD6\x84Tb\0\x05nV[`\0`\x1F\x82\x11`\x01\x14b\08\xEFW\x81\x90b\0&\x13\x93\x94\x95`\0\x92b\08\x0EWPP`\0\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x1F\x19\x82\x16\x94b\09\x05\x84`\0R` `\0 \x90V[\x91\x80[\x87\x81\x10b\09BWP\x83`\x01\x95\x96\x97\x10b\09'WPPP\x81\x1B\x01\x90UV[`\0\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U8\x80\x80b\0&VV[\x90\x92` `\x01\x81\x92\x86\x86\x015\x81U\x01\x94\x01\x91\x01b\09\x08V[\x91b\09\x95\x90\x95\x93\x91\x94\x95b\09pb\x004\xCDV[\x85`@Q\x96\x87\x95\x867\x84\x01\x92`\x02\x84R`\x01\x96\x87\x94` \x96\x87\x91\x03\x01\x90 \x91b\0\x17\xB6V[\x01\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11b\0\x03\x82Wb\09\xB8\x83b\x007\xB1\x87Tb\0\x05nV[`\0\x91`\x1F\x84\x11`\x01\x14b\09\xECWPb\0&\x13\x93P`\0\x91\x90\x83b\08\x0EWPP`\0\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[\x91\x83`\x1F\x19\x81\x16b\0:\x03\x88`\0R` `\0 \x90V[\x94\x83\x90[\x88\x83\x83\x10b\0:#WPPP\x10b\09'WPPP\x81\x1B\x01\x90UV[\x86\x86\x015\x88U\x90\x96\x01\x95\x93\x84\x01\x93\x87\x93P\x90\x81\x01\x90b\0:\x07V\xFE`\x80`@\x90\x80\x82R4b\0\x04\xA3WPb\0\x13\x91\x808\x03\x80b\0\0!\x81b\0\x04\xF0V[\x92\x839\x81\x01` \x91\x82\x81\x83\x03\x12b\0\x04TW\x80Q`\x01`\x01`@\x1B\x03\x91\x82\x82\x11b\0\x04\x05W\x01\x91`\x1F\x81\x81\x85\x01\x12\x15b\0\x03\xADW\x83Q\x83\x81\x11b\0\x02UW`\x1F\x19\x94b\0\0t\x82\x84\x01\x87\x16\x88\x01b\0\x04\xF0V[\x93\x82\x85R\x87\x83\x83\x01\x01\x11b\0\x03YW\x86\x90`\0[\x83\x81\x10b\0\x03DWPP`\0\x91\x84\x01\x01R\x81Q\x90\x83\x82\x11b\0\x02UW`\x03\x92\x83T\x92`\x01\x93\x84\x81\x81\x1C\x91\x16\x80\x15b\0\x039W[\x89\x82\x10\x14b\0\x03#W\x83\x81\x11b\0\x02\xD8W[P\x80\x88\x84\x82\x11`\x01\x14b\0\x02wW`\0\x91b\0\x02kW[P`\0\x19\x82\x87\x1B\x1C\x19\x16\x90\x84\x1B\x17\x84U[\x80Q\x94\x85\x11b\0\x02UW`\x04\x96\x87T\x84\x81\x81\x1C\x91\x16\x80\x15b\0\x02JW[\x82\x82\x10\x14b\0\x025W\x83\x81\x11b\0\x01\xEAW[P\x80\x92\x86\x11`\x01\x14b\0\x01~WP\x84\x95P\x90\x84\x92\x91`\0\x95b\0\x01rW[PP\x1B\x92`\0\x19\x91\x1B\x1C\x19\x16\x17\x90U[`\x05\x80T`\x01`\x01`\xA0\x1B\x03\x19\x163\x17\x90UQa\x0Ez\x90\x81b\0\x05\x17\x829\xF3[\x01Q\x93P8\x80b\0\x01BV[\x93\x92\x95\x85\x90\x81\x16\x88`\0R\x85`\0 \x95`\0\x90[\x89\x83\x83\x10b\0\x01\xCFWPPP\x10b\0\x01\xB4W[PPPP\x81\x1B\x01\x90Ub\0\x01RV[\x01Q\x90`\xF8\x84`\0\x19\x92\x1B\x16\x1C\x19\x16\x90U8\x80\x80\x80b\0\x01\xA5V[\x85\x87\x01Q\x89U\x90\x97\x01\x96\x94\x85\x01\x94\x88\x93P\x90\x81\x01\x90b\0\x01\x92V[\x88`\0R\x81`\0 \x84\x80\x89\x01`\x05\x1C\x82\x01\x92\x84\x8A\x10b\0\x02+W[\x01`\x05\x1C\x01\x90\x85\x90[\x82\x81\x10b\0\x02\x1EWPPb\0\x01$V[`\0\x81U\x01\x85\x90b\0\x02\x0EV[\x92P\x81\x92b\0\x02\x05V[`\"\x89cNH{q`\xE0\x1B`\0RR`$`\0\xFD[\x90`\x7F\x16\x90b\0\x01\x12V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[\x90P\x82\x01Q8b\0\0\xE4V[\x88\x86\x93\x16\x90\x87`\0R\x8A`\0 \x91`\0[\x8C\x82\x82\x10b\0\x02\xC1WPP\x83\x11b\0\x02\xA8W[PP\x81\x1B\x01\x84Ub\0\0\xF5V[\x84\x01Q`\0\x19\x83\x89\x1B`\xF8\x16\x1C\x19\x16\x90U8\x80b\0\x02\x9BV[\x83\x88\x01Q\x85U\x89\x96\x90\x94\x01\x93\x92\x83\x01\x92\x01b\0\x02\x88V[\x85`\0R\x88`\0 \x84\x80\x84\x01`\x05\x1C\x82\x01\x92\x8B\x85\x10b\0\x03\x19W[\x01`\x05\x1C\x01\x90\x85\x90[\x82\x81\x10b\0\x03\x0CWPPb\0\0\xCDV[`\0\x81U\x01\x85\x90b\0\x02\xFCV[\x92P\x81\x92b\0\x02\xF3V[cNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[\x90`\x7F\x16\x90b\0\0\xBBV[\x81\x81\x01\x83\x01Q\x86\x82\x01\x84\x01R\x88\x92\x01b\0\0\x88V[\x87QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x81\x01\x88\x90R`'`$\x82\x01R\x7FABI decoding: invalid byte array`D\x82\x01Rf\x04\r\x8C\xAD\xCC\xEE\x8D`\xCB\x1B`d\x82\x01R`\x84\x90\xFD[\x85QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x81\x01\x86\x90R`+`$\x82\x01R\x7FABI decoding: invalid calldata a`D\x82\x01Rj\x1C\x9C\x98^H\x1B\xD9\x99\x9C\xD9]`\xAA\x1B`d\x82\x01R`\x84\x90\xFD[\x85QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x81\x01\x86\x90R`\"`$\x82\x01R\x7FABI decoding: invalid tuple offs`D\x82\x01Ra\x19]`\xF2\x1B`d\x82\x01R`\x84\x90\xFD[\x83QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x81\x01\x84\x90R`\"`$\x82\x01R\x7FABI decoding: tuple data too sho`D\x82\x01Ra\x1C\x9D`\xF2\x1B`d\x82\x01R`\x84\x90\xFD[bF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FEther sent to non-payable functi`D\x82\x01Ra7\xB7`\xF1\x1B`d\x82\x01R`\x84\x90\xFD[`@Q\x91\x90`\x1F\x01`\x1F\x19\x16\x82\x01`\x01`\x01`@\x1B\x03\x81\x11\x83\x82\x10\x17b\0\x02UW`@RV\xFE`@`\x80\x81R`\x04\x806\x10\x15a\0xW[` `\x84\x92Q\x91bF\x1B\xCD`\xE5\x1B\x83R\x82\x01R`5`$\x82\x01R\x7FContract does not have fallback `D\x82\x01R\x7Fnor receive functions\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\0\x805`\xE0\x1C\x80c\x06\xFD\xDE\x03\x14a\x08nW\x80c\t^\xA7\xB3\x14a\x08EW\x80c\x18\x16\r\xDD\x14a\x08'W\x80c#\xB8r\xDD\x14a\x072W\x80c1<\xE5g\x14a\x07\x17W\x80c9P\x93Q\x14a\x06\xBBW\x80c@\xC1\x0F\x19\x14a\x05\xE0W\x80cp\xA0\x821\x14a\x05\x9DW\x80c\x95\xD8\x9BA\x14a\x04\x1FW\x80c\x9D\xC2\x9F\xAC\x14a\x02\xABW\x80c\xA4W\xC2\xD7\x14a\x01\xE2W\x80c\xA9\x05\x9C\xBB\x14a\x01\xB2W\x80c\xDDb\xED>\x14a\x01\\Wc\xF8Q\xA4@\x14a\x01\x1EWPa\0\x10V[\x90P4a\x01WW`\x03\x196\x01\x12a\x01RW` \x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x05T\x16\x90Q\x90\x81R\xF3[a\t\xBEV[a\tTV[P\x824a\x01WW\x80`\x03\x196\x01\x12a\x01RW\x80` \x92a\x01za\npV[a\x01\x82a\n\x98V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x82\x16\x83R`\x01\x86R\x83\x83 \x91\x16\x82R\x84R T\x90Q\x90\x81R\xF3[\x834a\x01WW\x80`\x03\x196\x01\x12a\x01RW` \x90a\x01\xDBa\x01\xD1a\npV[`$5\x903a\n\xF7V[Q`\x01\x81R\xF3[P4a\x01WW\x82`\x03\x196\x01\x12a\x01RWa\x01\xFBa\npV[\x91\x83`$5\x923\x81R`\x01` R\x81\x81 s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x86\x16\x82R` R T\x90\x82\x82\x10a\x02BW` \x85a\x01\xDB\x85\x85\x03\x873a\x0C\xB8V[`\x84\x90` \x86Q\x91bF\x1B\xCD`\xE5\x1B\x83R\x82\x01R`%`$\x82\x01R\x7FERC20: decreased allowance below`D\x82\x01R\x7F zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[P\x904a\x01WW\x82`\x03\x196\x01\x12a\x01RWa\x02\xC5a\npV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90a\x02\xEE\x82`\x05T\x163\x14a\r\xF9V[\x16\x91\x82\x15a\x03\xB6W\x82\x84R\x83` R\x84\x84 T\x90\x82\x82\x10a\x03MWP\x81\x84\x95\x7F\xDD\xF2R\xAD\x1B\xE2\xC8\x9Bi\xC2\xB0h\xFC7\x8D\xAA\x95+\xA7\xF1c\xC4\xA1\x16(\xF5ZM\xF5#\xB3\xEF\x93` \x93\x86\x88R\x87\x85R\x03\x81\x87 U\x81`\x02T\x03`\x02UQ\x90\x81R\xA3\x80\xF3[`\x84\x90` \x87Q\x91bF\x1B\xCD`\xE5\x1B\x83R\x82\x01R`\"`$\x82\x01R\x7FERC20: burn amount exceeds balan`D\x82\x01R\x7Fce\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84\x90` \x86Q\x91bF\x1B\xCD`\xE5\x1B\x83R\x82\x01R`!`$\x82\x01R\x7FERC20: burn from the zero addres`D\x82\x01R\x7Fs\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[P\x824a\x01WW\x81`\x03\x196\x01\x12a\x01RW\x80Q\x90\x82\x84T`\x01\x81\x81\x1C\x90\x80\x83\x16\x92\x83\x15a\x05\x93W[` \x93\x84\x84\x10\x81\x14a\x05gW\x83\x88R\x87\x95\x94\x93\x92\x91\x81\x15a\x05*WP`\x01\x14a\x04\xCCW[PPP\x03`\x1F\x01`\x1F\x19\x16\x82\x01\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11\x83\x85\x10\x17a\x04\xA0WP\x82\x91\x82a\x04\x9C\x92R\x82a\n(V[\x03\x90\xF3[\x80`A\x86\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`$\x94RR\xFD[\x88\x88R\x91\x93\x92P\x86\x91\x7F\x8A5\xAC\xFB\xC1_\xF8\x1A9\xAE}4O\xD7\t\xF2\x8E\x86\0\xB4\xAA\x8Ce\xC6\xB6K\xFE\x7F\xE3k\xD1\x9B[\x82\x84\x10a\x05\x14WPPP\x90`\x1F\x19\x92`\x1F\x92\x82\x01\x01\x91\x81\x93a\x04lV[\x80T\x88\x85\x01\x87\x01R\x87\x94P\x92\x85\x01\x92\x81\x01a\x04\xF7V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16\x84\x87\x01RPP\x15\x15`\x05\x1B\x83\x01\x01\x90P\x81`\x1F`\x1F\x19a\x04lV[`$\x89`\"\x8C\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83RR\xFD[\x91`\x7F\x16\x91a\x04HV[P\x824a\x01WW` `\x03\x196\x01\x12a\x01RW\x80` \x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x05\xD1a\npV[\x16\x81R\x80\x84R T\x90Q\x90\x81R\xF3[P\x914a\x01WW\x80`\x03\x196\x01\x12a\x01RWa\x05\xFAa\npV[\x90`$5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90a\x06$\x82`\x05T\x163\x14a\r\xF9V[\x16\x92\x83\x15a\x06yWP` \x82\x7F\xDD\xF2R\xAD\x1B\xE2\xC8\x9Bi\xC2\xB0h\xFC7\x8D\xAA\x95+\xA7\xF1c\xC4\xA1\x16(\xF5ZM\xF5#\xB3\xEF\x92a\x06_\x87\x95`\x02Ta\n\xBBV[`\x02U\x85\x85R\x84\x83R\x80\x85 \x82\x81T\x01\x90UQ\x90\x81R\xA3\x80\xF3[` `d\x92Q\x91bF\x1B\xCD`\xE5\x1B\x83R\x82\x01R`\x1F`$\x82\x01R\x7FERC20: mint to the zero address\0`D\x82\x01R\xFD[P\x824a\x01WW\x80`\x03\x196\x01\x12a\x01RWa\x01\xDB` \x92a\x07\x10a\x06\xDEa\npV[\x913\x81R`\x01\x86R\x84\x81 s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x82R\x86R\x84`$5\x91 Ta\n\xBBV[\x903a\x0C\xB8V[\x83\x824a\x01WW`\x03\x196\x01\x12a\x01RW` \x90Q`\x12\x81R\xF3[P\x904a\x01WW```\x03\x196\x01\x12a\x01RWa\x07Ma\npV[a\x07Ua\n\x98V[\x91\x84`D5\x94s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x81R`\x01` R\x81\x81 3\x82R` R T\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x03a\x07\xBBW[` \x86a\x01\xDB\x87\x87\x87a\n\xF7V[\x84\x82\x10a\x07\xE4WP\x91\x83\x91a\x07\xD9` \x96\x95a\x01\xDB\x95\x033\x83a\x0C\xB8V[\x91\x93\x94\x81\x93Pa\x07\xADV[`d\x90` \x87Q\x91bF\x1B\xCD`\xE5\x1B\x83R\x82\x01R`\x1D`$\x82\x01R\x7FERC20: insufficient allowance\0\0\0`D\x82\x01R\xFD[\x83\x824a\x01WW`\x03\x196\x01\x12a\x01RW` \x90`\x02T\x90Q\x90\x81R\xF3[\x834a\x01WW\x80`\x03\x196\x01\x12a\x01RW` \x90a\x01\xDBa\x08da\npV[`$5\x903a\x0C\xB8V[P\x824a\tTW\x81`\x03\x196\x01\x12a\x01RW\x80Q\x90\x82`\x03T`\x01\x81\x81\x1C\x90\x80\x83\x16\x92\x83\x15a\tJW[` \x93\x84\x84\x10\x81\x14a\x05gW\x83\x88R\x87\x95\x94\x93\x92\x91\x81\x15a\x05*WP`\x01\x14a\x08\xEBWPPP\x03`\x1F\x01`\x1F\x19\x16\x82\x01\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11\x83\x85\x10\x17a\x04\xA0WP\x82\x91\x82a\x04\x9C\x92R\x82a\n(V[`\x03\x88R\x91\x93\x92P\x86\x91\x7F\xC2WZ\x0E\x9EY<\0\xF9Y\xF8\xC9/\x12\xDB(i\xC39Z;\x05\x02\xD0^%\x16Doq\xF8[[\x82\x84\x10a\t4WPPP\x90`\x1F\x19\x92`\x1F\x92\x82\x01\x01\x91\x81\x93a\x04lV[\x80T\x88\x85\x01\x87\x01R\x87\x94P\x92\x85\x01\x92\x81\x01a\t\x17V[\x91`\x7F\x16\x91a\x08\x98V[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FEther sent to non-payable functi`D\x82\x01R\x7Fon\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FABI decoding: tuple data too sho`D\x82\x01R\x7Frt\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[` \x80\x82R\x82Q\x81\x83\x01\x81\x90R\x93\x92`\0[\x85\x81\x10a\n\\WPPP`\x1F\x19`\x1F\x84`\0`@\x80\x96\x97\x86\x01\x01R\x01\x16\x01\x01\x90V[\x81\x81\x01\x83\x01Q\x84\x82\x01`@\x01R\x82\x01a\n:V[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\n\x93WV[`\0\x80\xFD[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\n\x93WV[\x91\x90\x82\x01\x80\x92\x11a\n\xC8WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\x11`\x04R`$`\0\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x91\x16\x91\x82\x15a\x0CNW\x16\x91\x82\x15a\x0B\xE4W`\0\x82\x81R\x80` R`@\x81 T\x91\x80\x83\x10a\x0BzW`@\x82\x82\x7F\xDD\xF2R\xAD\x1B\xE2\xC8\x9Bi\xC2\xB0h\xFC7\x8D\xAA\x95+\xA7\xF1c\xC4\xA1\x16(\xF5ZM\xF5#\xB3\xEF\x95\x87` \x96R\x82\x86R\x03\x82\x82 U\x86\x81R \x81\x81T\x01\x90U`@Q\x90\x81R\xA3V[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FERC20: transfer amount exceeds b`D\x82\x01R\x7Falance\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`#`$\x82\x01R\x7FERC20: transfer to the zero addr`D\x82\x01R\x7Fess\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FERC20: transfer from the zero ad`D\x82\x01R\x7Fdress\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x91\x16\x91\x82\x15a\r\x90W\x16\x91\x82\x15a\r&W` \x7F\x8C[\xE1\xE5\xEB\xEC}[\xD1OqB}\x1E\x84\xF3\xDD\x03\x14\xC0\xF7\xB2)\x1E[ \n\xC8\xC7\xC3\xB9%\x91\x83`\0R`\x01\x82R`@`\0 \x85`\0R\x82R\x80`@`\0 U`@Q\x90\x81R\xA3V[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FERC20: approve to the zero addre`D\x82\x01R\x7Fss\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`$\x80\x82\x01R\x7FERC20: approve from the zero add`D\x82\x01R\x7Fress\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x15a\x0E\0WV[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\n`$\x82\x01R\x7Fonly admin\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD\xFE\xA2dipfsX\"\x12 \xB3}\x1B\xA2\xF3%\x0Cnq\x11s\x08\xA7w\x1Aq\x10\xDA*\xDB\xBF^\x86\xF0)&\x17FM\xAD\x81gdsolcC\0\x08\x15\x003\xA2dipfsX\"\x12 ~8\xAE\xBCz\xCA\xF9\t\xCA\x08{BU\xDBA\x99\xFEf\x18-\xF3ZB\t\xAF\x0E\x9F\xD9\xAD\xC0\xD9LdsolcC\0\x08\x15\x003"; - /// The bytecode of the contract. - #[cfg(feature = "providers")] - pub static UCS01RELAY_BYTECODE: ::ethers::core::types::Bytes = - ::ethers::core::types::Bytes::from_static(__BYTECODE); - #[rustfmt::skip] - #[cfg(feature = "providers")] - const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R`\x046\x10b\0\x173W`\x005`\xE0\x1C\x80c\x06\xD8\xAF2\x14b\0\x01&W\x80c#\x01\xC6\xF5\x14b\0\x01 W\x80c@ \xD0\xED\x14b\0\x01\x1AW\x80cD\xDD\x968\x14b\0\x01\x14W\x80cO\x01\xE5.\x14b\0\x01\x0EW\x80cR\xC7\x15}\x14b\0\x01\x08W\x80cij\x9B\xF4\x14b\0\x01\x02W\x80c\x95F\x9D\xF8\x14b\0\0\xFCW\x80c\x98\x13\x89\xF2\x14b\0\0\xF6W\x80c\xA1\x13\xE4\x11\x14b\0\0\xF0W\x80c\xBD\x95\x0F\x89\x14b\0\0\xEAW\x80c\xD7\xC8;\xE5\x14b\0\0\xE4W\x80c\xE7J\x1A\xC2\x14b\0\0\xDEW\x80c\xEFGv\xD2\x14b\0\0\xDEW\x80c\xF6-+\xCC\x14b\0\0\xD8Wc\xFB\x8BS.\x03b\0\x173Wb\0\x15yV[b\0\x14\xCCV[b\0\x13\xC9V[b\0\x13$V[b\0\x0ELV[b\0\x0E-V[b\0\r\tV[b\0\x0C\xB7V[b\0\x0CQV[b\0\x0B\xBCV[b\0\x0B#V[b\0\ncV[b\0\x08\x9EV[b\0\x08_V[b\0\x06\xB8V[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FEther sent to non-payable functi`D\x82\x01R\x7Fon\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FABI decoding: tuple data too sho`D\x82\x01R\x7Frt\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FABI decoding: invalid tuple offs`D\x82\x01R\x7Fet\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`+`$\x82\x01R\x7FABI decoding: invalid calldata a`D\x82\x01R\x7Frray offset\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`'`$\x82\x01R\x7FABI decoding: invalid byte array`D\x82\x01R\x7F length\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`A`\x04R`$`\0\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11b\0\x03\x82W`@RV[b\0\x03>V[`@\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17b\0\x03\x82W`@RV[``\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17b\0\x03\x82W`@RV[`\xA0\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17b\0\x03\x82W`@RV[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17b\0\x03\x82W`@RV[`@Q\x90b\0\x04\x12\x82b\0\x03\xA5V[V[`@Q\x90b\0\x04\x12\x82b\0\x03\x88V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11b\0\x03\x82W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x92\x91\x92b\0\x04N\x82b\0\x04#V[\x91b\0\x04^`@Q\x93\x84b\0\x03\xDFV[\x82\x94\x81\x84R\x81\x83\x01\x11b\0\x04|W\x82\x81` \x93\x84`\0\x96\x017\x01\x01RV[b\0\x02\xD4V[\x90\x80`\x1F\x83\x01\x12\x15b\0\x04\xA3W\x81` b\0\x04\xA0\x935\x91\x01b\0\x04@V[\x90V[b\0\x02jV[`\0[\x83\x81\x10b\0\x04\xBDWPP`\0\x91\x01RV[\x81\x81\x01Q\x83\x82\x01R` \x01b\0\x04\xACV[` b\0\x04\xE9\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01b\0\x04\xA9V[\x81\x01`\x02\x81R\x03\x01\x90 \x90V[` b\0\x05\x11\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01b\0\x04\xA9V[\x81\x01`\0\x81R\x03\x01\x90 \x90V[` b\0\x059\x91\x81`@Q\x93\x82\x85\x80\x94Q\x93\x84\x92\x01b\0\x04\xA9V[\x81\x01`\x03\x81R\x03\x01\x90 \x90V[` \x90b\0\x05b\x92\x82`@Q\x94\x83\x86\x80\x95Q\x93\x84\x92\x01b\0\x04\xA9V[\x82\x01\x90\x81R\x03\x01\x90 \x90V[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15b\0\x05\xB9W[` \x83\x10\x14b\0\x05\x8AWV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\"`\x04R`$`\0\xFD[\x91`\x7F\x16\x91b\0\x05~V[\x90`@Q\x91\x82`\0\x82Tb\0\x05\xD9\x81b\0\x05nV[\x90\x81\x84R` \x94`\x01\x91\x82\x81\x16\x90\x81`\0\x14b\0\x06NWP`\x01\x14b\0\x06\x0BW[PPPb\0\x04\x12\x92P\x03\x83b\0\x03\xDFV[`\0\x90\x81R\x85\x81 \x95\x93P\x91\x90[\x81\x83\x10b\0\x065WPPb\0\x04\x12\x93P\x82\x01\x018\x80\x80b\0\x05\xFAV[\x85T\x88\x84\x01\x85\x01R\x94\x85\x01\x94\x87\x94P\x91\x83\x01\x91b\0\x06\x19V[\x91PPb\0\x04\x12\x95\x93P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x91P\x16\x82\x84\x01R\x15\x15`\x05\x1B\x82\x01\x018\x80\x80b\0\x05\xFAV[\x90`\x1F\x19`\x1F` \x93b\0\x06\xB1\x81Q\x80\x92\x81\x87R\x87\x80\x88\x01\x91\x01b\0\x04\xA9V[\x01\x16\x01\x01\x90V[4b\0\x07wW`@`\x03\x196\x01\x12b\0\x07qWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11b\0\x07kWb\0\x06\xEF\x906\x90`\x04\x01b\0\x04\x82V[\x90`$5\x90\x81\x11b\0\x07kWb\0\x07X\x91b\0\x07\x1Fb\0\x07\x18b\0\x07&\x936\x90`\x04\x01b\0\x04\x82V[\x91b\0\x04\xCEV[\x90b\0\x05FV[b\0\x07gb\0\x07C`\x01b\0\x07;\x84b\0\x05\xC4V[\x93\x01b\0\x05\xC4V[`@Q\x93\x84\x93`@\x85R`@\x85\x01\x90b\0\x06\x91V[\x90\x83\x82\x03` \x85\x01Rb\0\x06\x91V[\x03\x90\xF3[b\0\x02\0V[b\0\x01\x96V[b\0\x01,V[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`'`$\x82\x01R\x7FABI decoding: struct calldata to`D\x82\x01R\x7Fo short\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x90\x81a\x01 \x91\x03\x12b\0\x07\xF7W\x90V[b\0\x07}V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x03b\0\x08\x1CWV[`\0\x80\xFD[`@`\x03\x19\x82\x01\x12b\0\x07qW`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11b\0\x07kWb\0\x08P\x91`\x04\x01b\0\x07\xE7V[\x90`$5b\0\x04\xA0\x81b\0\x07\xFDV[4b\0\x07wWb\0\x07gb\0\x08\x89b\0\x08x6b\0\x08!V[\x90b\0\x08\x83b\x004\xCDV[b\x002\xB5V[`@Q\x91\x82\x91` \x83R` \x83\x01\x90b\0\x06\x91V[4b\0\x07wW` `\x03\x196\x01\x12b\0\x07qW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11b\0\x07kWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFb\0\x08\xF5b\0\x08\xEF` \x936\x90`\x04\x01b\0\x04\x82V[b\0\x04\xF6V[T\x16`@Q\x90\x81R\xF3[`\x045\x90`\x03\x82\x10\x15b\0\x08\x1CWV[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`+`$\x82\x01R\x7FABI decoding: invalid calldata a`D\x82\x01R\x7Frray length\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`+`$\x82\x01R\x7FABI decoding: invalid calldata a`D\x82\x01R\x7Frray stride\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x91\x81`\x1F\x84\x01\x12\x15b\0\x04\xA3W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11b\0\n\x1DW` \x80\x85\x01\x94\x84`\x05\x1B\x01\x01\x11b\0\n\x17WV[b\0\tyV[b\0\t\x0FV[\x91\x81`\x1F\x84\x01\x12\x15b\0\x04\xA3W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11b\0\n\x1DW` \x83\x81\x86\x01\x95\x01\x01\x11b\0\n\x17WV[\x90\x81`@\x91\x03\x12b\0\x07\xF7W\x90V[4b\0\x07wW`\xC0`\x03\x196\x01\x12b\0\x07qWb\0\n\x80b\0\x08\xFFV[Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$5\x81\x81\x11b\0\x07kWb\0\n\xA5\x906\x90`\x04\x01b\0\t\xE3V[PP`D5\x81\x81\x11b\0\x07kWb\0\n\xC2\x906\x90`\x04\x01b\0\n#V[`d5\x83\x81\x11b\0\x07kWb\0\n\xDD\x906\x90`\x04\x01b\0\n#V[\x91`\x845\x85\x81\x11b\0\x07kWb\0\n\xF9\x906\x90`\x04\x01b\0\nTV[\x93`\xA45\x95\x86\x11b\0\x07kWb\0\x0B\x19b\0\x0B!\x966\x90`\x04\x01b\0\n#V[PPb\x007PV[\0[4b\0\x07wW`\x80`\x03\x196\x01\x12b\0\x07qWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11b\0\x07kWb\0\x0BZ\x906\x90`\x04\x01b\0\n#V[\x90`$5\x83\x81\x11b\0\x07kWb\0\x0Bv\x906\x90`\x04\x01b\0\n#V[\x90`D5\x85\x81\x11b\0\x07kWb\0\x0B\x92\x906\x90`\x04\x01b\0\n#V[\x94\x90\x93`d5\x96\x87\x11b\0\x07kWb\0\x0B\xB4b\0\x0B!\x976\x90`\x04\x01b\0\n#V[PPb\09[V[4b\0\x07wWb\0\x0B!b\0\x0C5b\0\x0C\x1Eb\0\x0C>b\0\x0B\xDD6b\0\x08!V[Pb\0\x0B\xE8b\x004\xCDV[b\0\x0B\xF7` \x82\x01\x82b\0$uV[\x94\x90b\0\x0C,b\0\x0C&b\0\x0C\x10`@\x86\x01\x86b\0$uV[\x97\x90\x95`\xA0\x81\x01\x90b\0$uV[6\x91b\0\x04@V[b\0/gV[\x956\x91b\0\x04@V[\x926\x91b\0\x04@V[\x90b\x005\x81V[`\0\x91\x03\x12b\0\x07qWV[4b\0\x07wW`\0`\x03\x196\x01\x12b\0\x07qW` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[\x90` b\0\x04\xA0\x92\x81\x81R\x01\x90b\0\x06\x91V[4b\0\x07wW` `\x03\x196\x01\x12b\0\x07qWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045b\0\x0C\xED\x81b\0\x07\xFDV[\x16`\0R`\x01` Rb\0\x07gb\0\x08\x89`@`\0 b\0\x05\xC4V[4b\0\x07wW`\xE0`\x03\x196\x01\x12b\0\x07qWb\0\r&b\0\x08\xFFV[P`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11b\0\x07kWb\0\rL`\x04\x926\x90\x84\x01b\0\t\xE3V[PP`D5\x81\x81\x11b\0\x07kWb\0\rh\x906\x90\x84\x01b\0\n#V[\x90`d5\x83\x81\x11b\0\x07kWb\0\r\x83\x906\x90\x86\x01b\0\n#V[\x92\x90\x91`\x845\x85\x81\x11b\0\x07kWb\0\r\xA0\x906\x90\x88\x01b\0\nTV[\x94`\xA45\x81\x81\x11b\0\x07kWb\0\r\xBB\x906\x90\x89\x01b\0\n#V[PP`\xC45\x90\x81\x11b\0\x07kWb\0\x0B!\x96b\0\x0B\x19\x916\x91\x01b\0\n#V[`@`\x03\x19\x82\x01\x12b\0\x07qWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91`\x045\x83\x81\x11b\0\x07kW\x82b\0\x0E\x0C\x91`\x04\x01b\0\n#V[\x93\x90\x93\x92`$5\x91\x82\x11b\0\x07kWb\0\x0E)\x91`\x04\x01b\0\n#V[\x90\x91V[4b\0\x07wWb\0\x0E>6b\0\r\xDBV[PPPPb\0\x0B!b\x004\xCDV[4b\0\x07wWb\0\x0E\xC4b\0\x0Ea6b\0\x08!V[Pb\0\x0Eo03\x14b\0$)V[b\0\x0E\x86b\0\x0C&b\0\x0C\x1E`\xA0\x84\x01\x84b\0$uV[``\x82\x01\x91b\0\x0E\x97\x83\x82b\0$uV[\x94\x90b\0\x0E\xBD`\x80\x84\x01\x96b\0\x0C5b\0\x0E\xB2\x89\x87b\0$uV[\x94\x90\x926\x91b\0\x04@V[\x90b\0#4V[\x90`\0\x90`@\x80\x85\x01\x95` \x97\x88\x87\x01\x94[\x88Q\x90\x81Q\x81\x10\x15b\0\x0B!W\x8A\x88b\0\x0E\xF2\x83\x86\x95b\0\x19\x10V[Q\x88\x87\x8Bb\0\x0FDb\0\x0F@b\0\x0F,b\0\x0F$b\0\x0F\x1Db\0\x0F\x16\x89Qb\0'1V[\x99b\0'1V[\x89b\0)\x92V[\x93Qb\0.\rV[\x96b\0\x0F9\x87Qb\0'1V[\x90b\0(QV[\x15\x90V[\x15b\0\x10\xC3W\x96b\0\x0F\xA2\x91b\0\x0C5b\0\x0F\x9Bb\0\x0Fgb\0\x0F\x81\x9Bb\0'[V[\x98b\0\x0F\x8Ab\0\x0Fw\x8Bb\0+\xEEV[\x9C\x8D\x95\x89b\0$uV[\x96\x90\x98b\0$uV[\x93\x90\x91\x89\x01\x97\x88Q\x966\x91b\0\x04@V[\x90b\x001+V[Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x86\x16\x80;\x15b\0\x10\xBDW\x89Q\x7F\xA9\x05\x9C\xBB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x85\x16`\x04\x82\x01R`$\x81\x01\x92\x90\x92R\x8F\x90\x82\x90`D\x90\x82\x90`\0\x90Z\xF1\x93\x84\x15b\0\x10\xB7W\x8F\x96b\0\x10}\x97\x8Fb\0\x10d\x90b\0\x10t\x95\x7FO\xBF{72\x0C\xF1\xA4\xB0\xAA\xCFt\x8C\xF3V8(\xE8.\xD2\xA35\x18\x06\x1D\xB1\xD1\xB5#\xFE\x1F.\x99b\0\x10\x83W[P[Qb\0\x1D\xC5V[\x94\x01Q\x91\x8BQ\x95\x86\x95\x86b\0&\xC9V[\x03\x90\xA1b\0\x18\xB4V[b\0\x0E\xD6V[b\0\x10\xA7\x90\x84=\x86\x11b\0\x10\xAFW[b\0\x10\x9E\x81\x83b\0\x03\xDFV[\x81\x01\x90b\0\"\nV[P8b\0\x10[V[P=b\0\x10\x92V[b\0\x1A\x94V[b\0\x19\xA6V[PPb\0\x11\x01\x91\x95Pb\0\x10\xE3b\0\x11\x08\x93\x94b\0\x0C5\x92\x01\x8Bb\0$uV[\x92\x90b\0\x10\xF3\x8B\x8D\x01\x8Db\0$uV[\x93\x90\x91\x89Q\x956\x91b\0\x04@V[\x90b\0*\x0CV[\x90b\0\x112b\0\x11\x18\x83b\0\x04\xF6V[Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x93\x8Ds\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x87\x16\x15b\0\x12 W[\x86\x16\x90\x82\x01Q\x90\x80;\x15b\0\x10\xBDW\x89Q\x7F@\xC1\x0F\x19\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x85\x16`\x04\x82\x01R`$\x81\x01\x92\x90\x92R`\0\x90\x82\x90`D\x90\x82\x90\x84\x90Z\xF1\x93\x84\x15b\0\x10\xB7W\x8F\x96b\0\x10}\x97\x8Fb\0\x10d\x90b\0\x10t\x95\x7FO\xBF{72\x0C\xF1\xA4\xB0\xAA\xCFt\x8C\xF3V8(\xE8.\xD2\xA35\x18\x06\x1D\xB1\xD1\xB5#\xFE\x1F.\x99b\0\x12\x02W[Pb\0\x10]V[\x80b\0\x12\x12b\0\x12\x19\x92b\0\x03mV[\x80b\0\x0CEV[8b\0\x11\xFBV[\x95PP\x87Qa\x13\x91\x80\x82\x01\x82\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17b\0\x03\x82W\x85b\0\x12S\x91\x84\x93b\0:?\x859b\0\x0C\xA4V[\x03\x90`\0\xF0\x80\x15b\0\x10\xB7W\x85\x8F\x91\x16\x95b\0\x12\xB4\x87b\0\x12t\x87b\0\x04\xF6V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[b\0\x12\xEA\x85b\0\x12\xE4\x89s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\0R`\x01` R`@`\0 \x90V[b\0%\xB0V[\x7Fa\x14B\x87\xC6\xE9=\xDD\xDE?P\x0B\x97\xBDL\x13\x98\x06\xA0r\xADA\xE4\x03\xC6\x07\xFC/\xB8\xE3\x7FG\x8AQ\x80b\0\x13\x1B\x8A\x89\x83b\0&\x93V[\x03\x90\xA1b\0\x11SV[4b\0\x07wW```\x03\x196\x01\x12b\0\x07qWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11b\0\x07kWb\0\x13[\x906\x90`\x04\x01b\0\x04\x82V[\x90`$5\x90\x81\x11b\0\x07kW` \x91b\0\x13\x9Bb\0\x13\x82b\0\x13\xC0\x936\x90`\x04\x01b\0\x04\x82V[b\0\x07\x1F`D5\x93b\0\x13\x95\x85b\0\x07\xFDV[b\0\x05\x1EV[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\0R` R`@`\0 \x90V[T`@Q\x90\x81R\xF3[4b\0\x07wWb\0\x13\xDA6b\0\r\xDBV[PPPPb\0\x13\xE8b\x004\xCDV[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7Fucs01-relay: closing a channel i`D\x82\x01R\x7Fs not supported\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x91\x81`\x1F\x84\x01\x12\x15b\0\x04\xA3W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11b\0\n\x1DW` \x80\x85\x01\x94\x84`\x06\x1B\x01\x01\x11b\0\n\x17WV[`\x845\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03b\0\x08\x1CWV[`\xA45\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03b\0\x08\x1CWV[5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03b\0\x08\x1CWV[4b\0\x07wW`\xC0`\x03\x196\x01\x12b\0\x07qWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11b\0\x07kWb\0\x15\x03\x906\x90`\x04\x01b\0\n#V[`$5\x83\x81\x11b\0\x07kWb\0\x15\x1E\x906\x90`\x04\x01b\0\n#V[\x90`D5\x85\x81\x11b\0\x07kWb\0\x15:\x906\x90`\x04\x01b\0\n#V[\x90`d5\x96\x87\x11b\0\x07kWb\0\x15Zb\0\x0B!\x976\x90`\x04\x01b\0\x14RV[\x94\x90\x93b\0\x15gb\0\x14\x86V[\x96b\0\x15rb\0\x14\x9EV[\x98b\0\x1A\xA0V[4b\0\x07wW```\x03\x196\x01\x12b\0\x07qWg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045\x81\x81\x11b\0\x07kWb\0\x15\xB0\x906\x90`\x04\x01b\0\x07\xE7V[\x90`$5\x90\x81\x11b\0\x07kWb\0\x15\xCC\x906\x90`\x04\x01b\0\n#V[b\0\x15\xD9`D5b\0\x07\xFDV[b\0\x15\xE3b\x004\xCDV[`\x01\x81\x03b\0\x16\xEFW\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0b\0\x16{b\0\x16U\x7F\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x93b\0\x16Nb\0\x0C&b\0\x0C\x1E`\xA0\x8A\x01\x8Ab\0$uV[\x95b\x005wV[5\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x90V[\x16\x03b\0\x16\xC1WPb\0\x16\xAD\x81b\0\x16\xB8b\0\x16\x9F` b\0\x0B!\x95\x01\x83b\0$uV[\x93\x90\x92`@\x81\x01\x90b\0$uV[\x92\x90\x936\x91b\0\x04@V[P6\x91b\0\x04@V[\x81b\0\x0C>b\0\x0E\xB2b\0\x0C5b\0\x16\xE1` b\0\x0B!\x97\x01\x85b\0$uV[\x92\x90\x94`@\x81\x01\x90b\0$uV[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7Fucs01-relay: single byte ack\0\0\0\0`D\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`5`$\x82\x01R\x7FContract does not have fallback `D\x82\x01R\x7Fnor receive functions\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[` \x90\x82`@Q\x93\x84\x92\x837\x81\x01`\x02\x81R\x03\x01\x90 \x90V[` \x91\x92\x83`@Q\x94\x85\x93\x847\x82\x01\x90\x81R\x03\x01\x90 \x90V[\x90`@Qb\0\x17\xDE\x81b\0\x03\x88V[` b\0\x17\xFC`\x01\x83\x95b\0\x17\xF3\x81b\0\x05\xC4V[\x85R\x01b\0\x05\xC4V[\x91\x01RV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11b\0\x03\x82W`\x05\x1B` \x01\x90V[\x90b\0\x18&\x82b\0\x18\x01V[`@\x90b\0\x187\x82Q\x91\x82b\0\x03\xDFV[\x83\x81R`\x1F\x19b\0\x18I\x82\x95b\0\x18\x01V[\x01\x91`\0\x90\x81[\x84\x81\x10b\0\x18_WPPPPPV[` \x90\x82Qb\0\x18o\x81b\0\x03\x88V[``\x81R\x82\x85\x81\x83\x01R\x82\x87\x01\x01R\x01b\0\x18PV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\x11`\x04R`$`\0\xFD[`\0\x19\x81\x14b\0\x18\xC4W`\x01\x01\x90V[b\0\x18\x85V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`2`\x04R`$`\0\xFD[\x91\x90\x81\x10\x15b\0\x19\nW`\x06\x1B\x01\x90V[b\0\x18\xCAV[\x80Q\x82\x10\x15b\0\x19\nW` \x91`\x05\x1B\x01\x01\x90V[5o\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x03b\0\x08\x1CW\x90V[5b\0\x04\xA0\x81b\0\x07\xFDV[\x91`\x80\x93b\0\x19\x8Cb\0\x19\x9B\x92\x98\x97\x96\x98s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x95\x16\x86R`\xA0` \x87\x01R`\xA0\x86\x01\x90b\0\x06\x91V[\x90\x84\x82\x03`@\x86\x01Rb\0\x06\x91V[\x95\x16``\x82\x01R\x01RV[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FTarget contract does not contain`D\x82\x01R\x7F code\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x1F\x82` \x94\x93`\x1F\x19\x93\x81\x86R\x86\x86\x017`\0\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x92\x90\x93b\0\x1ARb\0\x04\xA0\x97\x95b\0\x1Aa\x94`\xC0\x87R`\xC0\x87\x01\x91b\0\x1A\x10V[\x91\x84\x83\x03` \x86\x01Rb\0\x1A\x10V[\x92` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x82\x81Q\x16`@\x85\x01R\x01Q\x16``\x82\x01R`\0`\x80\x82\x01R`\xA0\x81\x84\x03\x91\x01Rb\0\x06\x91V[`@Q=`\0\x82>=\x90\xFD[\x93\x83\x99\x93\x92\x97\x91\x95\x96b\0\x1A\xCBb\0\x1A\xC5b\0\x1A\xBD\x89\x89b\0\x17\x9DV[\x86\x8Cb\0\x17\xB6V[b\0\x17\xCFV[\x87b\0\x1A\xD7\x85b\0\x18\x1AV[\x94`\0\x8B\x8D\x8B` \x9A\x8B\x88\x01\x96[\x86\x86\x10b\0\x1CYWPPPPPPPPPP\x90b\0\x1Brb\0\x1B\xAA\x94\x93\x92b\0\x1B\x0E3b\0\x1DMV[P`@Q\x98b\0\x1B]\x8Ab\0\x1BN3\x88\x83\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0`\x14\x92``\x1B\x16\x81R\x01\x90V[\x03`\x1F\x19\x81\x01\x8CR\x8Bb\0\x03\xDFV[b\0\x1Bgb\0\x04\x03V[\x99\x8AR6\x91b\0\x04@V[\x82\x88\x01R`@\x87\x01Rb\0\x1B\x99b\0\x1B\x89b\0\x04\x14V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x99\x16\x89RV[\x87\x01\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90RV[b\0\x1B\xECs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x93b\0\x1ECV[\x90\x83;\x15b\0\x10\xBDWb\0\x1C6`\0\x96\x92\x87\x93`@Q\x99\x8A\x98\x89\x97\x88\x96\x7F\xAEL\xD2\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x88R`\x04\x88\x01b\0\x1A1V[\x03\x92Z\xF1\x80\x15b\0\x10\xB7Wb\0\x1CIWPV[\x80b\0\x12\x12b\0\x04\x12\x92b\0\x03mV[b\0\x1Cf\x86\x88\x8Cb\0\x18\xF9V[\x93\x84\x92\x8AQ\x91\x8AQ\x93b\0\x1Cz\x96b\0\x1F\x16V[\x90\x81b\0\x1C\x88\x85\x8Cb\0\x19\x10V[QR\x8A\x81\x01\x92\x84\x8C\x8Cb\0\x1C\x9C\x87b\0\x19%V[o\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x92b\0\x1C\xBA\x91b\0\x19\x10V[Q\x01R6b\0\x1C\xCA\x91\x8Bb\0\x04@V[b\0\x1C\xD5\x90b\0\x1D\xC5V[\x90b\0\x1C\xE1\x90b\0\x19CV[\x92b\0\x1C\xED\x90b\0\x19%V[o\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`@Q\x93\x84\x93b\0\x1D\x12\x933\x86b\0\x19OV[\x03\x7F\x02dZt\x85g\xCE\xD8\x0CS\xF7H\x08\x92\x02\xF0\xE8I\x17\xCD\xE6^>)\xC1d\x1F\xA1\x89G\x841\x91\xA1b\0\x1DA\x90b\0\x18\xB4V[\x8B\x8F\x8B\x8F\x91\x8Eb\0\x1A\xE5V[\x90`@Q\x91`\x80\x83\x01`@R`\x0Fo0123456789abcdef\x81R`\x02\x84\x01\x91`(\x83R`\0`J\x86\x01R``\x1B\x90`\x01`\0[\x80\x80\x01\x87\x01`\"\x85\x83\x1A\x85\x81\x16Q`#\x84\x01S`\x04\x1CQ\x91\x01S\x01`\x14\x81\x14b\0\x1D\xB4W`\x01\x90b\0\x1D\x87V[PPPa0x`\x02\x82Q\x01\x91R\x82RV[\x90\x81\x80Q\x90`@Q\x93`\x02\x90\x81\x86\x01\x93\x80\x80\x01\x85R`\x0F\x90o0123456789abcdef\x82R`\"\x88\x01\x94\x01\x91[\x82\x81\x03b\0\x1E\x1AWPPP` \x82`\0a0x\x94R\x01`@R\x82Q\x01\x91R\x82RV[\x90\x91\x92\x80\x94`\x01\x80\x93\x01\x92\x84\x84Q\x16Q\x90\x82\x01S\x83\x83Q`\x04\x1C\x16Q\x81S\x01\x93\x92\x91\x90b\0\x1D\xF8V[b\0\x1Et\x90\x80Q\x90` \x91\x82\x82\x01Q\x91`@\x80\x91\x01Q\x93b\0\x1E\x87\x82Q\x96\x87\x94``\x84\x87\x01R`\x80\x86\x01\x90b\0\x06\x91V[`\x1F\x19\x95\x86\x86\x83\x03\x01\x85\x87\x01Rb\0\x06\x91V[\x90\x84\x84\x83\x03\x01``\x85\x01R\x85Q\x91\x82\x81R\x81\x81\x01\x82\x80\x85`\x05\x1B\x84\x01\x01\x98\x01\x94`\0\x92[\x85\x84\x10b\0\x1E\xCCWPPPPPPPb\0\x04\xA0\x92\x03\x90\x81\x01\x83R\x82b\0\x03\xDFV[\x91\x93`\x01\x91\x93\x95\x97P\x80\x8A\x8A\x85\x83\x9A\x9C\x9D\x03\x01\x87R\x8AQ\x90\x82\x80b\0\x1E\xF9\x84Q\x8A\x85R\x8A\x85\x01\x90b\0\x06\x91V[\x93\x01Q\x91\x01R\x99\x01\x94\x01\x94\x01\x91\x89\x96\x94\x91\x98\x97\x98\x95\x93\x95b\0\x1E\xABV[\x96\x95\x93\x94\x96\x91\x90\x91b\0\x1F\xCBb\0\x1FJb\0\x1F1\x87b\0\x19CV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x96b\0\x1F\x83` \x88\x01\x98b\0\x1Fxb\0\x1Fc\x8Bb\0\x19%V[o\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x900\x903\x90b\0 \xB7V[b\0\x1F\xC2b\0\x1F\xBCb\0\x1F\x96\x89b\0\x19CV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\0R`\x01` R`@`\0 \x90V[b\0\x05\xC4V[\x99\x8A\x91b\0\"\xF3V[\x15b\0 _WPPPPb\0\x1F\xECb\0\x1F1b\0\x1F1b\0\x1F\xF3\x93b\0\x19CV[\x91b\0\x19%V[\x90\x80;\x15b\0\x10\xBDW`@Q\x7F\x9D\xC2\x9F\xAC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R0`\x04\x82\x01Ro\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x90\x92\x16`$\x83\x01R`\0\x90\x82\x90`D\x90\x82\x90\x84\x90Z\xF1\x80\x15b\0\x10\xB7Wb\0\x1CIWPV[b\0\x04\xA0\x96\x97P\x91o\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFb\0 \xA2b\0 \xB1\x97\x93b\0\x0C,b\0 \xAB\x97\x96b\0\x0C,b\0 \x9B\x8Bb\0\x19CV[\x97b\0\x19%V[\x91\x16\x92b\0#\xADV[b\0\x19CV[b\0\x1DMV[\x90`\0\x80b\0!w\x94`@Q\x94` \x97\x88\x87\x01\x95\x7F#\xB8r\xDD\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x93\x84\x80\x92\x16`$\x8A\x01R\x16`D\x88\x01R`d\x87\x01R`d\x86Rb\0!'\x86b\0\x03\xC2V[\x16\x92`@Q\x94b\0!8\x86b\0\x03\x88V[\x87\x86R\x7FSafeERC20: low-level call failed\x88\x87\x01RQ\x90\x82\x85Z\xF1b\0!pb\0\"$V[\x91b\0\"YV[\x80Q\x90\x81b\0!\x85WPPPV[\x82\x80b\0!\x97\x93\x83\x01\x01\x91\x01b\0\"\nV[\x15b\0!\xA0WPV[`\x84\x90`@Q\x90bF\x1B\xCD`\xE5\x1B\x82R`\x04\x82\x01R`*`$\x82\x01R\x7FSafeERC20: ERC20 operation did n`D\x82\x01R\x7Fot succeed\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x90\x81` \x91\x03\x12b\0\x07qWQ\x80\x15\x15\x81\x03b\0\x08\x1CW\x90V[=\x15b\0\"TW=\x90b\0\"8\x82b\0\x04#V[\x91b\0\"H`@Q\x93\x84b\0\x03\xDFV[\x82R=`\0` \x84\x01>V[``\x90V[\x91\x92\x90\x15b\0\"\xBDWP\x81Q\x15b\0\"oWP\x90V[;\x15b\0\"yW\x90V[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1D`$\x82\x01R\x7FAddress: call to non-contract\0\0\0`D\x82\x01R\xFD[\x82Q\x90\x91P\x15b\0\"\xD1WP\x80Q\x90` \x01\xFD[b\0\"\xEF\x90`@Q\x91\x82\x91bF\x1B\xCD`\xE5\x1B\x83R`\x04\x83\x01b\0\x0C\xA4V[\x03\x90\xFD[\x91\x90\x81Q\x15\x15\x92\x83b\0#\x07W[PPP\x90V[` \x92\x93P\x90b\0#\x18\x91b\0#4V[\x80Q\x91\x82\x91\x01 \x81` \x84\x01 \x14\x91Q\x10\x15\x168\x80\x80b\0#\x01V[`\"b\0\x04\xA0\x91`@Q\x93\x81b\0#V\x86\x93Q\x80\x92` \x80\x87\x01\x91\x01b\0\x04\xA9V[\x82\x01\x90\x7F/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x91\x82` \x82\x01Rb\0#\x97\x82Q\x80\x93` `!\x85\x01\x91\x01b\0\x04\xA9V[\x01\x90`!\x82\x01R\x03`\x02\x81\x01\x84R\x01\x82b\0\x03\xDFV[\x91\x90\x91b\0#\xCB\x82b\0\x13\x9Bb\0#\xC4\x84b\0\x05\x1EV[\x86b\0\x05FV[T\x93\x84\x01\x80\x94\x11b\0\x18\xC4Wb\0#\xEB\x92b\0\x07\x1Fb\0\x13\x9B\x92b\0\x05\x1EV[UV[\x90` \x82\x01\x80\x92\x11b\0\x18\xC4WV[\x90`\x02\x82\x01\x80\x92\x11b\0\x18\xC4WV[\x90`\x01\x82\x01\x80\x92\x11b\0\x18\xC4WV[\x91\x90\x82\x01\x80\x92\x11b\0\x18\xC4WV[\x15b\0\x08\x1CWV[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FCalldata tail too short\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x905\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15b\0%\x13W\x01\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11b\0$\xCFW` \x01\x91\x816\x03\x83\x13b\0$\xC9WV[b\0$1V[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FInvalid calldata tail length\0\0\0\0`D\x82\x01R\xFD[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FInvalid calldata tail offset\0\0\0\0`D\x82\x01R\xFD[\x90`\x1F\x81\x11b\0%fWPPPV[`\0\x91\x82R` \x82 \x90` `\x1F\x85\x01`\x05\x1C\x83\x01\x94\x10b\0%\xA5W[`\x1F\x01`\x05\x1C\x01\x91[\x82\x81\x10b\0%\x99WPPPV[\x81\x81U`\x01\x01b\0%\x8CV[\x90\x92P\x82\x90b\0%\x83V[\x91\x90\x91\x82Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11b\0\x03\x82Wb\0%\xDD\x81b\0%\xD6\x84Tb\0\x05nV[\x84b\0%WV[` \x80`\x1F\x83\x11`\x01\x14b\0&#WP\x81\x90b\0&\x13\x93\x94\x95`\0\x92b\0&\x17W[PP`\0\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[\x90UV[\x01Q\x90P8\x80b\0%\xFFV[\x90`\x1F\x19\x83\x16\x95b\0&:\x85`\0R` `\0 \x90V[\x92`\0\x90[\x88\x82\x10b\0&zWPP\x83`\x01\x95\x96\x97\x10b\0&`W[PPP\x81\x1B\x01\x90UV[\x01Q`\0\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U8\x80\x80b\0&VV[\x80`\x01\x85\x96\x82\x94\x96\x86\x01Q\x81U\x01\x95\x01\x93\x01\x90b\0&?V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFb\0&\xC2` \x92\x95\x94\x95`@\x85R`@\x85\x01\x90b\0\x06\x91V[\x94\x16\x91\x01RV[\x91\x90`\x80\x93b\0&\xEAb\0\x19\x9B\x92\x98\x97\x96\x98`\xA0\x86R`\xA0\x86\x01\x90b\0\x06\x91V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x94\x16` \x86\x01R\x84\x82\x03`@\x86\x01Rb\0\x06\x91V[`@Q\x90b\0'%\x82b\0\x03\x88V[`\0` \x83\x82\x81R\x01RV[b\0';b\0'\x16V[P` \x81Q\x91`@Q\x92b\0'P\x84b\0\x03\x88V[\x83R\x01` \x82\x01R\x90V[\x80Q\x90b\0'\x86b\0'm\x83b\0\x04#V[\x92b\0'}`@Q\x94\x85b\0\x03\xDFV[\x80\x84Rb\0\x04#V[\x90` \x80\x84\x01\x90`\x1F\x19\x80\x94\x016\x837\x80\x83\x01Q\x92Q\x92\x91\x93[\x81\x84\x10\x15b\0'\xF1WP`\0\x19\x92\x80b\0'\xC5W[PPQ\x82Q\x82\x16\x91\x19\x16\x17\x90R\x90V[\x90\x80\x92\x93P\x03\x90\x81\x11b\0\x18\xC4Wb\0'\xE2b\0'\xE8\x91b\0(AV[b\0(\"V[\x908\x80b\0'\xB5V[\x92\x91\x93\x84Q\x81R\x81\x81\x01\x80\x91\x11b\0\x18\xC4W\x93\x81\x81\x01\x80\x91\x11b\0\x18\xC4W\x91\x83\x81\x01\x90\x81\x11b\0\x18\xC4W\x92b\0'\xA0V[\x90`\0\x19\x82\x01\x91\x82\x11b\0\x18\xC4WV[` \x03\x90` \x82\x11b\0\x18\xC4WV[`\x1F\x81\x11b\0\x18\xC4Wa\x01\0\n\x90V[\x90b\0\x0F@\x91b\0(\xB8V[\x90\x81`\x03\x1B\x91\x7F\x1F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x03b\0\x18\xC4WV[`\xFF\x81\x11b\0\x18\xC4W`\x01\x90\x1B\x90V[\x81\x81\x03\x92\x91`\0\x13\x80\x15\x82\x85\x13\x16\x91\x84\x12\x16\x17b\0\x18\xC4WV[\x91\x90\x82Q\x92\x81Q\x84\x81\x10b\0)\x89W[P` \x80\x82\x01Q\x94\x81\x84\x01Q\x90`\0\x96[\x81\x88\x10b\0(\xF6WPPPPb\0\x04\xA0\x92\x93PQ\x90Q\x90b\0(\x9EV[\x80Q\x83Q\x90\x81\x81\x03b\0)/W[PPb\0) b\0)\x19b\0)'\x92b\0#\xEEV[\x93b\0#\xEEV[\x97b\0#\xEEV[\x96\x91b\0(\xD9V[`\0\x19\x86\x85\x10b\0)SW[\x91\x82\x16\x91\x16\x81\x81\x14b\0)\x04W\x03\x97PPPPPPPV[Pb\0)\x82b\0'\xE2b\0)|b\0)v\x8Db\0)p\x89b\0(2V[b\0$\x1BV[b\0(]V[b\0(\x8EV[\x19b\0);V[\x93P8b\0(\xC8V[\x90b\0)\x9Db\0'\x16V[P\x81Q\x90\x80Q\x91\x82\x81\x10b\0#\x01W`\x01\x92` \x85\x01\x93\x84Q\x82` \x86\x01Q\x80\x83\x03b\0)\xFBW[PPPb\0)\xD5W[PPPP\x90V[\x81\x03\x90\x81\x11b\0\x18\xC4W\x83RQ\x90\x80Q\x91\x82\x01\x80\x92\x11b\0\x18\xC4WR8\x80\x80\x80b\0)\xCEV[\x81\x92\x93P \x91 \x148\x82\x81b\0)\xC5V[b\0*\x1Eb\0\x04\xA0\x92` \x92b\0#4V[`@Q\x93\x81b\0*8\x86\x93Q\x80\x92\x86\x80\x87\x01\x91\x01b\0\x04\xA9V[\x82\x01b\0*N\x82Q\x80\x93\x86\x80\x85\x01\x91\x01b\0\x04\xA9V[\x01\x03\x80\x84R\x01\x82b\0\x03\xDFV[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x92`\x08\x1B\x16\x91\x80\x83\x04a\x01\0\x14\x90\x15\x17\x15b\0\x18\xC4WV[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xF0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x92`\x04\x1B\x16\x91\x80\x83\x04`\x10\x14\x90\x15\x17\x15b\0\x18\xC4WV[\x90\x81Q\x81\x10\x15b\0\x19\nW\x01` \x01\x90V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xD0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x93\x16\x01\x91\x82\x11b\0\x18\xC4WV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC9s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x93\x16\x01\x91\x82\x11b\0\x18\xC4WV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xA9s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x93\x16\x01\x91\x82\x11b\0\x18\xC4WV[\x91\x90\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x80\x94\x16\x91\x16\x01\x91\x82\x11b\0\x18\xC4WV[`\0`\x02\x91[`*\x83\x10b\0,\x19WPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91P\x16\x90V[\x90b\0-\x11b\0,-b\0-\x18\x92b\0*[V[b\0-\nb\0,{b\0,ub\0,ob\0,I\x89\x89b\0*\xE4V[Q\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x90V[`\xF8\x1C\x90V[`\xFF\x16\x90V[b\0,\x9Db\0,ub\0,ob\0,Ib\0,\x96\x8Bb\0$\x0CV[\x8Ab\0*\xE4V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90`a\x90\x82\x81\x16\x82\x81\x10\x15\x80b\0.\x01W[\x15b\0-\xA0WPb\0,\xD7\x90b\0+\x80V[\x91[\x83\x16\x90\x81\x10\x15\x80b\0-\x94W[\x15b\0- WP\x90b\0,\xFDb\0-\x04\x91b\0+\x80V[\x91b\0*\xA0V[b\0+\xC5V[\x90b\0+\xC5V[\x92b\0#\xFDV[\x91\x90b\0+\xF4V[`A\x81\x10\x15\x80b\0-\x88W[\x15b\0-CWP\x90b\0,\xFDb\0-\x04\x91b\0+;V[`0\x81\x10\x15\x90\x81b\0-{W[Pb\0-bW[b\0-\x04\x90b\0*\xA0V[\x90b\0-rb\0-\x04\x91b\0*\xF6V[\x91\x90Pb\0-WV[`9\x91P\x11\x158b\0-PV[P`F\x81\x11\x15b\0-,V[P`f\x81\x11\x15b\0,\xE6V[`A\x81\x10\x15\x80b\0-\xF5W[\x15b\0-\xC5WPb\0-\xBE\x90b\0+;V[\x91b\0,\xD9V[`0\x81\x94\x92\x94\x10\x15\x90\x81b\0-\xE8W[P\x15b\0,\xD9W\x91b\0-\xBE\x90b\0*\xF6V[`9\x91P\x11\x158b\0-\xD5V[P`F\x81\x11\x15b\0-\xACV[P`f\x81\x11\x15b\0,\xC5V[`\x14\x81Q\x03b\0.oW` \x81Q\x91\x01Q\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\x91\x82\x81\x16\x91`\x14\x81\x10b\0.YW[PP\x90P``\x1C\x90V[\x83\x91\x92P`\x14\x03`\x03\x1B\x1B\x16\x16\x808\x80b\0.OV[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x10`$\x82\x01R\x7FInvalid address.\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x81`\x1F\x82\x01\x12\x15b\0\x04\xA3W\x80Qb\0.\xCC\x81b\0\x04#V[\x92b\0.\xDC`@Q\x94\x85b\0\x03\xDFV[\x81\x84R` \x82\x84\x01\x01\x11b\0\x04|Wb\0\x04\xA0\x91` \x80\x85\x01\x91\x01b\0\x04\xA9V[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`#`$\x82\x01R\x7FABI decoding: invalid struct off`D\x82\x01R\x7Fset\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`@\x80Q\x90b\0/w\x82b\0\x03\xA5V[``\x92\x83\x83R\x83\x82` \x94\x82\x86\x82\x01R\x01R\x80Q\x81\x01\x92\x80\x84\x01\x94\x80\x83\x86\x03\x12b\0\x07qW\x81\x83\x01Q\x94g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x95\x86\x81\x11b\0\x07kW\x87\x84b\0/\xC3\x92\x87\x01\x01b\0.\xB3V[\x96\x85\x85\x01Q\x87\x81\x11b\0\x07kW\x81\x85b\0/\xE0\x92\x88\x01\x01b\0.\xB3V[\x94\x83\x81\x01Q\x90\x88\x82\x11b\0\x07kW\x01\x92\x81`?\x85\x01\x12\x15b\0\x04\xA3W\x84\x84\x01Q\x92b\x000\x0C\x84b\0\x18\x01V[\x98b\x000\x1B\x89Q\x9A\x8Bb\0\x03\xDFV[\x84\x8AR\x88\x87\x8B\x01\x95`\x05\x1B\x87\x01\x01\x95\x84\x87\x11b\0\n\x17W\x89\x81\x01\x95[\x87\x87\x10b\x000]WPPPPPPPPb\x000Qb\0\x04\x03V[\x94\x85R\x84\x01R\x82\x01R\x90V[\x86Q\x83\x81\x11b\0\x04\xA3W\x82\x01\x8B`\x1F\x19\x82\x87\x03\x01\x12b\x000\xC2W\x8BQ\x91b\x000\x85\x83b\0\x03\x88V[\x8C\x82\x01Q\x92\x85\x84\x11b\x000\xBCW\x87\x83\x8F\x8B\x8F\x97\x91b\x000\xA8\x92\x89\x98\x01\x01b\0.\xB3V[\x83R\x01Q\x83\x82\x01R\x81R\x01\x96\x01\x95b\x0007V[b\0.\xFDV[`\x84\x8A\x8DQ\x90bF\x1B\xCD`\xE5\x1B\x82R`\x04\x82\x01R`#`$\x82\x01R\x7FABI decoding: struct data too sh`D\x82\x01R\x7Fort\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x91\x90\x91b\x001B\x82b\0\x13\x9Bb\0#\xC4\x84b\0\x05\x1EV[T\x93\x84\x03\x93\x84\x11b\0\x18\xC4Wb\0#\xEB\x92b\0\x07\x1Fb\0\x13\x9B\x92b\0\x05\x1EV[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1E`$\x82\x01R\x7FInvalid calldata access stride\0\0`D\x82\x01R\xFD[\x905\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x826\x03\x01\x81\x12\x15b\x002CW\x01` \x815\x91\x01\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11b\x001\xFFW\x816\x03\x83\x13b\x001\xF9WV[b\x001bV[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1E`$\x82\x01R\x7FInvalid calldata access length\0\0`D\x82\x01R\xFD[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1E`$\x82\x01R\x7FInvalid calldata access offset\0\0`D\x82\x01R\xFD[` \x90b\x002\xAF\x82g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x83b\x002\xA5\x82b\0\x14\xB6V[\x16\x86R\x01b\0\x14\xB6V[\x16\x91\x01RV[\x90`\0\x80\x91`@Q\x80\x94b\x004C` \x83\x01\x93\x7F\xBD\x95\x0F\x89\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85R`@`$\x85\x01Rb\x003\x13`d\x85\x01b\x003\x05\x85b\0\x14\xB6V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90RV[b\x004&b\x004\x14a\x01\0b\x003\xF9\x87b\x003\xD8b\x003\xB8b\x003\x98b\x003Vb\x003B` \x8D\x01\x8Db\x001\xA6V[a\x01 `\x84\x88\x01Ra\x01\x84\x87\x01\x91b\0\x1A\x10V[b\x003e`@\x8D\x01\x8Db\x001\xA6V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x9C\x96`\xA4\x88\x82\x86\x03\x01\x91\x01Rb\0\x1A\x10V[b\x003\xA7``\x8C\x01\x8Cb\x001\xA6V[\x8D\x83\x03\x86\x01`\xC4\x8F\x01R\x90b\0\x1A\x10V[b\x003\xC7`\x80\x8B\x01\x8Bb\x001\xA6V[\x8C\x83\x03\x85\x01`\xE4\x8E\x01R\x90b\0\x1A\x10V[\x90b\x003\xE8`\xA0\x8A\x01\x8Ab\x001\xA6V[\x91\x8B\x84\x03\x01a\x01\x04\x8C\x01Rb\0\x1A\x10V[\x95b\x004\ra\x01$\x89\x01`\xC0\x83\x01b\x002\x87V[\x01b\0\x14\xB6V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x01d\x86\x01RV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`D\x84\x01RV[\x03\x93b\x004Y`\x1F\x19\x95\x86\x81\x01\x83R\x82b\0\x03\xDFV[Q\x90\x820Z\xF1b\x004ib\0\"$V[P\x15b\x004\xB2W`@Q\x7F\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R\x90b\0\x04\xA0\x90\x82`!\x81\x01[\x03\x90\x81\x01\x83R\x82b\0\x03\xDFV[`@Q`\0` \x82\x01R\x90b\0\x04\xA0\x90\x82`!\x81\x01b\x004\xA5V[3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x03b\x005\rWV[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`)`$\x82\x01R\x7F_checkIBC: caller is not the IBC`D\x82\x01R\x7F contract\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x90\x15b\0\x19\nW\x90V[\x92\x91\x92b\x005\x90\x84Qb\0.\rV[\x90`\0\x92\x83[`@\x90\x81\x88\x01Q\x80Q\x82\x10\x15b\x007EW\x81b\x005\xB3\x91b\0\x19\x10V[Q\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x83b\x005\xDCb\0\x11\x18\x83Qb\0\x04\xF6V[\x16\x93\x84\x15b\x006\x80WP` \x01Q\x90\x83;\x15b\0\x10\xBDWQ\x7F@\xC1\x0F\x19\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x87\x16`\x04\x82\x01R`$\x81\x01\x91\x90\x91R\x91\x86\x90\x83\x90`D\x90\x82\x90\x84\x90Z\xF1\x91\x82\x15b\0\x10\xB7Wb\x006c\x92b\x006iW[Pb\0\x18\xB4V[b\x005\x96V[\x80b\0\x12\x12b\x006y\x92b\0\x03mV[8b\x006\\V[\x93P\x90b\x006\x8F\x82Qb\0+\xEEV[\x93` \x80\x93\x01\x94b\x006\xA5\x86Q\x82\x89\x8Bb\x001+V[\x16\x93Q\x90\x84;\x15b\0\x10\xBDWQ\x7F\xA9\x05\x9C\xBB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16`\x04\x82\x01R`$\x81\x01\x91\x90\x91R\x92\x81\x90\x84\x90`D\x90\x82\x90\x8B\x90Z\xF1\x92\x83\x15b\0\x10\xB7Wb\x006c\x93b\x007\"W[PPb\0\x18\xB4V[\x81b\x007<\x92\x90=\x10b\0\x10\xAFWb\0\x10\x9E\x81\x83b\0\x03\xDFV[P8\x80b\x007\x1AV[PPPPPPP\x90PV[\x92b\x007\x82\x92\x91\x94\x93b\x007cb\x004\xCDV[\x85`@Q\x96\x87\x92\x837\x81\x01`\x02\x81R` \x96\x87\x91\x03\x01\x90 \x91b\0\x17\xB6V[\x91b\x007\x8F\x82\x80b\0$uV[\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11b\0\x03\x82Wb\x007\xB8\x82b\x007\xB1\x87Tb\0\x05nV[\x87b\0%WV[`\0\x90`\x1F\x83\x11`\x01\x14b\08\x1AW\x92b\x007\xF8\x83b\08\x04\x94`\x01\x97\x94b\0\x04\x12\x99\x97`\0\x92b\08\x0EWPP`\0\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[\x84U[\x81\x01\x90b\0$uV[\x92\x90\x91\x01b\08\x98V[\x015\x90P8\x80b\0%\xFFV[`\x1F\x19\x83\x16\x91b\080\x87`\0R` `\0 \x90V[\x92\x81[\x81\x81\x10b\08\x80WP\x93`\x01\x96\x93b\0\x04\x12\x98\x96\x93\x88\x93\x83b\08\x04\x98\x10b\08eW[PPP\x81\x1B\x01\x84Ub\x007\xFBV[`\0\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U8\x80\x80b\08WV[\x91\x93\x86`\x01\x81\x92\x87\x87\x015\x81U\x01\x95\x01\x92\x01b\083V[\x90\x92\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11b\0\x03\x82Wb\08\xBC\x81b\0%\xD6\x84Tb\0\x05nV[`\0`\x1F\x82\x11`\x01\x14b\08\xEFW\x81\x90b\0&\x13\x93\x94\x95`\0\x92b\08\x0EWPP`\0\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x1F\x19\x82\x16\x94b\09\x05\x84`\0R` `\0 \x90V[\x91\x80[\x87\x81\x10b\09BWP\x83`\x01\x95\x96\x97\x10b\09'WPPP\x81\x1B\x01\x90UV[`\0\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U8\x80\x80b\0&VV[\x90\x92` `\x01\x81\x92\x86\x86\x015\x81U\x01\x94\x01\x91\x01b\09\x08V[\x91b\09\x95\x90\x95\x93\x91\x94\x95b\09pb\x004\xCDV[\x85`@Q\x96\x87\x95\x867\x84\x01\x92`\x02\x84R`\x01\x96\x87\x94` \x96\x87\x91\x03\x01\x90 \x91b\0\x17\xB6V[\x01\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11b\0\x03\x82Wb\09\xB8\x83b\x007\xB1\x87Tb\0\x05nV[`\0\x91`\x1F\x84\x11`\x01\x14b\09\xECWPb\0&\x13\x93P`\0\x91\x90\x83b\08\x0EWPP`\0\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[\x91\x83`\x1F\x19\x81\x16b\0:\x03\x88`\0R` `\0 \x90V[\x94\x83\x90[\x88\x83\x83\x10b\0:#WPPP\x10b\09'WPPP\x81\x1B\x01\x90UV[\x86\x86\x015\x88U\x90\x96\x01\x95\x93\x84\x01\x93\x87\x93P\x90\x81\x01\x90b\0:\x07V\xFE`\x80`@\x90\x80\x82R4b\0\x04\xA3WPb\0\x13\x91\x808\x03\x80b\0\0!\x81b\0\x04\xF0V[\x92\x839\x81\x01` \x91\x82\x81\x83\x03\x12b\0\x04TW\x80Q`\x01`\x01`@\x1B\x03\x91\x82\x82\x11b\0\x04\x05W\x01\x91`\x1F\x81\x81\x85\x01\x12\x15b\0\x03\xADW\x83Q\x83\x81\x11b\0\x02UW`\x1F\x19\x94b\0\0t\x82\x84\x01\x87\x16\x88\x01b\0\x04\xF0V[\x93\x82\x85R\x87\x83\x83\x01\x01\x11b\0\x03YW\x86\x90`\0[\x83\x81\x10b\0\x03DWPP`\0\x91\x84\x01\x01R\x81Q\x90\x83\x82\x11b\0\x02UW`\x03\x92\x83T\x92`\x01\x93\x84\x81\x81\x1C\x91\x16\x80\x15b\0\x039W[\x89\x82\x10\x14b\0\x03#W\x83\x81\x11b\0\x02\xD8W[P\x80\x88\x84\x82\x11`\x01\x14b\0\x02wW`\0\x91b\0\x02kW[P`\0\x19\x82\x87\x1B\x1C\x19\x16\x90\x84\x1B\x17\x84U[\x80Q\x94\x85\x11b\0\x02UW`\x04\x96\x87T\x84\x81\x81\x1C\x91\x16\x80\x15b\0\x02JW[\x82\x82\x10\x14b\0\x025W\x83\x81\x11b\0\x01\xEAW[P\x80\x92\x86\x11`\x01\x14b\0\x01~WP\x84\x95P\x90\x84\x92\x91`\0\x95b\0\x01rW[PP\x1B\x92`\0\x19\x91\x1B\x1C\x19\x16\x17\x90U[`\x05\x80T`\x01`\x01`\xA0\x1B\x03\x19\x163\x17\x90UQa\x0Ez\x90\x81b\0\x05\x17\x829\xF3[\x01Q\x93P8\x80b\0\x01BV[\x93\x92\x95\x85\x90\x81\x16\x88`\0R\x85`\0 \x95`\0\x90[\x89\x83\x83\x10b\0\x01\xCFWPPP\x10b\0\x01\xB4W[PPPP\x81\x1B\x01\x90Ub\0\x01RV[\x01Q\x90`\xF8\x84`\0\x19\x92\x1B\x16\x1C\x19\x16\x90U8\x80\x80\x80b\0\x01\xA5V[\x85\x87\x01Q\x89U\x90\x97\x01\x96\x94\x85\x01\x94\x88\x93P\x90\x81\x01\x90b\0\x01\x92V[\x88`\0R\x81`\0 \x84\x80\x89\x01`\x05\x1C\x82\x01\x92\x84\x8A\x10b\0\x02+W[\x01`\x05\x1C\x01\x90\x85\x90[\x82\x81\x10b\0\x02\x1EWPPb\0\x01$V[`\0\x81U\x01\x85\x90b\0\x02\x0EV[\x92P\x81\x92b\0\x02\x05V[`\"\x89cNH{q`\xE0\x1B`\0RR`$`\0\xFD[\x90`\x7F\x16\x90b\0\x01\x12V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[\x90P\x82\x01Q8b\0\0\xE4V[\x88\x86\x93\x16\x90\x87`\0R\x8A`\0 \x91`\0[\x8C\x82\x82\x10b\0\x02\xC1WPP\x83\x11b\0\x02\xA8W[PP\x81\x1B\x01\x84Ub\0\0\xF5V[\x84\x01Q`\0\x19\x83\x89\x1B`\xF8\x16\x1C\x19\x16\x90U8\x80b\0\x02\x9BV[\x83\x88\x01Q\x85U\x89\x96\x90\x94\x01\x93\x92\x83\x01\x92\x01b\0\x02\x88V[\x85`\0R\x88`\0 \x84\x80\x84\x01`\x05\x1C\x82\x01\x92\x8B\x85\x10b\0\x03\x19W[\x01`\x05\x1C\x01\x90\x85\x90[\x82\x81\x10b\0\x03\x0CWPPb\0\0\xCDV[`\0\x81U\x01\x85\x90b\0\x02\xFCV[\x92P\x81\x92b\0\x02\xF3V[cNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[\x90`\x7F\x16\x90b\0\0\xBBV[\x81\x81\x01\x83\x01Q\x86\x82\x01\x84\x01R\x88\x92\x01b\0\0\x88V[\x87QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x81\x01\x88\x90R`'`$\x82\x01R\x7FABI decoding: invalid byte array`D\x82\x01Rf\x04\r\x8C\xAD\xCC\xEE\x8D`\xCB\x1B`d\x82\x01R`\x84\x90\xFD[\x85QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x81\x01\x86\x90R`+`$\x82\x01R\x7FABI decoding: invalid calldata a`D\x82\x01Rj\x1C\x9C\x98^H\x1B\xD9\x99\x9C\xD9]`\xAA\x1B`d\x82\x01R`\x84\x90\xFD[\x85QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x81\x01\x86\x90R`\"`$\x82\x01R\x7FABI decoding: invalid tuple offs`D\x82\x01Ra\x19]`\xF2\x1B`d\x82\x01R`\x84\x90\xFD[\x83QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x81\x01\x84\x90R`\"`$\x82\x01R\x7FABI decoding: tuple data too sho`D\x82\x01Ra\x1C\x9D`\xF2\x1B`d\x82\x01R`\x84\x90\xFD[bF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FEther sent to non-payable functi`D\x82\x01Ra7\xB7`\xF1\x1B`d\x82\x01R`\x84\x90\xFD[`@Q\x91\x90`\x1F\x01`\x1F\x19\x16\x82\x01`\x01`\x01`@\x1B\x03\x81\x11\x83\x82\x10\x17b\0\x02UW`@RV\xFE`@`\x80\x81R`\x04\x806\x10\x15a\0xW[` `\x84\x92Q\x91bF\x1B\xCD`\xE5\x1B\x83R\x82\x01R`5`$\x82\x01R\x7FContract does not have fallback `D\x82\x01R\x7Fnor receive functions\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\0\x805`\xE0\x1C\x80c\x06\xFD\xDE\x03\x14a\x08nW\x80c\t^\xA7\xB3\x14a\x08EW\x80c\x18\x16\r\xDD\x14a\x08'W\x80c#\xB8r\xDD\x14a\x072W\x80c1<\xE5g\x14a\x07\x17W\x80c9P\x93Q\x14a\x06\xBBW\x80c@\xC1\x0F\x19\x14a\x05\xE0W\x80cp\xA0\x821\x14a\x05\x9DW\x80c\x95\xD8\x9BA\x14a\x04\x1FW\x80c\x9D\xC2\x9F\xAC\x14a\x02\xABW\x80c\xA4W\xC2\xD7\x14a\x01\xE2W\x80c\xA9\x05\x9C\xBB\x14a\x01\xB2W\x80c\xDDb\xED>\x14a\x01\\Wc\xF8Q\xA4@\x14a\x01\x1EWPa\0\x10V[\x90P4a\x01WW`\x03\x196\x01\x12a\x01RW` \x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x05T\x16\x90Q\x90\x81R\xF3[a\t\xBEV[a\tTV[P\x824a\x01WW\x80`\x03\x196\x01\x12a\x01RW\x80` \x92a\x01za\npV[a\x01\x82a\n\x98V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91\x82\x16\x83R`\x01\x86R\x83\x83 \x91\x16\x82R\x84R T\x90Q\x90\x81R\xF3[\x834a\x01WW\x80`\x03\x196\x01\x12a\x01RW` \x90a\x01\xDBa\x01\xD1a\npV[`$5\x903a\n\xF7V[Q`\x01\x81R\xF3[P4a\x01WW\x82`\x03\x196\x01\x12a\x01RWa\x01\xFBa\npV[\x91\x83`$5\x923\x81R`\x01` R\x81\x81 s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x86\x16\x82R` R T\x90\x82\x82\x10a\x02BW` \x85a\x01\xDB\x85\x85\x03\x873a\x0C\xB8V[`\x84\x90` \x86Q\x91bF\x1B\xCD`\xE5\x1B\x83R\x82\x01R`%`$\x82\x01R\x7FERC20: decreased allowance below`D\x82\x01R\x7F zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[P\x904a\x01WW\x82`\x03\x196\x01\x12a\x01RWa\x02\xC5a\npV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90a\x02\xEE\x82`\x05T\x163\x14a\r\xF9V[\x16\x91\x82\x15a\x03\xB6W\x82\x84R\x83` R\x84\x84 T\x90\x82\x82\x10a\x03MWP\x81\x84\x95\x7F\xDD\xF2R\xAD\x1B\xE2\xC8\x9Bi\xC2\xB0h\xFC7\x8D\xAA\x95+\xA7\xF1c\xC4\xA1\x16(\xF5ZM\xF5#\xB3\xEF\x93` \x93\x86\x88R\x87\x85R\x03\x81\x87 U\x81`\x02T\x03`\x02UQ\x90\x81R\xA3\x80\xF3[`\x84\x90` \x87Q\x91bF\x1B\xCD`\xE5\x1B\x83R\x82\x01R`\"`$\x82\x01R\x7FERC20: burn amount exceeds balan`D\x82\x01R\x7Fce\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84\x90` \x86Q\x91bF\x1B\xCD`\xE5\x1B\x83R\x82\x01R`!`$\x82\x01R\x7FERC20: burn from the zero addres`D\x82\x01R\x7Fs\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[P\x824a\x01WW\x81`\x03\x196\x01\x12a\x01RW\x80Q\x90\x82\x84T`\x01\x81\x81\x1C\x90\x80\x83\x16\x92\x83\x15a\x05\x93W[` \x93\x84\x84\x10\x81\x14a\x05gW\x83\x88R\x87\x95\x94\x93\x92\x91\x81\x15a\x05*WP`\x01\x14a\x04\xCCW[PPP\x03`\x1F\x01`\x1F\x19\x16\x82\x01\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11\x83\x85\x10\x17a\x04\xA0WP\x82\x91\x82a\x04\x9C\x92R\x82a\n(V[\x03\x90\xF3[\x80`A\x86\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`$\x94RR\xFD[\x88\x88R\x91\x93\x92P\x86\x91\x7F\x8A5\xAC\xFB\xC1_\xF8\x1A9\xAE}4O\xD7\t\xF2\x8E\x86\0\xB4\xAA\x8Ce\xC6\xB6K\xFE\x7F\xE3k\xD1\x9B[\x82\x84\x10a\x05\x14WPPP\x90`\x1F\x19\x92`\x1F\x92\x82\x01\x01\x91\x81\x93a\x04lV[\x80T\x88\x85\x01\x87\x01R\x87\x94P\x92\x85\x01\x92\x81\x01a\x04\xF7V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16\x84\x87\x01RPP\x15\x15`\x05\x1B\x83\x01\x01\x90P\x81`\x1F`\x1F\x19a\x04lV[`$\x89`\"\x8C\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83RR\xFD[\x91`\x7F\x16\x91a\x04HV[P\x824a\x01WW` `\x03\x196\x01\x12a\x01RW\x80` \x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x05\xD1a\npV[\x16\x81R\x80\x84R T\x90Q\x90\x81R\xF3[P\x914a\x01WW\x80`\x03\x196\x01\x12a\x01RWa\x05\xFAa\npV[\x90`$5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90a\x06$\x82`\x05T\x163\x14a\r\xF9V[\x16\x92\x83\x15a\x06yWP` \x82\x7F\xDD\xF2R\xAD\x1B\xE2\xC8\x9Bi\xC2\xB0h\xFC7\x8D\xAA\x95+\xA7\xF1c\xC4\xA1\x16(\xF5ZM\xF5#\xB3\xEF\x92a\x06_\x87\x95`\x02Ta\n\xBBV[`\x02U\x85\x85R\x84\x83R\x80\x85 \x82\x81T\x01\x90UQ\x90\x81R\xA3\x80\xF3[` `d\x92Q\x91bF\x1B\xCD`\xE5\x1B\x83R\x82\x01R`\x1F`$\x82\x01R\x7FERC20: mint to the zero address\0`D\x82\x01R\xFD[P\x824a\x01WW\x80`\x03\x196\x01\x12a\x01RWa\x01\xDB` \x92a\x07\x10a\x06\xDEa\npV[\x913\x81R`\x01\x86R\x84\x81 s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x82R\x86R\x84`$5\x91 Ta\n\xBBV[\x903a\x0C\xB8V[\x83\x824a\x01WW`\x03\x196\x01\x12a\x01RW` \x90Q`\x12\x81R\xF3[P\x904a\x01WW```\x03\x196\x01\x12a\x01RWa\x07Ma\npV[a\x07Ua\n\x98V[\x91\x84`D5\x94s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x81R`\x01` R\x81\x81 3\x82R` R T\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x03a\x07\xBBW[` \x86a\x01\xDB\x87\x87\x87a\n\xF7V[\x84\x82\x10a\x07\xE4WP\x91\x83\x91a\x07\xD9` \x96\x95a\x01\xDB\x95\x033\x83a\x0C\xB8V[\x91\x93\x94\x81\x93Pa\x07\xADV[`d\x90` \x87Q\x91bF\x1B\xCD`\xE5\x1B\x83R\x82\x01R`\x1D`$\x82\x01R\x7FERC20: insufficient allowance\0\0\0`D\x82\x01R\xFD[\x83\x824a\x01WW`\x03\x196\x01\x12a\x01RW` \x90`\x02T\x90Q\x90\x81R\xF3[\x834a\x01WW\x80`\x03\x196\x01\x12a\x01RW` \x90a\x01\xDBa\x08da\npV[`$5\x903a\x0C\xB8V[P\x824a\tTW\x81`\x03\x196\x01\x12a\x01RW\x80Q\x90\x82`\x03T`\x01\x81\x81\x1C\x90\x80\x83\x16\x92\x83\x15a\tJW[` \x93\x84\x84\x10\x81\x14a\x05gW\x83\x88R\x87\x95\x94\x93\x92\x91\x81\x15a\x05*WP`\x01\x14a\x08\xEBWPPP\x03`\x1F\x01`\x1F\x19\x16\x82\x01\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11\x83\x85\x10\x17a\x04\xA0WP\x82\x91\x82a\x04\x9C\x92R\x82a\n(V[`\x03\x88R\x91\x93\x92P\x86\x91\x7F\xC2WZ\x0E\x9EY<\0\xF9Y\xF8\xC9/\x12\xDB(i\xC39Z;\x05\x02\xD0^%\x16Doq\xF8[[\x82\x84\x10a\t4WPPP\x90`\x1F\x19\x92`\x1F\x92\x82\x01\x01\x91\x81\x93a\x04lV[\x80T\x88\x85\x01\x87\x01R\x87\x94P\x92\x85\x01\x92\x81\x01a\t\x17V[\x91`\x7F\x16\x91a\x08\x98V[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FEther sent to non-payable functi`D\x82\x01R\x7Fon\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FABI decoding: tuple data too sho`D\x82\x01R\x7Frt\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[` \x80\x82R\x82Q\x81\x83\x01\x81\x90R\x93\x92`\0[\x85\x81\x10a\n\\WPPP`\x1F\x19`\x1F\x84`\0`@\x80\x96\x97\x86\x01\x01R\x01\x16\x01\x01\x90V[\x81\x81\x01\x83\x01Q\x84\x82\x01`@\x01R\x82\x01a\n:V[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\n\x93WV[`\0\x80\xFD[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\n\x93WV[\x91\x90\x82\x01\x80\x92\x11a\n\xC8WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\0R`\x11`\x04R`$`\0\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x91\x16\x91\x82\x15a\x0CNW\x16\x91\x82\x15a\x0B\xE4W`\0\x82\x81R\x80` R`@\x81 T\x91\x80\x83\x10a\x0BzW`@\x82\x82\x7F\xDD\xF2R\xAD\x1B\xE2\xC8\x9Bi\xC2\xB0h\xFC7\x8D\xAA\x95+\xA7\xF1c\xC4\xA1\x16(\xF5ZM\xF5#\xB3\xEF\x95\x87` \x96R\x82\x86R\x03\x82\x82 U\x86\x81R \x81\x81T\x01\x90U`@Q\x90\x81R\xA3V[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FERC20: transfer amount exceeds b`D\x82\x01R\x7Falance\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`#`$\x82\x01R\x7FERC20: transfer to the zero addr`D\x82\x01R\x7Fess\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FERC20: transfer from the zero ad`D\x82\x01R\x7Fdress\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x91\x16\x91\x82\x15a\r\x90W\x16\x91\x82\x15a\r&W` \x7F\x8C[\xE1\xE5\xEB\xEC}[\xD1OqB}\x1E\x84\xF3\xDD\x03\x14\xC0\xF7\xB2)\x1E[ \n\xC8\xC7\xC3\xB9%\x91\x83`\0R`\x01\x82R`@`\0 \x85`\0R\x82R\x80`@`\0 U`@Q\x90\x81R\xA3V[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FERC20: approve to the zero addre`D\x82\x01R\x7Fss\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`$\x80\x82\x01R\x7FERC20: approve from the zero add`D\x82\x01R\x7Fress\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[\x15a\x0E\0WV[`d`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\n`$\x82\x01R\x7Fonly admin\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD\xFE\xA2dipfsX\"\x12 \xB3}\x1B\xA2\xF3%\x0Cnq\x11s\x08\xA7w\x1Aq\x10\xDA*\xDB\xBF^\x86\xF0)&\x17FM\xAD\x81gdsolcC\0\x08\x15\x003\xA2dipfsX\"\x12 ~8\xAE\xBCz\xCA\xF9\t\xCA\x08{BU\xDBA\x99\xFEf\x18-\xF3ZB\t\xAF\x0E\x9F\xD9\xAD\xC0\xD9LdsolcC\0\x08\x15\x003"; - /// The deployed bytecode of the contract. - #[cfg(feature = "providers")] - pub static UCS01RELAY_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = - ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); #[cfg(feature = "providers")] pub struct UCS01Relay(::ethers::contract::Contract); #[cfg(feature = "providers")] @@ -802,74 +901,35 @@ pub mod ucs01_relay { client, )) } - /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. - /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction - /// - /// Notes: - /// - If there are no constructor arguments, you should pass `()` as the argument. - /// - The default poll duration is 7 seconds. - /// - The default number of confirmations is 1 block. - /// - /// - /// # Example - /// - /// Generate contract bindings with `abigen!` and deploy a new contract instance. - /// - /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. - /// - /// ```ignore - /// # async fn deploy(client: ::std::sync::Arc) { - /// abigen!(Greeter, "../greeter.json"); - /// - /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); - /// let msg = greeter_contract.greet().call().await.unwrap(); - /// # } - /// ``` - pub fn deploy( - client: ::std::sync::Arc, - constructor_args: T, - ) -> ::core::result::Result< - ::ethers::contract::builders::ContractDeployer, - ::ethers::contract::ContractError, - > { - let factory = ::ethers::contract::ContractFactory::new( - UCS01RELAY_ABI.clone(), - UCS01RELAY_BYTECODE.clone().into(), - client, - ); - let deployer = factory.deploy(constructor_args)?; - let deployer = ::ethers::contract::ContractDeployer::new(deployer); - Ok(deployer) - } - ///Calls the contract's `addressToDenom` (0x95469df8) function - pub fn address_to_denom( + ///Calls the contract's `getCounterpartyEndpoint` (0x408aee10) function + pub fn get_counterparty_endpoint( &self, - p0: ::ethers::core::types::Address, - ) -> ::ethers::contract::builders::ContractCall { + source_port: ::std::string::String, + source_channel: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall + { self.0 - .method_hash([149, 70, 157, 248], p0) + .method_hash([64, 138, 238, 16], (source_port, source_channel)) .expect("method not found (this should never happen)") } - ///Calls the contract's `counterpartyEndpoints` (0x06d8af32) function - pub fn counterparty_endpoints( + ///Calls the contract's `getDenomAddress` (0xc46bf9c2) function + pub fn get_denom_address( &self, - p0: ::std::string::String, - p1: ::std::string::String, - ) -> ::ethers::contract::builders::ContractCall< - M, - (::std::string::String, ::std::string::String), - > { + denom: ::std::string::String, + ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([6, 216, 175, 50], (p0, p1)) + .method_hash([196, 107, 249, 194], denom) .expect("method not found (this should never happen)") } - ///Calls the contract's `denomToAddress` (0x4020d0ed) function - pub fn denom_to_address( + ///Calls the contract's `getOutstanding` (0x9d4f9ea0) function + pub fn get_outstanding( &self, - p0: ::std::string::String, - ) -> ::ethers::contract::builders::ContractCall { + source_port: ::std::string::String, + source_channel: ::std::string::String, + token: ::ethers::core::types::Address, + ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([64, 32, 208, 237], p0) + .method_hash([157, 79, 158, 160], (source_port, source_channel, token)) .expect("method not found (this should never happen)") } ///Calls the contract's `ibcAddress` (0x696a9bf4) function @@ -1021,22 +1081,11 @@ pub mod ucs01_relay { .method_hash([82, 199, 21, 125], (ibc_packet, relayer)) .expect("method not found (this should never happen)") } - ///Calls the contract's `outstanding` (0xd7c83be5) function - pub fn outstanding( - &self, - p0: ::std::string::String, - p1: ::std::string::String, - p2: ::ethers::core::types::Address, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([215, 200, 59, 229], (p0, p1, p2)) - .expect("method not found (this should never happen)") - } ///Calls the contract's `send` (0xf62d2bcc) function pub fn send( &self, - port_id: ::std::string::String, - channel_id: ::std::string::String, + source_port: ::std::string::String, + source_channel: ::std::string::String, receiver: ::ethers::core::types::Bytes, tokens: ::std::vec::Vec, counterparty_timeout_revision_number: u64, @@ -1046,8 +1095,8 @@ pub mod ucs01_relay { .method_hash( [246, 45, 43, 204], ( - port_id, - channel_id, + source_port, + source_channel, receiver, tokens, counterparty_timeout_revision_number, @@ -1075,6 +1124,12 @@ pub mod ucs01_relay { ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, SentFilter> { self.0.event() } + ///Gets the contract's `Timeout` event + pub fn timeout_filter( + &self, + ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, TimeoutFilter> { + self.0.event() + } /// Returns an `Event` builder for all the events of this contract. pub fn events( &self, @@ -1089,6 +1144,444 @@ pub mod ucs01_relay { Self::new(contract.address(), contract.client()) } } + ///Custom Error type `AddressEmptyCode` with signature `AddressEmptyCode(address)` and selector `0x9996b315` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "AddressEmptyCode", abi = "AddressEmptyCode(address)")] + pub struct AddressEmptyCode { + pub target: ::ethers::core::types::Address, + } + ///Custom Error type `AddressInsufficientBalance` with signature `AddressInsufficientBalance(address)` and selector `0xcd786059` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "AddressInsufficientBalance", + abi = "AddressInsufficientBalance(address)" + )] + pub struct AddressInsufficientBalance { + pub account: ::ethers::core::types::Address, + } + ///Custom Error type `ErrInvalidAcknowledgement` with signature `ErrInvalidAcknowledgement()` and selector `0x6ec7d33f` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrInvalidAcknowledgement", + abi = "ErrInvalidAcknowledgement()" + )] + pub struct ErrInvalidAcknowledgement; + ///Custom Error type `ErrInvalidBytesAddress` with signature `ErrInvalidBytesAddress()` and selector `0x78718c3b` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrInvalidBytesAddress", abi = "ErrInvalidBytesAddress()")] + pub struct ErrInvalidBytesAddress; + ///Custom Error type `ErrInvalidCounterpartyProtocolVersion` with signature `ErrInvalidCounterpartyProtocolVersion()` and selector `0xbb928590` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrInvalidCounterpartyProtocolVersion", + abi = "ErrInvalidCounterpartyProtocolVersion()" + )] + pub struct ErrInvalidCounterpartyProtocolVersion; + ///Custom Error type `ErrInvalidProtocolOrdering` with signature `ErrInvalidProtocolOrdering()` and selector `0xb8526e65` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrInvalidProtocolOrdering", + abi = "ErrInvalidProtocolOrdering()" + )] + pub struct ErrInvalidProtocolOrdering; + ///Custom Error type `ErrInvalidProtocolVersion` with signature `ErrInvalidProtocolVersion()` and selector `0x3d3f7720` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "ErrInvalidProtocolVersion", + abi = "ErrInvalidProtocolVersion()" + )] + pub struct ErrInvalidProtocolVersion; + ///Custom Error type `ErrNotIBC` with signature `ErrNotIBC()` and selector `0xe54f8f9d` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrNotIBC", abi = "ErrNotIBC()")] + pub struct ErrNotIBC; + ///Custom Error type `ErrUnauthorized` with signature `ErrUnauthorized()` and selector `0xcc12cef6` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrUnauthorized", abi = "ErrUnauthorized()")] + pub struct ErrUnauthorized; + ///Custom Error type `ErrUnstoppable` with signature `ErrUnstoppable()` and selector `0x0637c796` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "ErrUnstoppable", abi = "ErrUnstoppable()")] + pub struct ErrUnstoppable; + ///Custom Error type `FailedInnerCall` with signature `FailedInnerCall()` and selector `0x1425ea42` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror(name = "FailedInnerCall", abi = "FailedInnerCall()")] + pub struct FailedInnerCall; + ///Custom Error type `SafeERC20FailedOperation` with signature `SafeERC20FailedOperation(address)` and selector `0x5274afe7` + #[derive( + Clone, + ::ethers::contract::EthError, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[etherror( + name = "SafeERC20FailedOperation", + abi = "SafeERC20FailedOperation(address)" + )] + pub struct SafeERC20FailedOperation { + pub token: ::ethers::core::types::Address, + } + ///Container type for all of the contract's custom errors + #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] + pub enum UCS01RelayErrors { + AddressEmptyCode(AddressEmptyCode), + AddressInsufficientBalance(AddressInsufficientBalance), + ErrInvalidAcknowledgement(ErrInvalidAcknowledgement), + ErrInvalidBytesAddress(ErrInvalidBytesAddress), + ErrInvalidCounterpartyProtocolVersion(ErrInvalidCounterpartyProtocolVersion), + ErrInvalidProtocolOrdering(ErrInvalidProtocolOrdering), + ErrInvalidProtocolVersion(ErrInvalidProtocolVersion), + ErrNotIBC(ErrNotIBC), + ErrUnauthorized(ErrUnauthorized), + ErrUnstoppable(ErrUnstoppable), + FailedInnerCall(FailedInnerCall), + SafeERC20FailedOperation(SafeERC20FailedOperation), + /// The standard solidity revert string, with selector + /// Error(string) -- 0x08c379a0 + RevertString(::std::string::String), + } + impl ::ethers::core::abi::AbiDecode for UCS01RelayErrors { + fn decode( + data: impl AsRef<[u8]>, + ) -> ::core::result::Result { + let data = data.as_ref(); + if let Ok(decoded) = + <::std::string::String as ::ethers::core::abi::AbiDecode>::decode(data) + { + return Ok(Self::RevertString(decoded)); + } + if let Ok(decoded) = ::decode(data) + { + return Ok(Self::AddressEmptyCode(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::AddressInsufficientBalance(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrInvalidAcknowledgement(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrInvalidBytesAddress(decoded)); + } + if let Ok(decoded) = + ::decode( + data, + ) + { + return Ok(Self::ErrInvalidCounterpartyProtocolVersion(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrInvalidProtocolOrdering(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::ErrInvalidProtocolVersion(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::ErrNotIBC(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::ErrUnauthorized(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::ErrUnstoppable(decoded)); + } + if let Ok(decoded) = ::decode(data) { + return Ok(Self::FailedInnerCall(decoded)); + } + if let Ok(decoded) = + ::decode(data) + { + return Ok(Self::SafeERC20FailedOperation(decoded)); + } + Err(::ethers::core::abi::Error::InvalidData.into()) + } + } + impl ::ethers::core::abi::AbiEncode for UCS01RelayErrors { + fn encode(self) -> ::std::vec::Vec { + match self { + Self::AddressEmptyCode(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::AddressInsufficientBalance(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrInvalidAcknowledgement(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrInvalidBytesAddress(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrInvalidCounterpartyProtocolVersion(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrInvalidProtocolOrdering(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrInvalidProtocolVersion(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::ErrNotIBC(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ErrUnauthorized(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::ErrUnstoppable(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::FailedInnerCall(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::SafeERC20FailedOperation(element) => { + ::ethers::core::abi::AbiEncode::encode(element) + } + Self::RevertString(s) => ::ethers::core::abi::AbiEncode::encode(s), + } + } + } + impl ::ethers::contract::ContractRevert for UCS01RelayErrors { + fn valid_selector(selector: [u8; 4]) -> bool { + match selector { + [0x08, 0xc3, 0x79, 0xa0] => true, + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => true, + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ if selector + == ::selector() => { + true + } + _ => false, + } + } + } + impl ::core::fmt::Display for UCS01RelayErrors { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + match self { + Self::AddressEmptyCode(element) => ::core::fmt::Display::fmt(element, f), + Self::AddressInsufficientBalance(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrInvalidAcknowledgement(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrInvalidBytesAddress(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrInvalidCounterpartyProtocolVersion(element) => { + ::core::fmt::Display::fmt(element, f) + } + Self::ErrInvalidProtocolOrdering(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrInvalidProtocolVersion(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrNotIBC(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrUnauthorized(element) => ::core::fmt::Display::fmt(element, f), + Self::ErrUnstoppable(element) => ::core::fmt::Display::fmt(element, f), + Self::FailedInnerCall(element) => ::core::fmt::Display::fmt(element, f), + Self::SafeERC20FailedOperation(element) => ::core::fmt::Display::fmt(element, f), + Self::RevertString(s) => ::core::fmt::Display::fmt(s, f), + } + } + } + impl ::core::convert::From<::std::string::String> for UCS01RelayErrors { + fn from(value: String) -> Self { + Self::RevertString(value) + } + } + impl ::core::convert::From for UCS01RelayErrors { + fn from(value: AddressEmptyCode) -> Self { + Self::AddressEmptyCode(value) + } + } + impl ::core::convert::From for UCS01RelayErrors { + fn from(value: AddressInsufficientBalance) -> Self { + Self::AddressInsufficientBalance(value) + } + } + impl ::core::convert::From for UCS01RelayErrors { + fn from(value: ErrInvalidAcknowledgement) -> Self { + Self::ErrInvalidAcknowledgement(value) + } + } + impl ::core::convert::From for UCS01RelayErrors { + fn from(value: ErrInvalidBytesAddress) -> Self { + Self::ErrInvalidBytesAddress(value) + } + } + impl ::core::convert::From for UCS01RelayErrors { + fn from(value: ErrInvalidCounterpartyProtocolVersion) -> Self { + Self::ErrInvalidCounterpartyProtocolVersion(value) + } + } + impl ::core::convert::From for UCS01RelayErrors { + fn from(value: ErrInvalidProtocolOrdering) -> Self { + Self::ErrInvalidProtocolOrdering(value) + } + } + impl ::core::convert::From for UCS01RelayErrors { + fn from(value: ErrInvalidProtocolVersion) -> Self { + Self::ErrInvalidProtocolVersion(value) + } + } + impl ::core::convert::From for UCS01RelayErrors { + fn from(value: ErrNotIBC) -> Self { + Self::ErrNotIBC(value) + } + } + impl ::core::convert::From for UCS01RelayErrors { + fn from(value: ErrUnauthorized) -> Self { + Self::ErrUnauthorized(value) + } + } + impl ::core::convert::From for UCS01RelayErrors { + fn from(value: ErrUnstoppable) -> Self { + Self::ErrUnstoppable(value) + } + } + impl ::core::convert::From for UCS01RelayErrors { + fn from(value: FailedInnerCall) -> Self { + Self::FailedInnerCall(value) + } + } + impl ::core::convert::From for UCS01RelayErrors { + fn from(value: SafeERC20FailedOperation) -> Self { + Self::SafeERC20FailedOperation(value) + } + } #[derive( Clone, ::ethers::contract::EthEvent, @@ -1143,12 +1636,34 @@ pub mod ucs01_relay { pub token: ::ethers::core::types::Address, pub amount: ::ethers::core::types::U256, } + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] + #[ethevent( + name = "Timeout", + abi = "Timeout(address,string,string,address,uint256)" + )] + pub struct TimeoutFilter { + pub sender: ::ethers::core::types::Address, + pub receiver: ::std::string::String, + pub denom: ::std::string::String, + pub token: ::ethers::core::types::Address, + pub amount: ::ethers::core::types::U256, + } ///Container type for all of the contract's events #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] pub enum UCS01RelayEvents { DenomCreatedFilter(DenomCreatedFilter), ReceivedFilter(ReceivedFilter), SentFilter(SentFilter), + TimeoutFilter(TimeoutFilter), } impl ::ethers::contract::EthLogDecode for UCS01RelayEvents { fn decode_log( @@ -1163,6 +1678,9 @@ pub mod ucs01_relay { if let Ok(decoded) = SentFilter::decode_log(log) { return Ok(UCS01RelayEvents::SentFilter(decoded)); } + if let Ok(decoded) = TimeoutFilter::decode_log(log) { + return Ok(UCS01RelayEvents::TimeoutFilter(decoded)); + } Err(::ethers::core::abi::Error::InvalidData) } } @@ -1172,6 +1690,7 @@ pub mod ucs01_relay { Self::DenomCreatedFilter(element) => ::core::fmt::Display::fmt(element, f), Self::ReceivedFilter(element) => ::core::fmt::Display::fmt(element, f), Self::SentFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::TimeoutFilter(element) => ::core::fmt::Display::fmt(element, f), } } } @@ -1190,7 +1709,12 @@ pub mod ucs01_relay { Self::SentFilter(value) } } - ///Container type for all input parameters for the `addressToDenom` function with signature `addressToDenom(address)` and selector `0x95469df8` + impl ::core::convert::From for UCS01RelayEvents { + fn from(value: TimeoutFilter) -> Self { + Self::TimeoutFilter(value) + } + } + ///Container type for all input parameters for the `getCounterpartyEndpoint` function with signature `getCounterpartyEndpoint(string,string)` and selector `0x408aee10` #[derive( Clone, ::ethers::contract::EthCall, @@ -1201,9 +1725,15 @@ pub mod ucs01_relay { Eq, Hash, )] - #[ethcall(name = "addressToDenom", abi = "addressToDenom(address)")] - pub struct AddressToDenomCall(pub ::ethers::core::types::Address); - ///Container type for all input parameters for the `counterpartyEndpoints` function with signature `counterpartyEndpoints(string,string)` and selector `0x06d8af32` + #[ethcall( + name = "getCounterpartyEndpoint", + abi = "getCounterpartyEndpoint(string,string)" + )] + pub struct GetCounterpartyEndpointCall { + pub source_port: ::std::string::String, + pub source_channel: ::std::string::String, + } + ///Container type for all input parameters for the `getDenomAddress` function with signature `getDenomAddress(string)` and selector `0xc46bf9c2` #[derive( Clone, ::ethers::contract::EthCall, @@ -1214,12 +1744,11 @@ pub mod ucs01_relay { Eq, Hash, )] - #[ethcall( - name = "counterpartyEndpoints", - abi = "counterpartyEndpoints(string,string)" - )] - pub struct CounterpartyEndpointsCall(pub ::std::string::String, pub ::std::string::String); - ///Container type for all input parameters for the `denomToAddress` function with signature `denomToAddress(string)` and selector `0x4020d0ed` + #[ethcall(name = "getDenomAddress", abi = "getDenomAddress(string)")] + pub struct GetDenomAddressCall { + pub denom: ::std::string::String, + } + ///Container type for all input parameters for the `getOutstanding` function with signature `getOutstanding(string,string,address)` and selector `0x9d4f9ea0` #[derive( Clone, ::ethers::contract::EthCall, @@ -1230,8 +1759,12 @@ pub mod ucs01_relay { Eq, Hash, )] - #[ethcall(name = "denomToAddress", abi = "denomToAddress(string)")] - pub struct DenomToAddressCall(pub ::std::string::String); + #[ethcall(name = "getOutstanding", abi = "getOutstanding(string,string,address)")] + pub struct GetOutstandingCall { + pub source_port: ::std::string::String, + pub source_channel: ::std::string::String, + pub token: ::ethers::core::types::Address, + } ///Container type for all input parameters for the `ibcAddress` function with signature `ibcAddress()` and selector `0x696a9bf4` #[derive( Clone, @@ -1438,23 +1971,6 @@ pub mod ucs01_relay { pub ibc_packet: IbcCoreChannelV1PacketData, pub relayer: ::ethers::core::types::Address, } - ///Container type for all input parameters for the `outstanding` function with signature `outstanding(string,string,address)` and selector `0xd7c83be5` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethcall(name = "outstanding", abi = "outstanding(string,string,address)")] - pub struct OutstandingCall( - pub ::std::string::String, - pub ::std::string::String, - pub ::ethers::core::types::Address, - ); ///Container type for all input parameters for the `send` function with signature `send(string,string,bytes,(address,uint128)[],uint64,uint64)` and selector `0xf62d2bcc` #[derive( Clone, @@ -1471,8 +1987,8 @@ pub mod ucs01_relay { abi = "send(string,string,bytes,(address,uint128)[],uint64,uint64)" )] pub struct SendCall { - pub port_id: ::std::string::String, - pub channel_id: ::std::string::String, + pub source_port: ::std::string::String, + pub source_channel: ::std::string::String, pub receiver: ::ethers::core::types::Bytes, pub tokens: ::std::vec::Vec, pub counterparty_timeout_revision_number: u64, @@ -1481,9 +1997,9 @@ pub mod ucs01_relay { ///Container type for all of the contract's call #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] pub enum UCS01RelayCalls { - AddressToDenom(AddressToDenomCall), - CounterpartyEndpoints(CounterpartyEndpointsCall), - DenomToAddress(DenomToAddressCall), + GetCounterpartyEndpoint(GetCounterpartyEndpointCall), + GetDenomAddress(GetDenomAddressCall), + GetOutstanding(GetOutstandingCall), IbcAddress(IbcAddressCall), OnAcknowledgementPacket(OnAcknowledgementPacketCall), OnChanCloseConfirm(OnChanCloseConfirmCall), @@ -1495,7 +2011,6 @@ pub mod ucs01_relay { OnRecvPacket(OnRecvPacketCall), OnRecvPacketProcessing(OnRecvPacketProcessingCall), OnTimeoutPacket(OnTimeoutPacketCall), - Outstanding(OutstandingCall), Send(SendCall), } impl ::ethers::core::abi::AbiDecode for UCS01RelayCalls { @@ -1504,19 +2019,19 @@ pub mod ucs01_relay { ) -> ::core::result::Result { let data = data.as_ref(); if let Ok(decoded) = - ::decode(data) + ::decode(data) { - return Ok(Self::AddressToDenom(decoded)); + return Ok(Self::GetCounterpartyEndpoint(decoded)); } if let Ok(decoded) = - ::decode(data) + ::decode(data) { - return Ok(Self::CounterpartyEndpoints(decoded)); + return Ok(Self::GetDenomAddress(decoded)); } if let Ok(decoded) = - ::decode(data) + ::decode(data) { - return Ok(Self::DenomToAddress(decoded)); + return Ok(Self::GetOutstanding(decoded)); } if let Ok(decoded) = ::decode(data) { return Ok(Self::IbcAddress(decoded)); @@ -1568,9 +2083,6 @@ pub mod ucs01_relay { { return Ok(Self::OnTimeoutPacket(decoded)); } - if let Ok(decoded) = ::decode(data) { - return Ok(Self::Outstanding(decoded)); - } if let Ok(decoded) = ::decode(data) { return Ok(Self::Send(decoded)); } @@ -1580,11 +2092,11 @@ pub mod ucs01_relay { impl ::ethers::core::abi::AbiEncode for UCS01RelayCalls { fn encode(self) -> Vec { match self { - Self::AddressToDenom(element) => ::ethers::core::abi::AbiEncode::encode(element), - Self::CounterpartyEndpoints(element) => { + Self::GetCounterpartyEndpoint(element) => { ::ethers::core::abi::AbiEncode::encode(element) } - Self::DenomToAddress(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::GetDenomAddress(element) => ::ethers::core::abi::AbiEncode::encode(element), + Self::GetOutstanding(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::IbcAddress(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::OnAcknowledgementPacket(element) => { ::ethers::core::abi::AbiEncode::encode(element) @@ -1602,7 +2114,6 @@ pub mod ucs01_relay { ::ethers::core::abi::AbiEncode::encode(element) } Self::OnTimeoutPacket(element) => ::ethers::core::abi::AbiEncode::encode(element), - Self::Outstanding(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::Send(element) => ::ethers::core::abi::AbiEncode::encode(element), } } @@ -1610,9 +2121,9 @@ pub mod ucs01_relay { impl ::core::fmt::Display for UCS01RelayCalls { fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { match self { - Self::AddressToDenom(element) => ::core::fmt::Display::fmt(element, f), - Self::CounterpartyEndpoints(element) => ::core::fmt::Display::fmt(element, f), - Self::DenomToAddress(element) => ::core::fmt::Display::fmt(element, f), + Self::GetCounterpartyEndpoint(element) => ::core::fmt::Display::fmt(element, f), + Self::GetDenomAddress(element) => ::core::fmt::Display::fmt(element, f), + Self::GetOutstanding(element) => ::core::fmt::Display::fmt(element, f), Self::IbcAddress(element) => ::core::fmt::Display::fmt(element, f), Self::OnAcknowledgementPacket(element) => ::core::fmt::Display::fmt(element, f), Self::OnChanCloseConfirm(element) => ::core::fmt::Display::fmt(element, f), @@ -1624,24 +2135,23 @@ pub mod ucs01_relay { Self::OnRecvPacket(element) => ::core::fmt::Display::fmt(element, f), Self::OnRecvPacketProcessing(element) => ::core::fmt::Display::fmt(element, f), Self::OnTimeoutPacket(element) => ::core::fmt::Display::fmt(element, f), - Self::Outstanding(element) => ::core::fmt::Display::fmt(element, f), Self::Send(element) => ::core::fmt::Display::fmt(element, f), } } } - impl ::core::convert::From for UCS01RelayCalls { - fn from(value: AddressToDenomCall) -> Self { - Self::AddressToDenom(value) + impl ::core::convert::From for UCS01RelayCalls { + fn from(value: GetCounterpartyEndpointCall) -> Self { + Self::GetCounterpartyEndpoint(value) } } - impl ::core::convert::From for UCS01RelayCalls { - fn from(value: CounterpartyEndpointsCall) -> Self { - Self::CounterpartyEndpoints(value) + impl ::core::convert::From for UCS01RelayCalls { + fn from(value: GetDenomAddressCall) -> Self { + Self::GetDenomAddress(value) } } - impl ::core::convert::From for UCS01RelayCalls { - fn from(value: DenomToAddressCall) -> Self { - Self::DenomToAddress(value) + impl ::core::convert::From for UCS01RelayCalls { + fn from(value: GetOutstandingCall) -> Self { + Self::GetOutstanding(value) } } impl ::core::convert::From for UCS01RelayCalls { @@ -1699,17 +2209,12 @@ pub mod ucs01_relay { Self::OnTimeoutPacket(value) } } - impl ::core::convert::From for UCS01RelayCalls { - fn from(value: OutstandingCall) -> Self { - Self::Outstanding(value) - } - } impl ::core::convert::From for UCS01RelayCalls { fn from(value: SendCall) -> Self { Self::Send(value) } } - ///Container type for all return fields from the `addressToDenom` function with signature `addressToDenom(address)` and selector `0x95469df8` + ///Container type for all return fields from the `getCounterpartyEndpoint` function with signature `getCounterpartyEndpoint(string,string)` and selector `0x408aee10` #[derive( Clone, ::ethers::contract::EthAbiType, @@ -1720,8 +2225,8 @@ pub mod ucs01_relay { Eq, Hash, )] - pub struct AddressToDenomReturn(pub ::std::string::String); - ///Container type for all return fields from the `counterpartyEndpoints` function with signature `counterpartyEndpoints(string,string)` and selector `0x06d8af32` + pub struct GetCounterpartyEndpointReturn(pub IbcCoreChannelV1CounterpartyData); + ///Container type for all return fields from the `getDenomAddress` function with signature `getDenomAddress(string)` and selector `0xc46bf9c2` #[derive( Clone, ::ethers::contract::EthAbiType, @@ -1732,11 +2237,8 @@ pub mod ucs01_relay { Eq, Hash, )] - pub struct CounterpartyEndpointsReturn { - pub port_id: ::std::string::String, - pub channel_id: ::std::string::String, - } - ///Container type for all return fields from the `denomToAddress` function with signature `denomToAddress(string)` and selector `0x4020d0ed` + pub struct GetDenomAddressReturn(pub ::ethers::core::types::Address); + ///Container type for all return fields from the `getOutstanding` function with signature `getOutstanding(string,string,address)` and selector `0x9d4f9ea0` #[derive( Clone, ::ethers::contract::EthAbiType, @@ -1747,7 +2249,7 @@ pub mod ucs01_relay { Eq, Hash, )] - pub struct DenomToAddressReturn(pub ::ethers::core::types::Address); + pub struct GetOutstandingReturn(pub ::ethers::core::types::U256); ///Container type for all return fields from the `ibcAddress` function with signature `ibcAddress()` and selector `0x696a9bf4` #[derive( Clone, @@ -1771,21 +2273,7 @@ pub mod ucs01_relay { Eq, Hash, )] - pub struct OnRecvPacketReturn { - pub acknowledgement: ::ethers::core::types::Bytes, - } - ///Container type for all return fields from the `outstanding` function with signature `outstanding(string,string,address)` and selector `0xd7c83be5` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - pub struct OutstandingReturn(pub ::ethers::core::types::U256); + pub struct OnRecvPacketReturn(pub ::ethers::core::types::Bytes); ///`LocalToken(address,uint128)` #[derive( Clone, diff --git a/lib/chain-utils/src/evm.rs b/lib/chain-utils/src/evm.rs index ded5cf11da..b4253977b3 100644 --- a/lib/chain-utils/src/evm.rs +++ b/lib/chain-utils/src/evm.rs @@ -2,13 +2,18 @@ use std::{fmt::Debug, marker::PhantomData, ops::Div, str::FromStr, sync::Arc}; use beacon_api::client::BeaconApiClient; use contracts::{ + devnet_ownable_ibc_handler::DevnetOwnableIBCHandler, + ibc_channel_handshake::IBCChannelHandshakeEvents, + ibc_client::GeneratedClientIdentifierFilter, + ibc_connection::IBCConnectionEvents, ibc_handler::{ GetChannelCall, GetChannelReturn, GetClientStateCall, GetClientStateReturn, GetConnectionCall, GetConnectionReturn, GetConsensusStateCall, GetConsensusStateReturn, GetHashedPacketAcknowledgementCommitmentCall, GetHashedPacketAcknowledgementCommitmentReturn, GetHashedPacketCommitmentCall, - GetHashedPacketCommitmentReturn, IBCHandler, IBCHandlerEvents, WriteAcknowledgementFilter, + GetHashedPacketCommitmentReturn, IBCHandler, }, + ibc_packet::{IBCPacket, IBCPacketEvents, WriteAcknowledgementFilter}, shared_types::{IbcCoreChannelV1ChannelData, IbcCoreConnectionV1ConnectionEndData}, }; use ethers::{ @@ -60,7 +65,8 @@ pub type CometblsMiddleware = pub struct Evm { pub chain_id: U256, - pub readonly_ibc_handler: IBCHandler>, + pub readonly_ibc_handler: DevnetOwnableIBCHandler>, + pub readonly_ibc_packet: IBCPacket>, // pub wallet: LocalWallet, pub ibc_handlers: Pool>, @@ -112,6 +118,33 @@ impl FromStrExact for EvmChainType { }; } +#[derive(Clone, Debug, PartialEq, Eq, Hash)] +pub enum IBCHandlerEvents { + PacketEvent(IBCPacketEvents), + ConnectionEvent(IBCConnectionEvents), + ChannelEvent(IBCChannelHandshakeEvents), + ClientEvent(GeneratedClientIdentifierFilter), +} + +impl EthLogDecode for IBCHandlerEvents { + fn decode_log(log: ðers::abi::RawLog) -> Result + where + Self: Sized, + { + let packet_event = IBCPacketEvents::decode_log(log).map(IBCHandlerEvents::PacketEvent); + let conn_event = + IBCConnectionEvents::decode_log(log).map(IBCHandlerEvents::ConnectionEvent); + let chan_event = + IBCChannelHandshakeEvents::decode_log(log).map(IBCHandlerEvents::ChannelEvent); + [packet_event, conn_event, chan_event] + .into_iter() + .collect::, _>>()? + .first() + .cloned() + .ok_or(ethers::abi::Error::InvalidData) + } +} + impl Chain for Evm { type ChainType = EvmChainType; @@ -305,7 +338,7 @@ impl Chain for Evm { ) -> impl Future> + '_ { async move { let filter = self - .readonly_ibc_handler + .readonly_ibc_packet .write_acknowledgement_filter() .filter .at_block_hash(block_hash); @@ -316,7 +349,7 @@ impl Chain for Evm { .map(|log| ::decode_log(&log.into())) .find_map(|e| match e { Ok(WriteAcknowledgementFilter { - destination_port_id: ack_dst_port_id, + destination_port: ack_dst_port_id, destination_channel, sequence: ack_sequence, acknowledgement, @@ -368,7 +401,11 @@ impl Evm { Ok(Self { chain_id: U256(chain_id), ibc_handlers: Pool::new(ibc_handlers), - readonly_ibc_handler: IBCHandler::new( + readonly_ibc_handler: DevnetOwnableIBCHandler::new( + config.ibc_handler_address.clone(), + provider.clone().into(), + ), + readonly_ibc_packet: IBCPacket::new( config.ibc_handler_address, provider.clone().into(), ), @@ -649,7 +686,7 @@ impl EventSource for Evm { }; let event = match event { - IBCHandlerEvents::AcknowledgePacketFilter(packet_ack) => { + IBCHandlerEvents::PacketEvent(IBCPacketEvents::AcknowledgePacketFilter(packet_ack)) => { // TODO: Would be nice if this info was passed through in the SendPacket event let channel_data: Channel = read_channel( packet_ack.packet.source_port.clone(), @@ -685,9 +722,9 @@ impl EventSource for Evm { connection_id: channel_data.connection_hops[0].clone(), })) } - IBCHandlerEvents::ChannelCloseConfirmFilter(_) => todo!(), - IBCHandlerEvents::ChannelCloseInitFilter(_) => todo!(), - IBCHandlerEvents::ChannelOpenAckFilter(event) => { + IBCHandlerEvents::ChannelEvent(IBCChannelHandshakeEvents::ChannelCloseConfirmFilter(_)) => todo!(), + IBCHandlerEvents::ChannelEvent(IBCChannelHandshakeEvents::ChannelCloseInitFilter(_)) => todo!(), + IBCHandlerEvents::ChannelEvent(IBCChannelHandshakeEvents::ChannelOpenAckFilter(event)) => { let channel = read_channel(event.port_id.clone(), event.channel_id.clone()) .await?; @@ -710,7 +747,7 @@ impl EventSource for Evm { connection_id: channel.connection_hops[0].clone(), })) } - IBCHandlerEvents::ChannelOpenConfirmFilter(event) => { + IBCHandlerEvents::ChannelEvent(IBCChannelHandshakeEvents::ChannelOpenConfirmFilter(event)) => { let channel = read_channel(event.port_id.clone(), event.channel_id.clone()) .await?; @@ -733,7 +770,7 @@ impl EventSource for Evm { connection_id: channel.connection_hops[0].clone(), })) } - IBCHandlerEvents::ChannelOpenInitFilter(event) => { + IBCHandlerEvents::ChannelEvent(IBCChannelHandshakeEvents::ChannelOpenInitFilter(event)) => { let channel = read_channel(event.port_id.clone(), event.channel_id.clone()) .await?; @@ -758,7 +795,7 @@ impl EventSource for Evm { version: channel.version, })) } - IBCHandlerEvents::ChannelOpenTryFilter(event) => { + IBCHandlerEvents::ChannelEvent(IBCChannelHandshakeEvents::ChannelOpenTryFilter(event)) => { let channel = read_channel(event.port_id.clone(), event.channel_id.clone()) .await?; @@ -788,7 +825,7 @@ impl EventSource for Evm { version: event.version, })) } - IBCHandlerEvents::ConnectionOpenAckFilter(event) => { + IBCHandlerEvents::ConnectionEvent(IBCConnectionEvents::ConnectionOpenAckFilter(event)) => { let connection: ConnectionEnd<::ClientId, String> = read_connection(event.connection_id.clone()).await?; @@ -804,7 +841,7 @@ impl EventSource for Evm { .connection_id, })) } - IBCHandlerEvents::ConnectionOpenConfirmFilter(event) => { + IBCHandlerEvents::ConnectionEvent(IBCConnectionEvents::ConnectionOpenConfirmFilter(event)) => { let connection: ConnectionEnd<::ClientId, String> = read_connection(event.connection_id.clone()).await?; @@ -820,7 +857,7 @@ impl EventSource for Evm { .connection_id, })) } - IBCHandlerEvents::ConnectionOpenInitFilter(event) => { + IBCHandlerEvents::ConnectionEvent(IBCConnectionEvents::ConnectionOpenInitFilter(event)) => { let connection: ConnectionEnd< ::ClientId, String, @@ -851,7 +888,7 @@ impl EventSource for Evm { counterparty_client_id: connection.counterparty.client_id, })) } - IBCHandlerEvents::ConnectionOpenTryFilter(event) => { + IBCHandlerEvents::ConnectionEvent(IBCConnectionEvents::ConnectionOpenTryFilter(event)) => { let connection: ConnectionEnd<::ClientId, String> = read_connection(event.connection_id.clone()).await?; @@ -867,16 +904,16 @@ impl EventSource for Evm { .connection_id, })) } - IBCHandlerEvents::GeneratedClientIdentifierFilter(event) => { + IBCHandlerEvents::ClientEvent(GeneratedClientIdentifierFilter(client_id)) => { let client_type = this .readonly_ibc_handler - .client_types(event.0.clone()) + .client_types(client_id.clone()) .await .map_err(EvmEventSourceError::Contract)?; let (client_state, success) = this .readonly_ibc_handler - .get_client_state(event.0.clone()) + .get_client_state(client_id.clone()) .await .unwrap(); @@ -891,15 +928,14 @@ impl EventSource for Evm { .unwrap(); Some(IbcEvent::CreateClient(CreateClient { - client_id: event - .0 + client_id: client_id .parse() .map_err(EvmEventSourceError::ClientIdParse)?, client_type, consensus_height: client_state.latest_height, })) } - IBCHandlerEvents::RecvPacketFilter(event) => { + IBCHandlerEvents::PacketEvent(IBCPacketEvents::RecvPacketFilter(event)) => { let channel = read_channel( event.packet.destination_port.clone(), event.packet.destination_channel.clone(), @@ -935,7 +971,7 @@ impl EventSource for Evm { connection_id: channel.connection_hops[0].clone(), })) } - IBCHandlerEvents::SendPacketFilter(event) => { + IBCHandlerEvents::PacketEvent(IBCPacketEvents::SendPacketFilter(event)) => { let channel = read_channel( event.source_port.clone(), event.source_channel.clone(), @@ -967,8 +1003,8 @@ impl EventSource for Evm { connection_id: channel.connection_hops[0].clone(), })) } - IBCHandlerEvents::WriteAcknowledgementFilter(_) => None, - IBCHandlerEvents::TimeoutPacketFilter(_) => None, + IBCHandlerEvents::PacketEvent(IBCPacketEvents::WriteAcknowledgementFilter(_)) => None, + IBCHandlerEvents::PacketEvent(IBCPacketEvents::TimeoutPacketFilter(_)) => None, }; Ok(event.map(|event| { diff --git a/lib/chain-utils/src/union.rs b/lib/chain-utils/src/union.rs index d737ccd19a..41feaa0078 100644 --- a/lib/chain-utils/src/union.rs +++ b/lib/chain-utils/src/union.rs @@ -185,7 +185,7 @@ impl Chain for Union { .unix_timestamp() .try_into() .unwrap(), - root: MerkleRoot { + app_hash: MerkleRoot { hash: commit .signed_header .header diff --git a/lib/cometbls-groth16-verifier/src/lib.rs b/lib/cometbls-groth16-verifier/src/lib.rs index b38ba59b25..4ad5dbd70f 100644 --- a/lib/cometbls-groth16-verifier/src/lib.rs +++ b/lib/cometbls-groth16-verifier/src/lib.rs @@ -44,86 +44,82 @@ fn make_g2(x0: BigInt<4>, x1: BigInt<4>, y0: BigInt<4>, y1: BigInt<4>) -> ark_bn pub fn universal_vk() -> VerifyingKey { VerifyingKey:: { alpha_g1: make_g1( + BigInt!("210400609118751867867594962339236416900807823190943555300977451252876367251"), BigInt!( - "12953796731566255356153533186899970596541789506787316310421265866460204452345" - ), - BigInt!( - "16108099332627179116882890117640860610766253379177782725877946988741043002151" + "15114917314049487003769383074865116286536524761334960573881383182006812098667" ), ), beta_g2: make_g2( - BigInt!("7189998629544061358868906102425391182345467937747171889044260956112296857453"), + BigInt!("4025695320685928294502537638656612753817559258692794664435345502849231300067"), + BigInt!( + "18548846535245326130909941053625664549629964661821753718960511623672350665970" + ), BigInt!( - "11715211044976611849279736941659181461607821837429796658922621107593979258018" + "10846430301459525961294403190013912919646029785598534122197567832498848258725" + ), + BigInt!( + "14801712319754738293485998154637765616009986020917883574390603809142215597666" ), - BigInt!("268303316233297557783682887628508342685752572403344995053486577590103398535"), - BigInt!("4144094055252167352279214584912891444882296092131984956478324068851445564919"), ), gamma_g2: make_g2( - BigInt!("3203739780556455486614737616951770238449562962366174174415509385502339079134"), - BigInt!("330365480594874048579972851352786169022705988981774516328112713209916814425"), - BigInt!("1160827755956593330229975476904769538358170226783719969166560221964705726473"), + BigInt!("3871507673786634538856304899308535382710007469487017238115999457851260261753"), + BigInt!("9263528541268382918393290127320839732843244267184360590957560203659557939807"), + BigInt!( + "21428157745127521242166523454127400279835355719334794879916725299573267377673" + ), BigInt!( - "10117748002270903361881103766639804088966132520100608744246025077047886374957" + "16228735596538146886766390508590128116164825213870252854013185224046201333438" ), ), delta_g2: make_g2( - BigInt!("144471853326950176158652078814987832244858457888532278798444997831177703256"), BigInt!( - "11723967339734259367269684565753317343894480284660483851808778513760163502167" + "10511954649625640946194391595271440757788300118705902871380699323889590717070" ), + BigInt!("3624887307974581652668788593721111206379446020443390411004753466558440004576"), + BigInt!("7267520965177252745769584498003256794053985100783827924477069234086228875930"), BigInt!( - "13230225566375652551257855552370345586627664462416084709155088881134357226734" + "13871202899280183706927891825856880309055978294723749244553765869552018564080" ), - BigInt!("6917695229563553029365572247639515670362209203071184748187717255117343741604"), ), gamma_abc_g1: vec![ make_g1( BigInt!( - "468243475977942096739227064799809074577932864561864594431724289332044119393" - ), - BigInt!( - "12026957193107468267989691684356505173830039075560970134183365962992276088502" - ), - ), - make_g1( - BigInt!( - "4273127142915912066836331589937887852131041396580330861495976561450995509060" + "7548860451745230603118483440705740915442110531593946049093378206268978489889" ), BigInt!( - "20311891790436735379947440583419330671207702790700221333652972975201502172109" + "8642676949380445344876359442033848518648809724845273937857877647136985821580" ), ), make_g1( BigInt!( - "5867078984367927991529260476370712193826388223706691841033290533650191497842" + "3761607900566975305271041912404145777243969522402194441451368484814115763984" ), BigInt!( - "15457584854730416542120021991798916984793483604514831168874602434669080770632" + "5236577135937549420013214983430521575368103283652548157969360454835627955674" ), ), make_g1( BigInt!( - "6073935183581261599921354767516829294802045150352674700000707907321520444286" + "6551227099151518169715147953582656472887860242160769774314802712412742643231" ), BigInt!( - "19421513883482432722033354055257568460031664693915650865773106969145220560478" + "1819741224363792162320411058820080302711126963872887137191002940993034590657" ), ), make_g1( BigInt!( - "6573761322005933095907247349767854226263237757268335098982485126002570113042" + "14381003547507154363999629345246039179209989264380273368866915523962951751353" ), BigInt!( - "21648292561695958729986475933727235437209737383625151779025875934553286731278" + "11723454477524607914925823310578875758974497210070578907830734479226804006505" ), ), make_g1( BigInt!( - "7850217296098862761033756178241744898548923761706289522462295413515747119164" + "9428637111213429505715745409259434820588419778432030319817634906362966081466" ), BigInt!( - "15481433110471107159567305060748336299937224568483713663114311452391215471632" + "20385940124935492750321915374844475607796921194332338238981177318927052319236" ), ), ], @@ -148,19 +144,6 @@ fn hmac_keccak(message: &[u8]) -> [u8; 32] { hasher.finalize().into() } -// TODO: link whitepaper equation -fn hash_to_field2(message: impl Iterator + Clone) -> (U256, U256) { - ( - hash_to_field( - [0].into_iter() - .chain(message.clone()) - .collect::>() - .as_ref(), - ), - hash_to_field([1].into_iter().chain(message).collect::>().as_ref()), - ) -} - // TODO: link whitepaper equation fn hash_to_field(message: &[u8]) -> U256 { (U256::from(&hmac_keccak(message)) % PRIME_R_MINUS_ONE) + 1 @@ -328,13 +311,12 @@ fn verify_generic_zkp( ::from_le_bytes_mod_order(&buffer) }; - let (message_x, message_y) = hash_to_field2(message.iter().copied()); + let hashed_message = hash_to_field(message); - let public_inputs: [P::ScalarField; 5] = [ + let public_inputs: [P::ScalarField; 4] = [ decode_scalar(trusted_validators_hash), decode_scalar(untrusted_validators_hash), - decode_scalar(message_x), - decode_scalar(message_y), + decode_scalar(hashed_message), decode_scalar(zkp.commitment_hash), ]; @@ -373,15 +355,28 @@ mod tests { use super::*; #[test] - fn test() { + fn test_ok() { assert_eq!( verify_zkp( - U256::from_str("09539669AC74E3530F2782443258734DABAC8B8E036ECB9BC378361016892156").unwrap(), - U256::from_str("09539669AC74E3530F2782443258734DABAC8B8E036ECB9BC378361016892156").unwrap(), - &hex!("650802113E0200000000000022480A20B8C88CE47A2AC003E6736975F3AE14517A07E90CBF3293C8E073CF45FB371E79122408011220AC08E7599D7F5682B77E2293928D68A956B2A73E917E5B9F0DBA64B0ED8C2E2F320E756E696F6E2D6465766E65742D31"), - hex!("21D80AACFCA03DC2B84881E3EF1A73C25D2D088E48AA35764A6B4485A78354F021C90A4CBAAB731658D13CE5152F147DF1734F0196031DAF918BF06DAEA1A4E9082959B87795E28482B4FE13AD4B777F9A2D4BFBC8C3FF2640A5DB5619A8F2DA04D6037DAEA584F0C93EDC769859BE695493F48813E491540C37587C2C3214490AE2C9DC087D8039CAF2BD181E289D60EA9AC8B4BF3411A9F9888DC9250525DD055143FE81924CF683CF8381167431A8CB0C984C9DB2BA13D6C9B2374FFD7323052586453C7C06E234B861E9E212EB4A8DF470BD9ADCDB759FED40E62004ECB8210E3A53A0D1F570552C5118521943BC2CC4BB1DA8A5877667A2800D4DF62665304E914F6631B3CE27C88F21E1E8FFAC6C0512D62AE00BEEA79F649BD6E139BD254011571644878C8A72D167D82B5F409360209E1B8E146457C1893769383F4F2F9C0E2EF22885F92672277AF244840CA6EB5298D74E73334BD88360D6B33681") + U256::from_str("1BBACC23BE35969FFCEFC2892440045E83C3C78E81BF2D6473DD745A93835684").unwrap(), + U256::from_str("1BBACC23BE35969FFCEFC2892440045E83C3C78E81BF2D6473DD745A93835684").unwrap(), + &hex!("650802113E0200000000000022480A2053D3DC9F43757EEA63FC3B28C383074A111146B2DE7F73A198D29A6D6919DA6D12240801122023C8BED9455A38334F6462A3EAC87616CF51226F825A229FA23CA420E26730B9320E756E696F6E2D6465766E65742D31"), + hex!("1BFF5A73FF68B0DAF1F9A29DAD3675762BC346BB36DB701FB5DC80D7FE49C6BE08919D9E16A64159D119278B3BB0EF17DD3703CC3BB6E2FE9E54E84C638EE21829F7FB01533159D70B95F032A99E712D7E06BCCE645D7701615DA5EBAEA75088271F5ECA5E9DAC8D4B1A3CEC0A423F856940D02E5F71B5D9A7C980239987C0D224E1CB5AFE824E7201D959E1B21CBCEE6E0B9BD3B33667741BF7FE201A9A8BA414ACA69E03C3C5DED496B65F02469BC7941AD20E832678BDACF37BD0F7E1A4C50DB32B4A5871AC0584912C09A103FDE335D0A20134C6E2AE52419C84BE775A6C2B4C38DE85412682F66ED405023E9CCEC604B3854B800DFB346EAABF676E844A0EFB9D293D0CC163BAD528AD73B91EDDCDA5FCE49D6ACBA8417D9DC514E1B9FA0C55ADB722120C67CF120CF00225E6B7842A5561772AE1095E30E8FCD7A513370FAD55D57F7794DB096BD7FF7E4373410D04194BE1A1818EFFE5D09F9E08CF8D") ), Ok(()) ); } + + #[test] + fn test_ko() { + assert_eq!( + verify_zkp( + U256::from_str("1BBACC23BE35969FFCEFC2892440045E83C3C78E81BF2D6473DD745A93835684").unwrap(), + U256::from_str("1BBACC23BE35969FFCEFC2892440045E83C3C78E81BF2D6473DD745A93835684").unwrap(), + &hex!("650802113E0200000000000022480A2053D3DC9F43757EEA63FC3B28C383074A111146B2DE7F73A198D29A6D6919DA6D12240801122023C8BED9455A38334F6462A3EAC87616CF51226F825A229FA23CA420E26730B9320E756E696F6E2D6465766E65742D31"), + hex!("21D80AACFCA03DC2B84881E3EF1A73C25D2D088E48AA35764A6B4485A78354F021C90A4CBAAB731658D13CE5152F147DF1734F0196031DAF918BF06DAEA1A4E9082959B87795E28482B4FE13AD4B777F9A2D4BFBC8C3FF2640A5DB5619A8F2DA04D6037DAEA584F0C93EDC769859BE695493F48813E491540C37587C2C3214490AE2C9DC087D8039CAF2BD181E289D60EA9AC8B4BF3411A9F9888DC9250525DD055143FE81924CF683CF8381167431A8CB0C984C9DB2BA13D6C9B2374FFD7323052586453C7C06E234B861E9E212EB4A8DF470BD9ADCDB759FED40E62004ECB8210E3A53A0D1F570552C5118521943BC2CC4BB1DA8A5877667A2800D4DF62665304E914F6631B3CE27C88F21E1E8FFAC6C0512D62AE00BEEA79F649BD6E139BD254011571644878C8A72D167D82B5F409360209E1B8E146457C1893769383F4F2F9C0E2EF22885F92672277AF244840CA6EB5298D74E73334BD88360D6B33681") + ), + Err(Error::InvalidProof(SynthesisError::UnexpectedIdentity)) + ); + } } diff --git a/lib/unionlabs/src/ibc/lightclients/cometbls/consensus_state.rs b/lib/unionlabs/src/ibc/lightclients/cometbls/consensus_state.rs index dd9a75ede5..13af47bc4d 100644 --- a/lib/unionlabs/src/ibc/lightclients/cometbls/consensus_state.rs +++ b/lib/unionlabs/src/ibc/lightclients/cometbls/consensus_state.rs @@ -13,7 +13,7 @@ use crate::{ #[serde(deny_unknown_fields)] pub struct ConsensusState { pub timestamp: u64, - pub root: MerkleRoot, + pub app_hash: MerkleRoot, pub next_validators_hash: H256, } @@ -32,7 +32,7 @@ impl TryFrom for ) -> Result { Ok(Self { timestamp: value.timestamp, - root: required!(value.root)? + app_hash: required!(value.root)? .try_into() .map_err(TryFromConsensusStateError::Root)?, next_validators_hash: value @@ -60,7 +60,7 @@ impl From for protos::union::ibc::lightclients::cometbls::v1::Co fn from(value: ConsensusState) -> Self { Self { timestamp: value.timestamp, - root: Some(value.root.into()), + root: Some(value.app_hash.into()), next_validators_hash: value.next_validators_hash.into(), } } @@ -71,7 +71,7 @@ impl From for contracts::glue::OptimizedConsensusState { fn from(value: ConsensusState) -> Self { Self { timestamp: value.timestamp, - root: value.root.hash.into(), + app_hash: value.app_hash.hash.into(), next_validators_hash: value.next_validators_hash.into(), } } @@ -91,7 +91,7 @@ impl TryFrom for ConsensusState { fn try_from(value: contracts::glue::OptimizedConsensusState) -> Result { Ok(Self { timestamp: value.timestamp, - root: MerkleRoot::from(H256::from(value.root)), + app_hash: MerkleRoot::from(H256::from(value.app_hash)), next_validators_hash: value.next_validators_hash.into(), }) } diff --git a/light-clients/cometbls-light-client/src/client.rs b/light-clients/cometbls-light-client/src/client.rs index 0bff7038fe..9b81836636 100644 --- a/light-clients/cometbls-light-client/src/client.rs +++ b/light-clients/cometbls-light-client/src/client.rs @@ -75,14 +75,14 @@ impl IbcClient for CometblsLightClient { StorageState::Occupied(value) => ics23::ibc_api::verify_membership( &merkle_proof, &SDK_SPECS, - &consensus_state.data.root, + &consensus_state.data.app_hash, &path, value, ), StorageState::Empty => ics23::ibc_api::verify_non_membership( &merkle_proof, &SDK_SPECS, - &consensus_state.data.root, + &consensus_state.data.app_hash, &path, ), } @@ -219,7 +219,7 @@ impl IbcClient for CometblsLightClient { client_state.data.latest_height = untrusted_height; } - consensus_state.data.root = MerkleRoot { + consensus_state.data.app_hash = MerkleRoot { hash: header.signed_header.header.app_hash, }; @@ -473,79 +473,83 @@ mod tests { assert_eq!(is_client_expired(u64::MAX, 5, 10), true); } - #[test] - fn verify_and_update_header_works_with_good_data() { - let mut deps = mock_dependencies(); - - let wasm_client_state: WasmClientState = - serde_json::from_str(&fs::read_to_string("src/test/client_state.json").unwrap()) - .unwrap(); - - let wasm_consensus_state: WasmConsensusState = - serde_json::from_str(&fs::read_to_string("src/test/consensus_state.json").unwrap()) - .unwrap(); - - let prev_consensus_height = INITIAL_CONSENSUS_STATE_HEIGHT; - - save_client_state(deps.as_mut(), wasm_client_state); - save_consensus_state(deps.as_mut(), wasm_consensus_state, &prev_consensus_height); - - for update in UPDATES.iter() { - let mut env = mock_env(); - env.block.time = cosmwasm_std::Timestamp::from_seconds( - update - .signed_header - .header - .time - .seconds - .inner() - .try_into() - .unwrap(), - ); - CometblsLightClient::check_for_misbehaviour_on_header(deps.as_ref(), update.clone()) - .unwrap(); - CometblsLightClient::verify_header(deps.as_ref(), env.clone(), update.clone()).unwrap(); - CometblsLightClient::update_state(deps.as_mut(), env, update.clone()).unwrap(); - - let consensus_state: WasmConsensusState = read_consensus_state( - deps.as_ref(), - &Height { - revision_number: 1, - revision_height: update - .signed_header - .header - .height - .inner() - .try_into() - .unwrap(), - }, - ) - .unwrap() - .unwrap(); - assert_eq!( - consensus_state.data.timestamp, - TryInto::::try_into(update.signed_header.header.time.seconds.inner()).unwrap() - ); - assert_eq!( - consensus_state.data.next_validators_hash, - if TryInto::::try_into(update.signed_header.commit.height.inner()).unwrap() - == update.trusted_height.revision_height + 1 - { - let prev_consensus_state: WasmConsensusState = - read_consensus_state(deps.as_ref(), &prev_consensus_height) - .unwrap() - .unwrap(); - prev_consensus_state.data.next_validators_hash - } else { - update.signed_header.header.validators_hash.clone() - } - ); - assert_eq!( - consensus_state.data.root.hash, - update.signed_header.header.app_hash - ); - } - } + // TODO: avoid using the zkp verifier for this tests as we already test it + // separately in cometbls-groth16-verifier. Instead, mock the verifier and + // predetermine what the result will be. + + // #[test] + // fn verify_and_update_header_works_with_good_data() { + // let mut deps = mock_dependencies(); + + // let wasm_client_state: WasmClientState = + // serde_json::from_str(&fs::read_to_string("src/test/client_state.json").unwrap()) + // .unwrap(); + + // let wasm_consensus_state: WasmConsensusState = + // serde_json::from_str(&fs::read_to_string("src/test/consensus_state.json").unwrap()) + // .unwrap(); + + // let prev_consensus_height = INITIAL_CONSENSUS_STATE_HEIGHT; + + // save_client_state(deps.as_mut(), wasm_client_state); + // save_consensus_state(deps.as_mut(), wasm_consensus_state, &prev_consensus_height); + + // for update in UPDATES.iter() { + // let mut env = mock_env(); + // env.block.time = cosmwasm_std::Timestamp::from_seconds( + // update + // .signed_header + // .header + // .time + // .seconds + // .inner() + // .try_into() + // .unwrap(), + // ); + // CometblsLightClient::check_for_misbehaviour_on_header(deps.as_ref(), update.clone()) + // .unwrap(); + // CometblsLightClient::verify_header(deps.as_ref(), env.clone(), update.clone()).unwrap(); + // CometblsLightClient::update_state(deps.as_mut(), env, update.clone()).unwrap(); + + // let consensus_state: WasmConsensusState = read_consensus_state( + // deps.as_ref(), + // &Height { + // revision_number: 1, + // revision_height: update + // .signed_header + // .header + // .height + // .inner() + // .try_into() + // .unwrap(), + // }, + // ) + // .unwrap() + // .unwrap(); + // assert_eq!( + // consensus_state.data.timestamp, + // TryInto::::try_into(update.signed_header.header.time.seconds.inner()).unwrap() + // ); + // assert_eq!( + // consensus_state.data.next_validators_hash, + // if TryInto::::try_into(update.signed_header.commit.height.inner()).unwrap() + // == update.trusted_height.revision_height + 1 + // { + // let prev_consensus_state: WasmConsensusState = + // read_consensus_state(deps.as_ref(), &prev_consensus_height) + // .unwrap() + // .unwrap(); + // prev_consensus_state.data.next_validators_hash + // } else { + // update.signed_header.header.validators_hash.clone() + // } + // ); + // assert_eq!( + // consensus_state.data.app_hash.hash, + // update.signed_header.header.app_hash + // ); + // } + // } #[test] fn verify_header_fails_with_signed_header_height_from_past() { diff --git a/light-clients/cometbls-light-client/src/test/consensus_state.json b/light-clients/cometbls-light-client/src/test/consensus_state.json index 4e09151c45..1beb7f8b51 100644 --- a/light-clients/cometbls-light-client/src/test/consensus_state.json +++ b/light-clients/cometbls-light-client/src/test/consensus_state.json @@ -1,7 +1,7 @@ { "data": { "timestamp": 1705594454, - "root": { + "app_hash": { "hash": "0x4ce2e7250c1af16bafa21c0f1f8a3e1e9b34331d0c6bce84a0bb2ef9731297f0" }, "next_validators_hash": "0x0ff4a046d3592c39ed98fd94930049d10c17a09f729460687ba462ea56d8b6bb" diff --git a/prop.json b/prop.json new file mode 100644 index 0000000000..50ed846f45 --- /dev/null +++ b/prop.json @@ -0,0 +1,32 @@ +{ + "body": { + "messages": [ + { + "@type": "/cosmos.gov.v1.MsgSubmitProposal", + "messages": [ + { + "@type": "/ibc.lightclients.wasm.v1.MsgStoreCode", + "signer": "union10d07y265gmmuvt4z0w9aw880jnsr700js4jdcz", + "wasm_byte_code": "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AUUNDiABIAEoAtgBNgKMASABIAEpA9ABNwKEASABIAEoAswBNgKAAQwKCyAmpwRAIAFBgAFqQaaBwABBERChBAwKCyABQcgBaiABQZABahDEBCABKALIASIDQRVGDQwgASABKQPQATcDiAEgASABKALMATYChAEgASADNgKAAQwJCyAJRQRAIAFBgAFqQbeBwABBEhChBAwJCyABQcgBaiABQZABahDEBCABKALIASIDQRVGDQcgASABKQPQATcDiAEgASABKALMATYChAEgASADNgKAAQwICyABKAKYAQRAIAFBgAFqQcmBwABBBRChBAwICyABQcgBaiABQZABahDABCABQZgCaiIDIAxBCGooAgA2AgAgASAMKQIANwOQAiABKALIASIEQRVGDQUgAUGMAWogAUGYAmooAgA2AgAgASABKQOQAjcChAEgASAENgKAAQwHCyABKAKoAQRAIAFBgAFqQc6BwABBBBChBAwHCyABQcgBaiABQZABahBpIAFBmAJqIgMgDEEIaigCADYCACABIAwpAgA3A5ACIAEoAsgBIgRBFUYNAyABQYwBaiABQZgCaigCADYCACABIAEpA5ACNwKEASABIAQ2AoABDAYLIAEoArgBBEAgAUGAAWpB0oHAAEEFEKEEDAYLIAFByAFqIAFBkAFqEMAEIAFBmAJqIgMgDEEIaigCADYCACABIAwpAgA3A5ACIAEoAsgBIgRBFUYNASABQYwBaiABQZgCaigCADYCACABIAEpA5ACNwKEASABIAQ2AoABDAULAkAgJKcNACABQcgBakGjgMAAEJ8CIAEoAsgBRQRAIAFB2AFqKQMAISIgASkD0AEhIwwBCyABIAEoAswBNgKAASABIAFB2AFqKAIANgKMASABIAFB0AFqKQMANwKEAQwFCwJAAkACQCAmUARAIAFByAFqQaaBwABBERC7BCABKALIASIDQRVHDQEgASkD0AEhJQsgCQRAIAFByAFqQbeBwABBEhC7BCABKALIASIDQRVHDQIgASkD0AEhJwsgASgCmAEiBEEARyEDAkACQAJAAkAgBEUEQCABQcgBakHJgcAAQQUQuwQgASgCyAEiBEEVRw0CIAFB6AFqIAFB1AFqKAIANgIAIAEgASkCzAE3A+ABDAELIAFB6AFqIAFBoAFqKAIANgIAIAEgASkDmAE3A+ABCwJAAkACQCABKAKoASIERQRAIAFByAFqQc6BwABBBBCfBCABKALIASIFQRVHDQIgAUH4AWogAUHUAWooAgA2AgAgASABKQLMATcD8AEMAQsgAUH4AWogAUGwAWooAgA2AgAgASABKQOoATcD8AELIAEoArgBDQMgAUHIAWpB0oHAAEEFELsEIAEoAsgBIgVBFUcNASABQYgCaiABQdQBaigCADYCACABIAEpAswBNwOAAgwECyABQYwBaiABQdQBaigCADYCACABIAEpAswBNwKEASABIAU2AoABDAYLIAFBjAFqIAFB1AFqKAIANgIAIAEgASkCzAE3AoQBIAEgBTYCgAEgAUHwAWoQFQwFCyABQYwBaiABQdQBaigCADYCACABIAEpAswBNwKEASABIAQ2AoABDAoLIAFBiAJqIAFBwAFqKAIANgIAIAEgASkDuAE3A4ACCyABQYgBaiAiNwMAIAFBOGogAUHoAWooAgA2AgAgAUHQAGogAUGIAmooAgA2AgAgAUHEAGogAUH4AWooAgA2AgAgASABKQPgATcDMCABIAEpA4ACNwNIIAEgIzcDgAEgASABKQPwATcCPCABQegAaiIDICI3AwAgASAjNwNgIAFB3ABqIAFB/ABqKAIANgIAIAEgASkCdDcCVCABQRhqIAMpAwA3AwAgASABKQNgNwMQIAEgJzcDKCABICU3AyAgAUICNwMIIAFByAFqIAsQ6wQgASgCyAEiA0EVRgRAIAogAUEIakHYABDPBRoMEAsgCkEMaiABKQLMATcCACAKQRRqIAFB1AFqKAIANgIAIApCCDcDACAKIAM2AgggAUEIahAQDA8LIAEgASkD0AE3A4gBIAEgASgCzAE2AoQBIAEgAzYCgAEMBgsgASABKQPQATcDiAEgASABKALMATYChAEgASADNgKAAQwFCyABQeABahCRBSAERQwGCyABQbgBahAYIAFBwAFqIAMoAgA2AgAgASABKQOQAjcDuAEMCAsgAUGoAWoQGSABQbABaiADKAIANgIAIAEgASkDkAI3A6gBDAcLIAFBmAFqEBggAUGgAWogAygCADYCACABIAEpA5ACNwOYAQwGCyABKQPQASEnQQAhCQwFC0EAIQMLQQELIQQgASgCuAEEQCABQbgBahCRBQsgASgCqAFBAEcgBHEEQCABQagBahAVCyAD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ACABQYwBaiABQbgCaigCADYCACABIAQ2AoABDAULIAEoAugBBEAgAUGAAWpBzoHAAEEEEKEEDAULIAFB+AFqIAFB0AFqEGkgAUG4AmoiAyAMQQhqKAIANgIAIAEgDCkCADcDsAIgASgC+AEiBEEVRg0IIAFBhAFqIAEpA7ACNwIAIAFBjAFqIAFBuAJqKAIANgIAIAEgBDYCgAEMBAsgIlANAQwCCyABQYwBaiABQYQCaigAADYAACABQYQBaiADOgAAIAEgASkA/QE3AIUBIAEgBDYCgAEMAgsgAUH4AWpBo4DAABCfAiABKAL4AUUEQCABQYgCaikDACEkIAEpA4ACISYMAQsgAUGMAWogAUGIAmooAgA2AgAgAUGEAWogAUGAAmopAwA3AgAgASABKAL8ATYCgAEMAQsCQAJAICNQBEAgAUH4AWpBpoHAAEERELsEIAEoAvgBIgNBFUcNASABKQOAAiElCyAJBEAgAUH4AWpBt4HAAEESELsEIAEoAvgBIgNBFUcNAiABKQOAAiEnCyABKALYASIEQQBHIQMCQCAERQRAIAFB+AFqQcmBwABBBRC7BCABKAL4ASIEQRVGBEAgAUGYAmogAUGEAmooAgA2AgAgASABKQL8ATcDkAIMAgsgAUGEAWogASkC/AE3AgAgAUGMAWogAUGEAmooAgA2AgAgASAENgKAASABQgg3A3gMBQsgAUGYAmogAUHgAWooAgA2AgAgASABKQPYATcDkAILAkAgASgC6AFFBEAgAUH4AWpBzoHAAEEEEJ8EIAEoAvgBIgRBFUYEQCABQagCaiABQYQCaigCADYCACABIAEpAvwBNwOgAgwCCyABQYQBaiABKQL8ATcCACABQYwBaiABQYQCaigCADYCACABIAQ2AoABIAFCCDcDeCABQZACahCRBQwFCyABQagCaiABQfABaigCADYCACABIAEpA+gBNwOgAgsgAUGoAWogAUGYAmooAgA2AgAgAUG0AWogAUGoAmooAgA2AgAgASABKQOQAjcDoAEgASAnNwOYASABICU3A5ABIAEgJDcDiAEgASAmNwOAAUIDISIgAUIDNwN4IAEgASkDoAI3AqwBDAQLIAFBiAFqIAEpA4ACNwMAIAFBhAFqIAEoAvwBNgIAIAEgAzYCgAEMAQsgAUGIAWogASkDgAI3AwAgAUGEAWogASgC/AE2AgAgASADNgKAAQsgAUIINwN4QQAhAwsgASgC6AEEQCABQegBahAVCyADIAEoAtgBRXJFBEAgAUHYAWoQkQULIAEpA3giIkIIUQ0BCyABQfAAaiIDIAFBiAFqKQMANwMAIAEgASkDgAE3A2ggAUEoaiABQZABakHAABDPBRogAUEgaiADKQMANwMAIAEgIjcDECABIAEpA2g3AxggAUH4AGogCxDrBCABKAJ4IgNBFUYEQCAKIAFBEGpB2AAQzwUaDAoLIApBDGogASkCfDcCACAKQRRqIAFBhAFqKAIANgIAIApCCDcDACAKIAM2AgggAUEQahAQDAkLIAFB8ABqIAFBiAFqKQMAIiI3AwAgASABKQOAASIjNwNoIApBEGogIjcDACAKICM3AwggCkIINwMADAgLIAFB6AFqEBkgAUHwAWogAygCADYCACABIAEpA7ACNwPoAQwECyABQdgBahAYIAFB4AFqIAMoAgA2AgAgASABKQOwAjcD2AEMAwsgASkDgAIhJ0EAIQkMAgsgASkDgAIhJUIBISMMAQsgASkDiAIhJCABKQOAAiEmQgEhIgwACwALIApCCDcDACAKQQ42AggMAQsgCkIINwMAIApBBDYCCAsgAUHAAmokAAJAAkAgAikDaCIiQghSBEAgAkHIAWoiASACQfgAaikDADcDACACIAIpA3A3A8ABIAJBKGogAkGAAWpBwAAQzwUaIAJBIGogASkDADcDACACICI3AxAgAiACKQPAATcDGCACQQhqIAsQ6QQgAi0ACSEBIAItAAghAyACQQQ2AmggAkHAAWogA0EBcSABIAJB6ABqEGUgAigCwAEiAUEVRw0BIAItAMQBQf0ARgRAIAsgCygCCEEBajYCCCAHIAJBEGpB2AAQzwUaDAMLIAdCCDcDACAHQQs2AgggAkEQahBkDAILIAJByAFqIAJB+ABqKQMAIiI3AwAgAiACKQNwIiM3A8ABIAdBEGogIjcDACAHICM3AwggB0IINwMADAELIAcgAikAxQE3AA0gB0EUaiACQcwBaigAADYAACAHQQxqIAItAMQBOgAAIAcgATYCCCAHQgg3AwAgAkEQahBkCyACQdABaiQADAQLIwBB0AFrIgIkACACQegAaiEDIwBBkAJrIgEkACABIAsQ6QQgAS0AASEEIAEtAAAhBSABQQQ2AnACQAJAAkACQCAFQQFxBEAgAUHwAGoQFwJAAkAgBEH7AEYEQCALIAsoAghBAWo2AgggAUEBOgDMASABIAs2AsgBIAFBADYC0AEgAUGEAmohBAJAA0AgAUGAAmogAUHIAWoQZyABLQCEAiEFIAEoAoACIgpBFUcNBiAFRQ0BIAEoAtABDQcgAUGAAmogAUHIAWoQwAQgAUH4AWoiBSAEQQhqKAIANgIAIAEgBCkCADcD8AEgASgCgAIiCkEVRgRAIAFB0AFqEBggAUHYAWogBSgCADYCACABIAEpA/ABNwPQAQwBCwsgAUH8AGogASkD8AE3AgAgAUGEAWogAUH4AWooAgA2AgAgASAKNgJ4DAcLIAEoAtABBEAgAUHoAWogAUHYAWooAgA2AgAgASABKQPQATcD4AEMAwsgAUGAAmpB14HAAEEOELsEIAEoAoACIgRBFUYNASABQfwAaiABKQKEAjcCACABQYQBaiABQYwCaigCADYCACABIAQ2AngMBgsgA0IINwMAIANBDjYCCAwGCyABQegBaiABQYwCaigCADYCACABIAEpAoQCNwPgAQsgAUGAAWoiBCABQegBaigCADYCACABQRhqIAQpAwA3AwAgASABKQPgATcDECABQgQ3AwggAUHwAGogCxDrBCABKAJwIgRBFUYEQCADIAFBCGpB2AAQzwUaDAULIANBDGogASkCdDcCACADQRRqIAFB/ABqKAIANgIAIANCCDcDACADIAQ2AgggAUEIahAQDAQLIANCCDcDACADQQQ2AggMAwsgAUGEAWogAUGMAmooAAA2AAAgAUH8AGogBToAACABIAEpAIUCNwB9IAEgCjYCeAwBCyABQfgAakHXgcAAQQ4QoQQLIAEoAtABBEAgAUHQAWoQkQULIAFB6ABqIAFBgAFqKQMAIiI3AwAgASABKQN4IiM3A2AgA0EQaiAiNwMAIAMgIzcDCCADQgg3AwALIAFBkAJqJAACQAJAIAIpA2giIkIIUgRAIAJByAFqIgEgAkH4AGopAwA3AwAgAiACKQNwNwPAASACQShqIAJBgAFqQcAAEM8FGiACQSBqIAEpAwA3AwAgAiAiNwMQIAIgAikDwAE3AxggAkEIaiALEOkEIAItAAkhASACLQAIIQMgAkEENgJoIAJBwAFqIANBAXEgASACQegAahBlIAIoAsABIgFBFUcNASACLQDEAUH9AEYEQCALIAsoAghBAWo2AgggByACQRBqQdgAEM8FGgwDCyAHQgg3AwAgB0ELNgIIIAJBEGoQZAwCCyACQcgBaiACQfgAaikDACIiNwMAIAIgAikDcCIjNwPAASAHQRBqICI3AwAgByAjNwMIIAdCCDcDAAwBCyAHIAIpAMUBNwANIAdBFGogAkHMAWooAAA2AAAgB0EMaiACLQDEAToAACAHIAE2AgggB0IINwMAIAJBEGoQZAsgAkHQAWokAAwDCyMAQdABayICJAAgAkHoAGohAyMAQZACayIBJAAgASALEOkEIAEtAAEhBCABLQAAIQUgAUEENgJwAkACQAJAAkAgBUEBcQRAIAFB8ABqEBcCQAJAIARB+wBGBEAgCyALKAIIQQFqNgIIIAFBAToAzAEgASALNgLIASABQQA2AtABIAFBhAJqIQQCQANAIAFBgAJqIAFByAFqEGcgAS0AhAIhBSABKAKAAiIKQRVHDQYgBUUNASABKALQAQ0HIAFBgAJqIAFByAFqEMAEIAFB+AFqIgUgBEEIaigCADYCACABIAQpAgA3A/ABIAEoAoACIgpBFUYEQCABQdABahAYIAFB2AFqIAUoAgA2AgAgASABKQPwATcD0AEMAQsLIAFB/ABqIAEpA/ABNwIAIAFBhAFqIAFB+AFqKAIANgIAIAEgCjYCeAwHCyABKALQAQRAIAFB6AFqIAFB2AFqKAIANgIAIAEgASkD0AE3A+ABDAMLIAFBgAJqQdeBwABBDhC7BCABKAKAAiIEQRVGDQEgAUH8AGogASkChAI3AgAgAUGEAWogAUGMAmooAgA2AgAgASAENgJ4DAYLIANCCDcDACADQQ42AggMBgsgAUHoAWogAUGMAmooAgA2AgAgASABKQKEAjcD4AELIAFBgAFqIgQgAUHoAWooAgA2AgAgAUEYaiAEKQMANwMAIAEgASkD4AE3AxAgAUIFNwMIIAFB8ABqIAsQ6wQgASgCcCIEQRVGBEAgAyABQQhqQdgAEM8FGgwFCyADQQxqIAEpAnQ3AgAgA0EUaiABQfwAaigCADYCACADQgg3AwAgAyAENgIIIAFBCGoQEAwECyADQgg3AwAgA0EENgIIDAMLIAFBhAFqIAFBjAJqKAAANgAAIAFB/ABqIAU6AAAgASABKQCFAjcAfSABIAo2AngMAQsgAUH4AGpB14HAAEEOEKEECyABKALQAQRAIAFB0AFqEJEFCyABQegAaiABQYABaikDACIiNwMAIAEgASkDeCIjNwNgIANBEGogIjcDACADICM3AwggA0IINwMACyABQZACaiQAAkACQCACKQNoIiJCCFIEQCACQcgBaiIBIAJB+ABqKQMANwMAIAIgAikDcDcDwAEgAkEoaiACQYABakHAABDPBRogAkEgaiABKQMANwMAIAIgIjcDECACIAIpA8ABNwMYIAJBCGogCxDpBCACLQAJIQEgAi0ACCEDIAJBBDYCaCACQcABaiADQQFxIAEgAkHoAGoQZSACKALAASIBQRVHDQEgAi0AxAFB/QBGBEAgCyALKAIIQQFqNgIIIAcgAkEQakHYABDPBRoMAwsgB0IINwMAIAdBCzYCCCACQRBqEGQMAgsgAkHIAWogAkH4AGopAwAiIjcDACACIAIpA3AiIzcDwAEgB0EQaiAiNwMAIAcgIzcDCCAHQgg3AwAMAQsgByACKQDFATcADSAHQRRqIAJBzAFqKAAANgAAIAdBDGogAi0AxAE6AAAgByABNgIIIAdCCDcDACACQRBqEGQLIAJB0AFqJAAMAgsjAEHQAWsiCiQAIApB6ABqIQ8jAEGABGsiAyQAIANBCGogCxDpBCADLQAJIQEgAy0ACCECIANBBDYCqAMCQAJAAn8CQAJAIAJBAXEEQCADQagDahAXIAFB+wBGBEAgCyALKAIIQQFqNgIIIANBAToA1AEgAyALNgLQASADQgI3A9gBIANBADYCiAIgA0EANgKYAiADQQA2AqgCIANB8AFqIR0gA0HgAWohHyADQcADaiEeIANBsANqISAgA0GsA2ohFgNAIANBqANqIQIjAEEwayIBJAAgAUEIaiADQdABaiIEKAIAIgUQ6QQgAS0ACSEGIAEtAAghCSABQQI2AiAgAUEQaiAJQQFxIAYgAUEgahBlAkACfwJAIAEoAhAiBkEVRgRAIAEtABQiBkEsRwRAIAZB/QBHBEAgBC0ABA0DIAJBCTYCAAwFCyACQRU2AgAgAkEEOgAEDAQLIAQtAAQNASAFIAUoAghBAWo2AgggASAFEOkEIAEtAAEhBiABLQAAQQFxDAILIAIgASkAFTcABSACQQxqIAFBHGooAAA2AAAgAiABLQAUOgAEIAIg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AAsgAkEwaiQAIAEtAFQhAgJAAkACQAJAAkAgASgCUCIEQRVGBEACQAJAAkAgAg4DAAECAQsgASgCQARAIAFBKGpBlYHAAEEEEKEEDAULIAFB0ABqIAFBOGoQaiABKAJQQRVGDQcgAUEwaiABQdgAaikCADcDACABIAEpAlA3AygMBAsgAUHQAGogAUE4ahDCBCABKAJQIgJBFUYNByABQTRqIAFB3ABqKAIANgIAIAEgASkCVDcCLCABIAI2AigMAwsgASgCQEUNASABQTRqIAFByABqKAIANgIAIAEgASkDQDcCLAwDCyABQTRqIAFB3ABqKAAANgAAIAEgASkAVTcALSABIAI6ACwgASAENgIoDAELIAFBKGpBlYHAAEEEEJ8ECyABKAJABEAgAUFAaxCRBQsgASgCKCICQRVHDQELIAFBEGoiAiABQTRqKAIANgIAIAEgASkCLDcDCCABQdAAaiANEOsEIAEoAlAiBEEVRgRAIAYgASkDCDcCBCAGQRU2AgAgBkEMaiACKAIANgIADAYLIAYgASkCVDcCBCAGQQxqIAFB3ABqKAIANgIAIAYgBDYCACABQQhqEJEFDAULIAFBIGogAUE0aigCACIENgIAIAEgASkCLCIiNwMYIAZBDGogBDYCACAGICI3AgQgBiACNgIADAQLIAFBQGsQGCABQcgAaiAQQQhqKAIANgIAIAEgECkCADcDQAwACwALIAZBDjYCAAwBCyAGQQQ2AgALIAFB4ABqJAAMAQsgBiAMKQIENwIEIAZBDGogDEEMaigCADYCACAGIAE2AgALIAxBEGokACADQcACaiIBIBZBCGooAgA2AgAgAyAWKQIANwO4AiADKAKoAyICQRVGDQUgA0GEAWogAykDuAI3AgAgA0GMAWogA0HAAmooAgA2AgAgAyACNgKAAQwJCyADKAKYAgRAIANBgAFqQZCCwABBFBChBAwJCyADQagDaiADQdABahDABCADQcACaiIBIBZBCGooAgA2AgAgAyAWKQIANwO4AiADKAKoAyICQRVGDQMgA0GEAWogAykDuAI3AgAgA0GMAWogA0HAAmooAgA2AgAgAyACNgKAAQwICyADKAKoAgRAIANBgAFqQaSCwABBHRChBAwICyADQagDaiADQdABahDABCADQcACaiIBIBZBCGooAgA2AgAgAyAWKQIANwO4AiADKAKoAyICQRVGDQEgA0GEAWogAykDuAI3AgAgA0GMAWogA0HAAmooAgA2AgAgAyACNgKAAQwHCwJAIAMpA9gBQgJSIgFFBEAgA0GoA2oiAkEIakHlgcAAQRQQnwQgAkICNwMAIAMpA6gDIiJCAlIEQCADQfACaiADQbgDaikDACIjNwMAIANB2AJqIANByANqKQMANwMAIANB4AJqIANB0ANqKQMANwMAIANByAJqICM3AwAgAyADKQPAAzcD0AIgAyADKQOwAzcDwAIgAyAiNwO4AgwCCyADQYgBaiADQbgDaikDADcDACADIAMpA7ADNwOAAQwJCyADQbgCaiADQdgBakEwEM8FGgsCfwJAAkACQAJAAkACQAJAAkACQCADKAKIAiIERQRAIANBqANqQfmBwABBFxCfBCADKAKoAyICQRVHDQIgA0GAA2ogA0G0A2ooAgA2AgAgAyADKQKsAzcD+AIMAQsgA0GAA2ogA0GQAmooAgA2AgAgAyADKQOIAjcD+AILIAMoApgCIgINASADQagDakGQgsAAQRQQuwQgAygCqAMiBUEVRw0DIANBkANqIANBtANqKAIANgIAIAMgAykCrAM3A4gDDAILIANBhAFqIAMpAqwDNwIAIANBjAFqIANBtANqKAIANgIAIAMgAjYCgAFBAQwHCyADQZADaiADQaACaigCADYCACADIAMpA5gCNwOIAwsgAygCqAINAiADQagDakGkgsAAQR0QuwQgAygCqAMiBUEVRw0BIANBoANqIANBtANqKAIANgIAIAMgAykCrAM3A5gDDAMLIANBhAFqIAMpAqwDNwIAIANBjAFqIANBtANqKAIANgIAIAMgBTYCgAEMAwsgA0GEAWogAykCrAM3AgAgA0GMAWogA0G0A2ooAgA2AgAgAyAFNgKAASADQYgDahCRBQwCCyADQaADaiADQbACaigCADYCACADIAMpA6gCNwOYAwsgA0GoA2oiASADQbgCakEwEM8FGiADQeADaiADQYADaigCADYCACADQfgDaiADQaADaigCADYCACADQewDaiADQZADaigCADYCACADIAMpA/gCNwPYAyADIAMpA5gDNwPwAyADIAMpA4gDNwLkAyADQfgAaiABQdgAEM8FGiADKQN4IiJCCFENCyADQfAAaiIBIANBiAFqKQMANwMAIAMgAykDgAE3A2ggA0EoaiADQZABakHAABDPBRogA0EgaiABKQMANwMAIAMgIjcDECADIAMpA2g3AxggA0GoA2ogCxDrBCADKAKoAyIBQRVGBEAgDyADQRBqQdgAEM8FGgwNCyAPQQxqIAMpAqwDNwIAIA9BFGogA0G0A2ooAgA2AgAgD0IINwMAIA8gATYCCCADQRBqEBAMDAsgA0H4AmoQkQUgAkULIQIgA0G4AmoQFiAERQwICyADQagCahAYIANBsAJqIAEoAgA2AgAgAyADKQO4AjcDqAIMAgsgA0GYAmoQGCADQaACaiABKAIANgIAIAMgAykDuAI3A5gCDAELIAMoAogCBEAgA0GIAmoQkQULIANBkAJqIAEoAgA2AgAgAyADKQO4AjcDiAIMAAsACyAPQgg3AwAgD0EONgIIDAULIA9CCDcDACAPQQQ2AggMBAtBACEBC0EBIQJBAQshBCADKAKoAgRAIANBqAJqEJEFCyADKAKYAkEARyACcQRAIANBmAJqEJEFCyADKAKIAkEARyAEcQRAIANBiAJqEJEFCyABIAMpA9gBQgJRcg0AIANB2AFqEBYLIANB8ABqIANBiAFqKQMAIiI3AwAgAyADKQOAASIjNwNoIA9BEGogIjcDACAPICM3AwggD0IINwMACyADQYAEaiQAAkACQCAKKQNoIiJCCFIEQCAKQcgBaiIBIApB+ABqKQMANwMAIAogCikDcDcDwAEgCkEoaiAKQYABakHAABDPBRogCkEgaiABKQMANwMAIAogIjcDECAKIAopA8ABNwMYIApBCGogCxDpBCAKLQAJIQEgCi0ACCECIApBBDYCaCAKQcABaiACQQFxIAEgCkHoAGoQZSAKKALAASIBQRVHDQEgCi0AxAFB/QBGBEAgCyALKAIIQQFqNgIIIAcgCkEQakHYABDPBRoMAwsgB0IINwMAIAdBCzYCCCAKQRBqEGQMAgsgCkHIAWogCkH4AGopAwAiIjcDACAKIAopA3AiIzcDwAEgB0EQaiAiNwMAIAcgIzcDCCAHQgg3AwAMAQsgByAKKQDFATcADSAHQRRqIApBzAFqKAAANgAAIAdBDGogCi0AxAE6AAAgByABNgIIIAdCCDcDACAKQRBqEGQLIApB0AFqJAAMAQsjAEHQAWsiASQAIAFB6ABqIQMjAEGAAWsiAiQAIAJBCGogCxDpBCACLQAJIQQgAi0ACCEFIAJBBDYCEAJAAkACQCAFQQFxBEAgAkEQahAXIARB+wBHDQEgCyALKAIIQQFqNgIIIAJBAToAbCACIAs2AmggAkHwAGogAkHoAGoQZiACKAJwIgRBFUcNAiACQgc3AxAgAkEVNgIYIAJB8ABqIAsQ6wQgAigCcCIEQRVGBEAgAyACQRBqQdgAEM8FGgwECyADQQxqIAIpAnQ3AgAgA0EUaiACQfwAaigCADYCACADQgg3AwAgAyAENgIIIAJBEGoQEAwDCyADQgg3AwAgA0EENgIIDAILIANCCDcDACADQQ42AggMAQsgA0EMaiACKQJ0NwIAIANBFGogAkH8AGooAgA2AgAgA0IINwMAIAMgBDYCCAsgAkGAAWokAAJAAkAgASkDaCIiQghSBEAgAUHIAWoiAiABQfgAaikDADcDACABIAEpA3A3A8ABIAFBKGogAUGAAWpBwAAQzwUaIAFBIGogAikDADcDACABICI3AxAgASABKQPAATcDGCABQQhqIAsQ6QQgAS0ACSECIAEtAAghAyABQQQ2AmggAUHAAWogA0EBcSACIAFB6ABqEGUgASgCwAEiAkEVRw0BIAEtAMQBQf0ARgRAIAsgCygCCEEBajYCCCAHIAFBEGpB2AAQzwUaDAMLIAdCCDcDACAHQQs2AgggAUEQahBkDAILIAFByAFqIAFB+ABqKQMAIiI3AwAgASABKQNwIiM3A8ABIAdBEGogIjcDACAHICM3AwggB0IINwMADAELIAcgASkAxQE3AA0gB0EUaiABQcwBaigAADYAACAHQQxqIAEtAMQBOgAAIAcgAjYCCCAHQgg3AwAgAUEQahBkCyABQdABaiQACyARQRBqJAAMAQsgB0IINwMAIAdBBDYCCAsgFUEgaiQAAkAgDikDeCIiQghSBEAgDkHwAGoiASAOQYgBaikDADcDACAOIA4pA4ABNwNoIA5BKGogDkGQAWpBwAAQzwUaIA5BIGogASkDADcDACAOICI3AxAgDiAOKQNoNwMYIA5B+ABqIA5BBGoQ6AQgDigCeCIBQRVGBEAgACAOQRBqQdgAEM8FGgwCCyAAQQxqIA4pAnw3AgAgAEEUaiAOQYQBaigCADYCACAAQgg3AwAgACABNgIIIA5BEGoQEAwBCyAOQfAAaiAOQYgBaikDACIiNwMAIA4gDikDgAEiIzcDaCAAQRBqICI3AwAgACAjNwMIIABCCDcDAAsgDkHQAWokAAuIAQEBfgJAAkACQAJAAkACQEEEIAApAwBCAn0iAacgAUIGWhsOBQABAgMEBQsgAEEoahCRBSAAQTRqEBUgAEFAaxCRBQ8LIABBKGoQkQUgAEE0ahAVDwsgAEEIahCRBQ8LIABBCGoQkQUPCyAAEBYgAEEwahCRBSAAQTxqEJEFIABByABqEJEFCwsXACAAEJEFIABBDGoQkQUgAEEYahCRBQsVACAAKAIAQQFNBEAgAEEEahCRBQsLDgAgABCRBSAAQQxqEBQLDAAgABCdBCAAEJ4ECwsAIAAQiwEgABBXCxIAIABBGGoQkQUgAEEkahCRBQsVACAAKAIAQRRPBEAgAEEEahCRBQsLDwAgACgCAARAIAAQkQULCw4AIAAoAgAEQCAAEBULC/UBAgN/AX4jAEEgayICJAAgAiABEOkEIAItAAEhAyACLQAAIQQgAkEENgIEAkACQAJAIARBAXEEQCACQQRqEBcgA0EiRw0BIAEgASgCCEEBajYCCCACQQRqIAEQ7gQgAigCBCIBQRVHDQIgAkEQaigCACEBIAJBDGooAgAhAyACKAIIIgRFBEAgACADIAEQdgwECyACIAE2AhwgAiADNgIYIAIgBDYCFCAAIAQgARB2IAJBFGoQkQUMAwsgAEEENgIADAILIABBDjYCAAwBCyACKQIIIQUgACACKAIQNgIMIAAgBTcCBCAAIAE2AgALIAJBIGokAAv1AQIDfwF+IwBBIGsiAiQAIAIgARDpBCACLQABIQMgAi0AACEEIAJBBDYCBAJAAkACQCAEQQFxBEAgAkEEahAXIANBIkcNASABIAEoAghBAWo2AgggAkEEaiABEO4EIAIoAgQiAUEVRw0CIAJBEGooAgAhASACQQxqKAIAIQMgAigCCCIERQRAIAAgAyABEHUMBAsgAiABNgIcIAIgAzYCGCACIAQ2AhQgACAEIAEQdSACQRRqEJEFDAMLIABBBDYCAAwCCyAAQQ42AgAMAQsgAikCCCEFIAAgAigCEDYCDCAAIAU3AgQgACABNgIACyACQSBqJAALGQAgACgCACAAKAIIQcyCwABBABDHBUEBcwsUACAAKAIAIAAoAghBzILAABCEAwswACAAKAJoBEAgAEHoAGoQkQUgAEEIahAmIABBIGoQJiAAQThqECYgAEHQAGoQJgsLHgAgACgCAARAIAAQkQUgAEEMahCRBSAAQRhqECcLC2oBAn8jAEEgayIBJAAgACgCCEUEQCABQQhqIgJCATcDCCACQgA3AwAgAkEQakEANgIAIAAQJiAAQRBqIAFBGGopAwA3AwAgAEEIaiABQRBqKQMANwMAIAAgASkDCDcDAAsgAUEgaiQAIAALIgAgACgCKARAIABBEGoQkQUgAEEcahCRBSAAQShqEJEFCwtrACAAKAKYAQRAIABBIGoQkQUgAEEsahCRBSAAQThqEJEFIABBxABqEJEFIABB0ABqEJEFIABB3ABqEJEFIABB6ABqEJEFIABB9ABqEJEFIABBgAFqEJEFIABBjAFqEJEFIABBmAFqEJEFCwtWAQF/IwBB8AFrIgEkACAAKALgAUUEQCABQgQ3A+ABIAFBADYCKCABQegBakEANgIAIAFB0AFqQQA2AgAgABAqIAAgAUHwARDPBRoLIAFB8AFqJAAgAAtuAQJ/IwBBIGsiASQAIAAoAgBFBEAgAUEIaiICQoCAgIAQNwIIIAJCBDcCACACQRBqQgA3AgAgABApIABBEGogAUEYaikCADcCACAAQQhqIAFBEGopAgA3AgAgACABKQIINwIACyABQSBqJAAgAAsXACAAKAIABEAgABCRBSAAQQxqEJEFCwsSACAAKAIIBEAgAEEIahCRBQsLDAAgABCLASAAEM0DCxEAIAAoAgAEQCAAQQRqEB8LCxYAIAAoAgAEQCAAECcgAEEMahCRBQsLHgAgACgC4AEEQCAAECEgAEE4ahAiIABB4AFqECcLCzcAIAAoAqQEBEAgABAqIABB4ANqECkgAEGYBGoQJyAAQfABahAqIABBpARqECcgAEH4A2oQJQsLGwAgACkDAEICUgRAIABBGGoQKSAAQTBqECkLC1YBAX8gAUEMaigCACECAkAgAAJ/AkACQCABKAIEDgIAAQMLIAINAkEAIQJBzILAAAwBCyACDQEgASgCACIBKAIEIQIgASgCAAsgAhBHDwsgACABEJoFCzQAIAEoAggiASAAQQN0QQFyZ0Efc0EJbEHJAGpBBnZqIAFBAXJnQR9zQQlsQckAakEGdmoLXQIDfwF+IABBCGoiAxAdBEBBASADEC4hAQsgACkDACIEQgBSBH8gBEIBhHmnQT9zQQlsQckAakEGdkEBagVBAAsgAWoiACAAQQFyZ0Efc0EJbEHJAGpBBnZqQQFqC4kJAgp/Bn4jAEGwA2siAiQAIAJBKGogAUEoaikDADcDACACQTBqIAFBMGopAwA3AwAgAkE4aiABQThqKQMANwMAIAJByABqIAFByABqKQMANwMAIAJB0ABqIAFB0ABqKQMANwMAIAJB2ABqIAFB2ABqKQMANwMAIAIgASkDIDcDICACIAEpA0A3A0AgASkDYCEMIAEpA2ghDSACQRhqIAFBGGopAwA3AwAgAkEQaiABQRBqKQMANwMAIAJBCGogAUEIaikDADcDACACIAEpAwA3AwAgAkGQA2ogAUGgA2ooAgA2AgAgAkGIA2ogAUGYA2opAwA3AwAgAkGIAWogAUGYAWopAwA3AwAgAkGQAWogAUGgAWopAwA3AwAgAkGYAWogAUGoAWopAwA3AwAgAkGoAWogAUG4AWopAwA3AwAgAkGwAWogAUHAAWopAwA3AwAgAkG4AWogAUHIAWopAwA3AwAgAiABQZADaikDADcDgAMgAiABQZABaikDADcDgAEgAiABQbABaikDADcDoAEgAkGUA2ogAUGkA2oQlQUgAkHYAWogAUHoAWopAwA3AwAgAkHQAWogAUHgAWopAwA3AwAgAkHIAWogAUHYAWopAwA3AwAgAiABQdABaikDADcDwAEgAUGIA2opAwAhDiABQfACaikDACEPIAFB+AJqKQMAIRAgAUGAA2opAwAhESACQaADaiABQbADahCVBSACQfgBaiABQYgCaikDADcDACACQfABaiABQYACaikDADcDACACQegBaiABQfgBaikDADcDACACQYgCaiABQZgCaikDADcDACACQZACaiABQaACaikDADcDACACQZgCaiABQagCaikDADcDACACQagCaiABQbgCaikDADcDACACQbACaiABQcACaikDADcDACACQbgCaiABQcgCaikDADcDACACIAFB8AFqKQMANwPgASACIAFBkAJqKQMANwOAAiACIAFBsAJqKQMANwOgAiACQdgCaiABQegCaikDADcDACACQdACaiABQeACaikDADcDACACQcgCaiABQdgCaikDADcDACACQfgAaiABQYgBaikDADcDACACQfAAaiABQYAB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AgA2AgAgCiAKKQLEATcDMEECDAELIApBQGsgCkHQAWopAgA3AwAgCkE4aiAKQcgBaikCADcDACAKIAopAsABNwMwQQYLIRUgCkHoAWoQmgIgAUEFRw0BCyAKQQhqIApBMGpBJBDPBRoMAQsgCkH4AWogCkFAaykDADcDACAKQfABaiAKQThqKQMANwMAIAogCikDMDcD6AEgCkHAAWohByMAQbABayIBJAAgAUEBOwFMIAEgETYCSCABQQA2AkQgAUKBgICA8AU3AjwgASARNgI4IAFBADYCNCABIBE2AjAgASAXNgIsIAFBLzYCKCABQSBqIAFBKGoQigIgAUGIAWogASgCICABKAIkQe/iwABBCxDlAgJAAkACQAJAAkACQCABKAKIASIJQQVGBEAgAUEYaiABQShqEIoCIAFBiAFqIAEoAhggASgCHEH64sAAQQUQ5QIgASgCiAEiCUEFRw0CIAFBEGogAUEoahCKAiABQYgBaiABKAIQIAEoAhQQ5gIgASgCiAEiCUEFRw0DIAFB2ABqIAFBlAFqIgkoAgA2AgAgASABKQKMATcDUCABQQhqIAFBKGoQigIgAUGIAWogASgCCCABKAIMQf/iwABBCBDlAiABKAKIASILQQVHDQQgASABQShqEIoCIAFBiAFqIAEoAgAgASgCBBDoAiABKAKIASIJQQVHDQEgAUHoAGoiCSABQZQBaigCADYCACABIAEpAowBNwNgIAFBiAFqIgsgAUEoakEoEM8FGiABQfAAaiALEOkCIAEoAnAiC0EFRgRAIAFBkAFqIgsgAUHYAGooAgA2AgAgAUGcAWogCSgCADYCACAHIAEpA1A3AgQgB0EANgIAIAEgASkDYDcClAEgB0EMaiALKQMANwIAIAdBFGogAUGYAWopAwA3AgAMBwsgB0EIaiABKQJ0NwIAIAdBGGogAUGEAWooAgA2AgAgB0EQaiABQfwAaikCADcCACAHQQE2AgAgByALNgIEIAFB4ABqEJEFDAULIAdBCGogASkCjAE3AgAgB0EYaiABQZwBaigCADYCACAHQRBqIAFBlAFqKQIANwIAIAdBATYCACAHIAk2AgQMBQsgAUH4AGogAUGUAWooAgAiCzYCACABIAEpAowBIgI3A3AgASkCmAEhAyAHQRBqIAs2AgAgB0EIaiACNwIAIAdBFGogAzcCACAHIAk2AgQgB0EBNgIADAMLIAdBCGogASkCjAE3AgAgB0EYaiABQZwBaigCADYCACAHQRBqIAFBlAFqKQIANwIAIAdBATYCACAHIAk2AgQMAwsgAUH4AGogAUGUAWooAgAiCzYCACABIAEpAowBIgI3A3AgASkCmAEhAyAHQRBqIAs2AgAgB0EIaiACNwIAIAdBFGogAzcCACAHIAk2AgQgB0EBNgIADAILIAdBCGogASkCjAE3AgAgB0EYaiABQZwBaigCADYCACAHQRBqIAkpAgA3AgAgB0EBNgIAIAcgCzYCBAsgAUHQAGoQkQULIAFBsAFqJAAgCkEQaiIBIApBzAFqKQIANwMAIApBGGoiByAKQdQBaikCADcDACAKIAopAsQBNwMIIAooAsABIApB6AFqEJoCDQFBAyEVCyAKQYABaiAKQQhqQSQQzwUaDAELIApB6ABqIAcpAwA3AwAgCkHgAGogASkDADcDACAKIAopAwg3A1ggCkHAAWohByMAQcABayIBJAAgAUEBOwFcIAEgETYCWCABQQA2AlQgAUKBgICA8AU3AkwgASARNgJIIAFBADYCRCABIBE2AkAgASAXNgI8IAFBLzYCOCABQTBqIAFBOGoQigIgAUGYAWogASgCMCABKAI0QYfjwABBCxDlAgJAAkACQAJAAkACQAJAAkACQCABKAKYASIJQQVGBEAgAUEoaiABQThqEIoCIAFBmAFqIAEoAiggASgCLEH64sAAQQUQ5QIgASgCmAEiCUEFRw0CIAFBIGogAUE4ahCKAiABQZgBaiABKAIgIAEoAiQQ5gIgASgCmAEiCUEFRw0DIAFB6ABqIAFBpAFqIgkoAgA2AgAgASABKQKcATcDYCABQRhqIAFBOGoQigIgAUGYAWogASgCGCABKAIcQf/iwABBCBDlAiABKAKYASILQQVHDQQgAUEQaiABQThqEIoCIAFBmAFqIAEoAhAgASgCFBDoAiABKAKYASIJQQVHDQUgAUH4AGogAUGkAWoiCSgCADYCACABIAEpApwBNwNwIAFBCGogAUE4ahCKAiABQZgBaiABKAIIIAEoAgxBkuPAAEEJEOUCIAEoApgBIgtBBUcNASABIAFBOGoQigIgAUGYAWogASgCACABKAIEEOcCIAEoApgBIglBBUcNBiABKQOgASECIAFBmAFqIgkgAUE4akEoEM8FGiABQYABaiAJEOkCIAEoAoABIglBBUYEQCAHIAI3AwggB0EANgIAIAdBEGogASkDYDcDACAHQRxqIAEpA3A3AgAgB0EYaiABQegAaigCADYCACAHQSRqIAFB+ABqKAIANgIADAoLIAdBCGogASkChAE3AgAgB0EYaiABQZQBaigCADYCACAHQRBqIAFBjAFqKQIANwIAIAcgCTYCBAwHCyAHQQhqIAEpApwBNwIAIAdBGGogAUGsAWooAgA2AgAgB0EQaiABQaQBaikCADcCACAHQQE2AgAgByAJNgIEDAgLIAdBCGogASkCnAE3AgAgB0EYaiABQawBaigCADYCACAHQRBqIAkpAgA3AgAgByALNgIEDAULIAdBCGogASkCnAE3AgAgB0EYaiABQawBaigCADYCACAHQRBqIAFBpAFqKQIANwIAIAdBATYCACAHIAk2AgQMBgsgAUGIAWogAUGkAWooAgAiCzYCACABIAEpApwBIgI3A4ABIAEpAqgBIQMgB0EQaiALNgIAIAdBCGogAjcCACAHQRRqIAM3AgAgByAJNgIEIAdBATYCAAwFCyAHQQhqIAEpApwBNwIAIAdBGGogAUGsAWooAgA2AgAgB0EQaiAJKQIANwIAIAdBATYCACAHIAs2AgQMAwsgAUGIAWogAUGkAWooAgAiCzYCACABIAEpApwBIgI3A4ABIAEpAqgBIQMgB0EQaiALNgIAIAdBCGogAjcCACAHQRRqIAM3AgAgByAJNgIEIAdBATYCAAwCCyABKAKcASELIAEpA6ABIQIgB0EUaiABKQOoATcCACAHQQxqIAI3AgAgB0EIaiALNgIAIAcgCTYCBAsgB0EBNgIAIAFB8ABqEJEFCyABQeAAahCRBQsgAUHAAWokAAJ/IAooAsABIgFFBEAgCkGEAmogCkHgAWopAwA3AgAgCkH8AWogCkHYAWopAwA3AgAgCkH0AWogCkHQAWopAwA3AgAgCiAKKQPIATcC7AEgCkGAAWogCkHoAWpBJBDPBRpBBAwBCyAKQZABaiAKQdQBaikCADcDACAKQYgBaiAKQcwBaikCADcDACAKIAopAsQBNwOAAUEGCyEVIApB2ABqEJoCIAENAQsgFCAVNgIAIBRBBGogCkGAAWpBJBDPBRoMAQsgCkHoAGogCkGQAWopAwA3AwAg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ICAGQRBqKQAAISEgBikAACEiIAFBkAFqIAZBGGopAAA3AwAgAUGIAWogITcDACABQYABaiAgNwMAIAsgASkDKDcAACALQQhqIBMpAwA3AAAgC0EQaiARKQMANwAAIAtBGGogEikDADcAACABICI3A3gMBAsgAUEoaiAEEN0EIQYMBAtBACEGDAMLAAsgBkEYaikAACEgIAZBEGopAAAhISAGQQhqKQAAISIgBikAACEjIAFBgAFqIBMpAwA3AwAgAUGIAWogESkDADcDACABQZABaiASKQMANwMAIAsgIzcAACALQQhqICI3AAAgC0EQaiAhNwAAIAtBGGogIDcAACABIAEpAyg3A3gLIAFBzABqIhcgAUH4AGoQYyAKQQFqIQogBkEgaiEGIAFB4AFqIhogFxD3ASABQShqIBoQlQMMAQsLIAFB+AFqIAhBGGopAAA3AwAgAUHwAWogCEEQaikAADcDACABQegBaiAIQQhqKQAANwMAIAFBiAJqIARBCGopAAA3AwAgAUGQAmogBEEQaikAADcDACABQZgCaiAEQRhqKQAANwMAIAEgCCkAADcD4AEgASAEKQAANwOAAiABQYABaiABQeABakHAABDPBRogAUHIAWpBBjYCACABQcABaiAeNwMAIAFBzAFqIAEpAhw3AgAgAUHUAWogAUEkaigCADYCACABQQA6AHggByAGIAFB+ABqEPgBIAFBoAJqJAAgBy0AACIBQRBHDQUgDEEEaiESIA8oAvAJRQ0HIA9B8AlqIQggEEUNBiAcIB9SDQZBACEBIAgoAgAhCyASKAIAIQYgCCgCCCIKIBIoAghGBH8CfwNAIAogASAKRg0BGiABQQFqIQEgCyAGEIoBIAZBMGohBiALQTBqIQsNAAsgAUEBawsgCk8FQQALBEAgD0H8CWogDEEQahCKAQ0HCyAHIAxBEGpBMBDPBSIBQTBqIA9B/AlqQTAQzwUaIA1BAWogAUHnABDPBRogDUEJOgAADAwLIA0gFRDBATYCCCANQQE2AgQgDUEKOgAADAsLIA1BAWogB0EBckHnABDPBRogDSABOgAADAoLIA1BBjoAAAwJCyANIBw3AxAgDSAdNwMIIA1BBzoAAAwICyANQQFqIAdBAXJB5wAQzwUaIA0gBjoAAAwHCyANQQFqIAdBAXJB5wAQzwUaIA0gAToAAAwGCyAHQbQCaiEKIwBB8BBrIgEkACABQRhqIhNBAhDEAyABQdgIaiELIAgoAgAhDCAIKAIIIwBB8BBrIgYkACAGQRhqQYAEEMQDQTBsIRECQANAAkAgEUUEQCAGQdgIaiIMIAZBGGpBmAgQzwUaIAZBtAhqIAwQyQMgBi0AtAgNAQwDCyAGQdgIaiIUIAwQiwMgBkEQaiAGQRhqIBRBIBDFAyAGKAIQDQAgEUEwayERIAxBMGohDAwBCwsACyALIAYpALUINwAAIAtBGGogBkHNCGopAAA3AAAgC0EQaiAGQcUIaikAADcAACALQQhqIAZBvQhqKQAANwAAIAZB8BBqJAAgAUEQaiATIAtBIBDFAwJAAkAgASgCEA0AIAFB2AhqIgYgCEEMahCLAyABQQhqIAFBGGogBkEgEMUDIAEoAggNACABQdgIaiIGIAFBGGpBmAgQzwUaIAFBtAhqIAYQyQMgAS0AtAgNACAKIAEpALUINwAAIApBGGogAUHNCGopAAA3AAAgCkEQaiABQcUIaikAADcAACAKQQhqIAFBvQhqKQAANwAAIAFB8BBqJAAMAQsACwJAIA8tAKwKRQRAIAdBAEGgARDRBRoMAQsgByAPQa0KakGgARDPBRoLIAdBoAFqIgZCNxCFAyEeQQAhCiMAQaACayIBJAAgAUEcaiAHIAYQggEgAUFAayIMIAdBtAJqIgtBGGopAAA3AwAgAUE4aiIRIAtBEGopAAA3AwAgAUEwaiITIAtBCGopAAA3AwAgASALKQAANwMoQQUgASgCJCIGIAZBBU8bIRcgAUGYAWohCCABKAIcIQYDQAJAAkACQAJAAkAgCiAXRwRAIAFBCGogChD2ASABKAIIQQFHDQEgASkDECIfUA0CIB4gH4BCAYNQDQMgBkEIaikAACEfIAZBEGopAAAhICAGKQAAISEgAUGQAWogBkEYaikAADcDACABQYgBaiAgNwMAIAFBgAFqIB83AwAgCCABKQMoNwAAIAhBCGogEykDADcAACAIQRBqIBEpAwA3AAAgCEEYaiAMKQMANwAAIAEgITcDeAwECyABQShqIAQQ3QQhBgwEC0EAIQYMAwsACyAGQRhqKQAAIR8gBkEQaikAACEgIAZBCGopAAAhISAGKQAAISIgAUGAAWogEykDADcDACABQYgBaiARKQMANwMAIAFBkAFqIAwpAwA3AwAgCCAiNwAAIAhBCGogITcAACAIQRBqICA3AAAgCEEYaiAfNwAAIAEgASkDKDcDeAsgAUHMAGoiGiABQfgAahBjIApBAWohCiAGQSBqIQYgAUHgAWoiGyAaEPcBIAFBKGogGxCVAwwBCwsgAUH4AWogC0EYaikAADcDACABQfABaiALQRBqKQAANwMAIAFB6AFqIAtBCGopAAA3AwAgAUGIAmogBEEIaikAADcDACABQZACaiAEQRBqKQAANwMAIAFBmAJqIARBGGopAAA3AwAgASALKQAANwPgASABIAQpAAA3A4ACIAFBgAFqIAFB4AFqQcAAEM8FGiABQcgBakEFNgIAIAFBwAFqIB43AwAgAUHMAWogASkCHDcCACABQdQBaiABQSRqKAIANgIAIAFBADoAeCAGIAFB+ABqEPgBIAFBoAJqJAAgBy0AoAEiAUEQRw0BCyAcIB1RDQIgB0EEOgAAIAdBoAFqIBJBACAQGyAHEMsBIActAKABIgFBEEcNAQwDCyANQQFqIAdBoAFqQQFyQecAEM8FGiANIAE6AAAMAwsgDSAHLwChATsAASANQQNqIActAKMBOgAAIAcoAqQBIQYgDUEIaiAHQagBakHgABDPBRogDSAGNgIEIA0gAToAAAwCCyAHQQM6AAAgB0GgAWpBACASIBAbIAcQywEgBy0AoAEiAUEQRg0AIA0gBy8AoQE7AAEgDUEDaiAHLQCjAToAACAHKAKkASEGIA1BCGogB0GoAWpB4AAQzwUaIA0gBjYCBCANIAE6AAAMAQsgB0EMaiAHKAKkASIBKAIAIgYgASgCCEEwbGo2AgAgB0EANgIYIAdCADcDECAHIAY2AgggB0EANgIEIAcgFTYCACAHQYgCaiELIwBBQGoiBiQAAkAgBxCAASIIRQRAIAtBADYCCCALQgQ3AgAMAQsgBkEIaiEEIwBBEGsiASQAIAFBCGpBBEEQEE8CQCABKAIIIgoEQCAEQQQ2AgQgBCAKNgIAIAFBEGokAAwBCwALIAYoAgwhASAGKAIIIgQgCDYCACAGQRxqIhFBATYCACAGIAE2AhggBiAENgIUIAZBOGogB0EYaigCADYCACAGQTBqIAdBEGopAgA3AwAgBkEoaiAHQQhqKQIANwMAIAYgBykCADcDICAGQRRqIQEgBkEgaiEVA0AgFRCAASITBEAgASgCCCIMIAEoAgRGBEAgASgCCCIQIAEoAgRGBEAjAEEQayIKJAAgCkEIaiESIwBBIGsiBCQAAn9BACAQIBBBAWoiCEsNABpBBCABKAIEIhBBAXQiFCAIIAggFEkbIgggCEEETRsiCEECdCEUIAhBgICAgAJJQQJ0IRcCQCAQRQRAIARBADYCGAwBCyAEQQQ2AhggBCAQQQJ0NgIcIAQgASgCADYCFAsgBEEIaiAXIBQgBEEUahCQBSAEKAIIRQRAIAQoAgwhECABIAg2AgQgASAQNgIAQYGAgIB4DAELIARBEGooAgAhCCAEKAIMCyEQIBIgCDYCBCASIBA2AgAgBEEgaiQAIAooAgwaAkACQCAKKAIIIgRBgYCAgHhHBEAgBEUNAQALDAELAAsgCkEQaiQACwsgASgCACAMQQJ0aiATNgIAIAEgDEEBajYCCAwBCwsgC0EIaiARKAIANgIAIAsgBikCFDcCAAsgBkFAayQAAn8CQAJAQgEgDykD6AkiHCAcQgFYG0IBfUIFiCIcIAUpAzBUBEAgBSkDICAcWA0BIAUpAxAgHFgNAiAFQcgAaiAcIAUpAwBUDQMaIAVBCGoMAwsgBUE4agwCCyAFQShqDAELIAVBGGoLKAAAIQEgB0EBOgCgASAHIAE2AKEBIAdBGWogDkEYaikAADcAACAHQRFqIA5BEGopAAA3AAAgB0EJaiAOQQhqKQAANwAAIAdBAToAACAHIA4pAAA3AAEgB0GUAmohBSAYQagBaigCACEIIwBB8ABrIgEkACABQQc2AgwgB0GgAWoiEigAASEKIBItAAAhDAJAIActAABFBEAgAUEoakIANwMAIAFBIGpCADcDACABQRhqQgA3AwAgAUIANwMQDAELIAFBKGogB0EZaikAADcDACABQSBqIAdBEWopAAA3AwAgAUEYaiAHQQlqKQAANwMAIAEgBykAATcDEAsjAEEwayIEJAAgBEEQaiABQRBqIgZBCGopAAA3AwAgBEEYaiAGQRBqKQAANwMAIARBIGogBkEYaikAADcDACAEIAogCCAMGzYCKCAEIAYpAAA3AwggAUEwaiEIIwBB8BBrIgYkACAGQRhqIg5BAhDEAyMAQRBrIgokACAKQQRqIgwgBEEIaiIQQSBqKAAAENcCIAZB2AhqIhEgDBDkAiAMEJEFIApBEGokACAGQRBqIA4gEUEgEMUDAkACQCAGKAIQDQAgBkHYCGoiCiAQENkCIAZBCGogBkEYaiAKQSAQxQMgBigCCA0AIAZB2AhqIgogBkEYakGYCBDPBRogBkG0CGogChDJAyAGLQC0CA0AIAggBikAtQg3AAAgCEEYaiAGQc0IaikAADcAACAIQRBqIAZBxQhqKQAANwAAIAhBCGogBkG9CGopAAA3AAAgBkHwEGokAAwBCwALIARBMGokACABQegAaiIGQgA3AwAgAUHgAGoiBEIANwMAIAFB2ABqIgpCADcDACABQgA3A1AgAUHQAGoiDEEEIAFBDGpBBBDJBSAMQQRyQRwgCEEcEMkFIAVBGGoiCCAGKQMANwAAIAVBEGoiDCAEKQMANwAAIAVBCGoiDiAKKQMANwAAIAUgASkDUDcAACABQfAAaiQAIAdBtAJqIQQjAEFAaiIGJAAgBiAPEI0DIAZBOGogCCkAADcAACAGQTBqIAwpAAA3AAAgBkEoaiAOKQAANwAAIAYgBSkAADcAICMAQfAQayIBJAAgAUEYaiIFQQIQxAMgAUHYCGoiCCAGENkCIAFBEGogBSAIQSAQxQMCQAJAIAEoAhANACABQdgIaiIFIAZBIGoQ2QIgAUEIaiABQRhqIAVBIBDFAyABKAIIDQAgAUHYCGoiBSABQRhqQZgIEM8FGiABQbQIaiAFEMkDIAEtALQIDQAgBCABKQC1CDcAACAEQRhqIAFBzQhqKQAANwAAIARBEGogAUHFCGopAAA3AAAgBEEIaiABQb0IaikAADcAACABQfAQaiQADAELAAsgBkFAayQAIAdB1AJqIhUgBEEgEEcgEiAPQeAIakHgABDPBRojAEGAA2siCCQAIAsoAgghBiALKAIEIQQgCCALKAIAIgE2ApgCIAggBDYClAIgCCABNgKQAiAIIAEgBkECdGo2ApwCIwBBIGsiBiQAIAZBCGogCEGQAmoiASgCDCABKAIIa0ECdhBRIAZBHGoiEEEANgIAIAYgBikDCDcCFCMAQRBrIgUkACAGQRRqIgQgASgCDCABKAIIa0ECdhCGASAEKAIIIQsgBSAEKAIANgIMIAUgCzYCCCAFIARBCGo2AgQjAEEQayIEJAAgBEEIaiABQQhqKQIAIhw3AwAgBCABKQIANwMAIAVBBGoiDCgCCCAMKAIEIgpBMGxqIQ4gHKchCyAMKAIAIAQoAgwhDANAIAsgDEcEQCAOIAsoAgBBMBDPBUEwaiEOIApBAWohCiALQQRqIQsMAQsLIAo2AgAgBCAMNgIIIwBBEGsiCyQAIAsgBDYCDCMAQRBrIgokACAKIAtBDGooAgApAgA3AgggCkEIaiIMKAIEIg4EQCAMKAIAQQQgDkECdBBNCyAKQRBqJAAgC0EQaiQAIARBEGokACAFQRBqJAAgCEEMaiIEQQhqIBAoAgA2AgAgBCAGKQIUNwIAIAZBIGokACABIAQQiQEgCCgClAIhBCAIIAgoApACIgYgCCgCmAJBMGxqNgKcAiAIIAY2ApgCIAggBDYClAIgCCAGNgKQAiAIQYwBaiIGIAEQgQEgCEGoAWoiBCAVEJUFQeAAENECIBJB4AAQzwUhBSABQeAANgIIIAFB4AA2AgQgASAFNgIAIAhBGGohEyMAQeABayILJAAgC0HYAGoiGCAGQQhqKAIANgIAIAtB5ABqIARBCGooAgA2AgAgC0HwAGogAUEIaigCADYCACALIAYpAgA3A1AgCyAEKQIANwJcIAsgASkCADcDaCALQQxqIAtB0ABqQSQQzwUaIAtBATYCCCALQTBqIQEgFkEQaiEGIwBB0AFrIgUkACAFQcgAaiALQQhqEEQCQAJAAkACQAJAIAUoAkhBDUYEQCAFQTRqIAVB1ABqKAIANgIAIAUgBSkCTDcCLAwBCyAFQZgBaiAFQeAAaikDADcDACAFQZABaiAFQdgAaikDADcDACAFQYgBaiAFQdAAaikDADcDACAFIAUpA0g3A4ABIAVBvAFqQgE3AgAgBUEBNgK0ASAFQYDJwAA2ArABIAVBywA2AswBIAUgBUHIAWo2ArgBIAUgBUGAAWoiDDYCyAEgBUGkAWoiBCAFQbABahCNAiAFQShqIgpBAjYCACAKIAQpAgA3AgQgCkEMaiAEQQhqKAIANgIAIAwQ7gEgBSgCKCIEQQ1HDQELIAVBEGogBUE0aiIEKAIAIgo2AgAgBSAFKQIsIhw3AwggBUHIAGogBigCACAcpyAKIAYoAgQoAgwRBQAgBSgCSEEGRw0BIAVB0ABqIQYgBSgCTEUEQCAFQYgBaiAGQQhqKAIANgIAIAUgBikCADcDgAEgASEGIwBBEGsiESQAIBFBCGoiASAFQYABaiIUIgQoAgg2AgQgASAEKAIANgIAIBEoAgghASARKAIMIQQjAEEgayIKJAAjAEEgayIMJAAgDEEANgIMIAwgBDYCCCAMIAE2AgQgDEEQaiEQIwBBIGsiDiQAIA5BCGogDEEEaiIEEOkEIA4tAAkhFiAOLQAIIRdBBCEBIA5BBDYCEAJAIBdBAXFFDQAgDkEQahAXIBZB5gBHBEBBDiEBIBZB9ABHDQEgBCAEKAIIQQFqNgIIIA5BEGogBEHBgsAAQQMQ7ARBFSEBIA4oAhAiBEEVRgRAIBBBAToABAwCCyAQIA4pAhQ3AgQgEEEMaiAOQRxqKAIANgIAIAQhAQwBCyAEIAQoAghBAWo2AgggDkEQaiAEQcSCwABBBBDsBEEVIQEgDigCECIEQRVHBEAgECAOKQIUNwIEIBBBDGogDkEcaigCADYCACAEIQEMAQsgEEEAOgAECyAQIAE2AgAgDkEgaiQAAkAgDCgCECIBQRVGBEAgDC0AFCEBIAxBEGogDEEEahDoBCAMKAIQIgRBFUYEQCAKQRU2AgAgCiABOgAEDAILIAogDCkCFDcCBCAKQQxqIAxBHGooAgA2AgAgCiAENgIADAELIAogDCkAFTcABSAKQQxqIAxBHGooAAA2AAAgCiAMLQAUOgAEIAogATYCAAsgDEEgaiQAAkAgCigCAEEVRgRAIAYgCi0ABDoABCAGQQ02AgAMAQsgCkEYaiAKQQhqKQIANwMAIAogCikCADcDECAGQZegwABBBCAKQRBqEKsECyAKQSBqJAAgEUEQaiQAIBQQkQUMAwsgBUEwaiAGQQhqKAIANgIAIAUgBikCADcDKCAFQYwBakIBNwIAIAVBATYChAEgBUG8yMAANgKAASAFQcwANgK0ASAFIAVBsAFqNgKIASAFIAVBKGoiBDYCsAEgBUH0AGoiBiAFQYABahCNAiABQQI2AgAgASAGKQIANwIEIAFBDGogBkEIaigCADYCACAEEJEFDAILIAEgBSkDODcDECAFQSBqIAVBNGooAgAiBjYCACABQRhqIAVBQGspAwA3AwAgBSAFKQIsIhw3AxggAUEMaiAGNgIAIAEgHDcCBCABIAQ2AgAMAgsgBUGYAWogBUHgAGopAwA3AwAgBUGQAWogBUHYAGopAwA3AwAgBUGIAWogBUHQAGopAwA3AwAgBSAFKQNINwOAASAEQgE3AgAgBUEBNgIsIAVB3MjAADYCKCAFQc0ANgK0ASAFIAVBsAFqNgIwIAUgBUGAAWoiBDYCsAEgBUHoAGoiBiAFQShqEI0CIAFBAjYCACABIAYpAgA3AgQgAUEMaiAGQQhqKAIANgIAIAQQjwILIAVBCGoQkQULIAVB0AFqJAACQCALKAIwQQ1GBEAgEyALLQA0OgABIBNBGToAAAwBCyALQdgBaiALQcgAaikDADcDACALQdABaiALQUBrKQMANwMAIAtByAFqIAtBOGopAwA3AwAgCyALKQMwNwPAASAYIAtBwAFqIgEQ6wEgC0ESOgBQIAtBADYCVCABEO4BIBMgC0HQAGpB8AAQzwUaCyALQQhqEO0BIAtB4AFqJAACQCAILQAYQRlGBEAgByAILQAZBH9BEAUgCEEsakE2NgIAIAhBJGpBNzYCACAIIBI2AiggCCAVNgIgIAhBODYCHCAIIAhBDGo2AhggCEHsAmpBAzoAACAIQegCakEANgIAIAhB4AJqQqCAgIAgNwIAIAhB2AJqQQI2AgAgCEHMAmpBAzoAACAIQcgCakEENgIAIAhBwAJqQqCAgIAQNwIAIAhBuAJqQQI2AgAgCEECNgLQAiAIQQI2ArACIAhBAzoArAIgCEEENgKoAiAIQiA3AqACIAhBAjYCmAIgCEECNgKQAiAIQbwBakEDNgIAIAhBAzYCrAEgCEG0u8AANgKoASAIIAhBkAJqNgK4ASAIQbQBakEDNgIAIAggCEEYajYCsAEgCEGcAWogCEGoAWoQmgUgCEGXAWogCEGkAWooAgA2AAAgCCAIKQKcATcAjwEgByAIKQCMATcAASAHQQhqIAhBkwFqKQAANwAAQQ8LOgAADAELIAhBkAJqIgEgCEEYakHwABDPBRogCEGoAWoiBkEEciABEOMBIAEQ5AEgCC0AqQEhASAHQQJqIAZBAnJB5gAQzwUaIAcgAToAASAHQQ86AAALIAhBDGoQViAVEJEFIAhBgANqJAAgBy0AACIBQRBGBEAgDUEQOgAADAELIA1BAWogB0EBckHnABDPBRogDSABOgAACyAPEDogB0HgAmokACAJLQDwByIBQRBHBEAgAEEJaiAJQfAHakEBckHnABDPBRogACABOgAIIABBBzoAAEEBDAgLIAlB2BlqIANBoAxqQcAAEM8FGiAJQeQZaiIBIAlByAVqIgZBFBDOBQRAIABBGDoAACAAIAEpAAA3AAEgACAGKQAANwAVIABBEWogAUEQaigAADYAACAAQQlqIAFBCGopAAA3AAAgAEEdaiAGQQhqKQAANwAAIABBJWogBkEQaigAADYAAAwHCyAJQcAUaiADQfgBaikAADcDACAJQbgUaiADQfABaikAADcDACAJQbAUaiADQegBaikAADcDACAJIANB4AFqKQAANwOoFCAJQdgIaiENIAlB+BlqIREjAEGgAmsiBiQAIAZBoAFqIAlBqBRqIAFBFCAJQdgZahDIAQJAIAYtAKABIgFBEEYEQAJAAkACQCAGKAKkASIBBEAgBiAGQagBaikDADcCECAGIAE2AgwgBiAGQQxqIgEoAgg2AgQgBiABKAIANgIAIAZBoAFqIQggBigCACEBIAYoAgQhBCMAQSBrIhIkACASQQRqIgtBADYCFCALQQA2AgggCyAENgIEIAsgATYCACMAQfABayIBJAAgAUGIAWohBCMAQdAAayIHJAAgB0E0aiALQQAQ5AMCQCAHKAI0IgUEQCAHQTBqIAdBQGsoAgAiDzYCACAHQSRqIAdBzABqKAIANgIAIAdBGGogDzYCACAHIAcpAjgiHDcDKCAHIAcpAkQ3AhwgByAcNwIQIAcgBTYCDCMAQRBrIg8kACAPIAdBDGoiBTYCBCAPIAUpAgA3AggjAEEgayIFJAAgBSAPQQRqNgIIAkACQAJAAkACQAJAAkAgD0EIaiIKKAIEIg4EQCAKKAIAIhAsAAAiCkEASARAIApB/wFxIQwgCkG4f08EQCAKQUBPBEAgBEKBgICAMDcDAAwKCyAOIAxBtgFrIgpJDQMgBUEQaiAQQQFqIAxBtwFrEO8DIAUoAhAiDEELRw0EIAogBSgCFGoiDCAKSQ0FIAwgDksNBiAFQRBqIAVBCGogCiAQaiAMIAprEOkDIAUoAhBFBEAgBSkDGCEcIARBADYCACAEIBw3AwgMCgsgBSgCFCEKIARBCGogBUEYaikDADcDACAEIAo2AgQgBEEBNgIADAkLIA4gDEH/AGtJDQYgEEEBaiEOIAxBgAFrIQwCQAJAAkAgCkGBf0YEQCAMRQ0BIA4sAABBAE4NAgsgBUEQaiAFQQhqIA4gDBDpAyAFKAIQDQIgBSkDGCEcIARBADYCACAEIBw3AwgMCwsACyAEQoGAgIDwADcDAAwJCyAFKAIUIQogBEEIaiAFQRhqKQMANwMAIAQgCjYCBCAEQQE2AgAMCAsgBSAKOgAPIAVBEGogBUEIaiAFQQ9qQQEQ6QMgBSgCEEUNBiAFKAIUIQogBEEIaiAFQRhqKQMANwMAIAQgCjYCBCAEQQE2AgAMBwsgBEKBgICAEDcDACAEQQhqQQA2AgAMBgsgBEKBgICAgAE3AwAMBQsgBEEIaiAFKQIUNwMAIAQgDDYCBCAEQQE2AgAMBAsgBEKBgICAkAE3AwAgBEEIaiAMNgIADAMLIARCgYCAgIABNwMADAILIARCgYCAgIABNwMADAELIAUpAxghHCAEQQA2AgAgBCAcNwMICyAFQSBqJAAgD0EQaiQADAELIAdBMGogB0FAaygCACIFNgIAIAcgBykCOCIcNwMoIARBDGogBTYCACAEIBw3AgQgBEEBNgIACyAHQdAAaiQAAkACQAJAIAEoAogBRQRAIAEpA5ABIRwgAUGIAWohBSMAQdAAayIHJAAgB0E0aiALQQEQ5AMCQCAHKAI0IgQEQCAHQTBqIAdBQGsoAgAiDzYCACAHQSRqIAdBzABqKAIANgIAIAdBGGogDzYCACAHIAcpAjgiHTcDKCAHIAcpAkQ3AhwgByAdNwIQIAcgBDYCDCMAQRBrIg8kACAPIAdBDGopAgA3AwAgDyAPKQMANwIIIwBB4ABrIgQkAAJAAkACQAJAAkACQAJAIA9BCGoiCigCBCIOBEAgCigCACIQLAAAIgpBAEgEQCAKQf8BcSEMIApBuH9PBEAgCkFATwRAIAVCgYCAgDA3AwAMCgsgDiAMQbYBayIKSQ0DIARBOGogEEEBaiAMQbcBaxDvAyAEKAI4IgxBC0cNBCAKIAQoAjxqIgwgCkkNBSAMIA5LDQYgBEE4aiAKIBBqIAwgCmsQ4AMgBCgCOEUEQCAEQSxqIARB2ABqKQMAIh03AgAgBEEkaiAEQdAAaikDACIeNwIAIARBHGogBEHIAGopAwAiHzcCACAEIAQpA0AiIDcCFCAFQSBqIB03AgAgBUEYaiAeNwIAIAVBEGogHzcCACAFICA3AgggBUEANgIADAoLIARBGGogBEHEAGooAgAiCjYCACAEIAQpAjwiHTcDECAFQQxqIAo2AgAgBSAdNwIEIAVBATYCAAwJCyAOIAxB/wBrSQ0GIBBBAWohDiAMQYABayEMAkACQAJAIApBgX9GBEAgDEUNASAOLAAAQQBODQILIARBOGogDiAMEOADIAQoAjgNAiAEQSxqIARB2ABqKQMAIh03AgAgBEEkaiAEQdAAaikDACIeNwIAIARBHGogBEHIAGopAwAiHzcCACAEIAQpA0AiIDcCFCAFQSBqIB03AgAgBUEYaiAeNwIAIAVBEGogHzcCACAFICA3AgggBUEANgIADAsLAAsgBUKBgICA8AA3AwAMCQsgBEEYaiAEQcQAaigCACIKNgIAIAQgBCkCPCIdNwMQIAVBDGogCjYCACAFIB03AgQgBUEBNgIADAgLIAQgCjoADyAEQThqIARBD2pBARDgAyAEKAI4RQ0GIARBGGogBEHEAGooAgAiCjYCACAEIAQpAjwiHTcDECAFQQxqIAo2AgAgBSAdNwIEIAVBATYCAAwHCyAFQoGAgIAQNwMAIAVBCGpBADYCAAwGCyAFQoGAgICAATcDAAwFCyAFQQhqIAQpAjw3AwAgBSAMNgIEIAVBATYCAAwECyAFQoGAgICQATcDACAFQQhqIAw2AgAMAwsgBUKBgICAgAE3AwAMAgsgBUKBgICAgAE3AwAMAQsgBEEsaiAEQdgAaikDACIdNwIAIARBJGogBEHQAGopAwAiHjcCACAEQRxqIARByABqKQMAIh83AgAgBCAEKQNAIiA3AhQgBUEgaiAdNwIAIAVBGGogHjcCACAFQRBqIB83AgAgBSAgNwIIIAVBADYCAAsgBEHgAGokACAPQRBqJAAMAQsgB0EwaiAHQUBrKAIAIgQ2AgAgByAHKQI4Ih03AyggBUEMaiAENgIAIAUgHTcCBCAFQQE2AgALIAdB0ABqJAAgASgCiAENASABQfwAaiABQagBaikDADcCACABQfQAaiABQaABaikDADcCACABQewAaiABQZgBaikDADcCACABIAEpA5ABNwJkIAFBiAFqIAtBAhCzAiABLQCIAQ0CIAFByAFqIAFBoQFqIgQpAAA3AwAgAUHAAWogAUGZAWoiBSkAADcDACABQbgBaiIHIAFBkQFqIg8pAAA3AwAgASABKQCJATcDsAEgAUGIAWogC0EDELMCIAEtAIgBRQRAIAFB6AFqIAQpAAAiHTcDACABQeABaiAFKQAAIh43AwAgAUHYAWogDykAACIfNwMAIAFByABq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HGooAAA2AAAgBCADLQAUOgAEIAQgBTYCAAsgA0EwaiQAIAItAHQhAwJAAkACQAJAIAIoAnAiBEEVRgRAAkACQAJAIAMOAwABAgELIAIoAkAEQCACQShqQcCAwABBBxChBAwECyACQfAAaiACQThqEGggAkHoAGoiAyANQQhqKAIANgIAIAIgDSkCADcDYCACKAJwIgRBFUYNBiACQTRqIAJB6ABqKAIANgIAIAIgAikDYDcCLCACIAQ2AigMAwsgAkHwAGogAkE4ahDCBCACKAJwIgNBFUYNBiACQTRqIAJB/ABqKAIANgIAIAIgAikCdDcCLCACIAM2AigMAgsCQCACKAJABEAgAkHYAGogAkHIAGooAgA2AgAgAiACKQNANwNQDAELIAJB8ABqQcCAwABBBxCfBCACKAJwIgNBFUcEQCACQTRqIAJB/ABqKAIANgIAIAIgAikCdDcCLCACIAM2AigMAwsgAkHYAGogAkH8AGooAgA2AgAgAiACKQJ0NwNQCyACQTRqIAJB2ABqKAIANgIAIAIgAikDUDcCLAwCCyACQTRqIAJB/ABqKAAANgAAIAIgAikAdTcALSACIAM6ACwgAiAENgIoCyACKAJABEAgAkFAaxCRBQsgAigCKCIDQRVHDQELIAJBEGoiAyACQTRqKAIANgIAIAIgAikCLDcDCCACQfAAaiAJEOsEIAIoAnAiBEEVRgRAIAYgAikDCDcCBCAGQRU2AgAgBkEMaiADKAIANgIADAYLIAYgAikCdDcCBCAGQQxqIAJB/ABqKAIANgIAIAYgBDYCACACQQhqEJEFDAULIAJBIGogAkE0aigCACIENgIAIAIgAikCLCIaNwMYIAZBDGogBDYCACAGIBo3AgQgBiADNgIADAQLIAJBQGsQGCACQcgAaiADKAIANgIAIAIgAikDYDcDQAwACwALIAZBDjYCAAwBCyAGQQQ2AgALIAJBgAFqJAAMAQsgBiAKKQIENwIEIAZBDGogCkEMaigCADYCACAGIAI2AgALIApBEGokACABQcgBaiICIBhBCGooAgA2AgAgASAYKQIANwPAASABKALwASIDQRVGDQkgAUHYAGogASkDwAE3AwAgAUHgAGogAUHIAWooAgA2AgAgASADNgJUDAMLIAFB8AFqIAFBiAFqEMIEIAEoAvABIgJBFUYNCSABQdgAaiABKQL0ATcDACABQeAAaiABQfwBaigCADYCACABIAI2AlQMAgsgASgCoAEiA0EARyECAkAgA0UEQCABQfABaiIDQYuAwABBBRCfBCADQQA2AhAgAUHoAWoiAyABQfgBaikDADcDACABIAEpA/ABNwPgASABKAKAAiIEBEAgAUHcAWogAUGMAmooAgA2AgAgAUHIAWogAykDADcDACABIAEpAoQCNwLUASABIAEpA+ABNwPAASABIAQ2AtABDAILIAFB3ABqIAMpAwA3AgAgASABKQPgATcCVAwECyABQdgBaiABQagBaikDADcDACABQdABaiABQaABaikDADcDACABQcgBaiABQZgBaikDADcDACABIAEpA5ABNwPAAQsgASgCsAENAyABQfABakGbgMAAQQgQnwQgASgC8AEiA0EVRwRAIAFB2ABqIAEpAvQBNwMAIAFB4ABqIAFB/AFqKAIANgIAIAEgAzYCVCABQdABahCRBQwDCyABQZgCaiABQfwBaigCADYCACABIAEpAvQBNwOQAgwECyABQeAAaiABQfwBaigAADYAACABQdgAaiACOgAAIAEgASkA9QE3AFkgASADNgJUC0EAIQILIAEoArABDQIMAwsgAUGYAmogAUG4AWooAgA2AgAgASABKQOwATcDkAILIAFB8ABqIAFB2AFqKQMANwMAIAFB6ABqIAFB0AFqKQMANwMAIAFB4ABqIAFByAFqKQMANwMAIAFBgAFqIAFBmAJqKAIANgIAIAEgASkDwAE3A1ggASABKQOQAjcDeCABIBI2AlQgAUHIAGoiAiABQdwAaiIDKQIANwMAIAEgASkCVDcDQCABQRxqIAFB5ABqQSQQzwUaIAFBFGogAikDADcCACABIA5BACAOQQJHGzYCCCABIAEpA0A3AgwgAUHQAGogFRDrBCABKAJQIgJBFUYEQCAQIAFBCGpBOBDPBRoMBwsgEEEIaiABKQJUNwIAIBBBEGogAygCADYCACAQQQI2AgAgECACNgIEIAFBCGoQDQwGCyABQbABahCRBQsgAiABKAKgAUVyRQRAIBkQkQULIAFByABqIAFB3ABqKQIAIho3AwAgASABKQJUIhs3A0AgEEEMaiAaNwIAIBAgGzcCBCAQQQI2AgAMBAsgASgCsAEEQCABQbABahCRBQsgAUG4AWogAigCADYC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bSASQZSUwABBBRCUBSASQc6UwABBAhCUBQJAIARBBGoiGCgCAEUEQCARIBIQ4AQMAQsgESAYIBIQbwsgGiARKAIABH8gEUEYaiARQQxqKAIAIhI2AgAgESARKQIEIhs3AxAgGkEMaiASNgIAIBogGzcCBEEBBUEACzYCACARQSBqJAAgAigC4AEEQCACQUBrIAJB7AFqKAIAIgQ2AgAgAiACKQLkASIbNwM4IANBDGogBDYCACADIBs3AgQMAQsgAkHgAWogAkHYAWpBmZTAAEEHIARBOGoQcSACKALgAQRAIAJB0ABqIAJB7AFqKAIAIgQ2AgAgAiACKQLkASIbNwNIIANBDGogBDYCACADIBs3AgQMAQsgAkHgAWogAkHYAWpBgZTAAEEDIARBEGoQcCACKALgAQRAIAJB4ABqIAJB7AFqKAIAIgQ2AgAgAiACKQLkASIbNwNYIANBDGogBDYCACADIBs3AgQMAQsgAkHgAWogAkHYAWpBhJTAAEEFIARBHGoQbCACKALgAQRAIAJB8ABqIAJB7AFqKAIAIgQ2AgAgAiACKQLkASIbNwNoIANBDGogBDYCACADIBs3AgQMAQsgAkHgAWogAkHYAWpBoJTAAEEFIARBKGoQbiACKALgAUUNBiACQYABaiACQewBaigCACIENgIAIAIgAikC5AEiGzcDeCADQQxqIAQ2AgAgAyAbNwIECyADQQE2AgAMBwsgAkHgAWogCEGllMAAQQcQ5AQCQCACKALgAQRAIAMgAigA6QE2AAkgA0EMaiACQewBaigAADYAACACKALkASEEIANBCGogAkHoAWotAAA6AAAgAyAENgIEDAELIAIgAigC5AE2AtgBIAIgAkHoAWotAAA6ANwBIAJB4AFqIAJB2AFqQfSTwABBDSAEQQRqEG4gAigC4AEEQCACQZABaiACQewBaigCACIENgIAIAIgAikC5AEiGzcDiAEgA0EMaiAENgIAIAMgGzcCBAwBCyACQeABaiACQdgBakGslMAAQQsgBEEgahBxIAIoAuABBEAgAkGgAWogAkHsAWooAgAiBDYCACACIAIpAuQBIhs3A5gBIANBDGogBDYCACADIBs3AgQMAQsgAkHgAWogAkHYAWpBgZTAAEEDIARBEGoQcCACKALgAUUNBCACQbABaiACQewBaigCACIENgIAIAIgAikC5AEiGzcDqAEgA0EMaiAENgIAIAMgGzcCBAsgA0EBNgIADAYLIAJB4AFqIAhBt5TAAEEMEOQEAkAgAigC4AEEQCADIAIoAOkBNgAJIANBDGogAkHsAWooAAA2AAAgAigC5AEhBCADQQhqIAJB6AFqLQAAOgAAIAMgBDYCBAwBCyACIAIoAuQBNgLYASACIAJB6AFqLQAAOgDcASACQeABaiACQdgBakH0k8AAQQ0gBEEEahBuIAIoAuABBEAgAkHAAWogAkHsAWooAgAiBDYCACACIAIpAuQBIhs3A7gBIANBDGogBDYCACADIBs3AgQMAQsgAkHgAWogAkHYAWpBlJTAAEEFIARBEGoQbiACKALgAUUNAiACQdABaiACQewBaigCACIENgIAIAIgAikC5AEiGzcDyAEgA0EMaiAENgIAIAMgGzcCBAsgA0EBNgIADAULIAJB4AFqIAhBw5TAAEELEOQEAkACQCACKALgAQRAIAMgAigA6QE2AAkgA0EMaiACQewBaigAADYAACACKALkASEEIANBCGogAkHoAWotAAA6AAAgAyAENgIEDAELIAIgAigC5AE2AtgBIAIgAkHoAWotAAA6ANwBIAJB4AFqIAJB2AFqQfSTwABBDSAEQQRqEG4gAigC4AFFDQEgAkH4AWogAkHsAWooAgAiBDYCACACIAIpAuQBIhs3A/ABIANBDGogBDYCACADIBs3AgQLIANBATYCAAwFCyADIAIoAtgBIAItANwBEPIEDAQLIAMgAigC2AEgAi0A3AEQ8gQMAwsgAyACKALYASACLQDcARDyBAwCCyADIAIoAtgBIAItANwBEPIEDAELIANBATYCAAsgAkGAAmokACAKKAIQRQRAIAhB/QAQbUEADAMLIApBKGogCkEcaigCACIDNgIAIAogCikCFCIbNwMgDAELIApBCGogCkEcaigCACIDNgIAIAogCikCFCIbNwMACyALQQxqIAM2AgAgCyAbNwIEQQELNgIAIApBMGokAAsgBkFAayICIAsoAgAEfyALQRhqIAtBDGooAgAiAzYCACALIAspAgQiGzcDECACQQxqIAM2AgAgAiAbNwIEQQEFQQALNgIAIAtBIGokACAGKAJADQIjAEEgayICJAAgBkEIaiIEKAIAIQMgBC0ABEUEQCADQSwQbQsgBkFAayEIIARBADoABCADQSIQbSADQY+4wABBCRCUBSADQc6UwABBAhCUBQJAIBYpAwBQBEAgAiADEOAEDAELIAIgFkEIaiADEHILIAggAigCAAR/IAJBGGogAkEMaigCACIDNgIAIAIgAikCBCIbNwMQIAhBDGogAzYCACAIIBs3AgRBAQVBAAs2AgAgAkEgaiQAIAYoAkANAyMAQSBrIgIkACAGQQhqIgQoAgAhAyAELQAERQRAIANBLBBtCyAGQUBrIQggBEEAOgAEIANBIhBtIANBmLjAAEEIEJQFIANBzpTAAEECEJQFAkACQAJAAkACQCAWQdgAai0AAEEBaw4DAQIDAAsgAiADQae4wABBBhDhBAwDCyACIANBrbjAAEEFEOEEDAILIAIgA0GyuMAAQQcQ4QQMAQsgAiADQbm4wABBBRDhBAsgCCACKAIABH8gAkEYaiACQQxqKAIAIgM2AgAgAiACKQIEIhs3AxAgCEEMaiADNgIAIAggGzcCBEEBBUEACzYCACACQSBqJAAgBigCQA0EIAUgBigCCCAGLQAMEPEEDAYLIAUgBigASTYACSAFQQxqIAZBzABqKAAANgAAIAYoAkQhAiAFQQhqIAZByABqLQAAOgAAIAUgAjYCBAwECyAGQRhqIAZBzABqKAIAIgI2AgAgBiAGKQJEIhs3AxAgBUEMaiACNgIAIAUgGzcCBAwDCyAGQShqIAZBzABqKAIAIgI2AgAgBiAGKQJEIhs3AyAgBUEMaiACNgIAIAUgGzcCBAwCCyAGQThqIAZBzABqKAIAIgI2AgAgBiAGKQJEIhs3AzAgBUEMaiACNgIAIAUgGzcCBAwBCyAGQdgAaiAGQcwAaigCACICNgIAIAYgBikCRCIbNwNQIAVBDGogAjYCACAFIBs3AgQLIAVBATYCAAsgBkHgAGokACAJQRxqIgIgBSgCAAR/IAVBGGogBUEMaigCACIDNgIAIAUgBSkCBCIbNwMQIAJBDGogAzYCACACIBs3AgRBAQVBAAs2AgAgBUEgaiQAIAkoAhwNAyAUQeAAayEUIBNB4ABqIRMMAAsACyAPIAkpAiA3AgQgD0EBNgIAIA9BDGogCUEoaigCADYCAAwCCyAPIAkoAgggCS0ADBDwBAwBCyAJQRhqIAlBKGooAgAiBTYCACAJIAkpAiAiGzcDECAPQQxqIAU2AgAgDyAbNwIEIA9BATYCAAsgCUEwaiQAIBkgDygCAAR/IA9BGGogD0EMaigCACIFNgIAIA8gDykCBCIbNwMQIBlBDGogBTYCACAZIBs3AgRBAQVBAAs2AgAgD0EgaiQAIAcoAkANASAHQUBrIAdBCGpB4JTAACABQQxqEHQgBygCQA0CIwBBIGsiBiQAIAdBCGoiAigCACEFIAItAARFBEAgBUEsEG0LIAdBQGshCCACQQA6AAQgBUEiEG0gBUHqlMAAQQYQlAUgBUHOlMAAQQIQlAUjAEEwayIDJAAgAUEYaiICKAIAIRMgA0EcaiAFIAIoAggiBRDiBAJAAkACQCADKAIcRQRAIAMgAygCIDYCCCADIANBJGotAAA6AAwgBUEYbCEUA0AgFEUNAiADIBM2AiwjAEEgayIFJAAgA0EIaiICKAIAIQkgAi0ABEUEQCAJQSwQbQsgAkEAOgAEIANBLGooAgAhBCMAQUBqIgIkACACQSBqIAkQ4wQCQAJAAkACQCACKAIgRQRAIAIgAigCJDYCCCACIAJBKGotAAA6AAwgAkEgaiACQQhqQfKlwABBBCAEEG4gAigCIA0BIAJBIGogAkEIakH2pcAAIARBDGoQdCACKAIgDQIgBSACKAIIIAItAAwQ8QQMBAsgBSACKAApNgAJIAVBDGogAkEsaigAADYAACACKAIkIQkgBUEIaiACQShqLQAAOgAAIAUgCTYCBAwCCyACQRhqIAJBLGooAgAiCTYCACACIAIpAiQiGzcDECAFQQxqIAk2AgAgBSAbNwIEDAELIAJBOGogAkEsaigCACIJNgIAIAIgAikCJCIbNwMwIAVBDGogCTYCACAFIBs3AgQLIAVBATYCAAsgAkFAayQAIANBHGoiAiAFKAIABH8gBUEYaiAFQQxqKAIAIgk2AgAgBSAFKQIEIhs3AxAgAkEMaiAJNgIAIAIgGzcCBEEBBUEACzYCACAFQSBqJAAgAygCHA0DIBRBGGshFCATQRhqIRMMAAsACyAGIAMpAiA3AgQgBkEBNgIAIAZBDGogA0EoaigCADYCAAwCCyAGIAMoAgggAy0ADBDwBAwBCyADQRhqIANBKGooAgAiBTYCACADIAMpAiAiGzcDECAGQQxqIAU2AgAgBiAbNwIEIAZBATYCAAsgA0EwaiQAIAggBigCAAR/IAZBGGogBkEMaigCACIFNgIAIAYgBikCBCIbNwMQIAhBDGogBTYCACAIIBs3AgRBAQVBAAs2AgAgBkEgaiQAIAcoAkANAyMAQSBrIgUkACAHQQhqIgYoAgAhAiAGLQAERQRAIAJBLBBtCyAHQUBrIQMgBkEAOgAEIAJBIhBtIAJB8JTAAEEEEJQFIAJBzpTAAEECEJQFAkAgAUEkaiIBKAIARQRAIAUgAhDgBAwBCyAFIAEgAhDJBAsgAyAFKAIABH8gBUEYaiAFQQxqKAIAIgE2AgAgBSAFKQIEIhs3AxAgA0EMaiABNgIAIAMgGzcCBEEBBUEACzYCACAFQSBqJAAgBygCQA0EIA0gBygCCCAHLQAMEPEEDAYLIA0gBygASTYACSANQQxqIAdBzABqKAAANgAAIAcoAkQhASANQQhqIAdByABqLQAAOgAAIA0gATYCBAwECyAHQRhqIAdBzABqKAIAIgE2AgAgByAHKQJEIhs3AxAgDUEMaiABNgIAIA0gGzcCBAwDCyAHQShqIAdBzABqKAIAIgE2AgAgByAHKQJEIhs3AyAgDUEMaiABNgIAIA0gGzcCBAwCCyAHQThqIAdBzABqKAIAIgE2AgAgByAHKQJEIhs3AzAgDUEMaiABNgIAIA0gGzcCBAwBCyAHQdgAaiAHQcwAaigCACIBNgIAIAcgBykCRCIbNwNQIA1BDGogATYCACANIBs3AgQLIA1BATYCAAsgB0HgAGokACAOKAIQRQRAIBVB/QAQbUEADAMLIA5BKGogDkEcaigCACIBNgIAIA4gDikCFCIbNwMgDAELIA5BCGogDkEcaigCACIBNgIAIA4gDikCFCIbNwMACyAXQQxqIAE2AgAgFyAbNwIEQQELNgIAIA5BMGokAAwBCyAXIBUgAUEEahC5BAsgDAJ/IBAoAhBFBEAgDCAQKQIENwIEIAxBDGogEEEMaigCADYCAEEADAELIBBBKGogEEEcaigCACIBNgIAIBAgECkCFCIbNwMgIAxBDGogATYCACAMIBs3AgQgEEEEahCRBUEBCzYCACAQQTBqJAACQCAMKAIARQRAIAAgDCkCBDcCBCAAQQ02AgAgAEEMaiAMQQxqKAIANgIADAELIAxBGGogDEEMaigCADYCACAMIAwpAgQ3AxAgAEGBnsAAQeEAIAxBEGoQrAQLIAxBIGokAAuwFgIHfwF+IwBBIGsiBiQAIwBBMGsiByQAIAdBBGoiBRDeBCAHQRBqIQgCQAJAAkACQCABKAIAQQFrDgIBAgALIAFBBGohAyMAQTBrIgQkACAFQfsAEG0gBEEQaiAFQYy2wABBBBDfBCAIAn8CQCAEKAIQRQRAIAVBOhBtIARBEGohAiMAQdAAayIBJAACQAJAAkACQAJAIAMoAgwEQCABQTBqIAVBhcjAAEEHEOQEIAEoAjBFBEAgASABKAI0NgIoIAEgAUE4ai0AADoALCABQTBqIAFBKGpBjMjAAEEHIAMQbiABKAIwDQIgAUEwaiABQShqQZPIwABBBSADQQxqEG4gASgCMA0DIAIgASgCKCABLQAsEPIEDAYLIAIgASgAOTYACSACQQxqIAFBPGooAAA2AAAgASgCNCEDIAJBCGogAUE4ai0AADoAACACIAM2AgQMBAsgAUEwaiAFQZjIwABBDBDkBAJAIAEoAjAEQCACIAEoADk2AAkgAkEMaiABQTxqKAAANgAAIAEoAjQhAyACQQhqIAFBOGotAAA6AAAgAiADNgIEDAELIAEgASgCNDYCKCABIAFBOGotAAA6ACwgAUEwaiABQShqQYzIwABBByADEG4gASgCMEUNAyABQcgAaiABQTxqKAIAIgM2AgAgASABKQI0Igk3A0AgAkEMaiADNgIAIAIgCTcCBAsgAkEBNgIADAQLIAFBEGogAUE8aigCACIDNgIAIAEgASkCNCIJNwMIIAJBDGogAzYCACACIAk3AgQMAgsgAUEgaiABQTxqKAIAIgM2AgAgASABKQI0Igk3AxggAkEMaiADNgIAIAIgCTcCBAwBCyACIAEoAiggAS0ALBDyBAwBCyACQQE2AgALIAFB0ABqJAAgBCgCEEUEQCAFQf0AEG1BAAwDCyAEQShqIARBHGooAgAiATYCACAEIAQpAhQiCTcDIAwBCyAEQQhqIARBHGooAgAiATYCACAEIAQpAhQiCTcDAAsgCEEMaiABNgIAIAggCTcCBEEBCzYCACAEQTBqJAAMAgsgAUEEaiEDIwBBMGsiBCQAIAVB+wAQbSAEQRBqIAVBkLbAAEEGEN8EIAgCfwJAIAQoAhBFBEAgBUE6EG0gBEEQaiECIwBB4ABrIgEkAAJAAkACQAJAAkACQCADKAIYBEAgAUFAayAFQe+7wABBEBDkBCABKAJARQRAIAEgASgCRDYCOCABIAFByABqLQAAOgA8IAFBQGsgAUE4aiADEHMgASgCQA0CIAFBQGsgAUE4akGKvMAAQQcgA0EMahBwIAEoAkANAyABQUBrIAFBOGpBkbzAAEEJIANBGGoQcCABKAJADQQgAiABKAI4IAEtADwQ8gQMBwsgAiABKABJNgAJIAJBDGogAUHMAGooAAA2AAAgASgCRCEDIAJBCGogAUHIAGotAAA6AAAgAiADNgIEDAULIAFBQGsgBUGavMAAQQkQ5AQCQCABKAJABEAgAiABKABJNgAJIAJBDGogAUHMAGooAAA2AAAgASgCRCEDIAJBCGogAUHIAGotAAA6AAAgAiADNgIEDAELIAEgASgCRDYCOCABIAFByABqLQAAOgA8IAFBQGsgAUE4aiADEHMgASgCQEUNBCABQdgAaiABQcwAaigCACIDNgIAIAEgASkCRCIJNwNQIAJBDGogAzYCACACIAk3AgQLIAJBATYCAAwFCyABQRBqIAFBzABqKAIAIgM2AgAgASABKQJEIgk3AwggAkEMaiADNgIAIAIgCTcCBAwDCyABQSBqIAFBzABqKAIAIgM2AgAgASABKQJEIgk3AxggAkEMaiADNgIAIAIgCTcCBAwCCyABQTBqIAFBzABqKAIAIgM2AgAgASABKQJEIgk3AyggAkEMaiADNgIAIAIgCTcCBAwBCyACIAEoAjggAS0APBDyBAwBCyACQQE2AgALIAFB4ABqJAAgBCgCEEUEQCAFQf0AEG1BAAwDCyAEQShqIARBHGooAgAiATYCACAEIAQpAhQiCTcDIAwBCyAEQQhqIARBHGooAgAiATYCACAEIAQpAhQiCTcDAAsgCEEMaiABNgIAIAggCTcCBEEBCzYCACAEQTBqJAAMAQsgAUEEaiEDIwBBMGsiBCQAIAVB+wAQbSAEQRBqIAVBlrbAAEEEEN8EIAgCfwJAIAQoAhBFBEAgBUE6EG0gBEEQaiECIwBB8ABrIgEkAAJAAkACQAJAAkACQCADKAIAQQFrDgIBAgALIAFB0ABqIAVB1b/AAEEFEOQEIAEoAlAEQCACIAEoAFk2AAkgAkEMaiABQdwAaigAADYAACABKAJUIQMgAkEIaiABQdgAai0AADoAACACIAM2AgQMBAsgASABKAJUNgJIIAEgAUHYAGotAAA6AEwgAUHQAGogAUHIAGpB2r/AAEENIANBBGoQbiABKAJQBEAgAUEQaiABQdwAaigCACIDNgIAIAEgASkCVCIJNwMIIAJBDGogAzYCACACIAk3AgQMBAsgAUHQAGogAUHIAGpB57/AAEEDIANBEGoQcCABKAJQBEAgAUEgaiABQdwAaigCACIDNgIAIAEgASkCVCIJNwMYIAJBDGogAzYCACACIAk3AgQMBAsgAiABKAJIIAEtAEwQ8gQMBAsgAUHQAGogBUHqv8AAQQMQ5AQCQCABKAJQBEAgAiABKABZNgAJIAJBDGogAUHcAGooAAA2AAAgASgCVCEDIAJBCGogAUHYAGotAAA6AAAgAiADNgIEDAELIAEgASgCVDYCSCABIAFB2ABqLQAAOgBMIAFB0ABqIAFByABqQdq/wABBDSADQQRqEG4gASgCUARAIAFBMGogAUHcAGooAgAiAzYCACABIAEpAlQiCTcDKCACQQxqIAM2AgAgAiAJNwIEDAELIAFB0ABqIAFByABqQe2/wABBAyADQRBqEHAgASgCUEUNAiABQUBrIAFB3ABqKAIAIgM2AgAgASABKQJUIgk3AzggAkEMaiADNgIAIAIgCTcCBAsgAkEBNgIADAMLIAFB0ABqIAVB8L/AAEENEOQEAkACQCABKAJQBEAgAiABKABZNgAJIAJBDGogAUHcAGooAAA2AAAgASgCVCEDIAJBCGogAUHYAGotAAA6AAAgAiADNgIEDAELIAEgASgCVDYCSCABIAFB2ABqLQAAOgBMIAFB0ABqIAFByABqQdq/wABBDSADQQRqEG4gASgCUEUNASABQegAaiABQdwAaigCACIDNgIAIAEgASkCVCIJNwNgIAJBDGogAzYCACACIAk3AgQLIAJBATYCAAwDCyACIAEoAkggAS0ATBDyBAwCCyACIAEoAkggAS0ATBDyBAwBCyACQQE2AgALIAFB8ABqJAAgBCgCEEUEQCAFQf0AEG1BAAwDCyAEQShqIARBHGooAgAiATYCACAEIAQpAhQiCTcDIAwBCyAEQQhqIARBHGooAgAiATYCACAEIAQpAhQiCTcDAAsgCEEMaiABNgIAIAggCTcCBEEBCzYCACAEQTBqJAALIAYCfyAHKAIQRQRAIAYgBykCBDcCBCAGQQxqIAdBDGooAgA2AgBBAAwBCyAHQShqIAdBHGooAgAiATYCACAHIAcpAhQiCTcDICAGQQxqIAE2AgAgBiAJNwIEIAdBBGoQkQVBAQs2AgAgB0EwaiQAAkAgBigCAEUEQCAAIAYpAgQ3AgQgAEENNgIAIABBDGogBkEMaigCADYCAAwBCyAGQRhqIAZBDGooAgA2AgAgBiAGKQIENwMQIABB7pvAAEHTACAGQRBqEKwECyAGQSBqJAAL9wICBH8BfiMAQSBrIgIkACMAQSBrIgEkACMAQTBrIgMkACADQQRqIgQQ3gQgA0EQaiAEEOAEIAECfyADKAIQRQRAIAEgAykCBDcCBCABQQxqIANBDGooAgA2AgBBAAwBCyADQShqIANBHGooAgAiBDYCACADIAMpAhQiBTcDICABQQxqIAQ2AgAgASAFNwIEIANBBGoQkQVBAQs2AgAgA0EwaiQAAkAgASgCAEUEQCACIAEpAgQ3AgQgAkENNgIAIAJBDGogAUEMaigCADYCAAwBCyABQRhqIAFBDGooAgA2AgAgASABKQIENwMQIAJB353AAEECIAFBEGoQrAQLIAFBIGokAAJAIAIoAgBBDUYEQCAAIAIpAgQ3AgQgAEENNgIAIABBDGogAkEMaigCADYCAAwBCyAAIAIpAwA3AwAgAEEYaiACQRhqKQMANwMAIABBEGogAkEQaikDADcDACAAQQhqIAJBCGopAwA3AwALIAJBIGokAAuUAgECfyAAKAIAIQIjAEEQayIAJAACfwJAAkACQAJAAkACQEECIAIoAgBBA2siAyADQQZPG0EBaw4FAQIDBAUACyAAIAJBBGo2AgwgAUHM6MAAQQwgAEEMakHY6MAAEKwFDAULIAAgAkEEajYCDCABQaDpwABBByAAQQxqQajpwAAQrAUMBAsgACACNgIMIAFBuOnAAEEOIABBDGpByOnAABCsBQwDCyAAIAJBBGo2AgwgAUHY6cAAQRUgAEEMakGQ6cAAEKwFDAILIAAgAkEEajYCDCABQe3pwABBGiAAQQxqQZDpwAAQrAUMAQsgACACQQRqNgIMIAFBh+rAAEESIABBDGpBkOnAABCsBQsgAEEQaiQAC0oBAn8jAEEQayIDJAAgA0EIaiACQQAQjQUgAygCDCEEIAMoAgggASACEM8FIQEgACACNgIIIAAgBDYCBCAAIAE2AgAgA0EQaiQACxEAIAAoAgAEQCAAQQRqEEkLCw4AIAAoAgAEQCAAEEwLC5UBAQF/IAAtAAAEQAJAAkACQAJAAkACQEEEIAAoAgQiACgCAEECayIBIAFBBk8bDgUFAQIDBAALIABBBGoQTAwECyAAQQRqEJwCIABBNGoQSQwDCyAAQShqEJwCIABBBGoQSgwCCyAAQTBqEEsgAEEEahBIDAELIABB7ARqEJwCIABBLGoQSyAAEEgLIABBBEGcBRBNCwstAQJ/A0AgAUHABEcEQCAAIAFqIgItAABBAkcEQCACEEoLIAFBJGohAQwBCwsLJQEBfyAAKAIAIgEgASgCACIBQQFrNgIAIAFBAUYEQCAAEM0CCwsMACACBEAgABCGBQsLLQEBfyMAQRBrIgEkACABQQhqQQQgABBPIAEoAggiAARAIAFBEGokACAADwsACzkBAX8jAEEQayIDJAAgA0EIaiABIAJBABBQIAMoAgwhASAAIAMoAgg2AgAgACABNgIEIANBEGokAAtZAAJAIAJFDQAgA0UEQEHMvMEALQAAGiACIAEQsAIhAQwBCwJAIAIgARCIBSIBRQ0AIAFBCGstAARBA3FFDQAgAUEAIAIQ0QUaCwsgACACNgIEIAAgATYCAAtrAQJ/IwBBEGsiAyQAAkACQAJAIAFFBEBBASECDAELIAFBqtWqFUsNASABQTBsIgJBAEgNASADQQhqIAFBq9WqFUkgAhBPIAMoAggiAkUNAgsgACABNgIEIAAgAjYCACADQRBqJAAPCwALAAtrAQJ/IwBBEGsiAyQAAkACQAJAIAFFBEBBASECDAELIAFB////H0sNASABQQV0IgJBAEgNASADQQhqIAFBgICAIEkgAhBPIAMoAggiAkUNAgsgACABNgIEIAAgAjYCACADQRBqJAAPCwALAAtmAQJ/IwBBEGsiAyQAAkACQAJAIAFFBEBBBCECDAELIAFBqtWq1QBLDQEgAUEMbCICQQBIDQEgA0EIakEEIAIQTyADKAIIIgJFDQILIAAgATYCBCAAIAI2AgAgA0EQaiQADwsACwAL3AEBA38jAEEgayIEJAACf0EAIAIgA2oiAyACSQ0AGkEEIAEoAgQiAkEBdCIFIAMgAyAFSRsiAyADQQRNGyIDQQxsIQUgA0Gr1arVAElBAnQhBgJAIAJFBEAgBEEANgIYDAELIARBBDYCGCAEIAJBDGw2AhwgBCABKAIANgIUCyAEQQhqIAYgBSAEQRRqEJAFIAQoAghFBEAgBCgCDCECIAEgAzYCBCABIAI2AgBBgYCAgHgMAQsgBEEQaigCACEDIAQoAgwLIQUgACADNgIEIAAgBTYCACAEQSBqJAALjQQCBn8BfiMAQRBrIgckACMAQSBrIgUkACAFIAI2AgwCQCAAEJoBIgANACAFQRBqIAIQmAEgBSgCEEUEQCAFKQMYIgkgBUEMaigCACgCADUCBFgEQCAFKAIMIQAjAEEQayICJAAgAUEANgIIIAIgCT4CDCACIAA2AgggASACQQhqIgAoAgAoAgAoAgQiAyAAKAIEIgAgACADSxsQkwUgAigCCCEDIAIoAgwhBCMAQRBrIgAkACAAIAQ2AgwgACADNgIIIAEgAEEIaiIDKAIAKAIAKAIEIgQgAygCBCIDIAMgBEsbEJMFA0AgAEEIaiIDKAIAKAIAKAIEIgQgAygCBCIDIAMgBEsbBEAjAEEQayIDJAAgA0EIaiAAQQhqIgQoAgAoAgApAgA3AwAgAygCDCEGIAAgAygCCDYCACAAIAYgBCgCBCIIIAYgCEkbNgIEIANBEGokACABIAAoAgAgACgCBCIDEJQFIAMgBCgCBCIGSwRAAAsgBCgCACADEN8CIAQgBiADazYCBAwBBSAAQRBqJAALCyACQRBqJABBACEADAILQfWgwABBEBDxAiEADAELIAUoAhQhAAsgBUEgaiQAAkAgAEUEQCAHQQRqIAEoAgAgASgCCBC3BUEAIQAgBygCBEUNAUHcj8AAQS8Q8QIhACABQQA2AggMAQsgAUEANgIICyAHQRBqJAAgAAscAQF/IAAoAgQiAQRAIAAoAgBBASABQTBsEE0LCxwBAX8gACgCBCIBBEAgACgCAEEEIAFBDGwQTQsLhwUCBH8DfiMAQYAOayICJAACQCABKAIARQRAIAJB0ANqIAEoAgQiAyABQQhqKAIAIgQQWSAAAn8gAi0A0AMEQCAAIAIvANEDOwABIABBA2ogAkHTA2otAAA6AAAgAkH4AWogAkHgA2opAAAiBjcDACACQYACaiACQegDaikAACIHNwMAIAJBiAJqIAJB8ANqLQAAIgE6AAAgAiACQdgDaikAACIINwPwASAAIAJB1ANqKAAANgIEIAAgCDcCCCAAQRBqIAY3AgAgAEEYaiAHNwIAIABBIGogAToAAEEADAELIAJBCGogBEEAEI0FIAIoAgwhBSACKAIIIAMgBBDPBSEDQTAQTiIBQgA3AAEgAUEEOgAAIAEgBDYALCABIAU2ACggASADNgAkIAFBCWpCADcAACABQRFqQgA3AAAgAUEZakIANwAAIAAgATYCBEECCzoAAAwBCyACQRRqIAEoAgQgAUEIaigCABDiASACKAIUQQVHBEAgAkHwAWoiASACQRRqQdwBEM8FGiACQdADaiABEFogAigC0AMiBEEIRwRAIAIoAtQDIQMgAkHsCGoiBSACQdgDakGUBRDPBRpBnAUQTiIBIAM2AgQgASAENgIAIAFBCGogBUGUBRDPBRogACABNgIEIABBAToAAAwCCyACKALUAyEBIABBAjoAACAAIAE2AgQMAQsgAkHbA2ogAkEgaigCADYAACACIAIpAhg3ANMDQTAQTiIBQgA3AAEgAUEDOgAAIAFBCWpCADcAACABQRFqQgA3AAAgAUEZakIANwAAIAEgAikA0AM3ACEgAUEoaiACQdcDaikAADcAACAAQQI6AAAgACABNgIECyACQYAOaiQAC40BAQN/IwBBIGsiAyQAIAAgAkEgRgR/IANBGGoiAkIANwMAIANBEGoiBEIANwMAIANBCGoiBUIANwMAIANCADcDACADQSAgAUEgEMkFIABBGWogAikDADcAACAAQRFqIAQpAwA3AAAgAEEJaiAFKQMANwAAIAAgAykDADcAAUEBBUEACzoAACADQSBqJAALxwUBBH8jAEGAD2siAiQAAkACQAJAAkACQAJAAkAgASgCAEEBaw4EAAIDBAELIABBBGogAUEEahDIAiAAQTRqIAFBEGoQWyAAQQM2AgAMBQsgAEECNgIADAQLIAJByARqIAFBBGoQyAIgAkGUCmogAUEQahBYIAItAJQKIgFBAkcEQCAAIAIvAJUKOwAFIAAgAikCnAo3AgwgAEEHaiACLQCXCjoAACAAQRRqIAJBpApqKQIANwIAIABBHGogAkGsCmopAgA3AgAgAEEkaiACQbQKaigCADYCACACKAKYCiEDIABBKGogAkHIBGpBMBDPBRogACADNgIIIAAgAToABCAAQQQ2AgAMBAsgAigCmAohASAAQQg2AgAgACABNgIEIAJByARqEJwCDAMLIAJBlApqIgQQYiACQQA2AtAEIAIg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ACEBIANBnAJqIAUpAOUDNwAAIANBlwJqIAUpA+ADNwAAIAMgBSkDADcACSADQRFqIAVBCGopAwA3AAAgA0EZaiAFQRBqKQMANwAAIANBIGogBUEXaikAADcAACADQShqIAUvATw7AAAgA0EqaiAFQT5qLQAAOgAAIANBL2ogBSkDIDcAACADQTdqIAVBKGopAwA3AAAgA0HHAGogBUE4ai0AADoAACADQT9qIAUpAzA3AAAgA0HoAGogBkHQABDPBRogA0GTAmogATYAACADQYgCaiAXNwMAIANBgAJqIBM3AwAgA0H4AWogGzcDACADQfABaiAUNwMAIANB6AFqIBU3AwAgA0HgAWogGTcDACADQdgBaiAaNwMAIANB0AFqQgAgFiAQUCIBGzcDACADQcgBakIAIBIgARs3AwAgA0HAAWogGDcDACADQbgBaiARNwMAIANBK2ogDTYAACADIAo6AAggA0HgAGogAikDADcCACADQdgAaiAIKQMANwIAIANB0ABqIAkpAwA3AgAgA0HIAGogBSkDwAM3AgAgA0EANgIAIA8QkQUgB0H4AWoMCgsgBUHIA2ogBUH8AWopAgAiETcDACAFIAUpAvQBIhA3A8ADIANBEGogETcCACADQQhqIBA3AgAgA0KBgICA8AA3AwAMBgsgA0EIaiAFLQDxAToAACADQoGAgIDAADcDAEEBIQJBAQwHCyAFQShqIAVB/AFqKQIAIhE3AwAgBSAFKQL0ASIQNwMgIANBEGogETcAACADQQhqIBA3AAAgA0KBgICA4AA3AwBBAQwFCyADQoGAgIAwNwMAIANBEGogETcDACADQQxqQQ82AgAgA0EIakGS6MAANgIAQQEMBAsgBUHIAGogBUH8AWopAgAiETcDACAFQdAAaiAFQYQCaigCACIBNgIAIAUgBSkC9AEiEDcDQCADQRRqIAE2AgAgA0EMaiARNwIAIAMgEDcCBCADQQE2AgBBAQwDCyADQoGAgIAwNwMAIANBEGogGDcDACADQQhqQqHowICwATcDAEEBDAILIAVB6ANqIAVB/AFqKQIAIhE3AwAgBSAFKQL0ASIQNwPgAyADQRBqIBE3AAAgA0EIaiAQNwAAIANCgYCAgIABNwMACyABQQBHCyECIAxBAEcLIQEgDxCRBSALBEAgB0HsAWoQkQULAkAgAUUNACAH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JAACfyACKAIAQQVHBEAgACACNgIIIAFBiKLAAEEMIABBCGpBvKLAABCsBQwBCyAAIAJBBGo2AgwgAUGkosAAQQYgAEEMakGsosAAEKwFCyAAQRBqJAALZQEBfyAAKAIAIQIjAEEQayIAJAACfyACKAIABEAgACACNgIIIAFBiKLAAEEMIABBCGpB3KLAABCsBQwBCyAAIAJBBGo2AgwgAUGkosAAQQYgAEEMakGsosAAEKwFCyAAQRBqJAALDAAgACgCACABEJIBC2EBAX8jAEEQayICJAACfyAAKAIAQQlHBEAgAiAANgIIIAFBiKLAAEEMIAJBCGpBlKLAABCsBQwBCyACIABBBGo2AgwgAUGkosAAQQYgAkEMakGsosAAEKwFCyACQRBqJAALaAEBfyAAKAIAIQIjAEEQayIAJAACfyACKAIAQQNHBEAgACACNgIIIAFBiKLAAEEMIABBCGpBvKPAABCsBQwBCyAAIAJBBGo2AgwgAUGkosAAQQYgAEEMakGsosAAEKwFCyAAQRBqJAALVgEBfyABQQxqKAIAIQICQCAAAn8CQAJAIAEoAgQOAgABAwsgAg0CQQAhAkGsoMAADAELIAINASABKAIAIgEoAgQhAiABKAIACyACEEcPCyAAIAEQmgULFAAgACgCACAAKAIIQaygwAAQhAMLEAAgAEEDdEECcq0gARCXAQsxAQF/A0AgAKchAiAAQoABVEUEQCABIAJBgH9yENICIABCB4ghAAwBCwsgASACENICC5cFAgN/A34jAEEQayIEJAAgBCABNgIMIAQgBEEMaigCACgCACkCADcDAAJAIAQoAgQiAkUEQEGcocAAQQ4Q8QIhASAAQQE2AgAgACABNgIEDAELAkAgBCgCACIBLAAAIgNBAEgEQCACQQpLDQEgASACakEBaywAAEEATg0BIAAgBCgCDBDjAgwCCyAEKAIMQQEQ3wIgAEEANgIAIAAgA61C/wGDNwMIDAELIANB/wFxIAEsAAEiA0H/AXFBB3RqQYABayECAn8CQAJAAkACQAJAAkACQAJAIANBAEgEQCACIAEsAAIiA0H/AXFBDnRqQYCAAWshAiADQQBODQIgAiABLAADIgNB/wFxQRV0akGAgIABayECIANBAE4NAyACQYCAgIABa60hBSABLAAEIgJBAE4NBCACQf8BcSABLAAF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CyEAIAJBEGokACAARQ0ACwwEC0H1oMAAQRAQ8QIhAAwDCyADKAJEIQAMAgsgA0HMAGpCATcCACADQQE2AkQgA0HUoMAANgJAIANBATYCOCADIANBNGo2AkggAyADQRBqNgI0IANBHGoiACADQUBrEJQBIAAQ8gIhAAwBCyADQcwAakIBNwIAIANBATYCRCADQYCiwAA2AkAgA0EBNgJcIAMgA0HYAGo2AkggAyADQShqNgJYIANBNGoiACADQUBrEJQBIAAQ8gIhAAsgA0HgAGokAAsgBkEQaiQAIABFDQMgByAANgIIIAdBCGpB0ofAAEERQeOHwABBBhD4AwwCCyABQThqIQUgAUHQAWooAgBFBEAgB0EIaiIAQgE3A5gBIABCATcDgAEgAEIBNwNoIABCATcDUCAAQgE3AzggAEIBNwMgIABBoAFqQQA2AgAgAEGQAWpCADcDACAAQYgBakKAgICAEDcDACAAQfgAakIANwMAIABB8ABqQoCAgIAQNwMAIABB4ABqQgA3AwAgAEHYAGpCgICAgBA3AwAgAEHIAGpCADcDACAAQUBrQoCAgIAQNwMAIABBMGpCADcDACAAQShqQoCAgIAQNwMAIABBGGpCADcDACAAQRBqQgA3AwAgAEEIakIANwMAIABCADcDACAFECIgBSAAQagBEM8FGgsjAEEQayIIJAAgCEHiADYCDAJAIAMQmgEiAA0AIAhBDGoQmQEiAA0AIwBB4ABrIgMkACADIAI2AgwgA0FAayACEJgBAkACQAJAAkAgAygCQA0AIAMpA0giDSADQQxqKAIAKAIAKAIEIgCtWARAIAAgDadrIQkDQCAJIANBDGooAgAoAgAoAgRPBEBBACEAIAkgA0EMaigCACgCACgCBEYNBkHcoMAAQRkQ8QIhAAwGCyADQUBrIAMoAgwiABCYASADKAJADQIgAyADKQNIIg03AxAgDUL/////D1YNAyADIA1CB4MiDjcDKCAOQgZaDQQgDaciC0EISQRAQaygwABBFBDxAiEADAYLIA6nIQYjAEEQayICJAACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCALQQN2IgtBAWsODwECAwQFBgcICQoLDA0ODwALIAYgCyAAQeEAEOECDBELIAYgBUEgaiAAEOsCIgBFDQ8gAiAANgIM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fwF+IwBBMGsiAyQAIANBD2ohByMAQTBrIgYkACAGQQ5qIQQgASgCECEIIwBBkAFrIgIkAAJAAkAgASgCCCIFIAEoAgxGBEAgAkEANgIIDAELIAEgBUEMajYCCCACQRBqIAVBCGoiASgCADYCACACIAUpAgAiCTcDCCAJp0UNACACQUBrIAEoAgA2AgAgAiAFKQIANwM4IwBBEGsiASQAIAFBCGogAkE4aiIFQQhqKAIANgIAIAEgBSkCADcDACACQewAaiABEJQDIAFBEGokACACQdAAaiACQfUAaikAADcDACACQdgAaiACQf0AaikAADcDACACQeAAaiACQYUBaikAADcDACACIAIpAG03A0gCfyACLQBsRQRAIAJBMGogAkHsAGpBAXIiAUEYaikAADcDACACQShqIAFBEGopAAA3AwAgAkEgaiABQQhqKQAANwMAIAIgASkAADcDGEEBDAELIAggAikASzcAACAIQQhqIAJB0wBqKQAANwAAQQALIQEgBEEZaiACQTBqKQMANwAAIARBEWogAkEoaikDADcAACAEQQlqIAJBIGopAwA3AAAgBCACKQMYNwABIAQgAToAAAwBCyACQQhqEBggBEECOgAACyACQZABaiQAAkAgBi0ADkECRgRAIAdBADoAAAwBCyAHIAZBDmpBIRDPBRoLIAZBMGokACAAIAMtAA8EfyAAIAMpABA3AAEgAEEZaiADQShqKQAANwAAIABBEWogA0EgaikAADcAACAAQQlqIANBGGopAAA3AABBAQVBAAs6AAAgA0EwaiQAC0kAAkAgASACQYilwABBBRCtAUUEQCABIAJBjaXAAEEGEK0BRQRAIABBAjoABAwCCyAAQQE6AAQMAQsgAEEAOgAECyAAQRU2AgALOgEBfyMAQRBrIgQkACAEIAE2AgQgBCAANgIAIAQgAzYCDCAEIAI2AgggBCAEQQhqELABIARBEGokAAtlAAJAAkAgASACQZGmwABBBBCtAUUEQCABIAJBlabAAEEIEK0BDQEgASACQZSkwABBDRCtAUUEQCAAQQM6AAQMAwsgAEECOgAEDAILIABBADoABAwBCyAAQQE6AAQLIABBFTYCAAsjACABIAJBkabAAEEEEK0BIQEgAEEVNgIAIAAgAUEBczoABAsZACAAKAIAIAAoAgQgASgCACABKAIEEMcFC0gBAX8jAEEQayICJAAgASgCACEBIAAoAgAhACACQSA2AgQgAiAANgIAIAJBIDYCDCACIAE2AgggAiACQQhqELABIAJBEGokAAuFBgESfyMAQSBrIgMkACADQQA2AgQgA0EQaiAAQQhqKQIANwMAIAMgACkCADcDCCADIANBBGo2AhgjAEEgayIHJAAgB0EYaiADQQhqIgBBEGooAgA2AgAgB0EQaiAAQQhqKQIANwMAIAcgACkCADcDCCMAQRBrIg0kACAHQQhqIgAhBCAAKAIQIQojAEHwAGsiASQAQRAgBCgCCCIFIAVBEE0bIQ4gBCgCDCAFQSRsaiECIAFBNGohCCABQSxqQQFyIQwgBCgCACEAIAQoAgQhDwJAAkACQANAIAAgD0YNASAEIABBDGoiBjYCAEECIQkCQAJAIAAoAgBBAkYNACABQSxqIAAQWAJAIAEtACwiAEECaw4CAgEACyABQSpqIAxBAmotAAA6AAAgAUEQaiAIQQhqKQIANwMAIAFBGGogCEEQaikCADcDACABQSBqIAhBGGooAgA2AgAgASAMLwAAOwEoIAEgCCkCADcDCCABKAIwIQsgACEJCyABQe4AaiIAIAFBKmotAAA6AAAgAUHYAGoiECABQRBqKQMANwMAIAFB4ABqIhEgAUEYaikDADcDACABQegAaiISIAFBIGooAgA2AgAgASABLwEoOwFsIAEgASkDCDcDUCAFIA5GDQMgAhBdIAIgCToAACACQQRqIAs2AgAgAkEBaiABLwFsOwAAIAJBA2ogAC0AADoAACACQQhqIAEpA1A3AgAgAkEQaiAQKQMANwIAIAJBGGogESkDADcCACACQSBqIBIoAgA2AgAgBCAFQQFqIgU2AgggAkEkaiECIAYhAAwBCwsgASgCMCEJIwBBEGsiACQAAkAgCigCACIGRQ0AAkACfwJAAkAgBi0AAA4EAwMBAwALIAZBJGoMAQsgBkEEagsQkQULIABBCGpChICAgIAGNwMAIAAoAgwiAkUNACAGIAAoAgggAhBNCyAAQRBqJAAgBCAFQQFqNgIIIAogCTYCAAsgAUHwAGokAAwBCwALIA1BEGokACAHQSBqJAAgAygCBCADQSBqJAAL9wQCCn8DfiMAQUBqIgIkACACQQM2AgwgAkEwaiABQQhqKQIANwMAIAIgASkCADcDKCACIAJBDGo2AjgjAEEgayIGJAAgBkEYaiACQShqIgFBEGooAgA2AgAgBkEQaiABQQhqKQIANwMAIAYgASkCADcDCCACQRxqIQcjAEFAaiIBJAAgAUEYaiAGQQhqIgMQqwECQCABLQAYRQRAIAdBADYCCCAHQgE3AgAgAxDzAQwBCyABQQQQUiABQSFqKQAAIQwgAUEpaikAACENIAFBMWopAAAhDiABKAIEIQUgASgCACIEIAEpABk3AAAgBEEYaiAONwAAIARBEGogDTcAACAEQQhqIAw3AAAgAUEUaiILQQE2AgAgASAFNgIQIAEgBDYCDCABQShqIANBEGooAgA2AgAgAUEgaiADQQhqKQIANwMAIAEgAykCADcDGCABQQxqIQMgAUEYaiEJIwBBMGsiBCQAIARBEGohBQNAAkAgBEEPaiAJEKsBIAQtAA9FDQAgAygCCCIKIAMoAgRGBEAgA0EBEIcBCyADKAIAIApBBXRqIgggBSkAADcAACAIQRhqIAVBGGopAAA3AAAgCEEQaiAFQRBqKQAANwAAIAhBCGogBUEIaikAADcAACADIApBAWo2AggMAQsLIAkQ8wEgBEEwaiQAIAdBCGogCygCADYCACAHIAEpAgw3AgALIAFBQGskACAGQSBqJAACQCACKAIMQQNGBEAgACACKQIcNwIEIABBAzYCACAAQQxqIAJBJGooAgA2AgAMAQsgACACKQIMNwIAIABBCGogAkEUaikCADcCACACQRxqEMACCyACQUBrJAALVgEBfyABQQxqKAIAIQICQCAAAn8CQAJAIAEoAgQOAgABAwsgAg0CQQAhAkGgpsAADAELIAINASABKAIAIgEoAgQhAiABKAIACyACEEcPCyAAIAEQmgULFAAgACgCACAAKAIIQaCmwAAQhAMLGQAgACgCACAAKAIIIAEoAgAgASgCCBDHBQtwAQJ/IwBBIGsiAiQAIAJBCGogARC1AQR/QQEgARAuBUEAC0EAEI0FIAJBHGoiA0EANgIAIAIgAikDCDcCFCABELUBBEBBASABIAJBFGoQ7AILIABBCGogAygCADYCACAAIAIpAhQ3AgAgAkEgaiQAC8ECAgV/AX4jAEEgayIDJAAgAUEYaiICELUBBEBBASACEC4hBQsgAUEkaiICELUBBEBBAiACEC4hBAsgA0EIaiABKQMAQgBS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NgIEIARBKGoQkQUgBEE0ahCRBQsgBEFAayQAC8EEAgV/An4jAEEwayIEJAAgBCACNgIQIAQgATYCDCAEQRRqIgJBADYCCCACQgE3AgAjAEHgAGsiAyQAIAMgBEEMajYCDAJAAkACQANAIANBDGooAgAoAgRFBEBBACEBDAQLIANBQGsgA0EMahC7ASADKAJARQRAIAMgAykDSCIINwMQIAhC/////w9WDQIgAyAIQgeDIgk3AyggCUIGWg0DIAinIgFBCEkEQEGgpsAAQRQQ8QIhAQwFCyAJpyEGIANBDGohByMAQRBrIgUkAAJ/IAFBA3YiAUEBRgRAQQAgBiACIAcQ6wIiAUUNARogBSABNgIMIAVBDGpB1aTAAEEOQZGmwABBBBD4AyAFKAIMDAELIAYgASAHQeQAEOECCyEBIAVBEGokACABRQ0BDAQLCyADKAJEIQEMAgsgA0HMAGpCATcCACADQQE2AkQgA0HIpsAANgJAIANBATYCOCADIANBNGo2AkggAyADQRBqNgI0IANBHGoiASADQUBrELQBIAEQ8gIhAQwBCyADQcwAakIBNwIAIANBATYCRCADQbynwAA2AkAgA0EBNgJcIAMgA0HYAGo2AkggAyADQShqNgJYIANBNGoiASADQUBrELQBIAEQ8gIhAQsgA0HgAGokACABIQIgBEEoaiAEQRxqIgEoAgA2AgAgBCAEKQIUNwMgAkAgAkUEQCAAIAQpAhQ3AgAgAEEIaiABKAIANgIADAELIABBADYCACAAIAI2AgQgBEEgahCRBQsgBEEwaiQAC7cBAQF/IwBB0ABrIgMkACADIAI2AgQgAyABNgIAIANBCGogASACEJsFAkAgAy0ACEUEQCAAIAMpAxA3AwggAEEVNgIADAELIAMgAy0ACToAGyADQTRqQgI3AgAgA0HMAGpBGDYCACADQQI2AiwgA0HYp8AANgIoIANBGTYCRCADIANBQGs2AjAgAyADQRtqNgJIIAMgAzYCQCADQRxqIgEgA0EoahC0ASAAIAEQowQLIANB0ABqJAALqQEAIwBBMGsiAyQAIAMgAjYCDCADIAFBGGo2AhACQCADQQxqIANBEGoQsQFFBEAgA0EoaiACQRhqKQAANwMAIANBIGogAkEQaikAADcDACADQRhqIAJBCGopAAA3AwAgAyACKQAANwMQAkAgAUEMaiADQRBqEIgCIgEEQCABKAIMQQBKDQELIABBADYCAAwCCyAAIAEQlQUMAQsgACABEJUFCyADQTBqJAALjwEAIwBBMGsiAiQAIAIgATYCDCACIABBGGo2AhACf0EBIAJBDGogAkEQahCxAQ0AGiACQShqIAFBGGopAAA3AwAgAkEgaiABQRBqKQAANwMAIAJBGGogAUEIaikAADcDACACIAEpAAA3AxBBACAAQQxqIAJBEGoQiAIiAEUNABogACgCDEEASgsgAkEwaiQAC4EBAQN/IwBBEGsiAyQAIANBCGoiAiAAKAIEIAAoAiAiASABQSBLIgEbNgIEIAIgACgCACAAIAEbNgIAQQAhAiADKAIIIgAgACADKAIMaiIBRwRAIAEgAGshAQNAIAIgAC0AAGlqIQIgAEEBaiEAIAFBAWsiAQ0ACwsgA0EQaiQAIAILZQACQAJAIAEgAkHlqcAAQQUQxwVFBEAgASACQeqpwABBCxDHBQ0BIAEgAkH1qcAAQQgQxwVFBEAgAEEDOgAEDAMLIABBAjoABAwCCyAAQQA6AAQMAQsgAEEBOgAECyAAQRU2AgALIAEBfyAAKAIAQQdrIgFBA00gAUECR3FFBEAgABDOAQsLogEBAX8gACgC4AEEQCAAKAIoBEAgAEEQahCRBSAAQRxqEJEFIABBKGoQkQULIABB0AFqIgEoAgAEQCAAQdgAahCRBSAAQeQAahCRBSAAQfAAahCRBSAAQfwAahCRBSAAQYgBahCRBSAAQZQBahCRBSAAQaABahCRBSAAQawBahCRBSAAQbgBahCRBSAAQcQBahCRBSABEJEFCyAAQeABahAnCwtlAAJAAkAgASACQf2pwABBBhDHBUUEQCABIAJBg6rAAEEEEMcFDQEgASACQYeqwABBCBDHBUUEQCAAQQM6AAQMAwsgAEECOgAEDAILIABBADoABAwBCyAAQQE6AAQLIABBFTYCAAtJAAJAIAEgAkGPqsAAQQYQxwVFBEAgASACQZWqwABBBRDHBUUEQCAAQQI6AAQMAgsgAEEBOgAEDAELIABBADoABAsgAEEVNgIACyMAIAEgAkGaqsAAQQcQxwUhASAAQRU2AgAgACABQQFzOgAEC7Q4AiF/A34jAEHQAWsiDiQAIwBBEGsiByQAIAdBBGoiBkHop8AAQQEQlgUgDkEYaiIIQQA2AgwgCEEUakEANgIAIAhBGGpB6KfAAEEBELgCIAhBCGogBkEIaigCADYCACAIIAYpAgA3AgAgB0EQaiQAIA5BEGoiByAEKAIAIgY2AgAgByAGIAQoAghBDGxqNgIEIA4oAhQhJCAOKAIQIQQgDkG4AWohJQNAIAQgJEcEQCAlQfzfwAAoAgA2AgAgDkH038AAKQIANwOwASAOQQhqIgYgBCgCCDYCBCAGIAQoAgA2AgAgDkH0AGohESAOKAIIIRAgDigCDCEIIwBBMGsiFyQAIBdBJGoiByAQIAgQlgUgByAOQRhqIg8QtgEhBiAHEJEFAkAgBkUEQCAXQQRqIgYgECAIELgCIBdBJGoiDSAQIAgQlgUjAEGQAWsiDCQAAkAgDSAPELYBRQRAIAxBGGogBkEYaikAADcDACAMQRBqIAZBEGopAAA3AwAgDEEIaiAGQQhqKQAANwMAIAwgBikAADcDACAMQSBqIQgjAEEQayIHJAACQCAPQQxqIhMoAgAiBkUEQCAIQQA2AiQgCCATNgIAIAggDCkAADcABCAIQRxqIAxBGGopAAA3AAAgCEEUaiAMQRBqKQAANwAAIAhBDGogDEEIaikAADcAAAwBCyAHIAYgEygCBCAMEOEBIAdBBGohBgJAIAcoAgBFBEAgCCAGKQIANwIEIAhBEGogEzYCACAIQQxqIAZBCGooAgA2AgBBACETDAELIAggDCkAADcABCAIIAYpAgA3AiQgCEEcaiAMQRhqKQAANwAAIAhBFGogDEEQaikAADcAACAIQQxqIAxBCGopAAA3AAAgCEEsaiAGQQhqKAIANgIACyAIIBM2AgALIAdBEGokACAMKAIgBEAgDEHQAGoiGiAMQSBqQTAQzwUaIAxBiAFqIA1BCGooAgA2AgAgDEEBNgKMASAMIA0pAgA3A4ABIAxBgAFqIR0jAEEgayIVJAACQCAaKAIkRQRAIBooAgAhCBDXASEGIBVBADYCBCAVIAY2AgAgFSgCACEHIBVBADYCECAVIAc2AgwgFUEMaigCACIPLwGWBCINQQtPBEAACyAPIA1BAWo7AZYEIA8gDUEFdGoiECAaQQRqIgYpAAA3AAAgEEEIaiAGQQhqKQAANwAAIBBBGGogBkEYaikAADcAACAQQRBqIAZBEGopAAA3AAAgDyANQQR0aiIGQeACaiAdKQIANwIAIAZB6AJqIB1BCGopAgA3AgAgCEKAgICAEDcCBCAIIAc2AgAMAQsgFUEUaiEiIwBBoAFrIgokACAKQRBqIRwgGkEEaiEPIwBB8ABrIgskAAJAIBpBJGoiBygCACIGLwGWBEELTwRAIAtBGGoiGCAHKAIIENYBIAsgBjYCDCALIAsoAhg2AhQgC0EgaiIQKAIAIQggCygCHCENIAsgBygCBDYCECAYQRBqIAtBDGoiBxDXASIGEN4BIBhBDGpBADYCACAYIAY2AgggGCAHKQIANwIAIAtBJGogC0EcaiANGygCACEHIBAgGCANGygCACEGIAsgCDYCbCALIAc2AmggCyAGNgJkIAtB2ABqIAtB5ABqIA8gHRDfASALKAJcIQcgCygCWCEGIAsoAmAhEyAcIBhBwAAQzwUaDAELIAtBGGogByAPIB0Q3wEgHEEANgIAIAsoAiAhEyALKAIYIQYgCygCHCEHCyAcIAY2AkAgHEHIAGogEzYCACAcQcQAaiAHNgIAIAtB8ABqJAAgCkHYAGooAgAhGCAKQdQAaigCACEcIAooAlAhHQJAAkACQCAKKAIQIghFDQAgCigCHCEgIAooAhghEyAKKAIUIQcgCkHoAGogCkEgaiIPQTAQzwUaIApBiAFqIRsDQCAIKAKQBCIGBEAgCiAGNgJcIAogCC8BlAQ2AmQgCiAHQQFqNgJgIApBEGohIyAKQegAaiEeIwBB4ABrIhIkAAJAICAgCkHcAGoiCCgCBCIHQQFrRgRAAkAgCCgCACIGLwGWBEELTwRAIBJBFGoiHyAIKAIIENYBIBIgBzYCDCASIAY2AgggEiASKAIUNgIQIBJBHGoiDSgCACEQIBIoAhghICMAQUBqIiEkACASQQhqIhkoAgAiCy8BlgQhBiAhQRBqIBkQ2QEiCRDeAQJAAkAgCS8BlgQiCEEMTw0AIAYgGSgCCCIHayIGIAhBAWpHDQAgCUGYBGogB0ECdCALakGcBGogBkECdBDPBRogIUEIaiAJIBkoAgQiBhDaASAhKQMIISYgHyAGNgIEIB8gCzYCACAfQRBqICFBEGpBMBDPBRogHyAmNwIIICFBQGskAAwBCwALIBIgEDYCXCASIBJBIGogEkEYaiAgGygCADYCWCASIA0gHyAgGygCADYCVCASQdQAaiAeIBsgExDgASAjIB9BwAAQzwUaDAELIAggHiAbIBMQ4AEgI0EANgIACyASQeAAaiQADAELAAsgCigCECIIRQ0CIAooAhwhICAKKAIYIRMgCigCFCEHIApB6ABqIA9BMBDPBRoMAQsLIAogIDYCHCAKIBM2AhggCiAHNgIUIAogCDYCECAKQSBqIApB6ABqQTAQzwUhCyAaKAIAIg8oAgBFDQEjAEEQayINJAAgDygCACEIIA8oAgQhByMAQRBrIhAkABDZASIGIAg2ApgEIBBBCGogBiAHQQFqENoBIBAoAgwhByANQQhqIgYgECgCCDYCACAGIAc2AgQgEEEQaiQAIA0oAgghCCAPIA0oAgwiBzYCBCAPIAg2AgAgCkEIaiIGIAc2AgQgBiAINgIAIA1BEGokACAKIAopAwg3ApgBIApBQGshECMAQRBrIh4kAAJAAkAgCkGYAWoiBigCBCIHQQFrICBHDQAgBigCACIPLwGWBCINQQtPDQAgDyANQQFqIgg7AZYEIA8gDUEFdGoiBiALKQAANwAAIAZBCGogC0EIaikAADcAACAGQRhqIAtBGGopAAA3AAAgBkEQaiALQRBqKQAANwAAIA8gDUEEdGoiBkHgAmogECkCADcCACAGQegCaiAQQQhqKQIANwIAIA8gCEECdGpBmARqIBM2AgAgHiAINgIMIB4gBzYCCCAeIA82AgQgHkEEahDYASAeQRBqJAAMAQsACwsgIiAYNgIIICIgHDYCBCAiIB02AgAgCkGgAWokAAwBCwALIBooAgAiBiAGKAIIQQFqNgIIIBUoAhQgFSgCHEEEdGoaCyAVQSBqJAAMAgsgDCgCJCAMQSxqKAIAQQR0aiIGQeACaiEHIAZB7AJqKAIAIgZBAEwEQCAMQYgBaiIGIA1BCGooAgA2AgAgDCANKQIANwOAASAHEJEFIAdBCGogBigCADYCACAHIAwpA4ABNwIAIAcgBygCDEEBajYCDAwCCyAHIAZBAWo2AgwLIA0QkQULIAxBkAFqJAAgEUEYaiAXQRxqKQAANwAAIBFBEGogF0EUaikAADcAACARQQhqIBdBDGopAAA3AAAgESAXKQAENwAADAELIBEgDykAGDcAACARQRhqIA9BMGopAAA3AAAgEUEQaiAPQShqKQAANwAAIBFBCGogD0EgaikAADcAAAsgF0EwaiQAIARBDGohBAwBCwsgDkHoAGogAUEYaikAADcDAEEQIQQgDkHgAGogAUEQaikAADcDACAOQdgAaiABQQhqKQAANwMAIA4gASkAADcDUCAOQZgBakHcqsAANgIAIA5BjAFqQQA2AgAgDkIANwKEASAOQQA2AnwgDkIANwJ0IA4gDkHQAGo2ApwBIA4gDkEYajYClAEgDkGwAWoiASACIAMQuQIgDkGgAWohAyABIQdBACEIQQAhCkEAIRxBACEdQQAhF0EAIRpBACEJQQAhGyMAQdAAayIMJAAgDkH0AGoiDUEEaiEeAkACQAJAIA0oAgAiJARAIB4oAgANASANQX82AgQgDUEIaiEXCyANQRRqISAgDSgCECIlBEAgICgCAA0CIA1BfzYCFCANQRhqIRoLIA1BJGogFwR/IBcoAgQhCCAXKAIABUEACyEGKAIAIQIgDSgCKCEQIA0oAiAhASAMQUBrIBoEfyAaKAIAIQogGigCBAVBAAs2AgAgDEE4aiAINgIAIAxBHGogEEEIaikAADcCACAMQSRqIBBBEGopAAA3AgAgDEEsaiAQQRhqKQAANwIAIAwgAjYCECAMIAE2AgwgDCAKNgI8IAwgBjYCNCAMIBApAAA3AhQgDEHEAGoiAkEANgIIIAJBIDYCBCACIAc2AgAjAEFAaiIjJAAgDEEMaiIBKAIoIRkgAUEANgIoAkAgGUUEQCAjQQhqIhQgAUE4EM8FGiMAQcAEayIFJAAgBUEgNgIUIAUgBzYCECAFQSBqIAJBCGoiASgCADYCACAFIAIpAgA3AxggBUFAayAUQSBqKQAANwMAIAVBOGogFEEYaikAADcDACAFQTBqIBRBEGopAAA3AwAgBSAUKQAINwMoIAEoAgAhGCAFQShqQQdyIR8gBUHgAGohFSAFQfAAaiEcIAVB5ABqIR0gBUH0AGohDyAFQdwAaiEhIBQoAgQhEiAUKAIAIRMgAigCBCEiIAIoAgAhGSAFQdkAaiINQQJqIRACQAJAAkACQANAIAUgCSAYajYCmAQgBSAiNgKUBCAFIBk2ApAEIAVB2ABqIgEgBUGQBGoQwwIgBUHwA2ogEyAFQShqIAEgEigCDBEFACAFKALwA0UEQCAFQfAAaiIGIAVBQGspAwA3AwAgBUHoAGoiAiAFQThqKQMANwMAIAVB4ABqIgEgBUEwaikDADcDACAFIAUpAyg3A1hBzLzBAC0AABpBMEEEELACIgdFDQQgByAFKQNYNwABIAcgG0EARzoAACAHQQlqIAEpAwA3AAAgB0ERaiACKQMANwAAIAdBGWogBikDADcAACADQQE2AgAgAyAHNgIEDAMLIBtBAWohGyAFQdAAaiIIIAVB+ANqKAIANgIAIAUgBSkC8AM3A0gjAEFAaiIRJAAgFCgCMCIGBEAgFEE0aigCACECIBFBIGogBUEoaiILQQhqKQAANwIAIBFBKGogC0EQaikAADcCACARQTBqIAtBGGopAAA3AgAgEUEUaiAFQcgAaiIBKAIINgIAIBFBEGogASgCADYCACARQQA2AgwgEUEBOgAIIBEgCykAADcCGCAGIBFBCGogAigCDBEAAAsgEUFAayQAIAgoAgAhFiAFKAJIIQgDQCAFQdgAaiAIIBYQ4gECQAJAAkACQAJAAkACQCAFKAJYIgFBBUcEQCAFQegDaiILICFBCGooAgA2AgAgBSAhKQIANwPgAyAFKAJoIREgBSgCbCEIIAUoAnAhFiAFQbgCaiAPQagBEM8FGiAFKQKgAiEnIAUoApwCIQYgAUEBaw4EAgMEBQELIAVBmARqIgYgBUEwaikDADcDACAFQaAEaiICIAVBOGopAwA3AwAgBUGoBGoiASAFQUBrKQMANwMAIAVB+wNqICFBCGooAAA2AAAgBSAFKQMoNwOQBEHMvMEALQAAGiAFICEpAAA3APMDQTBBBBCwAiIHRQ0LIAdBAzoAACAHIAUpA5AENwABIAcgBSkA8AM3ACEgB0EJaiAGKQMANwAAIAdBEWogAikDADcAACAHQRlqIAEpAwA3AAAgB0EoaiAFQfcDaikAADcAACADQQE2AgAgAyAHNgIEDAkLIBQgBUEQahCvAiADQgA3AgAMCAsgBUH4A2ogBUHoA2ooAgA2AgAgBSAFKQPgAzcD8AMgBUHwA2ogBUEYahDHAkUEQCAUIAVBEGoQrwIgA0IANwIADAgLIAVB/ABqIBI2AgAgBUH0AGpBIDYCAEEAIQogBUHsAGpBADoAACAFQegAaiAiNgIAIAUgFEEwaiIBNgKAASAFIBM2AnggBSAHNgJwIAUgGTYCZCAFIBY2AmAgBSAINgJcIAUgETYCWCAFQZAEaiAFQdgAaiAFQeQAaiAHIBMgEiABEKUCAkAgBSgCkAQEQCADIAUpApAENwIEIANBDGogBUGYBGooAgA2AgAMAQsgAyAFKAKUBDYCBEEBIQoLIAMgCjYCAAwHCyAVIAsoAgA2AgAgBSAFKQPgAzcDWCAFQRhqIAVB2ABqEMICRQRAIBQgBUEQahCvAiADQgA3AgAMBwsgBSAFKAJcQQF0IAUoAmBrIgogBSgCIGo2AiAMAwsgFSALKAIANgIAIAUgBSkD4AM3A1ggBSAWNgJsIAUgCDYCaCAFIBE2AmQgHCAFQbgCakGoARDPBRogBUEYaiIBKAIIIAEoAgRBAXRHBEAgBSgCICICQQF2IgEgBSgCHE8NAiAFQdgAaiAFKAIYIAFqLQAAIgFBD3EgAUEEdiACQQFxG0EMbGoiASgCACIRQQJGBEAgFCAFQRBqEK8CIANCADcCAAwHC0EBIQogBSACQQFqNgIgIAEoAgghFiABKAIEIQgMAwsgBkECRwRAIAVBtARqIBI2AgAgBUGsBGpBIDYCAEEAIRYgBUGkBGpBADoAACAFQaAEaiAiNgIAIAUgFEEwaiIBNgK4BCAFIBM2ArAEIAUgBzYCqAQgBSAZNgKcBCAFICc3ApQEIAUgBjYCkAQgBUHwA2ogBUGQBGogBUGcBGogByATIBIgARClAgJAIAUoAvADBEAgAyAFKQLwAzcCBCADQQxqIAVB+ANqKAIANgIADAELIAMgBSgC9AM2AgRBASEWCyADIBY2AgAMBgsgFCAFQRBqEK8CIANCADcCAAwFCyAFKQKsAiEmIAUoAqgCIQIgBUGIBGogCygCADYCACAFIAUpA+ADNwOABCAFIBY2AmAgBSAINgJcIAUgETYCWCAdIAVBuAJqQagBEM8FGiAFICc3ApACIAUgBjYCjAIgBUEYaiAFQYAEahDCAkUEQCAUIAVBEGoQrwIgA0IANwIADAULIAUoAoQEQQF0IAUoAogEayILIAUoAhwiBkEBdCAFKAIgIghrRwRAIAYgCCALaiICQQF2IgFNDQEgBUHYAGogBSgCGCABai0AACIBQQ9xIAFBBHYgAkEBcRtBDGxqIgEoAgAiEUECRgRAIBQgBUEQahCvAiADQgA3AgAMBgsgBSALQQFqIgogCGo2AiAgASgCCCEWIAEoAgQhCAwCCyACQQJHBEAgBUG0BGogEjYCACAFQawEakEgNgIAQQAhFiAFQaQEakEAOgAAIAVBoARqICI2AgAgBSAUQTBqIgE2ArgEIAUgEzYCsAQgBSAHNgKoBCAFIBk2ApwEIAUgJjcClAQgBSACNgKQBCAFQfADaiAFQZAEaiAFQZwEaiAHIBMgEiABEKUCAkAgBSgC8AMEQCADIAUpAvADNwIEIANBDGogBUH4A2ooAgA2AgAMAQsgAyAFKAL0AzYCBEEBIRYLIAMgFjYCAAwFCyAUIAVBEGoQrwIgA0IANwIADAQLAAsgCSAKaiEJIBENAAsgBUHYAGogCCAWEFkCQCAFLQBYRQRAIAVBCGogFkEAEI0FIAUoAgwhAiAFKAIIIAggFhDPBSEBQcy8wQAtAAAaQTBBBBCwAiIGDQEMBQsgBUGYBGogFUEIaikAACIoNwMAIAVBoARqIBVBEGopAAAiJzcDACAFQagEaiAVQRhqLQAAIgI6AAAgBSANLwAAOwEoIAUgFSkAACImNwOQBCAFIBAtAAA6ACogBSgAXCEBIB9BGGogAjoAACAfQRBqICc3AAAgH0EIaiAoNwAAIB8gJjcAACAFIAE2ACsgBUHIAGoQkQUMAQsLIAZBBDoAACAGIAUpAyg3AAEgBiAWNgIsIAYgATYCJCAGIAI2AiggBkEJaiAFQTBqKQMANwAAIAZBEWogBUE4aikDADcAACAGQRlqIAVBQGspAwA3AAAgA0EBNgIAIAMgBjYCBAsgBUHIAGoQkQULIAVBwARqJAAMAQsACwwBCyABQSxqKAIAIQsgI0EIaiIbIAFBOBDPBRojAEGwAWsiCSQAIAlBIDYCHCAJIAc2AhgCQAJAAkACQAJAAkACQAJAAkACQCAbKAIwIgFFBEAgCSACNgIgIAkgCUEYajYCJAwBCyABIAdBICAbQTRqKAIAKAIQEQQAIAkgAjYCICAJIAlBGGo2AiRB/wFxQQFLDQELIBkgB0EgIAsoAgwRBAAiAQ0BCyAJQdwAaiAJQSBqIBsgGSALEK4CIAkoAlwNAQwECyABLQAAQQFrDgIBAgULIAkoAmAhASADQQE2AgAgAyABNgIEDAULIAlB+ABqIAFBGWopAAA3AgAgCUHwAGogAUERaikAADcCACAJQegAaiABQQlqKQAANwIAIAlBADYCXCAJIAEpAAE3AmAgCUEAOgBYIAkgAikCADcCUCAJQYgBaiAJQdwAaiAJQdAAaiAJKAIYIAkoAhwgGSALIBsoAgAgGygCBCAbQTBqEKQCIAkoAogBIgEEQCAJQThqIAlBmAFqKQIANwIAIAlBQGsgCUGgAWopAgA3AgAgCUHIAGogCUGoAWopAgA3AgAgCSAJKQKQATcCMCAJIAkoAowBNgIsIAkgATYCKCAJKAIYIQIgCSgCHCEBIAlBiAFqIgggCUEoahCqAiMAQRBrIgYkACAJQdwAaiIHIAgpAAg3AAEgB0EZaiAIQSBqKQAANwAAIAdBEWogCEEYaikAADcAACAHQQlqIAhBEGopAAA3AAAgBkEIaiAIKAIAIAgoAgQQywIgByAGKQMINwIkIAdBAjoAACAGQRBqJAAgGSACIAEgByALKAIQEQUAIAkoAighCiAJKAIsIQYMAwsgCSgCjAEhASADQQE2AgAgAyABNgIEDAQLIwBBEGsiGCQAIBhBCGohD0EAIQZBACEIAkAgAUEkaiINKAIAIgJBf0YNACACKAIAIQYCQANAIAZFDQIgBkEASA0BIAIgBkEBaiACKAIAIgEgASAGRhs2AgAgASAGRyABIQYNAAsgDSgCBCEGIAIhCAwBCwALIA8gBjYCBCAPIAg2AgAgGCgCDCECIAlBEGoiASAYKAIINgIAIAEgAjYCBCAYQRBqJAAgCSgCECIKBEAgCSgCFCEGDAILIAlB3ABqIAlBIGogGyAZIAsQrgIgCSgCXEUNACAJKAJgIQEgA0EBNgIAIAMgATYCBAwDCyAJQeQAaigCACEGIAkoAmAiCg0ADAELIAkgBjYCYCAJIAo2AlwgCUEIaiIGIAlB3ABqIgIiASgCBDYCBCAGIAEoAgBBCGo2AgAgCSgCCCEBIAkgCSgCDCIHQQAQjQUgCSgCBCEcIAkoAgAiHSABIAcQzwUaIAIQTAsgAyAdNgIEIANBADYCACADQQxqIAc2AgAgA0EIaiAcNgIACyAJQbABaiQACyAjQUBrJAAgGgRAICBBACAlGyIBIAEoAgBBAWo2AgALIBcEQCAeQQAgJBsiASABKAIAQQFqNgIACyAMQdAAaiQADAILAAsACwJAIA4oAqABRQRAIA4oAqQBIQEgAEEIaiAOQagBaikCADcDACAAIAE2AgQgDkEYahDJAQwBCyAAIA4oAqQBNgIEIA5BGGoQyQFBDSEECyAAIAQ6AAAgDkHQAWokAAvcBwIQfwJ+IwBBMGsiByQAIAcCfyAAQQxqIgEoAgAiCgRAIAdBKGogASgCBCICNgIAIAdBJGogCjYCACAHQgE3AhwgByAKNgIUIAdCATcCDCAHIAI2AhggASgCCAwBCyAHQQA2AhwgB0EANgIMQQALNgIsIAdBDGohAyMAQRBrIg4kAANAIA5BBGohCiMAQRBrIg8kAAJAAkACQCADKAIgIgJFBEAgD0EEaiEBIAMoAgAhAiADQQA2AgACQCACBEAgAygCDCEFIAMoAgghCSADKAIEIgJFBEADQCAFBEAgBUEBayEFIAkoApgEIQkMAQsLIAFCADcCBCABIAk2AgAMAgsgASAFNgIIIAEgCTYCBCABIAI2AgAMAQsgAUEANgIACyAPKAIEBEAjAEEQayIBJAAgD0EEaiICKAIEIQQgAigCACEFA0AgAUEEaiAFIAQQ2wEgASgCBCIFBEAgASgCCCEEDAELCyABQRBqJAALIApBADYCAAwBCyADIAJBAWs2AiACfyADQQRqIQECQCADKAIAIgIEQCADKAIERQ0BCyABQQAgAhsMAQsgA0EIaiEJIANBDGooAgAhBANAIAkoAgAhAiAEBEAgBEEBayEEIAJBmARqIQkMAQsLIANCADcCCCADIAI2AgQgA0EBNgIAIAELIgJFDQEjAEEwayIIJAAgCEEYaiELIwBBIGsiBiQAIAIoAgghECACKAIEIQUgAigCACEMAkADQCAMLwGWBCAQSwRAIAYgEDYCHCAGIAU2AhggBiAMNgIUIAZBCGohDSAGQRRqIgEoAghBAWohCSABKAIAIQQCQCABKAIEIgFFBEAgDSAJNgIIIA1BADYCBCANIAQ2AgAMAQsgBCAJQQJ0akGYBGooAgAhBCABQQFrIQEDQCABBEAgAUEBayEBIAQoApgEIQQMAQUgDUIANwIEIA0gBDYCAAsLCyALQQhqIAZBEGooAgA2AgAgCyAGKQMINwIAIAsgEDYCFCALIAU2AhAgCyAMNgIMDAILIAZBFGogDCAFENsBIAYoAhQiDARAIAYoAhwhECAGKAIYIQUMAQsLIAtBADYCAAsgBkEgaiQAIAgoAhhFBEAACyAIQRBqIAhBKGopAgA3AwAgCEEIaiAIQSBqKQIAIhE3AwAgCCAIKQIYIhI3AwAgAkEIaiARPgIAIAIgEjcCACAKIAgpAgw3AgAgCkEIaiAIQRRqKAIANgIAIAhBMGokAAsgD0EQaiQADAELAAsgDigCBCICBEAgAiAOKAIMQQR0akHgAmoQkQUMAQsLIA5BEGokACAHQTBqJAAgABCRBQumEQIKfwV+IwBBIGsiCCQAAkAgASkDICACKQNgQgWIWARAIwBB0BFrIgMkACADQfgAaiIBQQ8QxAMgA0G4CWoiBCACQfAAaiIGENkCIANB8ABqIAEgBEEgEMUDAkACQCADKAJwDQAjAEEQayIBJAAgAUEEaiIEIAZBoAJqENYCIANBuAlqIgUgBBDkAiAEEJEFIAFBEGokACADQegAaiADQfgAaiAFQSAQxQMgAygCaA0AIANBuAlqIgEgBkEgahDZAiADQeAAaiADQfgAaiABQSAQxQMgAygCYA0AIANBuAlqIgEgBkFAaxDZAiADQdgAaiADQfgAaiABQSAQxQMgAygCWA0AIANBuAlqIQUgBkG0AmoiASgCACEEIAEoAgghByMAQfAQayIBJAAgAUEYakEIEMQDIAFBEGoiCSAEIAdqNgIEIAkgBDYCACABKAIUIQkgASgCECEHAkADQAJAIAcgCUYEQCABQdgIaiIEIAFBGGpBmAgQzwUaIAFBtAhqIAQQyQMgAS0AtAgNASAFIAEpALUINwAAIAVBGGogAUHNCGopAAA3AAAgBUEQaiABQcUIaikAADcAACAFQQhqIAFBvQhqKQAANwAAIAFB8BBqJAAMAwsgAUHYCGoiBEEBNgIgIAQgBy0AADoAACABQQhqIgsgBCgCBCAEKAIgIgogCkEgSyIKGzYCBCALIAQoAgAgBCAKGzYCACABIAFBGGogASgCCCABKAIMEMUDIAEoAgANACAHQQFqIQcgAUHYCGoQvQMMAQsLAAsgA0HQAGogA0H4AGogBUEgEMUDIAMoAlANACADQbgJaiIBIAZB4ABqENkCIANByABqIANB+ABqIAFBIBDFAyADKAJIDQAgA0G4CWoiASAGQYACahDLAyADQUBrIANB+ABqIAFBIBDFAyADKAJADQAgA0G4CWoiASAGQYgCahDLAyADQThqIANB+ABqIAFBIBDFAyADKAI4DQAgA0G4CWoiASAGQZACahDLAyADQTBqIANB+ABqIAFBIBDFAyADKAIwDQAgA0G4CWoiASAGQZgCahDLAyADQShqIANB+ABqIAFBIBDFAyADKAIoDQAjAEEgayIEJAAgBCAGQcACaiIBKAIAIAEoAggiBRD7AiMAQUBqIgEkACABQRhqQgA3AwAgAUEQakIANwMAIAFBCGpCADcDACABQgA3AwAgASAFNgIgIAFBBCABQSBqIgVBBBDJBSAFIARBICABQSAQzgMgA0G4CWoiByAFQSAQ3QMgAUFAayQAIARBIGokACADQSBqIANB+ABqIAdBIBDFAyADKAIgDQAjAEEgayIBJAAgAUEYakIANwMAIAFBEGpCADcDACABQQhqQgA3AwAgAUIANwMAIAZBgAFqIQcgASEEQSAhBQNAIAUEQCAHKQMAIQ4jAEEQayIJJAAgBUEHTQRAAAsgCSAONwMIIARBCCAJQQhqQQgQyQUgCUEQaiQAIAdBCGohByAEQQhqIQQgBUEIayEFDAELCyADQbgJaiIEIAFBIBDdAyABQSBqJAAgA0EYaiADQfgAaiAEQSAQxQMgAygCGA0AIANBuAlqIgEgBkGgAWoQ2QIgA0EQaiADQfgAaiABQSAQxQMgAygCEA0AIANBuAlqIgEgBkHAAWoQ2QIgA0EIaiADQfgAaiABQSAQxQMgAygCCA0AIANBuAlqIgEgBkHgAWoQ2QIgAyADQfgAaiABQSAQxQMgAygCAA0AIANBuAlqIgEgA0H4AGpBmAgQzwUaIANBlAlqIAEQyQMgAy0AlAkNACAIIAMpAJUJNwAAIAhBGGogA0GtCWopAAA3AAAgCEEQaiADQaUJaikAADcAACAIQQhqIANBnQlqKQAANwAAIANB0BFqJAAMAQsAC0IZEIUDIQ4gAkFAayEDQQAhBiMAQaACayIEJAAgBEEcaiACQcADaiIBKAIAIgIgAiABKAIIQQV0ahCCASAEQUBrIgUgCEEYaikAADcDACAEQThqIgcgCEEQaikAADcDACAEQTBqIgkgCEEIaikAADcDACAEIAgpAAA3AyhBBCAEKAIkIgEgAUEETxshCyAEQZgBaiECIAQoAhwhAQNAAkACQAJAAkACQCAGIAtHBEAgBEEIaiAGEPYBIAQoAghBAUcNASAEKQMQIg1QDQIgDiANgEIBg1ANAyABQQhqKQAAIQ0gAUEQaikAACEPIAEpAAAhECAEQZABaiABQRhqKQAANwMAIARBiAFqIA83AwAgBEGAAWogDTcDACACIAQpAyg3AAAgAkEIaiAJKQMANwAAIAJBEGogBykDADcAACACQRhqIAUpAwA3AAAgBCAQNwN4DAQLIARBKGogAxDdBCEBDAQLQQAhAQwDCwALIAFBGGopAAAhDSABQRBqKQAAIQ8gAUEIaikAACEQIAEpAAAhESAEQYABaiAJKQMANwMAIARBiAFqIAcpAwA3AwAgBEGQAWogBSkDADcDACACIBE3AAAgAkEIaiAQNwAAIAJBEGogDzcAACACQRhqIA03AAAgBCAEKQMoNwN4CyAEQcwAaiIKIARB+ABqEGMgBkEBaiEGIAFBIGohASAEQeABaiIMIAoQ9wEgBEEoaiAMEJUDDAELCyAEQfgBaiAIQRhqKQAANwMAIARB8AFqIAhBEGopAAA3AwAgBEHoAWogCEEIaikAADcDACAEQYgCaiADQQhqKQAANwMAIARBkAJqIANBEGopAAA3AwAgBEGYAmogA0EYaikAADcDACAEIAgpAAA3A+ABIAQgAykAADcDgAIgBEGAAWogBEHgAWpBwAAQzwUaIARByAFqQQQ2AgAgBEHAAWogDjcDACAEQcwBaiAEKQIcNwIAIARB1AFqIARBJGooAgA2AgAgBEEAOgB4IAAgASAEQfgAahD4ASAEQaACaiQADAELIABBAToAAAsgCEEgaiQACyYAIAFFBEAgACACQegAEM8FGg8LIABBEDoAACAAIAE2AgQgAhA8CyMAIAEgAkGhqsAAQQUQxwUhASAAQRU2AgAgACABQQFzOgAEC18AIAEoAuABRQRAIABBADYC4AEgACACKQIANwIAIABBGGogAkEYaigCADYCACAAQRBqIAJBEGopAgA3AgAgAEEIaiACQQhqKQIANwIADwsgACABQfABEM8FGiACEM4BCycAAkACQCAAKAIAQQNrDgIAAAELIAAoAgRBA0cNACAAQQhqEMACCwv7AQEBfyAAKAIAIQIjAEEwayIAJAACfwJAAkACQCACKAIAQQFrDgIBAgALIABBJGpCATcCACAAQQI2AhwgAEHotMAANgIYIABBJzYCECAAIAJBBGo2AhQgACAAQQxqNgIgIAAgAEEUajYCDCABIABBGGoQqgUMAgsgAEEkakIBNwIAIABBAjYCHCAAQay1wAA2AhggAEEnNgIQIAAgAkEEajYCFCAAIABBDGo2AiAgACAAQRRqNgIMIAEgAEEYahCqBQwBCyAAQSRqQgA3AgAgAEEB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AGoiAUEQNgIAIARBvKrAADYCqEcgBEEHNgKkRyAEQagMakEEciEOIAlFDQIgBEGgPmoiAiASQfAAakGkBBDPBRogBEGkxwBqEMMBIARB+DlqIgEgAkGkBBDPBRogBEHIwgBqIgsgAUGkBBDPBRogBCAVNwPwRiAEIAk2AuxGIARBqC5qIQcjAEHAIWsiAyQAIANBwBBqIgEgC0HwARDPBRogA0H4GWpBDzYCACADQfCqwAA2AvQZIANBADYC8BkgA0HgG2ogASADQfAZahDNAQJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkAgAygCwB0iCQRAIANBmAtqIgIgA0HgG2pB4AEQzwUaIANB5A5qIANBzB1qKAIANgIAIAMgAykCxB03AtwOIANB+AxqIgEgAkHgARDPBRogAyAJNgLYDiADQcAUaiABEOYBIAMoAoAYIgFFDQIgA0GYGGoiCiADQcwUaikCADcDACADQaAYaiICIANB1BRqKQIANwMAIAMgAykCxBQ3A5AYIAMoAsAUIRQgA0HMB2ogA0HcFGpBpAMQzwUaIANB/ApqIANBjBhqKAIANgIAIANBkAtqIAIpAwAiFjcDACADQYgLaiAKKQMAIhU3AwAgA0G8B2ogFTcCACADQcQHaiAWNwIAIAMgAykChBg3AvQKIAMgAykDkBgiGDcDgAsgAyAUNgKwByADIAE2AvAKIAMgGDcCtAcCQAJAAkACQCALKALgAyIBRQRAQQAhDwwBCyADQewbaiALQewDaikCADcCACADQfQbaiALQfQDaigCADYCACADIAE2AuAbIAMgC0HkA2opAgA3AuQbIANBxBRqIANB4BtqEIMBIAMoAsQUIg9FDQEgA0HIEGogA0HoFGopAgA3AwAgA0HQEGogA0HwFGopAgA3AwAgA0HYEGogA0H4FGopAgA3AwAgAyADQeAUaikCADcDwBAgA0HcFGooAgAhAiADQdQUaikCACEYIANB0BRqKAIAIQogA0HMFGooAgAhFCADQcgUaigCACERCyADQYwPaiADQcgQaikDADcCACADQZQPaiADQdAQaikDADcCACADQZwPaiADQdgQaikDADcCACADIAMpA8AQNwKEDyADIAI2AoAPIAMgGDcC+A4gAyAKNgL0DiADIBQ2AvAOIAMgETYC7A4gAyAPNgLoDiALQZgEaiERIAtBoARqKAIAIgYNAQwCCyADQcgUaikCACEWIANB0BRqKAIAIQEgA0HUFGopAgAhFSAHQQI6AKwKIAcgFTcDECAHIAE2AgwgByAWNwIEIAdBAjYCACADQbAHahA5DAgLIANB+BlqIBFBCGooAgA2AgAgAyARKQIANwPwGSADQcAUaiEJIwBBgAJrIggkACAIIANB8BlqIgIoAgAiATYC6AEgCCACKAIENgLkASAIIAE2AuABIAggASACKAIIQQxsajYC7AEgCEHQAWogCEHgAWoQswECQCAIKALQASICQQNGBEAgCEG4AWogCEHcAWooAgAiATYCACAIQfgBaiABNgIAIAggCCkC1AEiFTcDsAEgCCAVNwPwASAIQQxqIgECfyAIQfABaiICKAIIQQVGBEAgAkEANgIIIAFBAWogAigCAEGgARDPBRogAhDAAkEADAELIAEgAikCADcCBCABQQxqIAJBCGooAgA2AgBBAQs6AAAgCQJ/IAgtAAxFBEAgCUEBaiAIQQxqQQFyQaABEM8FGkEADAELIAlBAzYCBCAJQQhqIAgpAhA3AgAgCUEQaiAIQRhqKAIANgIAQQELOgAADAELIAhBuAFqIAhB3AFqKAIAIgE2AgAgCCAIKQLUASIVNwOwASAJQRBqIAE2AgAgCUEIaiAVNwIAIAkgAjYCBCAJQQE6AAALIAhBgAJqJAAgAy0AwBQNAiADQb4QaiADLQDDFDoAACADQcgQaiIBIANB0BRqKQIANwMAIAMgAy8AwRQ7AbwQIAMgA0HIFGopAgA3A8AQIANBxBRqKAIAIRQgA0HYFGopAgAhGCADQaQPaiADQeAUakGBARDPBRogA0GwEGogASkDADcDACADIAMpA8AQIhU3A+AbIAMgFTcDqBBBASENCyADQeAbaiIBIAtB8AFqQfABEM8FGiADQdgdakEQNgIAIANB/6rAADYC1B0gA0EANgLQHSADQfAZaiABIANB0B1qEM0BAkACQCADKALQGyIJBEAgA0GQGGoiAiADQfAZakHgARDPBRogA0HcH2ogA0HcG2ooAgA2AgAgAyADKQLUGzcC1B8gA0HwHWoiASACQeABEM8FGiADIAk2AtAfIANBwBRqIAEQ5gEgAygCgBgiCkUNBiADQbAUaiIIIANBzBRqIgkpAgA3AwAgA0G4FGoiAiADQdQUaikCADcDACADIAMpAsQUNwOoFCADKALAFCEBIANB3BBqIANB3BRqQaQDEM8FGiADQYwUaiADQYwYaigCADYCACADQaAUaiACKQMAIhY3AwAgA0GYFGogCCkDACIVNwMAIANBzBBqIBU3AgAgA0HUEGogFjcCACADIAMpAoQYNwKEFCADIAMpA6gUIhU3A5AUIAMgATYCwBAgAyAKNgKAFCADIBU3AsQQIANB+BlqIAtBrARqKAIANgIAIAMgCykCpAQ3A/AZIANBwBRqIQgjAEGgAmsiCiQAIAogA0HwGWoiAigCACIBNgKIAiAKIAIoAgQ2AoQCIAogATYCgAIgCiABIAIoAghBDGxqNgKMAiAKQfABaiAKQYACahCzAQJAIAooAvABIgJBA0YEQCAKQdgBaiAKQfwBaigCACIBNgIAIApBmAJqIAE2AgAgCiAKKQL0ASIVNwPQASAKIBU3A5ACIApBDGoiAQJ/IApBkAJqIgIoAghBBkYEQCACQQA2AgggAUEBaiACKAIAQcABEM8FGiACEMACQQAMAQsgASACKQIANwIEIAFBDGogAkEIaigCADYCAEEBCzoAACAIAn8gCi0ADEUEQCAIQQFqIApBDGpBAXJBwAEQzwUaQQAMAQsgCEEDNgIEIAhBCGogCikCEDcCACAIQRBqIApBGGooAgA2AgBBAQs6AAAMAQsgCkHYAWogCkH8AWooAgAiATYCACAKIAopAvQBIhU3A9ABIAhBEGogATYCACAIQQhqIBU3AgAgCCACNgIEIAhBAToAAAsgCkGgAmokACADLQDAFA0BIANBliFqIAMtAMMUOgAAIANB6BtqIgIgA0HQFGopAgA3AwAgAyADLwDBFDsBlCEgAyADQcgUaikCADcD4BsgA0HEFGooAgAhCSADQdgUaikCACEZIANB8B9qIANB4BRqQaEBEM8FGiADQegfaiACKQMANwMAIAMgAykD4Bs3A+AfIAsoAvgDIQggAkEONgIAIANBj6vAADYC5BsgA0EANgLgGyAIRQ0CIANBgBpqIgEgC0GMBGooAgA2AgAgA0H4GWoiAiALQYQEaikCADcDACADIAtB/ANqKQIANwPwGSADQeAbahDOASADQeAdaiABKAIAIgE2AgAgA0HYHWogAikDACIVNwMAIANBtCFqIBU3AgAgA0G8IWogATYCACADIAMpA/AZIhU3A9AdIAMgCDYCqCEgAyAVNwKsISADQcAUaiETIwBBgARrIgUkACAFQdABaiADQaghaiIKQQhqKAIANgIAIAUgCikCADcDyAECQCAFKALMASIPQSFPBEAgBSAFKALQATYCsAIgBSAFKALIATYCrAIMAQsgBSgC0AEhDyAFQQA2AtABIAVBrAJqIAUoAsgBIA8QzwUaIAVByAFqEJEFCyAFIA82AswCIAVBjANqIQwjAEEQayIIJAACQAJAAkAgBUGsAmoiDygCBCAPKAIgIgEgAUEgSxsiAUHAAEcEQCAMQQxqQcAANgIAIAxBCGogATYCACAMQQM2AgQMAQsgCEEIaiICIA8oAgQgDygCICIBIAFBIEsiARs2AgQgAiAPKAIAIA8gARs2AgAgCCgCDCICRQ0BIAgoAggiAUUNASABIAJqQQFrLQAAQQBxRQRAIAxBBGogD0EkEM8FGiAMQQA2AgAgDEEoakGABDYCAAwDCyAMQQI2AgQLIAxBATYCACAPEL0DDAELAAsgCEEQaiQAAkAgBSgCjANFBEAgBUGoAWogBUGoA2opAgA3AgAgBUGwAWogBUGwA2opAgA3AgAgBUHAAWogBUGcA2ooAgAiATYCACAFQZwBaiABNgIAIAUgBUGgA2opAgA3AqABIAUgBUGUA2opAgAiFTcDuAEgBSAVNwKUASAFIAUoApADNgKQASAFQfgDaiAKQRRqKAIANgIAIAUgCikCDDcD8AMjAEHQAWsiCCQAIAhB6ABqIgECfyAFQfADaiICKAIIQeAARgRAIAJBADYCCCABQQFqIAIoAgBB4AAQzwUaIAIQkQVBAAwBCyABIAIpAgA3AgQgAUEMaiACQQhqKAIANgIAQQELOgAAIAVBjANqIgICfyAILQBoRQRAIAhBCGoiASAIQegAakEBckHgABDPBRogAkEBaiABQeAAEM8FGkEADAELIAhBE2ogCEH0AGooAgAiATYAACAIIAgpAmwiFTcACyAIQfAAaiABNgIAIAggFTcDaCAIQegAahCRBSACQRBqIAE2AgAgAkKAgICAgAw3AgRBAQs6AAAgCEHQAWokACAFLQCMA0UEQCAFQawCaiIBIAVBjANqQQFyQeAAEM8FGiAFQcgBaiICIAFB4AAQzwUaIAVBCGoiASACQeAAEM8FGiAFQegAaiAFQZABakEoEM8FGiATQQRqIAFBiAEQzwUaIBNBADYCAAwCCyAFQdMBaiAFQZgDaikCACIWNwAAIAUgBSkCkAMiFTcAywEgE0EMaiAWNwAAIBMgFTcABCATQQE2AgAgBUGQAWoQvQMMAQsgBUHAAWogBUGYA2ooAgAiATYCACAFIAUpApADIhU3A7gBIBNBEGogATYCACATQQhqIBU3AgAgE0KBgICAMDcCACAKQQxqEJEFCyAFQYAEaiQAIAMoAsAUDQcgA0GwFGoiASADQdAUaikCADcDACADIANByBRqKQIANwOoFCADQdgUaikCACEXIAMoAsQUIQIgB0H8CGogA0HgFGpB7AAQzwUaIANBoCFqIAEpAwAiFjcDACADIAMpA6gUIhU3A5ghIAdB7AhqIBY3AgAgByAVNwLkCCALKQOQBCEVIANBCGoiASADQbAHakHQAxDPBRogB0HwCWogA0HoDmpBPBDPBRogB0GvCmogA0G+EGotAAA6AAAgByADLwG8EDsArQogByADKQOoEDcAtAogB0G8CmogA0GwEGopAwA3AAAgB0HMCmogA0GkD2pBgQEQzwUaIANB2ANqIANBwBBqQdADEM8FGiADQaoHaiADQZYhai0AADoAACAHIAMpA+AfNwCnByAHQa8HaiADQegfaikDADcAACADIAMvAZQhOwGoByAHQb8HaiADQfAfakGhARDPBRogByABQaMHEM8FIgEgGDcCxAogASAUNgKwCiABIA06AKwKIAEgFTcD6AkgASAXNwL0CCABIAI2AuAIIAEgGTcAtwcgASAJNgCjByABIAMvAAU7AM0LIAFBzwtqIANBB2otAAA6AAAgBg0RIBEQJwwRCyADQagYaiADQYgaaigCACIBNgIAIANBoBhqIANBgBpqKQMAIhc3AwAgA0GYGGogA0H4GWopAwAiFjcDACADIAMpA/AZIhU3A5AYIAdBGGogATYCACAHQRBqIBc3AwAgB0EIaiAWNwMAIAcgFTcDACAHQQI6AKwKDAoLIANB6B9qIAkpAgAiFjcDACADIAMpAsQUIhU3A+AfIAdBDGogFjcAACAHIBU3AAQgB0ECOgCsCiAHQQQ2AgAgA0HAEGoQOSADQegOahA7IANBsAdqEDkgBg0OQQAhD0EAIQpBAQwKCyADQdgdaiACQQhqKQIAIhY3AwAgA0HgHWog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BkEFNgIAIAZBDGogBzYCACAGQQhqIAQ2AgAMCwsgA0ECNgLUASADQQI2AsgBIANBAjYCvAEgA0ECNgKwASADQQI2AqQBIANBAjYCmAEgA0ECNgKMASADQQI2AoABIANBAjYCdCADQQI2AmggA0ECNgJcIANBAjYCUCADQQI2AkQgA0ECNgI4IANBAjYCLCADQQI2AiAgA0H0AWohByADQZACaiEEIANBhAJqIQsgA0GwAmohCCADQaQCaiENQQAhBSADQSBqIQoDQCAFQRBGBEAgA0GgAmogA0EEakEQEOgDAn8CQCADKAKgAiIEBEAgA0H4AWogA0GsAmooAgAiCjYCACADIAMpAqQCIhI3A/ABIANBmAJqIgggA0G4AmoiBSgCADYCACADQYwCaiAKNgIAIAMgAykCsAI3ApACIAMgEjcChAIgAyAENgKAAiADKAK8AiEEIANBgAJqIgcoAgQEfyAHKAIALQAAQb8BcUGAAUYFQQALRQ0BQQIMAgsgA0H4AWogA0GsAmooAgAiBDYCACADIAMpAqQCIhI3A/ABIAZBDGogBDYCACAGIBI3AgQgBkEFNgIADA4LIAUgCCgCADYCACADQbACaiADQZACaikCADcDACADQagCaiADQYgCaikCADcDACADIAMpAoACNwOgAiADQfABaiADQaACaiAEELoCIAMoAvABIgRBC0cEQCAGQQhqIAMpAvQBNwIAIAYgBDYCBCAGQQU2AgAMDgsgA0H4AWooAgAhCiADKAL0ASEIQQALIQQgBkEQaiADQSBqQcABEM8FGiAGIAo2AgwgBiAINgIIIAYgBDYCBCAGQQM2AgAgBiADKQKgAjcC0AEgBkHYAWogA0GoAmooAgA2AgAMDAsgA0GgAmogA0EEaiAFEOgDIANB+AFqIgwgDUEIaigCADYCACADIA0pAgA3A/ABIAMoAqACIg5FDQYgBCAIKQIANwIAIARBCGogCEEIaigCADYCACADKAK8AiEPIAtBCGogDCgCADYCACALIAMpA/ABNwIAIAMgDjYCgAIgA0GAAmoiDCgCBAR/IAwoAgAtAABBvwFxQYABRgVBAAtFBEAgA0G4AmogA0GYAmooAgA2AgAgCCAEKQIANwMAIANBqAJqIANBiAJqKQIANwMAIAMgAykCgAI3A6ACIANB8AFqIANBoAJqIA8QuwIg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AkEQaiACQYwBaiIHKQIANwMAIAJBIGogAkGcAWoiCC0AADoAACACIAIvAH07ASQgAiACQZQBaikCACIVNwMoIAIgAkGEAWopAgA3AwggAiAVNwMYIAJBgAFqIgkoAgAhCyAGIAVBJGooAgA2AgAgAiAFKQIcNwNIIAJB/ABqIAJByABqEJQDIAItAHxFBEAgAkHGAGogAi0AfzoAACACQTBqIgYgBykCADcDACACQUBrIgcgCC0AADoAACACIAIvAH07AUQgAiACQZQBaiIIKQIAIhU3A6ABIAIgAkGEAWoiDCkCADcDKCACIBU3AzggCSgCACEJIAJBqAFqIAVBMGooAgA2AgAgAiAFKQIoNwOgASACQfwAaiACQaABahCUAyACLQB8RQRAIANBygBqIAItAH86AAAgA0HIAGogAi8AfTsAACACQfAAaiACQYwBaikCACIVNwMAIAJB4ABqIAJBnAFqLQAAIgU6AAAgAkHQAGoiCiAVNwMAIAIgDCkCACIVNwNoIAIgCCkCACIXNwNYIAJBgAFqKAIAIQggA0HfAGogFzcAACADQecAaiAFOgAAIAIgFTcDSCADQdcAaiAKKQMANwAAIANBzwBqIAIpA0g3AAAgAyACLwEkOwAIIANBCmogAkEmai0AADoAACADQQ9qIAIpAwg3AAAgA0EXaiACQRBqKQMANwAAIANBH2ogAikDGDcAACADQSdqIAJBIGotAAA6AAAgA0EqaiACQcYAai0AADoAACADQShqIAIvAUQ7AAAgA0E3aiAGKQMANwAAIANBL2ogAikDKDcAACADQccAaiAHLQAAOgAAIANBP2ogAikDODcAACADQfAAaiATNwMAIANB6ABqIBQ3AwAgA0HLAGogCDYAACADQStqIAk2AAAgA0ELaiALNgAAIANBADYCAAwECyACQdAAaiACQYgBaikCACITNwMAIAIgAikCgAEiFDcDSCADQRBqIBM3AAAgA0EIaiAUNwAAIANCgYCAgCA3AwAMAwsgAkEwaiACQYgBaikCACITNwMAIAIgAikCgAEiFDcDKCADQRBqIBM3AAAgA0EIaiAUNwAAIANCgYCAgBA3AwAMAQsgAkEQaiACQYgBaikCACITNwMAIAIgAikCgAEiFDcDCCADQRBqIBM3AAAgA0EIaiAUNwAAIANCATcDACAFQRxqEJEFCyAFQShqEJEFCyACQbABaiQAIAQoAugHDQEgBEHoBGoiAiAEQfAHakHwABDPBRogBEHAA2ogAkHwABDPBRogAUHQAWooAgAiAkUNAiABQUBrKAIAIQMgASkDOCETIARB0ApqIAFB0ABqQYABEM8FGiAEQdwLaiABQdwBaigCADYCACAEQcwKaiABQcwAaigCADYCACAEIAM2AsAKIAQgEzcDuAogBCACNgLQCyAEIAFB1AFqKQIANwLUCyAEIAFBxABqKQIANwLECiAEQegHaiEDIwBB8ANrIgIkACACQaACaiIGIARBuApqIgVBKGooAgA2AgAgAiAFKQIgNwOYAiACQdgCaiACQZgCahCUAwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAItANgCRQRAIAJBxgBqIAItANsCOgAAIAJBGGoiByACQegCaikCADcDACACQShqIAJB+AJqLQAAOgAAIAIgAi8A2QI7AUQgAiACQfACaikCACITNwPAAyACIAJB4AJqKQIANwMQIAIgEzcDICACQdwCaiIIKAIAIQsgAkE4aiAHKQMANwMAIAIgAikDEDcDMCAGIAVBNGooAgA2AgAgAiAFKQIsNwOYAiACQdgCaiACQZgCahCTAyACLQDYAg0BIAJB7gBqIAItANsCOgAAIAIgAkHlAmopAAA3AL0CIAIgAkHgAmoiBikCADcDuAIgAiACKQC9AjcATSACIAIpA7gCNwNIIAIgAi8A2QI7AWwgAiACKQNINwNYIAIgAikATTcAXSAIKAIAIQwgAkGgAmoiByAFQUBrKAIANgIAIAIgBSkCODcDmAIgAkHYAmogAkGYAmoQlAMgAi0A2AINBCACQaYBaiACLQDbAjoAACACQfgAaiIIIAJB6AJqIgkpAgA3AwAgAkGIAWogAkH4AmoiCi0AADoAACACIAIvANkCOwGkASACIAJB8AJqIg0pAgAiEzcDwAMgAiAGKQIANwNwIAIgEzcDgAEgAkHcAmoiBigCACEQIAJBmAFqIAgpAwA3AwAgAiACKQNwNwOQASAHIAVBzABqKAIANgIAIAIgBSkCRDcDmAIgAkHYAmogAkGYAmoQlAMgAi0A2AINAyACQdoBaiACLQDbAjoAACACQbABaiIHIAkpAgA3AwAgAkHAAWogCi0AADoAACAC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AAAgAyACKQO4ATcAVyACQQhqIgUgAkHkAWooAgA2AgAgAiACKQLcATcDACADQeIAaiACQYoCai0AADoAACADIAIvAYgCOwBgIANB7wBqIAJB8AFqKQMANwAAIAMgAikD6AE3AGcgA0H/AGogAkGAAmotAAA6AAAgAyACKQP4ATcAdyADQcgCaiACQZQCaigCADYCACADIAIpAowCNwLAAiADQZgBaiACQbACaikDADcCACADQZABaiACQagCaikDADcCACADQYgBaiACQaACaikDADcCACADIAIpA5gCNwKAASADQaIBaiACQZ4Dai0AADoAACADIAIvAZwDOwCgASADQa8BaiACQYgDaikDADcAACADIAIpA4ADNwCnASADQb8BaiACQZgDai0AADoAACADIAIpA5ADNwC3ASADQcIBaiACQb4Dai0AADoAACADIAIvAbwDOwDAASADQc8BaiAIKQMANwAAIAMgAikDoAM3AMcBIANB3wFqIA4tAAA6AAAgAyACKQOwAzcA1wEgAyAMNgCjAiADIBM3A5gCIAMgFDcDkAIgAyAVNwOIAiADIBc3A4ACIAMgDzYA4wEgAyAGNgDDASADIAc2AKMBIAMgDTYAYyADIAo2AEMgAyAQNgAjIAMgCzYAAyADIAIpAwA3ArQCIANBvAJqIAUoAgA2AgAMFAsgAkHIA2ogAkHkAmopAgAiEzcDACACIAIpAtwCIhQ3A8ADIANBDGogEzcAACADIBQ3AAQgA0EANgLAAiADQQo2AgAgAkGMAmoQkQUgAkHcAWoQkQUMEwsgAkEYaiACQeQCaikCACITNwMAIAIgAikC3AIiFDcDECADQQxqIBM3AAAgAyAUNwAEIANBADYCwAIgA0EANgIAIAVBLGoQkQUMAQsgAkHQAGogAkHkAmopAgAiEzcDACACIAIpAtwCIhQ3A0ggA0EMaiATNwAAIAMgFDcABCADQQA2AsACIANBATYCAAsgBUE4ahCRBQwCCyACQbABaiACQeQCaikCACITNwMAIAIgAikC3AIiFDcDqAEgA0EMaiATNwAAIAMgFDcABCADQQA2AsACIANBAzYCAAwCCyACQfgAaiACQeQCaikCACITNwMAIAIgAikC3AIiFDcDcCADQQxqIBM3AAAgAyAUNwAEIANBADYCwAIgA0ECNgIACyAFQcQAahCR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AAAgA0EYakIANwAAIANBEGpCADcAACADQQhqQgA3AAAgAUHYAmoiBC0AACIGIQMDQCADQYgBRwRAIAEgA2pB0AFqQQA6AAAgA0EBaiEDDAELCyABQQA6ANgCIAUgBmpBAToAACABQdcCaiIDIAMtAABBgAFyOgAAIAJBPGpCgICAgIABNwIAIAIgBDYCOCACQYgBNgI0IAIgBTYCMCACQcgAaiACQTBqIAEgAUHIAWoiBRC5AwJAA0ACQCACKAJkIgMgAigCaE8NACACIANBAWo2AmQgAkEIaiIEIAJByABqIgYoAhAiBzYCBCAEIAYoAgAgAyAHbGo2AgAgAigCCCIERQ0AIAIoAgxBCEcNAiACKAJcIANBA3RqIgMgAykDACAEKQAAhTcDAAwBCwsgASABKALIARC7AyACQqCAgICAATcCNCACIAJBEGo2AjAgAkHIAGogAkEwaiABIAUQtQMgAkHQAGohBQNAAkAgAigCXCIBIAIoAmBPDQAgAiABQQFqNgJcIAIgBSABEKsDIAIoAgAiBEUNACACKAIEIQMgAiACKAJIIAFBA3RqKQMANwMwIANBCU8NAiAEIAMgAkEwaiADEMkFDAELCyAAIAIpABA3AAAgAEEYaiACQShqKQAANwAAIABBEGogAkEgaikAADcAACAAQQhqIAJBGGopAAA3AAAgAkHwAGokAA8LAAuBAQEBfyMAQTBrIgIkACACQQA2AgggAkIBNwIAIAJBJGpB4LjAADYCACACQQM6ACwgAkEgNgIcIAJBADYCKCACQQA2AhQgAkEANgIMIAIgAjYCICABIAJBDGoQrQQEQAALIAAgAikCADcCACAAQQhqIAJBCGooAgA2AgAgAkEwaiQAC5UlAg5/An4jAEHwAGsiASQAIAFB0ABqIAJBEGopAgA3AwAgAUHIAGogAkEIaikCADcDACABIAIpAgA3A0AgAUEIaiICIANBOBDPBRogAUHoAGogBEEQaikDADcDACABQeAAaiAEQQhqKQMANwMAIAEgBCkDADcDWCABQUBrIQcjAEGgKGsiAyQAAkACQAJAAkACQAJAAkACQAJAAkACQCABQdgAaiIEKAIAQQFrDgQBAgMEAAsgA0GYDWogBEEMaigCACIFNgIAIAMgBCkCBCITNwOQDSADQaANaiATpyAFENUBAkAgAygCoA0iBEEC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IglBCGogBTYCACAJIBM3AgAgBEHQAGokACMAQSBrIgYkACMAQSBrIgUkACMAQTBrIgckACAHQQRqIgoQ3gQgB0EQaiEIIwBBMGsiBCQAIARBEGogChDjBAJAAkACQCAEKAIQRQRAIAQgBCgCFDYCCCAEIARBGGotAAA6AAwgBEEQaiAEQQhqQZKZwABBBiAJEG4gBCgCEA0BIAggBCgCCCAELQAMEPEEDAMLIAggBCgAGTYACSAIQQxqIARBHGooAAA2AAAgBCgCFCEKIAhBCGogBEEYai0AADoAACAIIAo2AgQMAQsgBEEoaiAEQRxqKAIAIgo2AgAgBCAEKQIUIhM3AyAgCEEMaiAKNgIAIAggEzcCBAsgCEEBNgIACyAEQTBqJAAgBQJ/IAcoAhBFBEAgBSAHKQIENwIEIAVBDGogB0EMaigCADYCAEEADAELIAdBKGogB0EcaigCACIENgIAIAcgBykCFCITNwMgIAVBDGogBDYCACAFIBM3AgQgB0EEahCRBUEBCzYCACAHQTBqJAACQCAFKAIARQRAIAYgBSkCBDcCBCAGQQ02AgAgBkEMaiAFQQxqKAIANgIADAELIAVBGGogBUEMaigCADYCACAFIAUpAgQ3AxAgBkGom8AAQSUgBUEQahCsBAsgBUEgaiQAAkAgBigCAEENRgRAIAMgBikCBDcCBCADQQ02AgAgA0EMaiAGQQxqKAIANgIADAELIAMgBikDADcDACADQRhqIAZBGGopAwA3AwAgA0EQaiAGQRBqKQMANwMAIANBCGogBkEIaikDADcDAAsgBkEgaiQAIAkQkQULIAACfyADKAIAQQ1GBEAgACADKQIENwIEIABBDGogA0EMaigCADYCAEEZDAELIANBvw1qIANBGGopAwA3AAAgA0G3DWogA0EQaikDADcAACADQa8NaiADQQhqKQMANwAAIAMgAykDADcApw0gAEEBaiADQaANakEnEM8FGkEACzoAAAsgAhANDAELIAMQRSADQZANahCRBSAAAn8gAygCAEENRgRAIAAgAykCBDcCBCAAQQxqIANBDGooAgA2AgBBGQwBCyADQb8NaiADQRhqKQMANwAAIANBtw1qIANBEGopAwA3AAAgA0GvDWogA0EIaikDADcAACADIAMpAwA3AKcNIABBAWogA0GgDWpBJxDPBRpBAAs6AAALIANBoChqJAAgAUHwAGokAAuZAQEDfwJAAkACQAJAAkAgACgCAA4CAQIACwJAAkACQCAAKAIEDgIBAgALIABBCGohAQwECyAAQQhqEJEFIABBFGohAQwDCyAAQQhqEJEFIABBFGohAQwCCyAAQRBqIgEoAgAgAEEEahCRBQ0BDAILIABBHGoiASgCACAAQQRqIgMQiwEgAxBXRQ0BIABBEGoQkQULIAEQkQULC5kBAAJAAn8CQAJAAkACQAJAAkACQAJAAkACQCAAKAIADgwLCwECCwMEBQYHCAkACyAAQRRqDAkLIABBBGoMCAsgAEEEagwHCyAAQQRqDAYLIABBBGoMBQsgAEEEagwECyAAQQRqEJEFIABBEGoMAwsgAEEEahCRBSAAQRBqDAILIABBBGoQkQUgAEEQagwBCyAAQQRqCxCRBQsLmgIBAn8jAEEQayICJAACQCAAIAJBDGoCfwJAAkAgAUGAAU8EQCACQQA2AgwgAUGAEEkNASABQYCABE8NAiACIAFBP3FBgAFyOgAOIAIgAUEMdkHgAXI6AAwgAiABQQZ2QT9xQYABcjoADUEDDAMLIAAoAggiAyAAKAIERgR/IAAgAxCPBSAAKAIIBSADCyAAKAIAaiABOgAAIAAgACgCCEEBajYCCAwDCyACIAFBP3FBgAFyOgANIAIgAUEGdkHAAXI6AAxBAgwBCyACIAFBP3FBgAFyOgAPIAIgAUEGdkE/cUGAAXI6AA4gAiABQQx2QT9xQYABcjoADSACIAFBEnZBB3FB8AFyOgAMQQQLEJQFCyACQRBqJABBAAsNACAAIAEgAhCUBUEAC7oBAQF/IwBBQGoiBSQAIAUgAjYCDCAFIAE2AggCQCAEBEAgBUE0akE1NgIAIAVBHGpCAjcCACAFQQI2AhQgBUG8usAANgIQIAVBGTYCLCAFIAQ2AjwgBSADNgI4IAUgBUEoajYCGCAFIAVBOGo2AjAMAQsgBUEcakIBNwIAIAVBAjYCFCAFQeS6wAA2AhAgBUEZNgIsIAUgBUEoajYCGAsgBSAFQQhqNgIoIAAgBUEQahCgBCAFQUBrJAAL8QEBBX8jAEEQayIEJAAgBCAANgIIIABB0AFqIQYgAEHYAmotAAAhAyAEIARBCGo2AgwCQAJAAkACQEGIASADayIFIAJNBEAgAw0BDAILIAMgBmogAiABIAIQyQUgAiADaiEDDAILIAMgBmogBSABIAUQyQUgBEEBNgIEIAQgBjYCACAEQQxqIAQoAgAgBCgCBBBAIAIgBWshAiABIAVqIQELIAIgAkGIAW4iBUGIAWwiB2shAyACQYgBTwRAIARBDGogASAFEEALIANBiQFPDQEgBiADIAEgB2ogAxDJBQsgACADOgDYAiAEQRBqJAAPCwALggEBA38jAEEQayICJAAgAiAANgIMIAAoAgwgACgCCCIBa0EMbiEAA0AgAARAIABBAWshACABEJEFIAFBDGohAQwBCwsjAEEQayIAJAAgAkEMaigCACIBKAIAIQMgACABKAIENgIMIAAgAzYCCCAAQQhqEM0DIABBEGokACACQRBqJAAL4jsCE38DfiMAQUBqIgskABCJBSMAQdACayIEJAAgBCAAELQEIARBDGogARC0BCAEQfAAaiAEKAIAIAQoAggQQgJAAkAgBCgCcEECRwRAIARBGGogBEHwAGpBOBDPBRogBEHQAGohEiAEKAIMIQAgBCgCFCEBIwBBMGsiDiQAIA5BCGohDyMAQdAAayIIJAAgCEEANgIMIAggATYCCCAIIAA2AgQgCEE4aiEAIwBBIGsiECQAIBBBCGogCEEEaiIFEOkEIBAtAAkhASAQLQAIIQIgEEEENgIQAkAgAkEBcQRAIBBBEGoQFwJAIAFBIkcEQCABQfsARg0BIABChYCAgKABNwMADAMLIwBBEGsiASQAIwBBEGsiAiQAIAIgBRAaAkAgAigCACIDQRVGBEAgAi0ABCEJIAFBCGogBTYCACABIAk6AAQMAQsgASACKQAFNwAFIAFBDGogAkEMaigAADYAACABIAItAAQ6AAQLIAEgAzYCACACQRBqJAACQAJAAkACQAJAAkAgASgCACIFQRVGBEAgAS0ABEEBaw4EAgMEBQELIAAgAS8ABTsACSAAQQtqIAFBB2otAAA6AAAgAS0ABCECIABBDGogASkCCDcCACAAQQhqIAI6AAAgACAFNgIEDAULIABBDjYCBAwECyAAQQ42AgQMAwsgAEEONgIEDAILIABBDjYCBAwBCyAAQQ42AgQLIABBBTYCACABQRBqJAAMAgsgBSAFKAIIQQFqNgIIIwBBEGsiCSQAIwBBEGsiASQAIAEgBRAaAkAgASgCACICQRVGBEAgAS0ABCEC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AWooAgA2AgAgASAGNgI0DAYLIANChYCAgOABNwMADAYLIAFB6ABqIAFBjAFqKAIANgIAIAEgASkChAE3A2ALIAFBPGoiBiABQegAaigCADYCACABQRRqIAYpAgA3AgAgASABKQNgNwIMIAFBATYCCCABQTBqIAUQ6wQgASgCMCIHQRVGBEAgAyABKQMINwMAIANBEGogAUEYaikDADcDACADQQhqIAFBEGopAwA3AwAMBQsgA0EIaiABKQI0NwIAIANBEGogBigCADYCACADQQU2AgAgAyAHNgIEIAFBCGoQEgwECyADQoWAgIDAADcDAAwDCyABQUBrIAFBjAFqKAAANgAAIAFBOGogBzoAACABIAEpAIUBNwA5IAEgCjYCNAwBCyABQTBqQQRyQdeBwABBDhChBAsgASgCUARAIAFB0ABqEJEFCyABQShqIAFBPGopAgAiFTcDACABIAEpAjQiFjcDICADQQxqIBU3AgAgAyAWNwIEIANBBTYCAAsgAUGQAWokAAJAAkAgAigCKCIBQQVHBEAgAkEcaiACQTRqKQIANwIAIAIgAikCLDcCFCACIAIoAjw2AiQgAiABNgIQIAJBCGogBRDpBCACLQAJIQEgAi0ACCEDIAJBBDYCKCACQUBrIANBAXEgASACQShqEGUgAigCQCIBQRVHDQEgAi0AREH9AEYEQCAAIAIpAxA3AwAgBSAFKAIIQQFqNgIIIABBCGogAkEYaikDADcDACAAQRBqIAJBIGopAwA3AwAMAwsgAEKFgICAsAE3AwAgAkEQahASDAILIAJByABqIAJBNGopAgAiFTcDACACIAIpAiwiFjcDQCAAQQxqIBU3AgAgACAWNwIEIABBBTYCAAwBCyAAIAIpAEU3AAkgAEEQaiACQcwAaigAADYAACAAQQhqIAItAEQ6AAAgACABNgIEIABBBTYCACACQRBqEBILIAJB0ABqJAAMAwsjAEHQAGsiAiQAIAJBKGohCiMAQfAAayIBJAAgAUEIaiAFEOkEIAEtAAkhAyABLQAIIQYgAUEENgJYAkACQAJAAkACQAJAIAZBAXEEQCABQdgAahAXAkACQCADQfsARgRAIAUgBSgCCEEBajYCCCABQQE6AFQgASAFNgJQQQEhFANAIAFB2ABqIQYjAEEwayIDJAAgA0EIaiABQdAAaiIHKAIAIg0Q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AgQgAkEQahASDAMLIANChYCAgMAANwMADAILIANChYCAgOABNwMADAELIANBCGogAikCNDcCACADQRBqIAJBPGooAgA2AgAgA0EFNgIAIAMgBjYCBAsgAkFAayQAAkACQCABKAIoIgJBBUcEQCABQRxqIAFBNGopAgA3AgAgASABKQIsNwIUIAEgASgCPDYCJCABIAI2AhAgAUEIaiAFEOkEIAEtAAkhAiABLQAIIQMgAUEENgIoIAFBQGsgA0EBcSACIAFBKGoQZSABKAJAIgJBFUcNASABLQBEQf0ARgRAIAAgASkDEDcDACAFIAUoAghBAWo2AgggAEEIaiABQRhqKQMANwMAIABBEGogAUEgaikDADcDAAwDCyAAQoWAgICwATcDACABQRBqEBIMAgsgAUHIAGogAUE0aikCACIVNwMAIAEgASkCLCIWNwNAIABBDGogFTcCACAAIBY3AgQgAEEFNgIADAELIAAgASkARTcACSAAQRBqIAFBzABqKAAANgAAIABBCGogAS0ARDoAACAAIAI2AgQgAEEFNgIAIAFBEGoQEgsgAUHQAGokAAwBCyMAQdAAayIBJAAgAUEoaiEDIwBBQGoiAiQAIAJBCGogBRDpBCACLQAJIQYgAi0ACCEHIAJBBDYCEAJAAkACQCAHQQFxBEAgAkEQahAXIAZB+wBHDQEgBSAFKAIIQQFqNgIIIAJBAToALCACIAU2AiggAkEwaiACQShqEGYgAigCMCIGQRVHDQIgAkKEgICA0AI3AxAgAkEwaiAFEOsEIAIoAjAiBkEVRgRAIAMgAikDEDcDACADQRBqIAJBIGopAwA3AwAgA0EIaiACQRhqKQMANwMADAQLIANBCGogAikCNDcCACADQRBqIAJBPGooAgA2AgAgA0EFNgIAIAMgBjYCBCACQRBqEBIMAwsgA0KFgICAwAA3AwAMAgsgA0KFgICA4AE3AwAMAQsgA0EIaiACKQI0NwIAIANBEGogAkE8aigCADYCACADQQU2AgAgAyAGNgIECyACQUBrJAACQAJAIAEoAigiAkEFRwRAIAFBHGogAUE0aikCADcCACABIAEpAiw3AhQgASABKAI8NgIkIAEgAjYCECABQQhqIAUQ6QQgAS0ACSECIAEtAAghAyABQQQ2AiggAUFAayADQQFxIAIgAUEoahBlIAEoAkAi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LwDdATsBlAEgAiACQeQBaikCADcDyAEgAiACQfQBaikCADcDqAEgAkHgAWooAgAhBCACQaABaiAOKQMAIhc3AwAgAkH4AGogFC0AADoAACACQfAAaiATKQMANwMAIAJB6ABqIBIpAwA3AwAgAkGIAWogFzcDACACIAIpA8gBIhc3A5gBIAIgAikDqAE3A2AgAiAXNwOAAUEBCyEOIAMgAi8BLDsACCADIAIpAxA3AA8gAyACKQMgNwAfIAMgAi8BXDsAMCADIAIpAzA3ADcgA0EKaiACQS5qLQAAOgAAIANBF2ogAkEYaikDADcAACADQSdqIAJBKGotAAA6AAAgA0EyaiACQd4Aai0AADoAACADQT9qIBApAwA3AAAgA0HfAGogCS0AADoAACADQdcAaiACQdAAaikDADcAACADQc8AaiARKQMANwAAIAMgAikDQDcARyADIAIvAZQBOwBhIANB4wBqIAJBlgFqLQAAOgAAIAMgAikDgAE3AGggA0HwAGogAkGIAWopAwA3AAAgAyACKQNgNwB4IANBgAFqIAopAwA3AAAgA0GIAWogAkHwAGopAwA3AAAgA0GQAWogAkH4AGotAAA6AAAgAyAENgJkIAMgDjoAYCADIAw2ADMgAyAWNwMoIAMgDzYACyADIBU3AwAgAyACKAAJNgCRASADQZQBaiACQQxqKAAANgAAIA1FDQQgBxCRBQwECyACQThqIAJB6AFqKQIAIhU3AwAgAiACKQLgASIWNwMwIANBDGogFTcAACADIBY3AAQgA0ECOgBgIANBADYCAAwBCyACQRhqIAJB6AFqKQIAIhU3AwAgAiACKQLgASIWNwMQIANBDGogFTcAACADIBY3AAQgA0ECOgBgIANBAjYCACAFQRxqEJEFCyAFQShqEJEFDAELIAJBoAFqIAJB6AFqKQIAIhU3AwAgAiACKQLgASIWNwOYASADQQxqIBU3AAAgAyAWNwAEIANBAjoAYCADQQE2AgALIAJBoAJqJAAgBS0AmAFBAkcEQCALIAVBOGpBmAEQzwUaDAILIAsgBSkDODcDACALQQI6AGAgC0EQaiAGKAIANgIAIAtBCGogBUFAaykDADcDAAwBCyAFKAI4IQIgC0ECOgBgIAsgAjYCBCALQQM2AgALIAVB0AFqJAACQCAILQCoAiICQQJHBEAgCEHoAGoi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akHhncAAQSAgAEHgAGoQqwQgAUIINwMACyAAQfAAaiQAIAIpA1BCCFENASACQZACaiACQdAAaiIAQdgAEM8FIQQgAkGMAmpB2KXAADYCACACQYQCakGspcAANgIAIAJB/AFqQZSlwAA2AgAgAkGIAmogAkHvAmoiATYCACACQYACaiABNgIAIAIgATYC+AEgAkHAAWoiASACQRhqQTgQzwUaIABBlMLAACACQfgBaiABIARBhMTAACgCABEHACADIAAQ5QEMAgsgAkHoAGogAkHgAWopAwA3AwAgAkHgAGogAkHYAWopAwA3AwAgAkHYAGogAkHQAWopAwA3AwAgAiACKQPIATcDUCADQQRqIAJB0ABqIgAQkQIgA0EANgIAIAAQ7gEMAQsgAkHYAWogAkHwAGopAwA3AwAgAkHQAWogAkHoAGopAwA3AwAgAkHIAWogAkHgAGopAwA3AwAgAiACKQNYNwPAASADQQRqIAJBwAFqIgAQkQIgA0EANgIAIAAQ7gEgAkEYahANCyACQQxqEJEFIAIQkQUgAkHwAmokACADQUBrIAMQQyADKAJAQQ1HBEAACyADQThqIANBzABqKAIANgIAIAMgAykCRDcDMCADQTBqELYEIAMQkAIgA0HgAGokAAvgAwEIfyMAQSBrIgQkAAJAIAEtACUEQAwBCyABQRhqIQggASgCBCIJIQUDQAJAAkAgASgCECIHIAEoAgwiA0kgByABKAIIS3IiAkUEQCADIAVqIQYgASgCFCAIakEBay0AACEFAkAgByADayIDQQdNBEBBACAGIAIbIQZBACEHQQAhAgNAIAIgA0YEQCADIQIMAwsgBSACIAZqLQAARgRAQQEhBwwDBSACQQFqIQIMAQsACwALIARBCGogBSAGIAMQtgUgBCgCDCECIAQoAgghBwsgB0EBRgRAIAEgAiABKAIMakEBaiIDNgIMIAMgASgCFCICSQ0DIAMgASgCCEsNAyAEIAMgAmsiAyABKAIEajYCECAEIAI2AhQgAkEFTw0CIAQgAjYCHCAEIAg2AhggBEEQaiAEQRhqELABRQ0DIAEoAhwhAiABIAEoAgw2AhwgAyACayEDIAIgCWohAgwFCyABIAEoAhA2AgwLQQAhAiABLQAlDQMgAUEBOgAlAkAgAS0AJARAIAEoAiAhBiABKAIcIQUMAQsgASgC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IgdBzcHAAEEoEEcgA0EMaiACQRBqIggQtwEgA0EIaiADQSxqKAIANgIAIAMgAykCJDcDACACQZAEaiIFKAIAIAUoAgQhCyADQRhqIgwgAkGQAmoQsgIgAygCICENIAMoAhggByADELkBIA0gAygCJCADKAIsIAsoAhARBwAgBxCRBSAMEJEFIAMQgAIgCBCRBSADQTBqJAAgAkGwBGogBEEIaigCADYCACACQbwEaiAEQSBqKAIANgIAIAIgDzcDoAQgAkIANwOYBCACQgE3A5AEIAIgBCkCADcDqAQgAiAEKQIYNwK0BCMAQTBrIgMkACADQSRqIgRBqMHAAEElEEcgA0EUaiAFELgBIANBEGogA0EsaigCADYCACADIAMpAiQ3AwggBigCACAGKAIEIQYgBCADQQhqIggQuQFBzMDAAEELIAMoAiQgAygCLCAGKAIQEQcAIAQQkQUgCBCAAiAFQRhqEJEFIAVBJGoQkQUgA0EwaiQAIABBBGoiA0IENwIYIANCgICAgMAANwIIIANCCDcCACADQSBqQgA3AgAgA0EQakIANwIAIABBGToAAAwBCyACQbgHaiACQaQEaigCADYCACACQbAHaiACQZwEaikCADcDACACIAIpApQENwOoByACQcwHakIBNwIAIAJBATYCxAcgAkHow8AANgLAByACQcMANgLcByACIAJB2AdqNgLIByACIAJBqAdqIgM2AtgHIAJBuAZqIgVBBHIgAkHAB2oQ+wEgAkEBOgC4BiADEPwBIAJBkAJqIgMgBUHwABDPBRogAkEQaiIFIANB8AAQzwUaIAAgBUHwABDPBRogBBCRBSAEQQxqEJEFIARBGGoQkQULIAkQkQUgCUEMaiIAEJ0EIAAQngQgAUEYahCRBSABQShqEJEFIAJB4AdqJAAgAUGQAWokAAspAAJAAn8CQAJAIAAoAgAOBAEDAwMACyAAQQRqDAELIABBDGoLEJEFCwsRACAAKAIAIAAoAgggARCvBQtIAQN/IwBBEGsiASQAIAAoAigiAkEpTwRAIAAoAgAhAyABIAAoAgQ2AgwgASACNgIIIAEgAzYCBCABQQRqEJEFCyABQRBqJAALgwUCBn8EfiMAQeAAayIDJAAgAyACNgIMIAMgATYCCCMAQUBqIgQkACADQRBqIgYCfyACRQRAIAZBADoAAUEBDAEL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LQAEDQMgA0EJNgIADAULIANBFTYCACADQQQ6AAQMBAsgBi0ABA0BIAUgBSgCCEEBajYCCCABIAUQ6QQgAS0AASEHIAEtAABBAXEMAgsgAyABKQAVNwAFIANBDGogAUEcaigAADYAACADIAEtABQ6AAQgAyAHNgIADAILIAZBADoABEEBCyEGIAFBBDYCICABQRBqIAYgByABQSBqEGUgASgCECIGQRVGBEACQCABLQAUIgZBIkcEQCAGQf0ARg0BIANBEDYCAAwDCyABQSBqIQcjAEEgayIGJAAgBiAFEOkEIAYtAAEhDiAGLQAAIREgBkEENgIEAkACQAJAIBFBAXEEQCAGQQRqEBcgDkEiRw0BIAUgBSgCCEEBajYCCCAGQQRqIAUQ7gQgBigCBCIFQRVHDQIgBkEQaigCACEFIAZBDGooAgAhDiAGKAIIIhFFBEAgByAOIAUQeAwECyAGIAU2AhwgBiAONgIYIAYgETYCFCAHIBEgBRB4IAZBFGoQkQUMAwsgB0EENgIADAILIAdBDjYCAAwBCyAGKQIIISMgByAGKAIQNgIMIAcgIzcCBCAHIAU2AgALIAZBIGokACABKAIgQRVGBEAgAyABLQAkOgAEIANBFTYCAAwDCyADIAEpAiA3AgAgA0EIaiABQShqKQIANwIADAILIANBEzYCAAwBCyADIAEpABU3AAUgA0EMaiABQRxqKAAANgAAIAMgAS0AFDoABCADIAY2AgALIAFBMGokACAALQDcASEBAkACQAJAAkACQAJAAkACQCAAKALYASIDQRVGBEAgAQ4FAQIDBAUECyAAQcwAaiAAQeQBaigAADYAACAAQcQAaiABOgAAIAAgACkA3QE3AEUgACADNgJADAsLIAAoAmgEQCAAQUBrQdSAwABBDBChBAwLCyAAQdgBaiAAQeAAahDABCAAQdABaiIBIAxBCGooAgA2AgAgACAMKQIANwPIASAAKALYASIDQRVGDQYgAEHEAGogACkDyAE3AgAgAEHMAGogAEHQAWooAgA2AgAgACADNgJADAoLIAAoAngEQCAAQUBrQeCAwABBDxChBAwKCyAAQdgBaiAAQeAAahDABCAAQdABaiIBIAxBCGooAgA2AgAgACAMKQIANwPIASAAKALYASIDQRVGDQQgAEHEAGogACkDyAE3AgAgAEHMAGogAEHQAWooAgA2AgAgACADNgJADAkLIAAoAogBBEAgAEFAa0HvgMAAQQgQoQQMCQsgAEHYAWogAEHgAGoQwAQgAEHQAWoiASAMQQhqKAIANgIAIAAgDCkCADcDyAEgACgC2AEiA0EVRg0CIABBxABqIAApA8gBNwIAIABBzABqIABB0AFqKAIANgIAIAAgAzYCQAwICyAAQdgBaiAAQeAAahDCBCAAKALYASIBQRVGDQQgAEHEAGogACkC3AE3AgAgAEHMAGogAEHkAWooAgA2AgAgACABNgJADAcLIAAoAmgiA0EARyEBAkACQAJAAkACQCADRQRAIABB2AFqQdSAwABBDBC7BCAAKALYASIDQRVHDQIgAEGgAWogAEHkAWooAgA2AgAgACAAKQLcATcDmAEMAQsgAEGgAWogAEHwAGooAgA2AgAgACAAKQNoNwOYAQsCQAJAAkAgACgCeCIDRQRAIABB2AFqQeCAwABBDxC7BCAAKALYASIGQRVHDQIgAEGwAWogAEHkAWooAgA2AgAgACAAKQLcATcDqAEMAQsgAEGwAWogAEGAAWooAgA2AgAgACAAKQN4NwOoAQsgACgCiAENAyAAQdgBakHvgMAAQQgQuwQgACgC2AEiBkEVRw0BIABBwAFqIABB5AFqKAIANgIAIAAgACkC3AE3A7gBDAQLIABBxABqIAApAtwBNwIAIABBzABqIABB5AFqKAIANgIAIAAgBjYCQAwECyAAQcQAaiAAKQLcATcCACAAQcwAaiAAQeQBaigCADYCACAAIAY2AkAgAEGoAWoQkQUMAwsgAEHEAGogACkC3AE3AgAgAEHMAGogAEHkAWooAgA2AgAgACADNgJADAoLIABBwAFqIABBkAFqKAIANgIAIAAgACkDiAE3A7gBCyAAQeABaiAAQaABaigCADYCACAAQewBaiAAQbABaigCADYCACAAQfgBaiAAQcABaigCADYCACAAIAApA5gBNwPYASAAIAApA6gBNwLkASAAIAApA7gBNwPwASAAQTxqIABB2AFqQSQQzwUaIAAoAjwiAUUNCiAAQSBqIABB2ABqKQIANwIAIABBEGogAEHIAGopAgA3AgAgACAAKQJQNwIYIAAgACkCQDcCCCAAIAE2AgQgAEHYAWogDxDrBCAAKALYASIBQRVGBEAgCCAAQQRqQSQQzwUaDAwLIAhBCGogACkC3AE3AgAgCEEQaiAAQeQBaigCADYCACAIQQA2AgAgCCABNgIEIABBBGoQEQwLCyAAQZgBahCRBSADRQwICyAAQYgBahAYIABBkAFqIAEoAgA2AgAgACAAKQPIATcDiAEMAgsgAEH4AGoQGCAAQYABaiABKAIANgIAIAAgACkDyAE3A3gMAQsgAEHoAGoQGCAAQfAAaiABKAIANgIAIAAgACkDyAE3A2gMAAsACyAIQoCAgIDgATcCAAwFCyAIQoCAgIDAADcCAAwEC0EAIQELQQELIQMgACgCiAEEQCAAQYgBahCRBQsgACgCeEEARyADcQRAIABB+ABqEJEFCyABIAAoAmhFcg0AIABB6ABqEJEFCyAAQTBqIABByABqKQIAIiM3AwAgACAAKQJAIiQ3AyggCEEMaiAjNwIAIAggJDcCBCAIQQA2AgALIABBgAJqJAACQCACKAJMIgAEQCACQTBqIAJB6ABqKQIANwIAIAJBIGogAkHYAGoiASkCADcCACACIAIpAmA3AiggAiACKQJQNwIYIAIgADYCFCACQcwAaiACQQhqEOgEIAIoAkwiAEEVRgRAIAogAkEUakEkEM8FGgwCCyAKQQhqIAIpAlA3AgAgCkEQaiABKAIANgIAIApBADYCACAKIAA2AgQgAkEUahARDAELIAJBQGsgAkHYAGopAgAiIzcDACACIAIpAlAiJDcDOCAKQQxqICM3AgAgCiAkNwIEIApBADYCAAsgAkHwAGokACAEQfgAaiIAAn8gCSgCDARAIABBBGogCUEMakEkEM8FGkEADAELIAlBOGogCUEYaikCADcDACAJIAkpAhA3AzAgAEEIakGBm8AAQScgCUEwahCrBEEBCzYCACAJQUBrJAAgBCgCeA0CIARB0AJqIARB+ABqIgBBBHJBJBDPBSECIARBtAJqQdilwAA2AgAgBEGsAmpBrKXAADYCACAEQaQCakGUpcAANgIAIARBsAJqIARB/wJqIgE2AgAgBEGoAmogATYCACAEIAE2AqACIARB6AFqIgEgBEEoakE4EM8FGiAEQcgCaiATKQMANwMAIARBwAJqIBIpAwA3AwAgBCAEKQNgNwO4AiAAQeTGwAAgBEGgAmogASAEQbgCaiACQazLwAAoAgARCQAgECAAEOUBDAQLIARBgAJqIARBkAFqKQMANwMAIARB+AFqIARBiAFqKQMANwMAIARB8AFqIARBgAFqKQMANwMAIAQgBCkDeDcD6AEgEEEEaiAEQegBaiIAEJECIBBBADYCACAAEO4BDAILIARBkAFqIARBiAJqKQMANwMAIARBiAFqIARBgAJqKQMANwMAIARBgAFqIARB+AFqKQMANwMAIAQgBCkD8AE3A3ggEEEEaiAEQfgAaiIAEJECIBBBADYCACAAEO4BDAILIARBgAJqIARBmAFqKQMANwMAIARB+AFqIARBkAFqKQMANwMAIARB8AFqIARBiAFqKQMANwMAIAQgBCkDgAE3A+gBIBBBBGogBEHoAWoiABCRAiAQQQA2AgAgABDuASAEQeAAahCRBSAEQewAaiIAEJ0EIAAQngQLIARBKGoQDQsgBEEcahCRBSAEQRBqEJEFIARBBGoQkQUgBEGAA2okACAQQUBrIBAQQyAQKAJAQQ1HBEAACyAQQThqIBBBzABqKAIANgIAIBAgECkCRDcDMCAQQTBqELYEIBAQkAIgEEHgAGokAAsVACAAQQRqIAFBBhCfBCAAQQE2AgALngEBAn8jAEEQayICJAACfwJAAkACQCAAKAIAIgNBCWtBACADQQ5xQQpGG0EBaw4CAQIACyACIAA2AgQgAUGxy8AAQQwgAkEEakHAy8AAEKwFDAILIAIgAEEEajYCCCABQdDLwABBBSACQQhqQdjLwAAQrAUMAQsgAiAAQQRqNgIMIAFB6MvAAEEGIAJBDGpB8MvAABCsBQsgAkEQaiQAC/UEAgV/An4jAEHgCWsiAiQAIAJB+AZqIAEoAhggAUEgaigCABBcIAFBGGohBAJAAkAgAigC+AZFBEAgAkGoAmpBBHIgAkHQBGpBBHIgAkGAB2oiA0GgAhDPBUGgAhDPBSEFIAJByAlqIAFBLGooAgA2AgAgAiABKQIkNwPACSACQfgGaiACQcAJahCUAyACLQD4BkUEQCACQd4JaiIGIAItAPsGOgAAIAJBqAlqIAJBiAdqKQIANwMAIAJB2AlqIAJBmAdqLQAAOgAAIAIgAi8A+QY7AdwJIAIgAkGQB2opAgAiBzcDsAkgAiADKQIANwOgCSACIAc3A9AJIAEpAwBQDQIgAkH8BmooAgAhAyABKQMIIQcgASkDECEIIAIgBUGgAhDPBSIBQaICaiAGLQAAOgAAIABBrwJqIAEpA6AJNwAAIABBtwJqIAFBqAlqKQMANwAAIABBvwJqIAEpA9AJNwAAIABBxwJqIAFB2AlqLQAAOgAAIAEgAS8B3Ak7AaACIABBCGogAUGjAhDPBRogAEHQAmogCDcDACAAQcgCaiAHNwMAIABBqwJqIAM2AAAgAEEANgIADAMLIAJBqAlqIAJBhAdqKQIAIgc3AwAgAiACKQL8BiIINwOgCSAAQRBqIAc3AAAgAEEIaiAINwAAIABCgYCAgLABNwMADAILIAJBsAJqIAJBhAdqKQIAIgc3AwAgAkG4AmogAkGMB2ooAgAiAzYCACACIAIpAvwGIgg3A6gCIABBFGogAzYCACAAQQxqIAc3AgAgACAINwIEIABBATYCACAEEJEFIAFBJGohBAwBCwALIAQQkQUgAkHgCWokAAsMACAAKAIAIAEQoAILjwEBAX8jAEHQAGsiCiQAIApBJGogAUEoEM8FIQEgCkEgaiAINgIAIApBGGogBjYCACAKQRBqIAQ2AgAgCkEIaiACQQhqKAIANgIAIAogCTYCTCAKIAc2AhwgCiAFNgIUIAogAzYCDCAKIAIpAgA3AwAgACABIAogAyAEIAUgBiAHIAggCRCkAiAKQdAAaiQAC6YGAQJ/IwBBkAFrIgokACAKIAg2AiQgCiAHNgIgAkACQCABKAIAIgcEQCAKIAc2AlggCiABKAIEIgI2AlwgByAHKAIAIgNBAWo2AgAgA0EASA0BIAAgAjYCBCAAIAc2AgAgACABKQIINwIIIABBIGogAUEgaikCADcCACAAQRhqIAFBGGopAgA3AgAgAEEQaiABQRBqKQIANwIAIApB2ABqEEwMAgsgCkFAayABQRxqIgcpAAA3AwAgCkE4aiABQRRqIggpAAA3AwAgCkEwaiABQQxqIgspAAA3AwAgCiABKQAENwMoIApB8ABqIAcpAAA3AwAgCkHoAGogCCkAADcDACAKQeAAaiALKQAANwMAIAogASkABDcDWCAKIAI2AlQgCiAKQShqNgJQIAogCkEgajYCTCAKQRhqIAUgCkHYAGogCkHMAGpBrM3AACAGKAIUEQcAIAooAhwhASAKKAIYBEAgAEEANgIAIAAgATYCBAwCCwJ/QQAhAgJAAkACQAJAAkBBBCABKAIAIgVBAmsiBiAGQQZPG0EBaw4FAAQBAgMECyABQTRqQQAgASgCNBsMBAsgASgCBEUNAiABQQhqIgFBACABKAIAGwwDCyAFRQ0BIAFBBGpBACABKAIEGwwCCyABQQRqIQILIAILIgFFDQAgCkEQaiABEKsCIAogCigCFCIBNgJQIAogCigCECIINgJMIAkoAgAiAgRAIAkoAgQhASAKQfEAaiAKQUBrKQMANwAAIApB6QBqIApBOGopAwA3AAAgCkHhAGogCkEwaikDADcAACAKIAopAyg3AFkgCkEIaiIFIApBzABqIgYoAgQ2AgQgBSAGKAIAQQhqNgIAIApBjAFqIAQ2AgAgCkGAAWogCikDCDcCACAKIAM2AogBIApBADYCfCAKQQI6AFggAiAKQdgAaiABKAIMEQAAIAooAkwhCCAKKAJQIQELIAAgCikDKDcACCAAIAE2AgQgACAINgIAIABBIGogCkFAaykDADcAACAAQRhqIApBOGopAwA3AAAgAEEQaiAKQTBqKQMANwAADAELAAsgCkGQAWokAAuFBQIGfwF+IwBBMGsiByQAIAdBJGogBTYCACAHQRxqQSA2AgAgB0EIaiIIIAFBCGooAgA2AgAgB0EUaiACQQhqKAIANgIAIAcgBjYCKCAHIAQ2AiAgByADNgIYIAcgASkCADcDACAHIAIpAgA3AgwgB0EMaiEJIwBBgAFrIgEkACAIKAIAIQIgBygCBCEIAkACQAJAIAcoAgBFBEAgACAIIAIQRwwBCyABQSBqIgpCADcDACABQRhqIgtCADcDACABQRBqQgA3AwAgAUIANwMIIAFBCGoiDEEgIAggAhDJBSABQSxqIAQgDCAJIAUoAgwRBQACQAJAIAEoAiwEQCABQUBrIAFBNGooAgA2AgAgASABKQIsIg03AzggDachAiAGKAIAIgUNASABKAJAIQQMAgsgAUHgAGogCikDADcDACABQdgAaiALKQMANwMAIAFB0ABqIgMgAUEQaikDADcDACABIAEpAwg3A0hBzLzBAC0AABpBMEEEELACIgJFDQMgAkEBOgAAIAIgASkDSDcAASACQQlqIAMpAwA3AAAgAkERaiABQdgAaikDADcAACACQRlqIAFB4ABqKQMANwAAIABBADYCACAAIAI2AgQMAgsgBigCBCEGIAFB4QBqIAFBIGopAwA3AAAgAUHZAGogAUEYaikDADcAACABQdEAaiABQRBqKQMANwAAIAFB/ABqQSA2AgAgAUH0AGogASgCQCIENgIAIAFB8ABqIAI2AgAgASABKQMINwBJIAEgAzYCeCABQQA2AmwgAUECOgBIIAUgAUHIAGogBigCDBEAAAsgACACIAQQRyABQThqEJEFCyABQYABaiQADAELAAsgB0EwaiQACwkAIAAgARCnAguEBQIGfwF+IwBBgARrIgIkACABKAIEIQMgASgCACgCACIEKAIAIQUgBCgCBCEEIAEoAgwoAgAhBiACIAEoAggiBykCADcCFCACIAYgBygCCGo2AhwgAkHwAWoiBiACQRRqEMMCIAJB4ANqIAUgAyAGIAQoAgwRBQACQAJAAkAgAigC4ANFBEAgAkH4AWoiBCADQQhqKQAANwMAIAJBgAJqIgUgA0EQaikAADcDACACQYgCaiIGIANBGGopAAA3AwAgAiADKQAANwPwASABKAIQKAIAIQNBzLzBAC0AABpBMEEEELACIgFFDQIgASACKQPwATcAASABIANBAEc6AAAgAUEJaiAEKQMANwAAIAFBEWogBSkDADcAACABQRlqIAYpAwA3AAAgAEEINgIAIAAgATYCBAwBCyACQRBqIAJB6ANqIgEoAgAiBDYCACACIAIpAuADIgg3AwggAkHwAWogCKcgBBDiASACKALwAUEFRwRAIAJBFGoiASACQfABakHcARDPBRogACABEFogAkEIahCRBQwBCyABIANBCGopAAA3AwAgAkHwA2oiBCADQRBqKQAANwMAIAJB+ANqIgUgA0EYaikAADcDACACQdwDaiACQfwBaigCADYAACACIAIpAvQBNwDUAyACIAMpAAA3A+ADQcy8wQAtAAAaQTBBBBCwAiIBRQ0CIAFBAzoAACABIAIpA+ADNwABIAEgAikA0QM3ACEgAUEJaiACQegDaikDADcAACABQRFqIAQpAwA3AAAgAUEZaiAFKQMANwAAIAFBKGogAkHYA2opAAA3AAAgAEEINgIAIAAgATYCBCACQQhqEJEFCyACQYAEaiQADwsACwALCQAgACABEKkCC6AEAgh/AX4jAEEwayIDJAAgASgCBCEEIAEoAgAiAigCACEFIAIoAgQhAiADQSBqIAEoAggiAUEIaigCADYCACADIAEpAgA3AxggA0EMaiAFIAQgA0EYaiACKAIMEQUAAkACQCADKAIMIgFFBEBBzLzBAC0AABpBMEEEELACIgENAQALIAMgAykCEDcCKCADIAE2AiQjAEEgayIBJAAgA0EkaiICKAIEIQkgAigCACEHIAEgAigCCCIFNgIMIAVBAEgEQAALIwBBEGsiAiQAIAJBCGogBRCXBSACIAIoAgggAigCDBDMAiACKAIAIgZFBEAACyAGQoGAgIAQNwIAIAEgAUEMaiIIKAIANgIEIAEgBjYCACACQRBqJAAgASgCBCECIAEoAgAiBkEIaiAHIAUQzwUaIAFBADYCGCABIAk2AhQgASAHNgIMIAEgAUEfajYCECAIKAIIBEAgCCgCABCGBQsgAyACNgIEIAMgBjYCACABQSBqJAAgAykDACEKIABBJGogBEEYaikAADcAACAAQRxqIARBEGopAAA3AAAgAEEUaiAEQQhqKQAANwAAIAAgBCkAADcADCAAIAo3AgQgAEEHNgIADAELIAFBAToAACABIAQpAAA3AAEgAUEJaiAEQQhqKQAANwAAIAFBEWogBEEQaikAADcAACABQRlqIARBGGopAAA3AAAgAEEINgIAIAAgATYCBAsgA0EwaiQACzUBAX8jAEEQayICJAAgAkEIaiABEKsCIAAgAikDCDcCACAAQQhqIAFBCGoQ3wMgAkEQaiQACzIBAn8gASgCACICIAIoAgAiA0EBajYCACADQQBIBEAACyAAIAEoAgQ2AgQgACACNgIACyEAIAAgASgCAAR/IABBBGogAUEEahCtAkEBBUEACzYCAAthAQN/IwBBEGsiAiQAAkAgASgCAARAIAJBCGogARCrAiACKAIIIQMgAigCDCEEIABBCGogAUEIahDfAyAAIAQ2AgQMAQsgAEEEaiABQQRqEN8DCyAAIAM2AgAgAkEQaiQAC5cTAhB/A34jAEGAAWsiCSQAIAlB4ABqIAEoAgAiB0EIaigCADYCACAJIAcpAgA3A1ggCUEsaiEHIAEoAgQiEygCACEMIBMoAgQhDSMAQYACayIBJAAgASANNgIcIAEgDDYCGCABIAI2AhQgAUEoaiAJQdgAaiIQQQhqKAIANgIAIAEgECkCADcDICABQcgAaiIKIAJBIGopAAA3AwAgAUFAayIIIAJBGGopAAA3AwAgAUE4aiIPIAJBEGopAAA3AwAgASACKQAINwMwIAFBADYCUCAEKAIUIREC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QAJAIAMoArQGIgEgAygCuAZPDQAgAyABQQFqNgK0BiADQQhqIgQgA0GYBmoiBigCECIFNgIEIAQgBigCACABIAVsajYCACADKAIIIgRFDQAgAygCDEEIRw0CIAMoAqwGIAFBA3RqIgEgASkDACAEKQAAhTcDAAwBCwsgA0GYA2oiASADKALgBBC7AyADQqCAgICAATcC/AIgAyADQfgFajYC+AIgA0GYBmogA0H4AmogASACELUDIANBoAZqIQQDQAJAIAMoAqwGIgEgAygCsAZPDQAgAyABQQFqNgKsBiADIAQgARCrAyADKAIAIgZFDQAgAygCBCECIAMgAygCmAYgAUEDdGopAwA3A/gCIAJBCU8NAiAGIAIgA0H4AmogAhDJBQwBCwsgA0GAA2ogA0GABmopAAAiCDcDACADQYgDaiADQYgGaikAACIJNwMAIANBkANqIANBkAZqKQAAIgo3AwAgAyADKQD4BSILNwP4AiAAQRhqIAo3AAAgAEEQaiAJNwAAIABBCGogCDcAACAAIAs3AAAgA0HABmokAA8LAAtjAQF/IwBBEGsiAyQAIANBBGogARDmAwJAIAMoAgQiAUELRgRAIABBCGogAygCCCACaiICIANBDGooAgBqNgIAIAAgAjYCBAwBCyAAIAMpAgg3AgQLIAAgATYCACADQRBqJAALuAEBA38jAEEQayIDJAACfwJAIAEoAgQEfyABKAIALQAAQcABSQVBAAsEQCABEOUDQSBGDQELIAEoAgQgAmohBEEBIQFBAAwBCyADQQRqIAEQ5gMgAygCBCIBQQtGBEAgAygCCCACaiICIANBDGooAgBqIQRBACEBQQAMAQsgAygCDCEEIAMoAgghAkEBCyEFIAAgATYCBCAAIAU2AgAgAEEMaiAENgIAIABBCGogAjYCACADQRBqJAAL0QEBA38gACgCACEAIwBBEGsiAyQAIAMgAEEgajYCDCMAQRBrIgIkACABKAIUQeDTwABBEyABQRhqKAIAKAIMEQQAIQQgAkEAOgANIAIgBDoADCACIAE2AgggAkEIakHz08AAQQQgAEH408AAEL4FQYjUwABBBiAAQcwAakGQ1MAAEL4FQaDUwABBBSAAQcgAakGo1MAAEL4FQbjUwABBBSAAQUBrQcDUwAAQvgVB0NTAAEEEIANBDGpB1NTAABC+BRC/BSACQRBqJAAgA0EQaiQAC9AJAQF/IAAoAgAhAiMAQTBrIgAkAAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAi0AAEEBaw4PAQIDBAUGBwgJCgsMDQ4PAAsgACACQQhqNgIsIABBIGpCATcCACAAQQI2AhggAEH81MAANgIUIABB7wA2AgQgACAANgIcIAAgAEEsajYCACABIABBFGoQqgUMDwsgAEEgakIANwIAIABBATYCGCAAQaTVwAA2AhQgAEHg08AANgIcIAEgAEEUahCqBQwOCyAAQSBqQgA3AgAgAEEBNgIYIABBuNXAADYCFCAAQeDTwAA2AhwgASAAQRRqEKoFDA0LIABBIGpCADcCACAAQQE2AhggAEGY1sAANgIUIABB4NPAADYCHCABIABBFGoQqgUMDAsgAEEgakIANwIAIABBATYCGCAAQfTWwAA2AhQgAEHg08AANgIcIAEgAEEUahCqBQwLCyAAQSBqQgA3AgAgAEEBNgIYIABB4NfAADYCFCAAQeDTwAA2AhwgASAAQRRqEKoFDAoLIABBIGpCADcCACAAQQE2AhggAEG02MAANgIUIABB4NPAADYCHCABIABBFGoQqgUMCQsgAEEMakHwADYCACAAQSBqQgI3AgAgACACQQhqNgIQIABBAzYCGCAAQbDZwAA2AhQgAEHwADYCBCAAIAJBEGo2AiwgACAANgIcIAAgAEEsajYCCCAAIABBEGo2AgAgASAAQRRqEKoFDAgLIABBDGpB8AA2AgAgAEEgakICNwIAIAAgAkEIajYCECAAQQM2AhggAEH02cAANgIUIABB8AA2AgQgACACQRBqNgIsIAAgADYCHCAAIABBLGo2AgggACAAQRBqNgIAIAEgAEEUahCqBQwHCyAAQQxqQSk2AgAgAEEgakICNwIAIAAgAkExajYCECAAQQM2AhggAEHY2sAANgIUIABBKTYCBCAAIAJBAWo2AiwgACAANgIcIAAgAEEsajYCCCAAIABBEGo2AgAgASAAQRRqEKoFDAYLIABBDGpB8QA2AgAgAEEgakICNwIAIAAgAkEEajYCECAAQQM2AhggAEHM28AANgIUIABB8QA2AgQgACACQQhqNgIsIAAgADYCHCAAIABBLGo2AgggACAAQRBqNgIAIAEgAEEUahCqBQwFCyAAIAJB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AigCACEFAkACQANAIAUoAgQhAgNAIAJBf0YNASACQQBIDQIgBSACQQFqIAUoAgQiAyACIANGGzYCBCACIANHIAMhAg0ACwsgBCAGNgIEIAQgBTYCAAwBCwALIAQoAgQhAiAEKAIAIQMgASABKAIAIgFBAWs2AgAgAUEBRgRAIARBCGoQzQILIAAgAzYCACAAIAI2AgQgBEEQaiQACycAIAIEQEHMvMEALQAAGiACIAEQsAIhAQsgACACNgIEIAAgATYCAAtrAgN/AX4jAEEQayIBJAAgACkCACEEIAEgAEEIajYCDCABIAQ3AgQCQCABQQRqIgIoAgAiAEF/Rg0AIAAgACgCBCIDQQFrNgIEIANBAUcNACACKAIEQQtqQXxxRQ0AIAAQhgULIAFBEGokAAszACABBH9BfyACQQFrZ3ZBACACQQJPG0EBaiIBQQBHBUEACyECIAAgATYCBCAAIAI2AgALEAAgAUEASARAAAsgABCGBQuCAQEBfyAAAn8gASgCCEEgRgRAIAFBADYCCCAAIAEoAgAiAikAADcAASAAQQlqIAJBCGopAAA3AAAgAEERaiACQRBqKQAANwAAIABBGWogAkEYaikAADcAACABEJEFQQAMAQsgACABKQIANwIEIABBDGogAUEIaigCADYCAEEBCzoAAAskACAARQRAQQEPC0HMvMEALQAAGiAAQQEQsAIiAARAIAAPCwALJwEBfyMAQRBrIgIkACACIAE6AA8gACACQQ9qQQEQlAUgAkEQaiQACzgBAX8gACgCAEFAayEBIAAoAgghAANAIAAEQCABEIsBIAEQzQMgAEEBayEAIAFB0ABqIQEMAQsLCyUAQTAQ0QIgAUEwEM8FIQEgAEEwNgIIIABBMDYCBCAAIAE2AgALWAEBf0EgENECIgJBGGogAUEYaikAADcAACACQRBqIAFBEGopAAA3AAAgAkEIaiABQQhqKQAANwAAIAIgASkAADcAACAAQSA2AgggAEEgNgIEIAAgAjYCAAtIAQF/QRQQ0QIiAkEQaiABQRBqKAAANgAAIAJBCGogAUEIaikAADcAACACIAEpAAA3AAAgAEEUNgIIIABBFDYCBCAAIAI2AgALJQEBf0EEENECIgIgATYAACAAQQQ2AgggAEEENgIEIAAgAjYCAAu/AQEDfyMAQRBrIgIkACACQQRqIQMCQCABKAIIQQRGBEAgAUEANgIIIANBADYCACADIAEoAgAoAAA2AgQgARCRBQwBCyADIAEpAgA3AgAgA0EIaiABQQhqKAIANgIACyAAAn8gAigCBCIBRQRAIAAgAigCCDYCBEEDDAELIAIoAgghAyACIAIoAgwiBDYCDCACIAM2AgggAiABNgIEIAJBBGoQkQUgACAENgIMIABBBDYCBEEACzYCACACQRBqJAALLAECfyMAQRBrIgIkACACQQRqIgMgARDVAiAAIAMQ5AIgAxCRBSACQRBqJAALOAEBfyAAKAIAIQIjAEEQayIAJAAgACACNgIMIAFB0ODAAEEEIABBDGpB1ODAABCsBSAAQRBqJAALbAEBfyAAKAIAIQIjAEEwayIAJAAgAEEsakEBNgIAIABBFGpCAjcCACAAQQI2AgwgAEHA4MAANgIIIABBATYCJCAAIAI2AiAgACACQQhqNgIoIAAgAEEgajYCECABIABBCGoQqgUgAEEwaiQAC2oBAn8gACgCACECIwBBEGsiACQAIAJBBGohAwJ/IAIoAgBFBEAgACADNgIIIAFBsOPAAEEDIABBCGpBoOPAABCsBQwBCyAAIAM2AgwgAUGz48AAQQUgAEEMakGg48AAEKwFCyAAQRBqJAAL3QIBA38jAEEwayIDJAAgA0EANgIIIANCATcCACADQSRqQazhwAA2AgAgA0EDOgAsIANBIDYCHCADQQA2AiggA0EANgIUIANBADYCDCADIAM2AiACfyADQQxqIQQgASgCAEEDRwRAIwBBMGsiAiQAIAJBJGpB8QA2AgAgAkEMakICNwIAIAJBAjYCBCACQZzrwAA2AgAgAkGMATYCHCACIAE2AiggAiABQQxqNgIsIAIgAkEYajYCCCACIAJBLGo2AiAgAiACQShqNgIYIAQgAhCqBSACQTBqJAAMAQsjAEEwayICJAAgAkEYakIBNwIAIAJBAjYCECACQbjmwAA2AgwgAkGFATYCKCACIAFBBGo2AiwgAiACQSRqNgIUIAIgAkEsajYCJCAEIAJBDGoQqgUgAkEwaiQACwRAAAsgACADKQIANwIAIABBCGogA0EIaigCADYCACADQTBqJAALjwIBA38jAEEQayICJAACQCABQf8ATQRAIAAoAggiBCAAKAIERgR/IAAgBBCPBSAAKAIIBSAECyAAKAIA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KQIANwIAIAAgBCkCGDcCAAsgBEFAayQACy0BAX8jAEEQayICJAAgAkEIaiABEIoCIABBA0EFIAIoAggbNgIAIAJBEGokAAuBCAINfwN+IwBB0ABrIgYkACMAQeAAayIFJAAgASgCECEIIwBB0AFrIgIkAAJAAkAgASgCCCIDIAEoAgxGBEAgAkEANgIMDAELIAEgA0EkajYCCCACQQxqIANBJBDPBRogAigCDEUNACACQUBrIgQgA0EkEM8FGiACQYABaiEHIwBB0ABrIgMkACMAQeABayIBJAAgAUG4AWogBCgCACAEKAIIEPQCAkACQAJAIAEoArgBRQRAIAFB4ABqIgkgAUHIAWoiCikDADcDACABQegAaiILIAFB0AFqIgwpAwA3AwAgAUHwAGoiDSABQdgBaiIOKQMANwMAIAEgASkDwAE3A1ggAUG4AWogBCgCDCAEQRRqKAIAEPQCIAEoArgBDQEgAUGwAWogDikDACIPNwMAIAFBgAFqIAopAwAiEDcDACABQYgBaiAMKQMAIhE3AwAgAUGQAWogDzcDACABQUBrIA83AwAgAUE4aiARNwMAIAFBMGogEDcDACABIAEpA8ABIg83A3ggASAPNwMoIAFB0ABqIARBIGooAgA2AgAgASAEKQIYNwNIIAFBIGogDSkDADcDACABQRhqIAspAwA3AwAgAUEQaiAJKQMANwMAIAEgASkDWDcDCCADIAFBCGpB0AAQzwUaIAQQkQUgBEEMahCRBQwDCyABQeAAaiABQcQBaikCACIPNwMAIAEgASkCvAEiEDcDWCADQQxqIA83AgAgAyAQNwIEIANBADYCQCADQQA2AgAMAQsgAUGAAWogAUHEAWopAgAiDzcDACABIAEpArwBIhA3A3ggA0EMaiAPNwIAIAMgEDcCBCADQQA2AkAgA0EBNgIACyAEEJEFIARBDGoQkQUgBEEYahAnCyABQeABaiQAAkAgAygCQARAIAcgA0HQABDPBRoMAQsgByADKQMANwMAIAdBADYCQCAHQRBqIANBEGooAgA2AgAgB0EIaiADQQhqKQMANwMACyADQdAAaiQAAkAgAigCwAEiAQRAIAJBOGogAkHMAWooAgA2AgAgAiACKQLEATcDMCACQUBrIAJBgAFqQcAAEM8FGgwBCyAIIAIpA4ABNwIAIAhBEGogAkGQAWooAgA2AgAgCEEIaiACQYgBaikDADcCAAsgBUEIaiACQUBrQcAAEM8FGiAFQdQAaiACQThqKAIANgIAIAVBzABqIAIpAzA3AgAgBUIBNwMAIAVByABqIAE2AgAMAQsgAkEMahAfIAVCADcDAAsgAkHQAWokAAJAIAUpAwBQBEAgBkEANgJADAELIAYgBUEIakHQABDPBRoLIAVB4ABqJAACQCAGKAJABEAgACAGQdAAEM8FGgwBCyAAQQA2AkALIAZB0ABqJAALqxACC38DfiMAQUBqIgckACAHIAA6AAsgB0ECOgAKAn8CQCAAQf8BcUECRgRAIAdBGGohBQJAAkAgAigCACIAKAIEIgNFDQACQCAAKAIAIgAsAAAiBkEASARAIANBCksNASAAIANqQQFrLAAAQQBODQEgBSACEOMCDAMLIAJBARDfAiAFQQA2AgAgBSAGrUL/AYM3AwgMAgsgBkH/AXEgACwAASIGQf8BcUEHdGpBgAFrIQMgAgJ/AkACQAJAAkACQAJAAkAgBkEASARAIAMgACwAAiIGQf8BcUEOdGpBgIABayEDIAZBAE4NASADIAAsAAMiBkH/AXFBFXRqQYCAgAFrIQMgBkEATg0CIANBgICAgAFrrSEOIAAsAAQiA0EATg0DIANB/wFxIAAsAAUiBkH/AXFBB3RqQYABayEDIAZBAE4NBCADIAAsAAYiBkH/AXFBDnRqQYCAAWshAyAGQQBODQUgAyAALAAHIgZB/wFxQRV0akGAgIABayEDIAZBAE4NBiAALAAIIgatQv8BgyEPIANBgICAgAFrrUIchiAOfCEOIAZBAE4NByAAMQAJIhBCAloNCSAOIA9COIZ8IBBCP4Z8QoCAgICAgICAgH99IQ5BCgwICyADrSEOQQIMBwsgA60hDkEDDAYLIAOtIQ5BBAwFCyADrUL/AYNCHIYgDnwhDkEFDAQLIAOtQhyGIA58IQ5BBgwDCyADrUIchiAOfCEOQQcMAgsgA61CHIYgDnwhDkEIDAELIA9COIYgDnwhDkEJCxDfAiAFQQA2AgAgBSAONwMIDAELQbjjwABBDhDxAiEAIAVBATYCACAFIAA2AgQLIAcoAhgNASAHKQMgIg4gAigCADUCBFgEQCAHQRhqIQYgAigCACECIwBBQGoiACQAIAAgAjYCEAJAAkAgDqciAyAAQRBqKAIAKAIESw0AIABBCGogA0EAEI0FIABBADYCGCAAIAAoAgwiAjYCHCAAIAAoAgg2AhQgAEEHQSAgAkEKdmdrIgIgAkEHTxtBAnRBAXI2AiAgAEEUaiECIAAoAhAhBCMAQRBrIgUkACAFIAM2AgwgBSAENgIIAkACQANAIAVBCGoiAygCACgCBCIEIAMoAgQiAyADIARLGwRAIAUoAggiAygCACEEIAMoAgQiAyAFKAIMIgkgAyAJSRsiAyACKAIIIAIoAgQiCWtLBH8gAiADEI8EIAIoAgQFIAkLIAIoAgBqIAQgAxDPBRogAigCBCADaiIEIAIoAghLDQIgAiAENgIEIAMgBUEIaiIEKAIEIglLBEAACyAEIAMQ3wIgBCAJIANrNgIEDAELCyAFQRBqJAAMAQsACyAAKAIYIQIgACgCFCEFAkAgACgCICIEQQFxRQRAIAYgBDYCDCAGIAI2AgggBiAFNgIEIAZBoIXBADYCAAwBCyAAKAIcIQggAEEkaiIDIAIgBEEFdiIJIgRqNgIIIAMgBCAIajYCBCADIAUgBGs2AgAgAEEwaiECIwBBIGsiBSQAIAMoAgAhBAJAAkACQCADKAIIIgogAygCBCIIRwRAQcy8wQAtAAAaQQxBBBCwAiIDRQ0CIANBATYCCCADIAg2AgQgAyAENgIAIAIgAzYCDCACIAo2AgggAiAENgIEIAJBlIXBADYCAAwBCyAFIAg2AhwgBSAINgIYIAUgBDYCFCAFQRRqIgMoAggiBCADKAIESQRAIwBBEGsiCCQAIAhBCGohCwJAIAQgAygCBCIKTQRAAn9BgYCAgHggCkUNABogAygCACEMAkAgBEUEQEEBIQ0gDEEBIAoQTQwBC0EBIAwgCkEBIAQQsQIiDUUNARoLIAMgBDYCBCADIA02AgBBgYCAgHgLIQogCyAENgIEIAsgCjYCAAwBCwALIAgoAghBgYCAgHhHBEAACyAIQRBqJAALIAVBCGoiBCADKAIINgIEIAQgAygCADYCACAFKAIIIQMgBSgCDCEIIwBBEGsiBCQAAkACQCAIBEAgA0EBcQ0BIAIgCDYCCCACIAM2AgQgAkH8hMEANgIAIAIgA0EBcjYCDAwCCyACQgA3AgggAkHwhMEANgIEIAJB8ITBADYCACAEQQhqIgJBADYCBCACQQE2AgAgBCgCDCICRQ0BIAMgBCgCCCACEE0MAQsgAiADNgIMIAIgCDYCCCACIAM2AgQgAkGIhcEANgIACyAEQRBqJAALIAVBIGokAAwBCwALIAAoAjgiAiAJSQ0BIABBOGoiBSACIAlrNgIAIAAgACgCNCAJajYCNCAGIAApAjA3AgAgBkEIaiAFKQIANwIACyAAQUBrJAAMAQsACyMAQRBrIgAkACABQQA2AgggASAGQQhqIgIoAgAQkwUgAEEIaiACKQIANwMAIAAgBikCADcDACABIAAoAggiAhCTBQNAIAIEQCABIAAoAgQiBSACEJQFIAAgAiAFajYCBEEAIQIgAEEANgIIDAEFIABBDGogACgCBEEAIAAoAgAoAggRAgALCyAAQRBqJABBAAwDC0GA5MAAQRAQ8QIMAgsgB0E8akEJNgIAIAdBJGpCAjcCACAHQQM2AhwgB0Ho48AANgIYIAdBCTYCNCAHIAdBMGo2AiAgByAHQQpqNgI4IAcgB0ELajYCMCAHQRhqIgBBDGooAgAhAQJAAkAgB0EMaiICAn8CQAJAIAAoAgQOAgABAwsgAQ0CQQAhAEG448AADAELIAENASAAKAIAIgEoAgQhACABKAIACyAAEEcMAQsgAiAAEJoFCyACEPICDAELIAcoAhwLIAdBQGskAAuVAQEBfyAAIAIQlgEgATUCCCACEJcBIAEoAgAhAyABKAIIIQEjAEEQayIAJAAgACABNgIMIAAgAzYCCCACIAEQkwUCQAJAA0AgAEEIaigCBARAIAIgACgCCCAAKAIMIgEQlAUgACgCDCIDIAFJDQIgACADIAFrNgIMIAAgACgCCCABajYCCAwBCwsgAEEQaiQADAELAAsLggMBBn8jAEEQayIEJAAgBEGQ5MAANgIMIAQgATYCBCAEQYCAxAA2AgAgBEEIaiIDIAEgAmo2AgAjAEEQayIFJAAgBUEMaiIHQQA2AgAgBUIBNwIEIwBBIGsiAiQAIAJBCGoiBiADKQIANwMAIAIgBCkCADcDACACQRBqIgFBCGogBigCACACKAIEa0EBdCACKAIAQYCAxABHciIDNgIAIAFBATYCBCABIAM2AgAgBUEEaiIIIAIoAhAQkwUgAkEYaiAGKQMANwMAIAIgAikDADcDEANAIAJBEGoiAygCACEBIANBgIDEADYCAAJAIAFBgIDEAEcNAEGAgMQAIQEgAygCBCIGIANBCGooAgBGDQAgAyAGQQFqNgIEIAMgAygCDCIBIAYtAAAiA0EPcWotAAA2AgAgASADQQR2ai0AACEBCyABQYCAxABHBEAgCCABEPUCDAELCyACQSBqJAAgAEEIaiAHKAIANgIAIAAgBSkCBDcCACAFQRBqJAAgBEEQaiQACwsAIAAgAUEwEO0CC4ABAQN/IAAoAgAhAyMAQRBrIgAkACABKAIUQcCDwQBBCyABQRhqKAIAKAIMEQQAIQQgAEEIaiICQQA6AAUgAiAEOgAEIAIgATYCACACQcuDwQBBCyADKAIAIgFBDGpB2IPBABC+BUHog8EAQQUgAUHwg8EAEL4FEL8FIABBEGokAAsiACAABEBBzLzBAC0AABogACABELACIQELIAEEQCABDwsACykBAX9BGEEEEPACIgIgATYCFCACIAA2AhAgAkIANwIIIAJCBDcCACACCzUBAX9BGEEEEPACIgFBADYCCCABQgQ3AgAgASAAKQIANwIMIAFBFGogAEEIaigCADYCACABC40CAgJ/AX4jAEEwayICJAAgAkEgakIANwMAIAJBGGpCADcDACACQRBqQgA3AwAgAkIANwMIIAFBGGohA0EAIQEDQCABQSBGRQRAIAIgAykDACIEQjiGIARCgP4Dg0IohoQgBEKAgPwHg0IYhiAEQoCAgPgPg0IIhoSEIARCCIhCgICA+A+DIARCGIhCgID8B4OEIARCKIhCgP4DgyAEQjiIhISENwMoIAJBCGogAWpBCCACQShqQQgQyQUgA0EIayEDIAFBCGohAQwBCwsgACACKQMINwAAIABBGGogAkEgaikDADcAACAAQRBqIAJBGGopAwA3AAAgAEEIaiACQRBqKQMANwAAIAJBMGokAAtGACAAAn8gAkEBa0EgTwRAIABCgoCAgBA3AgQgAEEQaiACNgIAIABBDGpBIDYCAEEBDAELIABBCGogASACENoDQQALNgIAC5gCAQJ/IwBBEGsiAiQAAkAgACACQQxqAn8CQAJAIAFBgAFPBEAgAkEANgIMIAFBgBBJDQEgAUGAgARPDQIgAiABQT9xQYABcjoADiACIAFBDHZB4AFyOgAMIAIgAUEGdkE/cUGAAXI6AA1BAwwDCyAAKAIIIgMgACgCBEYEfyAAIAMQjwUgACgCCAUgAwsgACgCAGogAToAACAAIAAoAghBAWo2AggMAwsgAiABQT9xQYABcjoADSACIAFBBnZBwAFyOgAMQQIMAQsgAiABQT9xQYABcjoADyACIAFBBnZBP3FBgAFyOgAOIAIgAUEMdkE/cUGAAXI6AA0gAiABQRJ2QQdxQfABcjoADEEECxCUBQsgAkEQaiQACzIBAX8gASgCACIBIAAoAgBPBH8gACgCBCECIAAtAAhFBEAgASACTQ8LIAEgAkkFQQALCwsAIAAgARD1AkEACxQAIAFB/wFxIABBA3RyrSACEJcBCxUAIABBACACEPgCIAEpAwAgAhCXAQsmAQF/QQFBAiABEPgCIAAoAggiAq0gARCXASABIAAoAgAgAhCUBQuqAgEEfyMAQfAQayIDJAAgA0EYakEBEMQDIANBEGoiBCABIAJqNgIEIAQgATYCACADKAIUIQQgAygCECECA0ACQCACIARGBEAgA0HYCGoiASADQRhqQZgIEM8FGiADQbQIaiABEMkDIAMtALQIDQEgACADKQC1CDcAACAAQRhqIANBzQhqKQAANwAAIABBEGogA0HFCGopAAA3AAAgAEEIaiADQb0IaikAADcAACADQfAQaiQADwsgA0HYCGoiAUEBNgIgIAEgAi0AADoAACADQQhqIgYgASgCBCABKAIgIgUgBUEgSyIFGzYCBCAGIAEoAgAgASAFGzYCACADIANBGGogAygCCCADKAIMEMUDIAMoAgANACACQQFqIQIgA0HYCGoQvQMMAQsLAAsZACAAQQhqIAEoAggQ1wIgACABKQMANwMAC84CAQV/IAEoAgAiAyABKAIIaiEGA0ACQAJAAkAgAyAGRg0AAn8gAywAACICQQBOBEAgAkH/AXEhAiADQQFqDAELIAMtAAFBP3EhBCACQR9xIQUgAkFfTQRAIAVBBnQgBHIhAiADQQJqDAELIAMtAAJBP3EgBEEGdHIhBCACQXBJBEAgBCAFQQx0ciECIANBA2oMAQsgBUESdEGAgPAAcSADLQADQT9xIARBBnRyciICQYCAxABGDQEgA0EEagshAyACQd///wBxQcEAa0EaSQ0DIAJBMGtBCkkNAyACQdsAayIFQQRNDQEMAgsgACABKQIANwIAIABBCGogAUEIaigCADYCAA8LQQEgBXRBFXENAQsgAkEta0ECSQ0AAkACQCACQTxrDgMCAQIACyAC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AyABQdgIahC9AwwBCwsACyAEEJEFIAdBEGokAAvzAQICfwF+IwBB8ABrIgIkACACQThqIgMCfyABKAIIQTBGBEAgAUEANgIIIANBAWogASgCAEEwEM8FGiABEJEFQQAMAQsgAyABKQIANwIEIANBDGogAUEIaigCADYCAEEBCzoAACAAAn8gAi0AOEUEQCACQQhqIgEgAkE4akEBckEwEM8FGiAAQQFqIAFBMBDPBRpBAAwBCyACQRNqIAJBxABqKAIAIgE2AAAgAiACKQI8IgQ3AAsgAkFAayABNgIAIAIgBDcDOCACQThqEJEFIABBEGogATYCACAAQoCAgICABjcCBEEBCzoAACACQfAAaiQAC80CAQN/IwBBgBFrIgIkACACQShqIgNBBRDEAyACQegIaiIEIAFB4ABqEMsDIAJBIGogAyAEQSAQxQMCQCACKAIgDQAgAkHoCGoiAyABQegAahDLAyACQRhqIAJBKGogA0EgEMUDIAIoAhgNACACQegIaiIDIAEQ2QIgAkEQaiACQShqIANBIBDFAyACKAIQDQAgAkHoCGoiAyABQSBqENkCIAJBCGogAkEoaiADQSAQxQMgAigCCA0AIAJB6AhqIgMgAUFAaxDZAiACIAJBKGogA0EgEMUDIAIoAgANACACQegIaiIBIAJBKGpBmAgQzwUaIAJBxAhqIAEQyQMgAi0AxAgNACAAIAIpAMUINwAAIABBGGogAkHdCGopAAA3AAAgAEEQaiACQdUIaikAADcAACAAQQhqIAJBzQhqKQAANwAAIAJBgBFqJAAPCwALmwEBAX8jAEEQayICJAACfwJAAkACQCAAKAIAQQFrDgIBAgALIAIgAEEEajYCBCABQazrwABBBSACQQRqQazqwAAQrAUMAgsgAiAAQQRqNgIIIAFBsevAAEEIIAJBCGpBrOrAABCsBQwBCyACIABBCGo2AgwgAUG568AAQQcgAEEEakGc6sAAIAJBDGpBrOrAABCtBQsgAkEQaiQACwwAIAAoAgAgARCQAwtbAQF/IwBBMGsiAiQAIAIgADYCDCACQRxqQgE3AgAgAkECNgIUIAJBqOzAADYCECACQS82AiwgAiACQShqNgIYIAIgAkEMajYCKCABIAJBEGoQqgUgAkEwaiQAC7IBAQF/IAAoAgAhAiMAQdAAayIAJAAgAEHIAGogAkEQaigAADYCACAAQUBrIAJBCGopAAA3AwAgACACKQAANwM4IABBLGoiAiAAQThqQRQQ7QIgAEEQakIBNwIAIABBGTYCICAAQQE2AgggAEGY7MAANgIEIAAgACgCNDYCKCAAIAAoAiw2AiQgACAAQSRqNgIcIAAgAEEcajYCDCABIABBBGoQqgUgAhCRBSAAQdAAaiQAC8QBAQF/IAAoAgAhAiMAQeAAayIAJAAgAEHYAGogAkEYaikAADcDACAAQdAAaiACQRBqKQAANwMAIABByABqIAJBCGopAAA3AwAgACACKQAANwNAIABBNGoiAiAAQUBrQSAQ7QIgAEEYakIBNwIAIABBGTYCKCAAQQE2AhAgAEGY7MAANgIMIAAgACgCPDYCMCAAIAAoAjQ2AiwgACAAQSxqNgIkIAAgAEEkajYCFCABIABBDGoQqgUgAhCRBSAAQeAAaiQAC7gCAgN/An4jAEEwayICJAAgAkEYaiIDAn8gASgCCEEURgRAIAFBADYCCCADIAEoAgAiBCkAADcAASADQQlqIARBCGopAAA3AAAgA0ERaiAEQRBqKAAANgAAIAEQkQVBAAwBCyADIAEpAgA3AgQgA0EMaiABQQhqKAIANgIAQQELOgAAIAACfyACLQAYRQRAIAJBEGogAkEpaigAACIBNgIAIAJBCGogAkEhaikAACIFNwMAIAIgAikAGSIGNwMAIABBEWogATYAACAAQQlqIAU3AAAgACAGNwABQQAMAQsgAkELaiACQSRqKAIAIgE2AAAgAiACKQIcIgU3AAMgAkEgaiABNgIAIAIgBTcDGCACQRhqEJEFIABBEGogATYCACAAQoCAgIDAAjcCBEEBCzoAACACQTBqJAAL7gECAX8EfiMAQdAAayICJAAgAkEoaiABENACIAACfyACLQAoRQRAIAJBIGogAkHBAGopAAAiAzcDACACQRhqIAJBOWopAAAiBDcDACACQRBqIAJBMWopAAAiBTcDACACIAIpACkiBjcDCCAAQRlqIAM3AAAgAEERaiAENwAAIABBCWogBTcAACAAIAY3AAFBAAwBCyACQRNqIAJBNGooAgAiATYAACACIAIpAiwiAzcACyACQTBqIAE2AgAgAiADNwMoIAJBKGoQkQUgAEEQaiABNgIAIABCgICAgIAENwIEQQELOgAAIAJB0ABqJAALywEBA38jAEFAaiICJAAgAkEIakEgQQAQjQUgAigCDCEEIAIoAggiAyABKQAANwAAIANBGGogAUEYaikAADcAACADQRBqIAFBEGopAAA3AAAgA0EIaiABQQhqKQAANwAAIAJBIDYCPCACIAQ2AjggAiADNgI0IAJBEGogAkE0ahDQAiACLQAQBEAACyAAIAIpABE3AAAgAEEYaiACQSlqKQAANwAAIABBEGogAkEhaikAADcAACAAQQhqIAJBGWopAAA3AAAgAkFAayQAC5YCAQF/IAAoAgAjAEEQayICJAAoAgAhAAJ/IAEoAgAgASgCCHIEQCACQQA2AgwgASACQQxqAn8CQAJAIABBgAFPBEAgAEGAEEkNASAAQYCABE8NAiACIABBP3FBgAFyOgAOIAIgAEEMdkHgAXI6AAwgAiAAQQZ2QT9xQYABcjoADUEDDAMLIAIgADoADEEBDAILIAIgAEE/cUGAAXI6AA0gAiAAQQZ2QcABcjoADEECDAELIAIgAEE/cUGAAXI6AA8gAiAAQRJ2QfABcjoADCACIABBBnZBP3FBgAFyOgAOIAIgAEEMdkE/cUGAAXI6AA1BBAsQqAUMAQsgASgCFCAAIAFBGGooAgAoAhARAQALIAJBEGokAAsMACAAKAIAIAEQuwULRwEBfyMAQRBrIgIkACACQQhqIAAgAUEBEFQgAigCDBoCQAJAIAIoAggiAEGBgICAeEcEQCAARQ0BAAsMAQsACyACQRBqJAALNwEBfyAAKAIIIQEgACgCACEAA0AgAQRAIAAQkQUgAEEMahCRBSABQQFrIQEgAEEYaiEADAELCwscAQF/IAAoAgQiAQRAIAAoAgBBBCABQRhsEE0LC0MAIABCATcDKCAAQgE3AxAgAEIANwMAIABBMGpBADYCACAAQSBqQgA3AwAgAEEYakKAgICAEDcDACAAQQhqQgA3AwALFgAgACgCACIAKAIAIAAoAgggARCwBQtNACABLQAAQQlHBEBBKEEIEPACIAFBKBDPBSEBIABBATYCCCAAQQE2AgQgACABNgIADwsgACABKQIENwIAIABBCGogAUEMaigCADYCAAtHAQJ/IAAoAgghASAAKAIAIQIDQCABBEAgAUEBayEBIAIQoQMgAkEoaiECDAELCyAAKAIEIgEEQCAAKAIAQQggAUEobBBNCwtmAQN/IwBB0ABrIgMkAEHQAEEIEPACIAMgARCiAyADQShqIgQgAhCiAyADQSgQzwUiBUEoaiAEQSgQzwUaIABBBGoiBEECNgIIIARBAjYCBCAEIAU2AgAgAEEJOgAAIANB0ABqJAALiAEBA38jAEEQayICJAAgAkEIakEgQQAQjQUgAigCDCEEIAIoAggiAyABKQAANwAAIANBGGogAUEYaikAADcAACADQRBqIAFBEGopAAA3AAAgA0EIaiABQQhqKQAANwAAIABBDGpBIDYCACAAQQhqIAQ2AgAgACADNgIEIABBAToAACACQRBqJAALRQACQAJAAkACQAJAIAAtAAAOCQEEBAEBAQQCAwALIABBBGoQngMLDwsgAEEEahCeAw8LIABBBGoQngMPCyAAQQRqEJEFCy4AIAAgATcDCCAAQQQ6AAAgAEEgakIANwMAIABBGGpCADcDACAAQRBqQgA3AwALDAAgACgCACABELoFC50BAQN/IAEoAhAhBAJAAkACQAJAIAEoAgBFBEBBASEDIAQNAUEAIQEMBAsgASgCDCABKAIIayECIAQNAkEBIQMMAQsgAUEcaigCACABQRhqKAIAayECCyACIQEMAQsgAiABQRxqKAIAIAFBGGooAgBraiIBIAJPIQNBfyABIAEgAkkbIQILIAAgAzYCBCAAIAI2AgAgAEEIaiABNgIAC60BAQR/IAFB5ABqKAIAIAFB4ABqKAIAa0EFdkEAIAEoAlgbIQICQCABQShqKAIAIAFBJGooAgBrQQAgASgCABsiBCABQdQAaigCACABQdAAaigCAGtBACABKAIsG2oiASAESQRAIAJBBXQhAgwBCyABIAJBBXQiAmoiBSABTyEDCyAAIAM2AgQgAEEIaiAFNgIAIABBfyACQX8gASABIARJG2oiACAAIAJJGzYCAAvGBQEIfyMAQSBrIgckACAHQQhqIQUjAEEQayIDJAACQAJAAkACQCACIAFrQShuIgZFBEBBBCEEDAELIAZB////P0sNASAGQQR0IgRBAEkNASADQQhqQQQgBBBPIAMoAggiBEUNAgsgBSAGNgIEIAUgBDYCACADQRBqJAAMAgsACwALIAdBHGoiCkEANgIAIAcgBykDCDcCFCMAQRBrIgYkACACIAFrQShuIgUgB0EUaiIDKAIEIAMoAggiCGtLBEAjAEEQ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BikDADcCCCAGQQhqIQojAEHQAGsiAyQAIANBKGogARClAwJAIAMoAiwEQCAKIANBMGooAgAQkwUgASgCWCEHIAEoAiwgASgCACAKKAIIIQIgAyAKKAIANgIQIAMgAjYCDCADIApBCGo2AggEQCADQShqIgIgAUEEakEoEM8FGiADQQhqIAIQpwMLIAcEQCADQSRqIAFB3ABqIgJBCGooAgAiBTYCACADIAIpAgA3AhwgAyAHNgIYIAMoAiAhAgNAIAIgBUcEQCADQUBrIAJBGGopAAA3AwAgA0E4aiACQRBqKQAANwMAIANBMGogAkEIaikAADcDACADQoCAgICABDcDSCADIAIpAAA3AyggAkEgaiECIANBCGogA0EoahCnAwwBCwsgAyAFNgIgIwBBEGsiBSQAIAUgA0EYajYCDCMAQRBrIgIkACACIAVBDGooAgApAgA3AgggAkEIahDAAiACQRBqJAAgBUEQaiQACwRAIANBKGoiAiABQTBqQSgQzwUaIANBCGogAhCnAwsgAygCCCADKAIMNgIAIANB0ABqJAAMAQsACyAAQQhqIAgoAgA2AgAgACAGKQIINwIAIAZBIGokAAwBCwALIARBDGoiABCoAyAAEKoDIARBgAFqJAAL+QEBBH8jAEEgayIGJAAgAgRAIAEhBCACIQUDQCAEEK8DIANqIQMgBEEQaiEEIAVBAWsiBQ0ACwsgAkEEdCEFIAEhBANAIAUEQCAEIAAgAxCxAyAFQRBrIQUgBBCwAyADaiEDIARBEGohBAwBBSACQQR0IQMDQCADBEACQAJAAkACQCABKAIAQQJrDgMAAQIDCyAAIAFBCGooAgAQsgMMAgsgACABQQRqKAIAIAFBDGooAgAQtAMMAQsgBiABQQxqKAIAIgIQuAMgACAGEKwDIAAgAUEEaigCACACELQDCyABQRBqIQEgA0EQayEDDAELCyAGQSBqJAALCwulAQEDfyMAQRBrIgQkACAEIAM2AgwgBCACNgIIIARBCGoiAigCBCACKAIAa0EDdiECIAACf0EAIAEoAgQiA0UNABogASgCCCIFBEAgAyAFbiIGIAMgBSAGbEdqDAELAAsiAzYCHCAAQQA2AhQgAEEQaiABQQhqKAIANgIAIAAgASkCADcCCCAAIAQpAgg3AgAgACADIAIgAiADSxs2AhggBEEQaiQAC5wBAQN/AkACQAJAAkAgAC0AAEECaw4IAAMDAwABAAIDC0EBDwsgAEEMaigCAEEobCEBIAAoAgQhAANAIAFBAEchAiABRQ0CIAFBKGshASAAELYDIABBKGohAEUNAAsMAQsgAEEMaigCAEEobCEBIAAoAgQhAANAIAFBAEchAiABRQ0BIAFBKGshASAAELYDIABBKGohAEUNAAsLIAILDAAgACgCACABEN4DC6cBAQR/IwBBMGsiAiQAIAJBIGoiA0IANwMAIAJBGGoiBEIANwMAIAJBEGoiBUIANwMAIAJCADcDCCACIAFBGHQgAUGA/gNxQQh0ciABQQh2QYD+A3EgAUEYdnJyNgIsIAJBJGpBBCACQSxqQQQQyQUgAEEYaiADKQMANwAAIABBEGogBCkDADcAACAAQQhqIAUpAwA3AAAgACACKQMINwAAIAJBMGokAAt4AQF/IAEoAhAiBEUEQAALIABBADYCHCAAIAI2AhQgACABKQIANwIAIABBGGogAzYCACAAQQhqIAFBCGopAgA3AgAgAEEQaiABQRBqKAIANgIAIAAgASgCBCAEbiIBNgIkIAAgASADIAJrQQN2IgAgACABSxs2AiALDQAgAEEAQYkBENEFGgvrCAIofgJ/IwBBMGshKgJAIAFBGE0EQEEAIAFrQQN0QaDywABqIQEgACkDwAEhFiAAKQOYASEDIAApA3AhCiAAKQNIIRcgACkDICEQIAApA7gBIQIgACkDkAEhGCAAKQNoIQQgACkDQCELIAApAxghGSAAKQOwASEMIAApA4gBIRogACkDYCEbIAApAzghHCAAKQMQIR0gACkDqAEhHiAAKQOAASENIAApA1ghHyAAKQMwIQYgACkDCCEgIAApA6ABIREgACkDeCEhIAApA1AhIiAAKQMoISMgACkDACEHA0AgAUGg8sAARg0CIAEpAwAhKUEAISsDQCArQShHBEAgKkEIaiArakIANwMAICtBCGohKwwBCwsgACARICopAwiFICGFICKFICOFIAeFIiQgDCAqKQMYhSAahSAbhSAchSAdhSIlQgGJhSISIAaFQiyJIiYgFiAqKQMohSADhSAKhSAXhSAQhSIOIB4gKikDEIUgDYUgH4UgBoUgIIUiD0IBiYUiBiAHhSInQn+FgyACICopAyCFIBiFIASFIAuFIBmFIgUgJEIB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KQAANwAAIABBhQhqIANB2ABqKQAANwAAIABBjQhqIANB4ABqKQAANwAACyADQbACaiQADwsACy4BAn8jAEGAAWsiAyQAIANBCGoiBCABQQF2IAIQwwMgACAEEMEDIANBgAFqJAALrwQBBX8jAEFAaiIDJAACQAJAAkAgAUHUB2ooAgAgAUHwB2ooAgAiAiACQSBLGyIERQ0AIANBMGpCADcDACADQShqQgA3AwAgA0EgakIANwMAIANCADcDGCAEQSFPDQEgA0EQaiIFIAFB0AdqIgIoAgQgAigCICIGIAZBIEsiBhs2AgQgBSACKAIAIAIgBhs2AgAgA0EYaiICIAQgAygCECADKAIUEMkFIANBCGogASACEMYDIAMoAghFDQAgAygCDCECIABBAToAACAAIAI2AgQMAgsDQCABLQD0BwRAIABBADoAACAAQRlqIAFBjQhqKQAANwAAIABBEWogAUGFCGopAAA3AAAgAEEJaiABQf0HaikAADcAACAAIAFB9QdqKQAANwABDAMLIAMgASgCBCABKALAByICIAJBCEsiAhs2AgQgAyABKAIAIAEgAhs2AgACQCADKAIEIgJFDQAgAygCACIERQ0AIANBGGoiBSABIAJB+ABsIARqQQhrKAIAQQF0QQFyIgIQygMgASACIAUQxwMMAQsgASgCzAciAkEBRwRAIANBGGoiBCABIAIQygMgASACIAQQyAMMAQsLIABBAEEhENEFGgwBCwALIwBBEGsiACQAIAEoAsAHIgJBCU8EQCABKAIAIQQgACABKAIENgIMIAAgAjYCCCAAIAQ2AgQgAEEEaiICKAIEBEAgAigCABCGBQsLIABBEGokACABQdAHahC9AyADQUBrJAALhwgCDX8CfiMAQRBrIgokACAKQQhqIQ0CQAJAIAEoAsgHIAJnakEgayIOQTFPDQAjAEEQayIHJABB0LzBACEBIAdB0LzBADYCBEHcvMEALQAAQQNHBEAgByAHQQRqNgIIIAcgB0EIajYCDCAHQQxqIQEjAEHQAGsiAiQAAkACQAJAAkBB3LzBAC0AAEEBaw4DAgIBAAtB3LzBAEECOgAAIAJBAToAFCACQdy8wQA2AhAgASgCACIEKAIAIQEgBEEANgIAIAFFDQEgASgCACELIAJBCGpBIEEBEI0FIAJBIDYCOCACIAIpAwg3AjAg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KQMAQgAgAhDNBSAHIAMgBSkDACIDfCIENwMAIAZBCGohBiAFQQhqKQMAIAMgBFatfCEDDAELCwtPAgJ/AX4gAEEIaiECAkACQANAIAFBA0YNASABQQFqIQEgAikDACACQQhqIQJQDQALIAFBA00NAQsgACkDACIDQv////8PVg0AIAOnDwsACy4CAn8BfgNAIAEiAkEERwRAIAJBAWohASAAKQMAIABBCGohAFANAQsLIAJBA0sLSwICfwF+IABBGGohAUHAfSECA0AgAkFAayICQUBGBEBBwAAgACkDAHmnaw8LIAEpAwAhAyABQQhrIQEgA1ANAAtBACADeacgAmprC6kVAhF/CX4jAEGwAmsiAyQAIAEQ2AMhDQJAIAIQ2AMiBUUNAAJAAkAgBSANTQRAIAVBwQBJDQEgA0HgAGoiECACQRhqKQMANwMAIANB2ABqIhEgAkEQaikDADcDACADQdAAaiISIAJBCGopAwA3AwAgAyACKQMANwNIIANByABqIgIhBCAFQQFrQQZ2IgtBA3QgAmoiDikDAHkiGKciDyEFIwBBIGsiAiQAIwBBIGsiByQAIAdBGGoiBkIANwMAIAdBEGoiCEIANwMAIAdCADcDCCAHIAWtNwMAIAcQ1gMhCSAGQgA3AwAgCEIANwMAIAdBCGpCADcDACAHQgA3AwBBBCAJQQZ2IgprIgVBACAFQQRNGyEGIAlBP3EiE60hFCAHIApBA3RqIQggBCIFIQwDQCAGBEAgCCAMKQMAIBSGNwMAIAZBAWshBiAIQQhqIQggDEEIaiEMDAEFAkAgE0UNAEEDIAprIgZBACAGQQNNGyEIIApBA3QgB2pBCGohBkEAIAlrQT9xrSEUA0AgCEUNASAGIAYpAwAgBSkDACAUiHw3AwAgCEEBayEIIAVBCGohBSAGQQhqIQYMAAsACwsLIAIgBykDADcDACACQRhqIgUgB0EYaikDADcDACACQRBqIgYgB0EQaikDADcDACACQQhqIgggB0EIaikDADcDACAHQSBqJAAgBEEYaiAFKQMANwMAIARBEGogBikDADcDACAEQQhqIAgpAwA3AwAgBCACKQMANwMAIAJBIGokACABKQMAIRQgA0HwAGohByMAQSBrIgIkACACQRhqIgRCADcDACACQRBqIgVCADcDACACQgA3AwggAkHAACAPa603AwAgAhDWAyEGIARCADcDACAFQgA3AwAgAkEIakIANwMAIAJCADcDAEEAIQRBBCAGQQZ2IghrIgVBACAFQQRNGyEFIAEgCEEDdGohCSAGQT9xIgqtIRUDQCAFBEAgAiAEaiAEIAlqKQMAIBWINwMAIAVBAWshBSAEQQhqIQQMAQUCQCAKRQ0AQQMgCGsiBEEAIARBA00bIQUgCEEDdCABakEIaiEBQQAgBmtBP3GtIRUgAiEEA0AgBUUNASAEIAQpAwAgASkDACAVhnw3AwAgBUEBayEFIARBCGohBCABQQhqIQEMAAsACwsLIAcgAikDADcDACAHQRhqIAJBGGopAwA3AwAgB0EQaiACQRBqKQMANwMAIAdBCGogAkEIaikDADcDACACQSBqJAAgAyAUIBiGNwNoIANBqAFqQgA3AwAgA0GgAWpCADcDACADQZgBakIANwMAIANCADcDkAEgDikDACEXIA5BCGspAwAhGiADQQA6ALwBIAMgDUEBa0EGdiALazYCuAEgA0EANgK0ASALQQJqIQggC0EBaiEHIBhCP4MhGwNAIANBQGshBUEAIQRBACEBAkAgA0G0AWoiAi0ACA0AIAIoAgAiBiACKAIEIgFLDQAgASAGTQRAQQEhBCACQQE6AAgMAQsgAiABQQFrNgIEQQEhBAsgBSABNgIEIAUgBDYCAAJAAkAgAygCQEUEQCADQYgCaiADQegAakEoEM8FGiADQdgBakIANwMAIANB0AFqQgA3AwAgA0HIAWpCADcDACADQgA3A8ABQQAhAQNAIAFBIEYEQCAPRQ0DIANBADoA8AEgA0KBgICAwAA3AugBQgAgGH1CP4MhFANAIANBCGohBUEAIQRBACEBAkAgA0HoAWoiAi0ACA0AIAIoAgAiASACKAIEIgdLDQAgASAHTwRAQQEhBCACQQE6AAgMAQtBASEEIAIgAUEBajYCAAsgBSABNgIEIAUgBDYCACADKAIIRQ0EIAMoAgwiAUEESw0KIAFBAWsiAkEETw0KIANBwAFqIAJBA3RqIgIgAikDACADQYgCaiABQQN0aikDACAUhoQ3AwAMAAsABSADQcABaiABaiADQYgCaiABaikDACAbiDcDACABQQhqIQEMAQsACwALIAMoAkQiBSAHaiIBQQRLDQZCfyEUIANB6ABqIAFBA3RqIgkpAwAiFSAXWg0BIAUgC2oiAkEFTw0GIAFBAmsiAUEESw0GIANB6ABqIgQgAUEDdGohASADQTBqIAJBA3QgBGopAwAiFiAVIBcQ0gUgA0EgaiADKQMwIhQgA0E4aikDACAXEM0FIBYgAykDIH0hFQNAIANBEGogFEIAIBoQzQUCQCADQRhqKQMAIhYgFVEEQCABKQMAIAMpAxBaDQQMAQsgFSAWVg0DCyAUQgF9IRQgFSAVIBd8IhVYDQALDAELIAAgAykDwAE3AyAgAEE4aiADQdgBaikDADcDACAAQTBqIANB0AFqKQMANwMAIABBKGogA0HIAWopAwA3AwAgAEEYaiADQagBaikDADcDACAAQRBqIANBoAFqKQMANwMAIABBCGogA0GYAWopAwA3AwAgACADKQOQATcDAAwECyADQYACaiAQKQMANwMAIANB+AFqIBEpAwA3AwAgA0HwAWogEikDADcDACADIAMpA0g3A+gBIANBiAJqIANB6AFqIBQQ1QMgA0HYAWogA0GgAmopAwA3AwAgA0HQAWogA0GYAmopAwA3AwAgA0HIAWogA0GQAmopAwA3AwAgAyADKQOIAjcDwAEgAyADKQOoAjcD4AEgBUEGTw0EQSggBUEDdCIKa0EDdiIGIAggBiAISRtBA3QhDCADQegAaiAKaiECQQAhAUEAIQQDQCABIAxHBEAgASACaiINIA0pAwAiFiADQcABaiABaikDACIZIAStQv8Bg3wiFX03AwAgFSAZVCAVIBZWciEEIAFBCGohAQwBCwsgBEH/AXEEQCAGIAcgBiAHSRshAUEAIQYgA0HIAGohBANAIAEEQCACIAIpAwAiFSAEKQMAIhYgBq1C/wGDfCIZfCIcNwMAIBUgHFYgFiAZVnIhBiABQQFrIQEgBEEIaiEEIAJBCGohAgwBCwsgCSAJKQMAIAatQv8Bg3w3AwAgFEIBfSEUCyAFQQRPDQQgA0GQAWogCmogFDcDAAwACwALIABCADcDACAAQRhqQgA3AwAgAEEQakIANwMAIABBCGpCADcDACAAIAEpAwA3AyAgAEEoaiABQQhqKQMANwMAIABBMGogAUEQaikDADcDACAAQThqIAFBGGopAwA3AwAMAQsgA0GgAmoiBCABQRhqKQMANwMAIANBmAJqIgUgAUEQaikDADcDACADQZACaiIHIAFBCGopAwA3AwAgAyABKQMANwOIAiADIAIpAwA3A2ggA0IANwPAASADQYgCaiEGIANBqAJqIQIjAEEgayIBJAAgA0HoAGopAwAhFCADQcABaiIIKQMAIRUgAUEYaiELAkACQANAIAIgBkcEQCAUUA0CIAFBEGogAkEIayICKQMAIhcgFSAUENIFIAEgASkDECIVIAspAwAgFBDNBSACIBU3AwAgCCAXIAEpAwB9IhU3AwAMAQsLIAFBIGokAAwBCwALIABBKGpCADcDACAAQTBqQgA3AwAgAEE4akIANwMAIABBGGogBCkDADcDACAAQRBqIAUpAwA3AwAgAEEIaiAHKQMANwMAIAAgAykDiAI3AwAgACADKQPAATcDIAsgA0GwAmokAA8LAAu9AgICfwF+IwBBQGoiAyQAAkAgAkEhSQRAQRghBCADQRhqQgA3AwAgA0EQakIANwMAIANBCGpCADcDACADQgA3AwAgAyACa0EgaiACIAEgAhDJBSADQThqQgA3AwAgA0EwakIANwMAIANBKGpCADcDACADQgA3AyAgAyECA0AgBEF4Rg0CIANBIGogBGogAikAACIFQjiGIAVCgP4Dg0IohoQgBUKAgPwHg0IYhiAFQoCAgPgPg0IIhoSEIAVCCIhCgICA+A+DIAVCGIhCgID8B4OEIAVCKIhCgP4DgyAFQjiIhISENwMAIARBCGshBCACQQhqIQIMAAsACwALIAAgAykDIDcDACAAQRhqIANBOGopAwA3AwAgAEEQaiADQTBqKQMANwMAIABBCGogA0EoaikDADcDACADQUBrJAALnwICAX4IfyMAQSBrIgMkACADQRhqIgZCADcDACADQRBqIgdCADcDACADQQhqIghCADcDACADQgA3AwAgASEJIAMhAUEgIQQDQCAEBEAgBCIKQQhrIgQgCWopAwAhAiMAQRBrIgUkACAKQQdNBEAACyAFIAJCOIYgAkKA/gODQiiGhCACQoCA/AeDQhiGIAJCgICA+A+DQgiGhIQgAkIIiEKAgID4D4MgAkIYiEKAgPwHg4QgAkIoiEKA/gODIAJCOIiEhIQ3AwggAUEIIAVBCGpBCBDJBSAFQRBqJAAgAUEIaiEBDAELCyAAQRhqIAYpAwA3AAAgAEEQaiAHKQMANwAAIABBCGogCCkDADcAACAAIAMpAwA3AAAgA0EgaiQAC7sFAQ5/IwBBsAFrIgQkAAJAAkAgABDXA0UEQCAEQQBB0AAQ0QUiAkHoAGoiCiAAQRhqKQMANwMAIAJB4ABqIgsgAEEQaikDADcDACACQdgAaiIMIABBCGopAwA3AwAgAiAAKQMANwNQIAJBzwBqIQ0gAkGYAWohBgNAIAZCADcDACAGQQhqIg5CADcDACAGQRBqIg9CADcDACACQgo3A5ABIwBBIGsiACQAIABBGGoiByACQdAAaiIDQRhqKQMANwMAIABBEGoiCCADQRBqKQMANwMAIABBCGoiCSADQQhqKQMANwMAIAAgAykDADcDACMAQUBqIgMkACADIAAgAkGQAWoQ2QMgByADQThqKQMANwMAIAggA0EwaikDADcDACAJIANBKGopAwA3AwAgACADKQMgNwMAIANBQGskACACQfAAaiIDQRhqIAcpAwA3AwAgA0EQaiAIKQMANwMAIANBCGogCSkDADcDACADIAApAwA3AwAgAEEgaiQAIAVBzwBqQc8ASw0CIAUgDWogAikDcKdBMGo6AAAgBkIANwMAIA5CADcDACAPQgA3AwAgAkIKNwOQASMAQUBqIgAkACAAIAJB0ABqIgcgAkGQAWoQ2QMgAkHwAGoiA0EYaiAAQRhqKQMANwMAIANBEGogAEEQaikDADcDACADQQhqIABBCGopAwA3AwAgAyAAKQMANwMAIABBQGskACAMIAJB+ABqKQMANwMAIAsgAkGAAWopAwA3AwAgCiACQYgBaikDADcDACACIAIpA3A3A1AgBxDXA0UEQCAFQQFrIQUMAQsLIAFBoP7AAEEAIAIgBWpBzwBqQQEgBWsQpAUhAAwCCyAEQQxqQgA3AgAgBEEBNgIEIARB8IDBADYCACAEQaD+wAA2AgggASAEEKoFIQAMAQsACyAEQbABaiQAIAALhQEBA38jAEEgayIDJAAgAkEgRgRAIANBGGoiAkIANwMAIANBEGoiBEIANwMAIANBCGoiBUIANwMAIANCADcDACADQSAgAUEgEMkFIABBGGogAikDADcAACAAQRBqIAQpAwA3AAAgAEEIaiAFKQMANwAAIAAgAykDADcAACADQSBqJAAPCwALmQEBAX8jAEHQAGsiAiQAIAIgADYCDCACQSRqQQE2AgAgAkEcakEBNgIAIAJBlQE2AiwgAkEBNgIUIAJBiIHBADYCECACIAJBDGo2AiggAkEDOgBMIAJBBDYCSCACQiA3AkAgAkKCgICAIDcCOCACQQI2AjAgAiACQTBqNgIgIAIgAkEoajYCGCABIAJBEGoQqgUgAkHQAGokAAt7AQR/IwBBIGsiAiQAIAJBGGoiA0IANwMAIAJBEGoiBEIANwMAIAJBCGoiBUIANwMAIAJCADcDACACQSAgAUEgEMkFIABBGGogAykDADcAACAAQRBqIAQpAwA3AAAgAEEIaiAFKQMANwAAIAAgAikDADcAACACQSBqJAALRwAgAAJ/AkACQCACBEAgAS0AAEUEQCAAQQc2AgQMAwsgAkEhTw0BCyAAQQhqIAEgAhDaA0EADAILIABBADYCBAtBAQs2AgALDAAgACgCACABEJ4FCzEAIAEoAhRBuIHBAEGogcEAIAAoAgAtAAAiABtBDUEQIAAbIAFBGGooAgAoAgwRBAALrAEBAn8jAEEQayIEJABBASEFAkACQCAAIAJBAk8EfyABQQFqIgEtAAANAUEFBUEBCzYCAAwBCyACIANNBEAgAEEBNgIADAELIARBBGogASADEO8DIAQoAgQiAUELRwRAIAAgBCkCCDcCBCAAIAE2AgAMAQsgBCgCCCIBQThPBEAgACADQQFqNgIEIABBCzYCACAAQQhqIAE2AgAMAQsgAEEHNgIACyAEQRBqJAALxQECAX8DfiMAQUBqIgMkACADQSBqIAEgAhDoAwJAIAMoAiAiAQRAIANBGGogA0EsaigCACICNgIAIANBCGogA0E4aikCACIENwMAIAMgAykCJCIFNwMQIAMgAykCMCIGNwMAIABBDGogAjYCACAAIAU3AgQgACAGNwIQIABBGGogBD4CAAwBCyADQRhqIANBLGooAgAiAjYCACADIAMpAiQiBDcDECAAQQxqIAI2AgAgACAENwIECyAAIAE2AgAgA0FAayQAC1MBA38jAEEQayIBJAACQCAAKAIEIgNFDQAgACgCACIALQAAQb8BSw0AIAFBBGogACADEOcDIAEoAgRBC0cNACABQQxqKAIAIQILIAFBEGokACACCxEAIAAgASgCACABKAIEEOcDC6gCAQR/IwBBEGsiBCQAIARBBGohAwJAAkACQAJAIAIEQCABLAAAIgVBAE4NASAFQf8BcSEGIAVBuH9JDQIgBUFASQ0DIAVBeE8EQCADIAEgAiAGQfcBaxDjAwwFCyADQouAgIAQNwIAIANBCGogBkHAAWs2AgAMBAsgA0IBNwIADAMLIANCCzcCACADQQhqQQE2AgAMAgsgA0KLgICAEDcCACADQQhqIAZBgAFrNgIADAELIAMgASACIAZBtwFrEOMDCwJAIAQoAgQiAUELRgRAQQEhAQJAIAQoAggiAyAEQQxqKAIAIgVqIgYgA0kNACACIAZJDQAgACADNgIEIABBCGogBTYCAEELIQELDAELIAAgBCkCCDcCBAsgACABNgIAIARBEGokAAvABAEJfyMAQRBrIgMkAAJAAkACQCABKAIEIgQEQCABKAIAIgYtAABBvwFLDQELIABCgICAgCA3AgAMAQsCQAJAAkACQAJAIAEoAggEQCACIAFBDGooAgAiBU8NAQsgA0EEaiAGIAQQ5wMgAygCBCIEQQtHDQIgA0EMaigCACIEIAMoAggiCGoiByABKAIESwRAQQEhBAwECyAHIAhPDQEMBgsgAUEQaigCACIIIARNBEAgAiAFayEHIAYgCGohBSAEIAhrIQQMBAsgAEKAgICAEDcCAAwECyABKAIAIAhqIQUgAiEHDAILIAMoAgwhByADKAIIIQULIAAgBDYCBCAAQQA2AgAgAEEMaiAHNgIAIABBCGogBTYCAAwBCwJAAkADQCAHRQ0CIANBBGogBSAEEOcDIAMoAgwhBiADKAIIIQogAygCBCILQQtHBEAgCiEFIAYhBAwCCyAGIApqIgYgBE0EQCAHQQFrIQcgBiAJaiEJIAUgBmohBSAEIAZrIQQMAQsLQQEhCwsgACALNgIEIABBADYCACAAQQxqIAQ2AgAgAEEIaiAFNgIADAELIAEgAjYCDCABQQE2AgggASAIIAlqIgE2AhAgA0EEaiAFIAQQ5wMgAygCBCICQQtHBEAgAEEIaiADKQIINwIAIAAgAjYCBCAAQQA2AgAMAQsgA0EMaigCACADKAIIaiICIARLDQEgACABNgIcIABBADYCFCAAQQA2AgggACACNgIEIAAgBTYCAAsgA0EQaiQADwsAC44GAgZ/AX4jAEEgayIFJAACQAJAIANBAk8EQCADQQlJDQEgAEIBNwMADAILIAEoAgAoAgAhASMAQRBrIgYkACAGIAEpAgA3AgggBUEQaiEBIwBBEGsiAiQAAkACQAJAAkAgBkEIaiIDKAIEIgcEQCADKAIAIggsAAAiA0EASARAIANB/wFxIQQgA0G4f08EQCADQUBPBEAgAUEDNgIADAcLIAcgBEG2AWsiA0kNAyACQQRqIAhBAWogBEG3AWsQ7wMgAigCBCIEQQtHDQQgAyACKAIIaiIJIANJDQUCQCAHIAlPBEBBACEEAkACQCAJIANrDgIDAAELIAMgCGotAAAiBA0CQQchBAsgASAENgIADAgLIAFBCDYCAAwHCyABQQs2AgAgASAEOgAEDAYLAkACQAJAIARB/wBrIAdNBEBBACEDIARBgAFrDgICAQMLIAFBCDYCAAwICyAILAABIgNBAEgNACABQQc2AgAMBwsgAUELNgIAIAEgAzoABAwGCyABQQA2AgAMBQsgAwRAIAFBCzYCACABIAM6AAQMBQsgAUEAOgAEIAFBBzYCAAwECyABQgE3AgAMAwsgAUEINgIADAILIAEgAikCCDcCBCABIAQ2AgAMAQsgASAJNgIEIAFBCTYCAAsgAkEQaiQAIAZBEGokACAAAn8gBSgCEEELRgRAIAAgBTEAFDcDCEEADAELIAAgBSkCEDcCBCAAQQxqIAVBGGooAgA2AgBBAQs2AgAMAQsgAi0AAEUEQCAAQoGAgIDwADcDAAwBCyAFQQA2AhggBSACNgIQIAUgAzYCHCAFIAIgA2o2AhQDQCAFQQhqIQdBACEBAkAgBUEQaiIEKAIMIgZFDQAgBCAGQQFrNgIMIAQoAgAiAiAEKAIERg0AIAQgAkEBajYCACAEIAQoAggiBkEBajYCCCACIQELIAcgATYCBCAHIAY2AgAgBSgCDCIBBEAgATEAACAFKAIIQX9zIANqQQN0QThxrYYgCnwhCgwBBSAAQQA2AgAgACAKNwMICwsLIAVBIGokAAuMAwEBfyAAKAIAIQIjAEEQayIAJAACfwJAAkACQAJAAkACQAJAAkACQAJAAkAgAigCAEEBaw4KAQIDBAUGBwgJCgALIAEoAhRBxYHBAEELIAFBGGooAgAoAgwRBAAMCgsgASgCFEHQgcEAQQ0gAUEYaigCACgCDBEEAAwJCyABKAIUQd2BwQBBEyABQRhqKAIAKAIMEQQADAgLIAEoAhRB8IHBAEETIAFBGGooAgAoAgwRBAAMBwsgASgCFEGDgsEAQRMgAUEYaigCACgCDBEEAAwGCyABKAIUQZaCwQBBGCABQRhqKAIAKAIMEQQADAULIAEoAhRBroLBAEEYIAFBGGooAgAoAgwRBAAMBAsgASgCFEHGgsEAQRUgAUEYaigCACgCDBEEAAwDCyABKAIUQduCwQBBHCABQRhqKAIAKAIMEQQADAILIAEoAhRB94LBAEEQIAFBGGooAgAoAgwRBAAMAQsgACACQQRqNgIMIAFBh4PBAEEGIABBDGpBkIPBABCsBQsgAEEQaiQACzsBAX8DQCACBEAgAC0AACEDIAAgAS0AADoAACABIAM6AAAgAkEBayECIAFBAWohASAAQQFqIQAMAQsLC1IBAn8jAEEQayICJAAgAiABOgAPIABBARDtAyAAKAIIIAAoAgQiAyAAKAIAaiACQQ9qQQEQzwUaIANBAWoiA0kEQAALIAAgAzYCBCACQRBqJAALGgAgASAAKAIIIAAoAgRrSwRAIAAgARCPBAsLXAEBfyMAQRBrIgMkACAAIAIgAWsQ7QMgAyACNgIMIAMgATYCCANAIAMgA0EIahCKBSADLQAAQQFxBEAgAy0AASEBIABBARDtAyAAIAEQ7AMMAQUgA0EQaiQACwsLcwECfwJAIAJBBEsNACACBEAgAS0AAEUEQEEHIQMMAgsgAkEDdEEIayEDA0AgAgRAIAJBAWshAiABLQAAIANBGHF0IARqIQQgA0EIayEDIAFBAWohAQwBBSAAIAQ2AgRBCyEDDAMLAAsACwALIAAgAzYCAAvDAgEFfyMAQRBrIgQkACAAKAIIIgEEQCAAKAIAIAFBBHRqQRBrIgEgASgCDEEBaiICNgIMAkAgASgCAEUNAAJAIAIgASgCBCIBSw0AIAEgAkcNASAAKAIIIgFFDQAgACABQQFrIgE2AgggACgCACABQQR0aiIBKAIAQQJGDQAgAEEQaigCACEDIAEoAgghASAEIAAoAhwiBTYCDCAEIABBDGo2AgggBEEIaiECAkACQAJAIAMgASAFamsiA0E4TwRAIAIgAyABEPEDIQMgASACKAIEakEBayIBIAIoAgAiAigCBE8NASACKAIAIAFqIANBCWs6AAAMAwsgASACKAIEakEBayIBIAIoAgAiAigCBEkNAQsACyACKAIAIAFqIANBQGo6AAALQQEhAyAAEPADDAELAAsgACADOgAgCyAEQRBqJAAL1gUBCn8jAEEQayIIJAAgCCABQRh0IAFBgP4DcUEIdHIgAUEIdkGA/gNxIAFBGHZycjYCDAJAIAAoAgAiAygCBCAAKAIEIgBrIAJJDQAgAWdBA3YiASAIQQxqaiEFQQQgAWsiBiADKAIIIAMoAgQiAWtLBH8gAyAGEI8EIAMoAgQFIAELIAMoAgBqIAUgBhDPBRogAygCBCAGaiIBIAMoAghLBEAACyADIAE2AgQgAygCBCIBIAAgAmoiAEkNACADKAIAIABqIQIgBkH/AXEiAyABIABrIgBLBEAACyAAIANrIgAhBCAAIAJqIQAjAEGAAWsiCSQAAkACQAJAA0BBACADayEBAkADQCADRQ0FIARFDQUgAyAEakEYSQ0DIAQgAyADIARLIgIbQYEBSQ0BIAJFBEAgACECA0AgASACaiIAIAIgAxDrAyAAIQIgBCADayIEIANPDQALDAELC0EAIARrIQEDQCAAIAFqIAAgBBDrAyAAIARqIQAgAyAEayIDIARPDQALDAELCyAAIARrIgEgA2ohAiADIARJDQEgCSABIAQQzwUhBSABIAAgAxDQBRogAiAFIAQQzwUaDAILQQAgBGshCiAAIARrIgctAAAhACADIgUhAgNAIAIgB2oiCy0AACEBIAsgADoAACACIARJBEAgAiADaiECIAEhAAwBCyACIApqIgIEQCACIAUgAiAFSRshBSABIQAMAQUgByABOgAAQQEgBSAFQQFNGyEKQQEhBQNAIAUgCkYNBCADIAVqIQIgBSAHaiILLQAAIQADQCACIAdqIgwtAAAhASAMIAA6AAAgAiAESQRAIAIgA2ohAiABIQAMAQsgASEAIAIgBGsiAiAFRw0ACyALIAA6AAAgBUEBaiEFDAALAAsACwALIAkgACADEM8FIQAgAiABIAQQ0AUaIAEgACADEM8FGgsgCUGAAWokACAIQRBqJAAgBg8LAAtTAQN/IwBBEGsiASQAIAEgADYCDCMAQRBrIgAkACABQQxqKAIAIgIoAgAhAyAAIAIoAgQ2AgwgACADNgIIIABBCGoQkQUgAEEQaiQAIAFBEGokAAsMACAAKAIAIAEQswULigEBAn8gACgCACEDIwBBIGsiACQAIABBDGoiAiABKAIUQbCDwQBBACABQRhqKAIAKAIMEQQAOgAIIAIgATYCBCACQQE6AAkgAkEANgIAIAAgAzYCGCAAIANBCGo2AhwgAiAAQRhqQbCDwQAQwAUaIAIgAEEcakGwg8EAEMAFGiACEMEFIABBIGokAAsHACAAEM0DCyYBAX8gACgCACICRQRAIABBBGogARCzBQ8LIAIgACgCCCABEK8FC58BAQN/IAAoAgAhAiAAKAIIIQAjAEEQayIDJAAgA0EIaiIEIAEQrgUgAiAAQQR0aiEBIwBBEGsiACQAA38gASACRgR/IABBEGokACAEBSAAIAI2AgwgBCAAQQxqQaCDwQAQwwUgAkEQaiECDAELCyIALQAEBH9BAQUgACgCACIAKAIUQbStwQBBASAAQRhqKAIAKAIMEQQACyADQRBqJAALmAEBAn8gACgCACIAKAIIIgYgACgCBEYEQCMAQRBrIgUkACAFQQhqIAAgBkEBEKkDAkACQCAFKAIIIgZBgYCAgHhHBEAgBkUNASAFKAIMGgALIAVBEGokAAwBCwALIAAoAgghBgsgACgCACAGQQR0aiIFIAQ2AgwgBSADNgIIIAUgAjYCBCAFIAE2AgAgACAAKAIIQQFqNgIICzMAIAEoAhQgAC0AAEECdCIAQdiEwQBqKAIAIABBwITBAGooAgAgAUEYaigCACgCDBEEAAsEACAACwcAIABBfnELDQAgACgCAEEEQQwQTQshACAAQQA2AgwgACADNgIIIAAgAjYCBCAAQfCEwQA2AgALSgEBfyMAQRBrIgEkACABQQhqIANBABCNBSABKAIMIQQgASgCCCACIAMQzwUhAiAAIAM2AgggACAENgIEIAAgAjYCACABQRBqJAALAwABCy8BAX8gASgCACIEQQFxBEAgACABIAQgBEF+cSACIAMQgQQPCyAAIAQgAiADEIIEC58BAQJ/IwBBEGsiByQAQcy8wQAtAAAaQQxBBBCwAiIGBEAgBkECNgIIIAYgAzYCACAGIAQgA2sgBWo2AgQgASAGIAEoAgAiASABIAJGIgIbNgIAAkAgAgRAIAAgBjYCDCAAIAU2AgggACAENgIEIABBlIXBADYCAAwBCyAHIAY2AgwgACABIAQgBRCCBCAHQQxqEPwDCyAHQRBqJAAPCwALPAEBfyABIAEoAggiBEEBajYCCCAEQQBOBEAgACABNgIMIAAgAzYCCCAAIAI2AgQgAEGUhcEANgIADwsAC0YAIAEoAgAiAUEBcQRAIAEgBBEGACACIAMQ0AUhASAAIAM2AgggACACIANqIAFrNgIEIAAgATYCAA8LIAAgASACIAMQhAQLmwEBA38jAEEQayIFJAAgAUEAIAEoAggiBCAEQQFGIgQbNgIIAkAgBEUEQCAFQQhqIANBABCNBSAFKAIMIQQgBSgCCCACIAMQzwUhAiABEIwEIAAgBDYCBCAAIAI2AgAMAQsgASgCBCEEIAEoAgAgAUEEQQwQTSACIAMQ0AUhASAAIAQ2AgQgACABNgIACyAAIAM2AgggBUEQaiQACxAAIAAgASACIANBngEQgwQLWQEBfyMAQRBrIgMkACADIAI2AgwgAyABNgIIIANBCGohASADQQxqIQICQCAAKAIAIgBBAXEEQCAAQX5xIAEoAgAgAigCABCKBAwBCyAAEIwECyADQRBqJAALLAEBfyABKAIAIgRBAXEEQCAAIAEgBCAEIAIgAxCBBA8LIAAgBCACIAMQggQLEAAgACABIAIgA0GfARCDBAtWAQF/IwBBEGsiAyQAIAMgAjYCDCADIAE2AgggA0EIaiEBIANBDGohAgJAIAAoAgAiAEEBcQRAIAAgASgCACACKAIAEIoEDAELIAAQjAQLIANBEGokAAsWACABIABrIAJqQQBIBEAACyAAEIYFCxAAIAAgASgCACACIAMQggQLTgECfyMAQRBrIgEkACAAIAAoAggiAkEBazYCCCACQQFGBEAgASAANgIMIAAoAgRBAEgEQAALIAAoAgAQhgUgAUEMahD8AwsgAUEQaiQACxAAIAAgASgCACACIAMQhAQLCgAgACgCABCMBAv5AwEIfyMAQSBrIgIkACAAKAIEIQMCQAJAAkACQAJAIAAoAgwiBUEBcUUEQCABIANqIgEgA0kNBSAFKAIQQQFGDQEgAkEIaiABQQEgBSgCDCIDQQlqdEEAIAMbIgQgASAESxtBABCNBSACQQA2AhwgAiACKQMINwIUIAJBFGogACgCACAAKAIEEJQFIAUQkAQgACADQQJ0QQFyNgIMIAAgAigCFDYCACAAIAIpAhhCIIk3AgQMBAsgBUEFdiIEIAAoAghqIQYgAyAETSAGIANrIAFPcQ0BIAIgBjYCGCACIAMgBGo2AhwgAiAAKAIAIARrNgIUIAJBFGogARCTBSAAIAIoAhQgBGo2AgAgACACKAIcIARrNgIEIAAgAigCGCAEazYCCAwDCyAFKAIEIgcgACgCACIIIAUoAgAiCWsiBCABaiIGSQ0BIAAgATYCCAwCCyAAKAIAIgEgBGsgASADEM8FIQEgACAFQR9xNgIMIAAgATYCACAAIAY2AggMAQsCQCABIAdLDQAgAyAESw0AIAAgCSAIIAMQzwU2AgAgACAFKAIENgIIDAELIAEgBksNASAFIAMgBGoiATYCCCAFIAdBAXQiAyAGIAMgBksbIAFrEJMFIAAgBSgCACAEajYCACAAIAUoAgQgBGs2AggLIAJBIGokAA8LAAslAQF/IAAgACgCECIBQQFrNgIQIAFBAUYEQCAAEJEFIAAQhgULC0ABAX8gASgCACIBIAEoAhAiBEEBajYCECAEQQBIBEAACyAAIAE2AgwgACADNgIIIAAgAjYCBCAAQaCFwQA2AgALkAEBA38jAEEQayIEJAACQCABKAIAIgEoAhBBAUcEQCAEQQhqIANBABCNBSAEKAIMIQYgBCgCCCIFIAIgAxDPBRogARCQBAwBCyABQQA2AgggASgCBCEGIAEoAgAhBSABQgE3AgAgARCQBCAFIAIgAxDQBRoLIAAgAzYCCCAAIAY2AgQgACAFNgIAIARBEGokAAsKACAAKAIAEJAEC9EEAQJ/IwBBQGoiAiQAAkACQAJAAkACQAJAAkAgACgCAEEBaw4FAQIDBAUACyACIABBBGo2AgggAkEcaiIDIAAoAhAgAEEYaigCABCZBSACQRhqQa8BNgIAIAJBNGpCAjcCACACQbABNgIQIAJBAjYCLCACQciFwQA2AiggAiADNgIUIAIgAkEIajYCDCACIAJBDGo2AjAgASACQShqEKoFIQAgAxAYDAULIAIgAEEEajYCCCACQRxqIgMgACgCECAAQRhqKAIAEJkFIAJBGGpBrwE2AgAgAkE0akICNwIAIAJBsAE2AhAgAkECNgIsIAJB8IXBADYCKCACIAM2AhQgAiACQQhqNgIMIAIgAkEMajYCMCABIAJBKGoQqgUhACADEBgMBAsgAiAAQQRqNgIcIAJBNGpCATcCACACQQE2AiwgAkGUhsEANgIoIAJBsAE2AhAgAiACQQxqNgIwIAIgAkEcajYCDCABIAJBKGoQqgUhAAwDCyACIABBCGo2AhwgAkE0akIBNwIAIAJBATYCLCACQayGwQA2AiggAkGxATYCECACIAJBDGo2AjAgAiACQRxqNgIMIAEgAkEoahCqBSEADAILIAJBNGpCADcCACACQQE2AiwgAkHIhsEANgIoIAJBrIXBADYCMCABIAJBKGoQqgUhAAwBCyACIABBBGo2AhwgAkE0akIBNwIAIAJBATYCLCACQeiGwQA2AiggAkGwATYCECACIAJBDGo2AjAgAiACQRxqNgIMIAEgAkEoahCqBSEACyACQUBrJAAgAAvcAQACQAJAAkACQCABIAJB+4bBAEEPEMcFRQRAIAEgAkGKh8EAQRAQxwUNASABIAJBmofBAEEQEMcFDQIgASACQaqHwQBBDBDHBQ0DIAEgAkG2h8EAQQcQxwUNBCABIAJBvYfBAEETEMcFRQRAIAAgASACQdCHwQBBBhCiBA8LIABBFTYCACAAQQU6AAQPCyAAQRU2AgAgAEEAOgAEDwsgAEEVNgIAIABBAToABA8LIABBFTYCACAAQQI6AAQPCyAAQRU2AgAgAEEDOgAEDwsgAEEVNgIAIABBBDoABAtJAAJAIAEgAkGAiMEAQQUQxwVFBEAgASACQYWIwQBBBxDHBUUEQCAAQQI6AAQMAgsgAEEBOgAEDAELIABBADoABAsgAEEVNgIAC0kAAkAgASACQYCIwQBBBRDHBUUEQCABIAJBnIjBAEEIEMcFRQRAIABBAjoABAwCCyAAQQE6AAQMAQsgAEEAOgAECyAAQRU2AgALIwAgASACQbSIwQBBBBDHBSEBIABBFTYCACAAIAFBAXM6AAQLIwAgASACQcCIwQBBBxDHBSEBIABBFTYCACAAIAFBAXM6AAQLIwAgASACQdCIwQBBBBDHBSEBIABBFTYCACAAIAFBAXM6AAQL22wCEn8CfiMAQSBrIhIkACASQQhqIAEQ6QQgEi0ACSECIBItAAghBiASQQQ2AhACQCAGQQFxBEAgEkEQahAXAkAgAkEiRwRAIAJB+wBGDQEgAEKHgICAoAE3AwAMAwsjAEEQayICJAAjAEEQayIGJAAgBiABEMcEAkAgBigCACIIQRVGBEAgBi0ABCENIAJBCGogATYCACACIA06AAQMAQsgAiAGKQAFNwAFIAJBDGogBkEMaigAADYAACACIAYtAAQ6AAQLIAIgCDYCACAGQRBqJAACQCACKAIAIgFBFUYEQCACLQAERQRAIABBDjYCBAwCCyAAQQ42AgQMAQsgACACLwAFOwAJIABBC2ogAkEHai0AADoAACACLQAEIQYgAEEMaiACKQIINwIAIABBCGogBjoAACAAIAE2AgQLIABBBzYCACACQRBqJAAMAgsgASABKAIIQQFqNgIIIwBBIGsiDSQAIwBBEGsiAiQAIAIgARDHBAJAIAIoAgAiBkEVRgRAIAItAAQhBiACIAEQ7QQgAigCACIIQRVGBEAgDSAGOgAEIA1BFTYCACANQQhqIAE2AgAMAgsgDSACKQIENwIEIA1BDGogAkEMaigCADYCACANIAg2AgAMAQsgDSACKQAFNwAFIA1BDGogAkEMaigAADYAACANIAItAAQ6AAQgDSAGNgIACyACQRBqJAACQCANKAIAIgFBFUYEQCANQQhqKAIAIQEgDS0ABEUEQCMAQUBqIggkACAIQSxqIQYjAEEgayIDJAAgA0EIaiABEOkEIAMtAAkhAiADLQAIIQcgA0EENgIQAkAgB0EBcQRAIANBEGoQFwJAIAJBIkcEQCACQfsARg0BIAZCgYCAgKABNwIADAMLIwBBEGsiAiQAIwBBEGsiByQAIAcgARDGBAJAIAcoAgAiBEEVRgRAIActAAQhDyACQQhqIAE2AgAgAiAPOgAEDAELIAIgBykABTcABSACQQxqIAdBDGooAAA2AAAgAiAHLQAEOgAECyACIAQ2AgAgB0EQaiQAAkAgAigCACIHQRVGBEAgAi0ABEUEQCAGQQ42AgQMAgsgBkEONgIEDAELIAYgAi8ABTsACSAGQQtqIAJBB2otAAA6AAAgAi0ABCEEIAZBDGogAikCCDcCACAGQQhqIAQ6AAAgBiAHNgIECyAGQQE2AgAgAkEQaiQADAILIAEgASgCCEEBajYCCCMAQRBrIgIkACMAQRBrIgckACAHIAEQxgQCQCAHKAIAIgRBFUYEQCAHLQAEIQQgByABEO0EIAcoAgAiD0EVRgRAIAIgBDoABCACQRU2AgAgAkEIaiABNgIADAILIAIgBykCBDcCBCACQQxqIAdBDGooAgA2AgAgAiAPNgIADAELIAIgBykABTcABSACQQxqIAdBDGooAAA2AAAgAiAHLQAEOgAEIAIgBDYCAAsgB0EQaiQAAkAgAigCACIHQRVGBEAgAkEIaigCACEEIAItAARFBEAjAEFAaiIHJAAgB0EwaiAEEMEEAkACQAJAIAcoAjAiD0EVRgRAIAdBGGogB0E8aigCADYCACAHIAcpAjQ3AxAgB0EIaiAEEOkEIActAAkgBy0ACCAHQQQ2AjBBAXFFDQEgB0EwahAXQf0ARgRAIAIgBykDEDcCBCAEIAQoAghBAWo2AgggAkEMaiAHQRhqKAIANgIAQRUhBAwDCyAHQRBqEJEFQQshBAwCCyAHQShqIAdBPGooAgAiBDYCACAHIAcpAjQiFDcDICACQQxqIAQ2AgAgAiAUNwIEIAIgDzYCAAwCCyACQQQ2AgAgB0EQahCRBQwBCyACIAQ2AgALIAdBQGskACAGAn8gAigCAEEVRgRAIAZBADYCBCAGQQhqIAIpAgQ3AgAgBkEQaiACQQxqKAIANgIAQQAMAQsgBiACKQIANwIEIAZBDGogAkEIaikCADcCAEEBCzYCAAwCCyMAQUBqIgckACAHQTBqIAQQvwQCQAJAAkAgBygCMCIPQRVGBEAgB0EYaiAHQTxqKAIANgIAIAcgBykCNDcDECAHQQhqIAQQ6QQgBy0ACSAHLQAIIAdBBDYCMEEBcUUNASAHQTBqEBdB/QBGBEAgAiAHKQMQNwIEIAQgBCgCCEEBajYCCCACQQxqIAdBGGooAgA2AgBBFSEEDAMLIAdBEGoQkQVBCyEEDAILIAdBKGogB0E8aigCACIENgIAIAcgBykCNCIUNwMgIAJBDGogBDYCACACIBQ3AgQgAiAPNgIADAILIAJBBDYCACAHQRBqEJEFDAELIAIgBDYCAAsgB0FAayQAIAYCfyACKAIAQRVGBEAgBkEBNgIEIAZBCGogAikCBDcCACAGQRBqIAJBDGooAgA2AgBBAAwBCyAGIAIpAgA3AgQgBkEMaiACQQhqKQIANwIAQQELNgIADAELIAYgAi8ABTsACSAGQQtqIAJBB2otAAA6AAAgAi0ABCEEIAZBDGogAikCCDcCACAGQQhqIAQ6AAAgBiAHNgIEIAZBATYCAAsgAkEQaiQADAELIAZCgYCAgMAANwIACyADQSBqJAAgCEEgaiICIAhBOGopAgA3AwAgCCAIKQIwNwMYAkACQAJAIAgoAixFBEAgCEEQaiACKQMANwMAIAggCCkDGDcDCCAIIAEQ6QQgCC0AASAILQAAIAhBBDYCLEEBcUUNASAIQSxqEBdB/QBGBEAgDSAIKQMINwIEIAEgASgCCEEBajYCCCANQQxqIAhBEGopAwA3AgBBACEBDAMLIA1BCzYCBCAIQQhqQQRyEJEFQQEhAQwCCyANIAgpAxg3AgQgDUEBNgIAIA1BDGogAikDADcCAAwCCyANQoGAgIDAADcCACAIQQhqQQRyEJEFDAELIA0gATYCAAsgCEFAayQAIAAgDSkCBDcCBCAAQQxqIA1BDGopAgA3AgAgAEEHQQYgDSgCABs2AgAMAgsjAEHgAGsiByQAIAdBQGshBiMAQSBrIhMkACATQQhqIAEQ6QQgEy0ACSECIBMtAAghCCATQQQ2AhACQCAIQQFxBEAgE0EQahAXAkAgAkEiRwRAIAJB+wBGDQEgBkKGgICAoAE3AwAMAwsjAEEQayICJAAjAEEQayIIJAAgCCABEMUEAkAgCCgCACIEQRVGBEAgCC0ABCEDIAJBCGogATYCACACIAM6AAQMAQsgAiAIKQAFNwAFIAJBDGogCEEMaigAADYAACACIAgtAAQ6AAQLIAIgBDYCACAIQRBqJAACQAJAAkACQAJAAkACQCACKAIAIghBFUYEQCACLQAEQQFrDgUCAwQFBgELIAYgAi8ABTsACSAGQQtqIAJBB2otAAA6AAAgAi0ABCEEIAZBDGogAikCCDcCACAGQQhqIAQ6AAAgBiAINgIEDAYLIAZBDjYCBAwFCyAGQQ42AgQMBAsgBkEONgIEDAMLIAZBDjYCBAwCCyAGQQ42AgQMAQsgBkEONgIECyAGQQY2AgAgAkEQaiQADAILIAEgASgCCEEBajYCCCMAQRBrIg8kACMAQRBrIgIkACACIAEQxQQCQCACKAIAIghBFUYEQCACLQAEIQggAiABEO0EIAIoAgAiBEEVRgRAIA8gCDoABCAPQRU2AgAgD0EIaiABNgIADAILIA8gAikCBDcCBCAPQQxqIAJBDGooAgA2AgAgDyAENgIADAELIA8gAikABTcABSAPQQxqIAJBDGooAAA2AAAgDyACLQAEOgAEIA8gCDYCAAsgAkEQaiQAAkACQAJAAkACQAJAAkAgDygCACICQRVGBEAgD0EIaigCACEIIA8tAARBAWsOBQIDBAUGAQsgBiAPLwAFOwAJIAZBC2ogD0EHai0AADoAACAPLQAEIQggBkEMaiAPKQIINwIAIAZBCGogCDoAACAGIAI2AgQgBkEGNgIADAYLIwBB4ABrIgQkACAEQUBrIQkjAEHAAWsiAiQAIAIgCBDpBCACLQABIQMgAi0AACEFIAJBBDYCOAJAAkAgBUEBcQRAIAJBOGoQFyADQfsARw0BIAggCCgCCEEBajYCCCACQQE6AFwgAiAINgJYIAJBADYCYCACQQA2AnAgAkG0AWohEANAIAJBsAFqIQwjAEEgayIFJAAgBUEIaiACQdgAaiIKKAIAIgsQ6QQgBS0ACSEDIAUtAAghDiAFQQI2AhACQCAOQQFxBEAgBUEQahAXAkACQCADQSxHBEAgA0H9AEcEQCAKLQAEDQIgDEEJNgIADAULIAxBFTYCACAMQQM6AAQMBAsgCi0ABA0AIAsgCygCCEEBajYCCCAFIAsQ6QQgBS0AASEDIAUtAAAgBUEENgIQQQFxDQEgDEEENgIADAMLIApBADoABCAFQQQ2AhALIAVBEGoQFwJAIANBIkcEQCADQf0ARg0BIAxBEDYCAAwDCyAFQRBqIQojAEEgayIDJAAgAyALEOkEIAMtAAEhDiADLQAAIREgA0EENgIEAkACQAJAIBFBAXEEQCADQQRqEBcgDkEiRw0BIAsgCygCCEEBajYCCCADQQRqIAsQ7gQgAygCBCILQRVHDQIgA0EQaigCACELIANBDGooAgAhDiADKAIIIhFFBEAgCiAOIAsQlgQMBAsgAyALNgIcIAMgDjYCGCADIBE2AhQgCiARIAsQlgQgA0EUahCRBQwDCyAKQQQ2AgAMAgsgCkEONgIADAELIAMpAgghFCAKIAMoAhA2AgwgCiAUNwIEIAogCzYCAAsgA0EgaiQAIAUoAhBBFUYEQCAMIAUtABQ6AAQgDEEVNgIADAMLIAwgBSkCEDcCACAMQQhqIAVBGGopAgA3AgAMAgsgDEETNgIADAELIAxBAjYCAAsgBUEgaiQAIAItALQBIQMCQAJAAkACQAJAAkACQAJAAkACQAJAIAIoArABIgVBFUYEQCADDgQBAgMEAwsgAkHIAGogAkG8AWooAAA2AAAgAkFAayADOgAAIAIgAikAtQE3AEEgAiAFNgI8QQAhAwwECyACKAJgBEAgAkE4akEEckGElMEAQQUQoQRBACEDDAQLIAJBsAFqIAJB2ABqEL4EIAJBqAFqIgMgEEEIaigCADYCACACIBApAgA3A6ABIAIoArABIgVBFUYNCSACQUBrIAIpA6ABNwMAIAJByABqIAJBqAFqKAIANgIAIAIgBTYCPEEAIQMMAwsgAigCcARAIAJBOGpBBHJBiZTBAEEHEKEEQQAhAwwDCyACQbABaiACQdgAahDABCACQagBaiIDIBBBCGooAgA2AgAgAiAQKQIANwOgASACKAKwASIFQRVGDQcgAkFAayACKQOgATcDACACQcgAaiACQagBaigCADYCACACIAU2AjxBACEDDAILIAJBsAFqIAJB2ABqEMIEIAIoArABIgNBFUYNCCACQUBrIAIpArQBNwMAIAJByABqIAJBvAFqKAIANgIAIAIgAzYCPEEAIQMMAQsgAigCYCIFQQBHIQMCQCAFRQRAIAJBsAFqQYSUwQBBBRCfBCACKAKwASIFQRVGBEAgAkGIAWogAkG8AWooAgA2AgAgAiACKQK0ATcDgAEMAgsgAkFAayACKQK0ATcDACACQcgAaiACQbwBaigCADYCACACIAU2AjwMAgsgAkGIAWogAkHoAGooAgA2AgAgAiACKQNgNwOAAQsgAigCcA0BIAJBsAFqQYmUwQBBBxCfBCACKAKwASIFQRVGBEAgAkGYAWogAkG8AWooAgA2AgAgAiACKQK0ATcDkAEMAwsgAkFAayACKQK0ATcDACACQcgAaiACQbwBaigCADYCACACIAU2AjwgAkGAAWoQkQULIAIoAnANAgwDCyACQZgBaiACQfgAaigCADYCACACIAIpA3A3A5ABCyACQcQAaiIDIAJBiAFqKAIANgIAIAJB0ABqIAJBmAFqKAIANgIAIAIgAikDkAE3A0ggAkEwaiIFIAMpAgA3AwAgAiACKQOAASIUNwI8IAIgFDcDKCACQSRqIAJB1ABqKAIANgIAIAIgAikCTDcCHCACQRRqIAUpAwA3AgAgAiACKQMoNwIMIAJBADYCCCACQThqIAgQ6wQgAigCOCIFQRVGBEAgCSACKQMINwMAIAlBGGogAkEgaikDADcDACAJQRBqIAJBGGopAwA3AwAgCUEIaiACQRBqKQMANwMADAgLIAlBCGogAikCPDcCACAJQRBqIAMoAgA2AgAgCUEGNgIAIAkgBTYCBCACQQhqEI8CDAcLIAJB8ABqEJEFCyADIAIoAmBFckUEQCACQeAAahCRBQsgAkEwaiACQcQAaikCACIUNwMAIAIgAikCPCIVNwMoIAlB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IAIgBTYCPAwCCyACQZABaiACQdgAahDCBCACKAKQASIDQRVGDQUgAkFAayACKQKUATcDACACQcgAaiACQZwBaigCADYCACACIAM2AjwMAQsgAigCYARAIAJB+ABqIAJB6ABqKAIANgIAIAIgAikDYDcDcAwDCyACQZABakGYlMEAQQQQnwQgAigCkAEiA0EVRg0BIAJBQGsgAikClAE3AwAgAkHIAGogAkGcAWooAgA2AgAgAiADNgI8CyACKAJgBEAgAkHgAGoQkQULIAJBMGogAkHEAGopAgAiFDcDACACIAIpAjwiFTcDKCAJQQxqIBQ3AgAgCSAVNwIEIAlBBjYCAAwGCyACQfgAaiACQZwBaigCADYCACACIAIpApQBNwNwCyACQcQAaiIDIAJB+ABqKAIANgIAIAJBFGogAykCADcCACACIAIpA3A3AgwgAkECNgIIIAJBOGogCBDrBCACKAI4IgVBFUYEQCAJIAIpAwg3AwAgCUEYaiACQSBqKQMANwMAIAlBEGogAkEYaikDADcDACAJQQhqIAJBEGopAwA3AwAMBQsgCUEIaiACKQI8NwIAIAlBEGogAygCADYCACAJQQY2AgAgCSAFNgIEIAJBCGoQjwIMBAsgAkHgAGoQGCACQegAaiADKAIANgIAIAIgAikDgAE3A2AMAAsACyAJQoaAgIDAADcDAAwBCyAJQoaAgIDgATcDAAsgAkGgAWokAAJAAkAgBCgCQCICQQZHBEAgBEEsaiAEQdwAaigCADYCACAEQRxqIARBzABqKQIANwIAIAQgBCkCVDcCJCAEIAQpAkQ3AhQgBCACNgIQIARBCGogCBDpBCAELQAJIAQtAAggBEEENgJAQQFxRQ0BIARBQGsQF0H9AEYEQCAGIAQpAxA3AwAgCCAIKAIIQQFqNgIIIAZBCGogBEEYaikDADcDACAGQRBqIARBIGopAwA3AwAgBkEYaiAEQShqKQMANwMADAMLIAZChoCAgLABNwMAIARBEGoQjwIMAgsgBEE4aiAEQcwAaikCACIUNwMAIAQgBCkCRCIVNwMwIAZBDGogFDcCACAGIBU3AgQgBkEGNgIADAELIAZChoCAgMAANwMAIARBEGoQjwILIARB4ABqJAAMAwsjAEHgAGsiBCQAIARBQGshDCMAQfAAayICJAAgAiAIEOkEIAItAAEh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MGsiACQAAn8CQAJAAkACQCACKAIAQQFrDgMBAgMACyAAQRhqQgA3AgAgAEEBNgIQIABB0IrBADYCDCAAQbSKwQA2AhQgASAAQQxqEKoFDAMLIABBGGpCADcCACAAQQE2AhAgAEHwisEANgIMIABBtIrBADYCFCABIABBDGoQqgUMAgsgAEEYakIANwIAIABBATYCECAAQbCLwQA2AgwgAEG0isEANgIUIAEgAEEMahCqBQwBCyAAQRhqQgE3AgAgAEEBNgIQIABByIvBADYCDCAAQbIBNgIoIAAgAkEEajYCLCAAIABBJGo2AhQgACAAQSxqNgIkIAEgAEEMahCqBQsgAEEwaiQAC2MBAX8gACgCACECIwBBMGsiACQAIABBGGpCATcCACAAQQI2AhAgAEHQj8EANgIMIABBsAE2AiggACACNgIsIAAgAEEkajYCFCAAIABBLGo2AiQgASAAQQxqEKoFIABBMGokAAtjAQF/IAAoAgAhAiMAQTBrIgAkACAAIAI2AgwgAEEcakIBNwIAIABBATYCFCAAQbSKwQA2AhAgAEGzATYCLCAAIABBKGo2AhggACAAQQxqNgIoIAEgAEEQahCqBSAAQTBqJAALoQEBAX8gACgCACECIwBBQGoiACQAIABBMGpBsAE2AgAgAEEoakGwATYCACAAQRBqQgM3AgAgACACQRhqNgI0IAAgAjYCOCAAQQM2AgggAEGgj8EANgIEIABBtAE2AiAgACACQQxqNgI8IAAgAEEcajYCDCAAIABBPGo2AiwgACAAQThqNgIkIAAgAEE0ajYCHCABIABBBGoQqgUgAEFAayQACwkAIAAgARC/BAsUACAAQQRqIAEgAhBHIABBAjYCAAujBQECfyMAQUBqIgQkACAEQQRqIAEgAhBHIARBADYCGCAEQgE3AhAgBEE0akGcisEANgIAIARBAzoAPCAEQSA2AiwgBEEANgI4IARBADYCJCAEQQA2AhwgBCAEQRBqNgIwIARBHGojAEEwayIBJAACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADKAIAQQFrDhQBAgMEBQYHCAkKCwwNDg8QERITFAALIAFBkJjBADYCKEEiDBQLIAFBspjBADYCKEEZDBMLIAFBy5jBADYCKEEcDBILIAFB55jBADYCKEEbDBELIAFBgpnBADYCKEEfDBALIAFBoZnBADYCKEEmDA8LIAFBx5nBADYCKEEoDA4LIAFB75nBADYCKEE3DA0LIAFBpprBADYCKEEnDAwLIAFBzZrBADYCKEE4DAsLIAFBhZvBADYCKEE4DAoLIAFBvZvBADYCKEEuDAkLIAFB65vBADYCKEEYDAgLIAFBg5zBADYCKEEPDAcLIAFBkpzBADYCKEEMDAYLIAFBnpzBADYCKEEbDAULIAFBuZzBADYCKEEbDAQLIAFB1JzBADYCKEHPAAwDCyABQaOdwQA2AihBPAwCCyABQd+dwQA2AihBOQwBCyABIAMoAgQ2AiggA0EMaigCAAshBSABQRRqQgE3AgAgAUEZNgIkIAEgBTYCLCABQQE2AgwgAUGImMEANgIIIAEgAUEoajYCICABIAFBIGo2AhAgAUEIahCqBSABQTBqJABFBEAgACAEKQIQNwIQIABBGGogBEEYaigCADYCACAAQQxqIARBDGooAgA2AgAgACAEKQIENwIEIABBCDYCACADKAIAQRRPBEAgA0EEahCRBQsgBEFAayQADwsAC9sCAQF/IwBBQGoiBCQAIARBBGogASACEEcgBEEANgIYIARCATcCECAEQTRqQZyKwQA2AgAgBEEDOgA8IARBIDYCLCAEQQA2AjggBEEANgIkIARBADYCHCAEIARBEGo2AjAgBEEcaiECIwBBMGsiASQAAn8gAygCAEUEQCABQRhqQgA3AgAgAUEBNgIQIAFB9JfBADYCDCABQeSXwQA2AhQgAiABQQxqEKoFDAELIAEgAzYCCCABQRhqQgE3AgAgAUEBNgIQIAFB/JfBADYCDCABQcMBNgIoIAEgAUEkajYCFCABIAFBLGo2AiQgASABQQhqNgIsIAIgAUEMahCqBQsgAUEwaiQARQRAIAAgBCkCEDcCECAAQRhqIARBGGooAgA2AgAgAEEMaiAEQQxqKAIANgIAIAAgBCkCBDcCBCAAQQk2AgAgAygCAARAIAMQkQULIARBQGskAA8LAAvZCAEBfyMAQTBrIgIkAAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgACgCAEEBaw4MAQIDBAUGBwgJCgsMAAsgAkEkakIBNwIAIAJBATYCHCACQeSLwQA2AhggAkG1ATYCBCACIABBBGo2AhQgAiACNgIgIAIgAkEUajYCACABIAJBGGoQqgUMDAsgAkEkakIBNwIAIAJBATYCHCACQYSMwQA2AhggAkG2ATYCBCACIABBBGo2AhQgAiACNgIgIAIgAkEUajYCACABIAJBGGoQqgUMCwsgAkEkakIBNwIAIAJBATYCHCACQZyMwQA2AhggAkGwATYCBCACIABBBGo2AhQgAiACNgIgIAIgAkEUajYCACABIAJBGGoQqgUMCgsgAkEkakIBNwIAIAJBATYCHCACQbyMwQA2AhggAkGwATYCBCACIABBBGo2AhQgAiACNgIgIAIgAkEUajYCACABIAJBGGoQqgUMCQsgAkEMakGxATYCACACQSRqQgI3AgAgAiAAQQhqNgIQIAJBAjYCHCACQeiMwQA2AhggAkGxATYCBCACIABBEGo2AhQgAiACNgIgIAIgAkEUajYCCCACIAJBEGo2AgAgASACQRhqEKoFDAgLIAJBJGpCATcCACACQQE2AhwgAkGMjcEANgIYIAJBsAE2AgQgAiAAQQRqNgIUIAIgAjYCICACIAJBFGo2AgAgASACQRhqEKoFDAcLIAJBJGpCATcCACACQQE2AhwgAkG8jcEANgIYIAJBsAE2AgQgAiAAQQRqNgIUIAIgAjYCICACIAJBFGo2AgAgASACQRhqEKoFDAYLIAJBJGpCATcCACACQQI2AhwgAkHQjcEANgIYIAJBsAE2AgQgAiAAQQRqNgIUIAIgAjYCICACIAJBFGo2AgAgASACQRhqEKoFDAULIAJBDGpBsAE2AgAgAkEkakICNwIAIAIgAEEEajYCECACQQI2AhwgAkH8jcEANgIYIAJBsAE2AgQgAiAAQRBqNgIUIAIgAjYCICACIAJBFGo2AgggAiACQRBqNgIAIAEgAkEYahCqBQwECyACQQxqQbABNgIAIAJBJGpCAjcCACACIABBBGo2AhAgAkECNgIcIAJBpI7BADYCGCACQbABNgIEIAIgAEEQajYCFCACIAI2AiAgAiACQRRqNgIIIAIgAkEQajYCACABIAJBGGoQqgUMAwsgAkEkakIBNwIAIAJBATYCHCACQcCOwQA2AhggAkG3ATYCBCACIABBBGo2AhQgAiACNgIgIAIgAkEUajYCACABIAJBGGoQqgUMAgsgAkEkakIBNwIAIAJBATYCHCACQdiOwQA2AhggAkG4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wQBqLQAAOgAAIAFBA2ogBEECai0AACIRQT9xQauRwQBqLQAAOgAAIAFBAmogBEEBai0AACIEQQJ0IBFBBnZyQT9xQauRwQBqLQAAOgAAIAFBAWogEEEEdCAEQQR2ckE/cUGrkcEAai0AADoAACAFIQEgAyEEDAELCyABIAdPDQEgASAJaiIEIAogDGotAAAiBUECdkGrkcEAai0AADoAACAGIApBAWoiCk0NASABQQFqIAdPDQFBAyEDIARBAWogBUEEdCAKIAxqLQAAIgRBBHZyQT9xQauRwQBqLQAAOgAAIAFBAmoiBSAHTw0BIARBAnRBPHEhBAwCCyABIAdPDQBBAiEDIAEgCWogCiAMai0AACIEQQJ2QauRwQBqLQAAOgAAIAFBAWoiBSAHTw0AIARBBHRBMHEhBAwBCwALIAUgCWogBEGrkcEAai0AADoAACABIANqIQELAkACQEGokcEALQAABH8gASAHSw0BIAEgCWohBSAHIAFrIQRBACABa0EDcSIGIQMCQANAIANFDQEgBARAIAVBPToAACADQQFrIQMgBEEBayEEIAVBAWohBQwBCwsACyAGBUEACyABaiABSQ0ADAELAAsgCEEUaiAJIAcQtwUgCCgCFARAIAhBHGoxAABCIIZCgICAgCBSDQELIA4gBzYCCCAOIAk2AgAgDiAPNgIEIAhBIGokAAwBCwALIAAgAiANKAIEIA0oAgwQ3wQgDhCRBSANQRBqJAALCQAgASABEMsEC68EAgV/AX4jAEFAaiIAJAAgAEEANgIYIABCATcCECAAQTRqQaiUwQA2AgAgAEEDOgA8IABBIDYCLCAAQQA2AjggAEEANgIkIABBADYCHCAAIABBEGo2AjAjAEEwayIEJABBASEFAkAgAEEcaiIDKAIUQYikwQBBDCADQRhqKAIAKAIMEQQADQAgASgCDCEGIwBBMGsiAiQAIAJBLGpBxAE2AgAgAkEkakHEATYCACACQQxqQgM3AgAgAkEDNgIEIAJBtLzBADYCACACQRk2AhwgAiAGNgIYIAIgBkEMajYCKCACIAZBCGo2AiAgAiACQRhqNgIIIAMgAhCqBSACQTBqJAANACABKAIIIgIEQCADKAIUQZSkwQBBAiADKAIYKAIMEQQADQEgBEEoaiACQRBqKQIANwMAIARBIGogAkEIaikCADcDACAEIAIpAgA3AxggAyAEQRhqEKoFIQUMAQsgBEEIaiABKAIAIgIgASgCBCgCDBEAAEEAIQUgBCkDCELB9/nozJOy0UGFIARBEGopAwBC5N7HhZDQhd59hYRCAFINAEEBIQUgAygCFEGUpMEAQQIgAygCGCgCDBEEAA0AIAMoAhQgAigCACACKAIEIAMoAhgoAgwRBAAhBQsgBEEwaiQAIAUEQAALIABBCGogAEEYaigCACIBNgIAIAAgACkCECIHNwMAIAAgB6cgARC3BCIBNgIcIAEQACAAQRxqEMwEIAAQkQUgAEFAayQACwoAIAAoAgAQhgULVgEBfyABQQxqKAIAIQICQCAAAn8CQAJAIAEoAgQOAgABAwsgAg0CQQAhAkHAlMEADAELIAINASABKAIAIgEoAgQhAiABKAIACyACEEcPCyAAIAEQmgUL7wEBBX8jAEEgayIDJAAgA0EIaiABIAEgAkEDdCIFahC4BCACQQJ0akEAEI0FIANBADYCGCADIAMpAwg3AhADQCAFBEAgASgCACEGIAMgASgCBCICQRh0IAJBgP4DcUEIdHIgAkEIdkGA/gNxIAJBGHZycjYCHCMAQRBrIgQkACAEQQhqIgcgAiAGajYCBCAHIAY2AgAgA0EQaiICIAQoAgggBCgCDBCSBSAEQRBqJAAgAiADQRxqQQQQlAUgBUEIayEFIAFBCGohAQwBBSAAIAMpAhA3AgAgAEEIaiADQRhqKAIANgIAIANBIGokAAsLC0UAIwBBEGsiASQAIAEgAiADELcEIgI2AgwCQCACEAEiAkUEQCAAQQA2AgAMAQsgACACELQECyABQQxqEMwEIAFBEGokAAtLACMAQRBrIgAkACAEBEAgACABIAIQtwQiATYCCCAAIAMgBBC3BCICNgIMIAEgAhACIABBDGoQzAQgAEEIahDMBCAAQRBqJAAPCwALLAAjAEEQayIAJAAgACABIAIQtwQiATYCDCABEAMgAEEMahDMBCAAQRBqJAALuwEBAX8jAEEwayIBJAACQCADQYACTQRAIAEgAiADELcEIgQ2AgACQCAEEAQiBEUEQCAAQQRqIAIgAxBHIABBDTYCAAwBCyABQQRqIgIgBBC0BCABQRxqQgE3AgAgAUEBNgIUIAFB8JTBADYCECABQbwBNgIsIAEgAUEoajYCGCABIAI2AiggAEEEaiABQRBqEM0EIABBAjYCACACEJEFCyABEMwEDAELIABB+JTBAEEgEKoECyABQTBqJAALwAEAIwBBMGsiASQAAkAgA0GAAk0EQCABIAIgAxC3BCICNgIAAkAgAkHAABCyBCICEAUiA0UEQCAAQQRqIAIQtAQgAEENNgIADAELIAFBBGoiAiADELQEIAFBHGpCATcCACABQQE2AhQgAUG0lcEANgIQIAFBvAE2AiwgASABQShqNgIYIAEgAjYCKCAAQQRqIAFBEGoQzQQgAEECNgIAIAIQkQULIAEQzAQMAQsgAEG8lcEAQSQQqgQLIAFBMGokAAuuAQEBfyMAQTBrIgEkACABIAIoAgAgAigCCBC3BCICNgIAIAACfyACQdoAELIEIgIQBiIDRQRAIABBBGogAhC0BCABEMwEQQ0MAQsgAUEEaiICIAMQtAQgAUEcakIBNwIAIAFBATYCFCABQfiVwQA2AhAgAUG8ATYCLCABIAFBKGo2AhggASACNgIoIABBBGogAUEQahDNBCACEJEFIAEQzARBAgs2AgAgAUEwaiQAC9oBACMAQRBrIgEkACABIAIgAxC3BCICNgIEIAEgBCAFELcEIgM2AgggASAGIAcQtwQiBDYCDAJAAkACQAJAAkACQAJAAkACQCACIAMgBBAHIgIOCwECAwQFBgAAAAAHAAsgACACNgIEIABBBjYCAAwHCyAAQQc2AgAgAEEBOgAEDAYLIABBBzYCACAAQQA6AAQMBQsACyAAQQI2AgAMAwsgAEEDNgIADAILIABBBDYCAAwBCyAAQQE2AgALIAFBDGoQzAQgAUEIahDMBCABQQRqEMwEIAFBEGokAAu2AQEBfiMAQRBrIgEkACABIAIgAxC3BCICNgIIIAEgBCAFELcEIgM2AgwCQAJAAkACQAJAAkACQCACIAMgBkH/AXEQCCIHQiCIpyICDgcBAAIDBAAFAAsgAEKAgICAMDcCACAAQQhqIAI2AgAMBQsgACAHpxC0BAwECwALIABCADcCAAwCCyAAQoCAgIAQNwIADAELIABCgICAgCA3AgALIAFBDGoQzAQgAUEIahDMBCABQRBqJAALzgEAIwBBEGsiASQAIAEgAiADELcEIgI2AgQgASAEIAUQtwQiAzYCCCABIAYgBxC3BCIENgIMAkACQAJAAkACQAJAAkACQCACIAMgBBAJIgIOCwECAwMEBQAAAAAGAAsgACACNgIEIABBBjYCAAwGCyAAQQc2AgAgAEEBOgAEDAULIABBBzYCACAAQQA6AAQMBAsACyAAQQM2AgAMAgsgAEEENgIADAELIABBATYCAAsgAUEMahDMBCABQQhqEMwEIAFBBGoQzAQgAUEQaiQAC5YCACMAQTBrIgEkACABIAIgAxDOBCABIAEoAgAgASgCCBC3BCICNgIMIAFBEGogBCAFEM4EIAEgASgCECABKAIYELcEIgM2AhwgAUEgaiAGIAcQzgQgASABKAIgIAEoAigQtwQiBDYCLAJAAkACQAJAAkACQAJAAkAgAiADIAQQCiICDgsBAgMDBAUAAAAABgALIAAgAjYCBCAAQQY2AgAMBgsgAEEHNgIAIABBAToABAwFCyAAQQc2AgAgAEEAOgAEDAQLAAsgAEEDNgIADAILIABBBDYCAAwBCyAAQQE2AgALIAFBLGoQzAQgAUEgahCRBSABQRxqEMwEIAFBEGoQkQUgAUEMahDMBCABEJEFIAFBMGokAAssACMAQRBrIgAkACAAIAEgAhC3BCIBNgIMIAEQCyAAQQxqEMwEIABBEGokAAuHCAIFfwJ+IwBBsAFrIgEkACABIAIgAxC3BCICNgIIIAFBDGogAhAMELQEIAFBGGohBCABKAIMIQUgAUEUaiIHKAIAIQYjAEEwayIDJAAjAEHgAGsiAiQAIAJBADYCDCACIAY2AgggAiAFNgIEIAJBQGsgAkEEahCbBAJAIAIoAkAiBUEHRwRAIAJBLGogAkHcAGooAgA2AgAgAkEcaiACQcwAaiIGKQIANwIAIAIgAikCVDcCJCACIAIpAkQ3AhQgAiAFNgIQIAJBQGsgAkEEahDoBCACKAJAIghBFUYEQCADIAIpAxA3AwAgA0EYaiACQShqKQMANwMAIANBEGogAkEgaikDADcDACADQQhqIAJBGGopAwA3AwAMAgsgA0EIaiACKQJENwIAIANBEGogBigCADYCACADQQc2AgAgAyAINgIEIAVBBkYEQCACQRhqEJEFDAILIAJBEGoQjwIMAQsgAkE4aiACQcwAaikCACIJNwMAIAIgAikCRCIKNwMwIANBDGogCTcCACADIAo3AgQgA0EHNgIACyACQeAAaiQAIAQCfiADKAIAQQdHBEAgBCADKQMANwMIIARBIGogA0EYaikDADcDACAEQRhqIANBEGopAwA3AwAgBEEQaiADQQhqKQMANwMAQgAMAQsgA0EoaiADQQxqKQIANwMAIAMgAykCBDcDICAEQQhqQaCQwQBBiAEgA0EgahCrBEIBCzcDACADQTBqJAAgAUHIAGogBygCADYCACABIAEpAgw3A0AgAUEgaiECAkACQCABKQMYQgBSBEAgAUHoAGogAkEYaikDADcDACABQeAAaiACQRBqKQMANwMAIAFB2ABqIAJBCGopAwA3AwAgASACKQMANwNQIAFBADYCiAEgAUIBNwKAASABQaQBakGolMEANgIAIAFBAzoArAEgAUEgNgKcASABQQA2AqgBIAFBADYClAEgAUEANgKMASABIAFBgAFqNgKgASABQdAAaiABQYwBahCtBA0CIAFB+ABqIAFBiAFqKAIAIgI2AgAgASABKQKAASIJNwNwIABBGGogAUEUaigCADYCACAAIAEpAgw3AhAgAEEBNgIAIAAgCTcCBCAAQQxqIAI2AgACQAJAAkACQAJAAkAgAUHQAGoiACgCAA4MBQUDAwUDAwMEBAECAAsgAEEUahCRBQwECyAAQQRqEIACDAMLIABBBGoQkQUMAgsgAEEEahCRBQwBCyAAQQRqEJEFIABBEGoQkQULDAELIAAgAikDADcDACAAQRhqIAJBGGopAwA3AwAgAEEQaiACQRBqKQMANwMAIABBCGogAkEIaikDADcDACABQUBrEJEFCyABQQhqEMwEIAFBsAFqJAAPCwALtQMBAX8gACgCACECIwBBMGsiACQAAn8CQAJAAkACQAJAAkACQCACKAIAQQFrDgYBAgMEBQYACyAAQRhqQgA3AgAgAEEBNgIQIABBjJbBADYCDCAAQYCWwQA2AhQgASAAQQxqEKoFDAYLIABBGGpCADcCACAAQQE2AhAgAEGklsEANgIMIABBgJbBADYCFCABIABBDGoQqgUMBQsgAEEYakIANwIAIABBATYCECAAQcCWwQA2AgwgAEGAlsEANgIUIAEgAEEMahCqBQwECyAAQRhqQgA3AgAgAEEBNgIQIABB4JbBADYCDCAAQYCWwQA2AhQgASAAQQxqEKoFDAMLIABBGGpCADcCACAAQQE2AhAgAEGEl8EANgIMIABBgJbBADYCFCABIABBDGoQqgUMAgsgAEEY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ASADNgIIDAELCwALQQwhBQsgAkEoahCRBQsgACAENgIMIAAgAzYCCCAAIAE2AgQgACAFNgIACyACQdAAaiQAC2gBA38jAEEQayICJAAgAkEIaiIDIAEoAggiBCABKAIAakEAIAQgASgCBEkbIgEEfyABLQAABUEACzoAASADIAFBAEc6AAAgAi0ACSEBIAAgAi0ACEEBcToAACAAIAE6AAEgAkEQaiQACxAAIAFB3QAQbSAAQQA2AgALEAAgAUH9ABBtIABBADYCAAsXACABQf0AEG0gAUH9ABBtIABBADYCAAvjAgEBfyMAQTBrIgIkAAJ/AkACQAJAAkAgAC0AAEEBaw4DAQIDAAsgAiAAKAIENgIAIAIgAC0AAToAByACQSRqQgI3AgAgAkEUakHEATYCACACQQM2AhwgAkGEoMEANgIYIAJBxQE2AgwgAiACQQhqNgIgIAIgAjYCECACIAJBB2o2AgggASACQRhqEKoFDAMLIAJBJGpCADcCACACQQE2AhwgAkHIoMEANgIYIAJBmJ7BADYCICABIAJBGGoQqgUMAgsgAiAAKAIENgIAIAIgAC0AAToAByACQSRqQgI3AgAgAkEUakHEATYCACACQQM2AhwgAkHkoMEANgIYIAJBxQE2AgwgAiACQQhqNgIgIAIgAjYCECACIAJBB2o2AgggASACQRhqEKoFDAELIAJBJGpCADcCACACQQE2AhwgAkGMocEANgIYIAJBmJ7BADYCICABIAJBGGoQqgULIAJBMGokAAvbOgEnfyMAQbADayIGJAAgASACQQZ0aiEoIAZBAEHAABDRBSICQUBrISkgACgCHCEkIAAoAhghJSAAKAIUISAgACgCECEhIAAoAgwhJiAAKAIIIScgACgCBCEiIAAoAgAhIwNAAkACQCABIChHBEAgAkKAgICAwAA3AnwgAiABNgJwIAJBwAA2AnQgAiABQUBrIgE2AnggAkFAayEGIwBBEGsiCSQAIAkgKTYCDCAJIAI2AgggCUEIaiIHKAIEIAcoAgBrQQJ2IQ4gAkHwAGoiBygCECITRQRAAAsgBiAONgIkIAZBADYCHCAGIAkpAgg3AgAgBiAHKQIANwIIIAZBEGogB0EIaikCADcCACAGQRhqIAdBEGooAgA2AgAgBiAOIAcoAgQgE24iBiAGIA5LGzYCICAJQRBqJAAg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KQMQfCICIARUrXwiBSADKQMwfCIEIAVUrXwgBCAEIANByABqKQMAIAIgAykDQHwgAlStfHwiBFatfCIFQj6IIQIgBUIChiAEQj6IhCEEDAELIAJCLYYgAUITiIRCvaKCo46rBIAhBEIAIQILIAMgBCACQoCA4LC3n7ec9QAQzQUgACAENwMAIAAgAjcDCCAAIAMpAwAgAXw3AxAgA0HQAGokAAuDAQEDfwJ/IAAtAAAhACMAQYABayIDJAADQCACIANqQf8AakEwQdcAIABBD3EiBEEKSRsgBGo6AAAgAkEBayECIAAiBEEEdiEAIARBEE8NAAsgAkGAAWpBgQFJBEAgAUGjosEAQQIgAiADakGAAWpBACACaxCkBSADQYABaiQADAELAAsLhgEBA38CfyAAKAIAIQJBACEAIwBBgAFrIgMkAANAIAAgA2pB/wBqQTBB1wAgAkEPcSIEQQpJGyAEajoAACAAQQFrIQAgAkEQSSACQQR2IQJFDQALIABBgAFqQYEBSQRAIAFBo6LBAEECIAAgA2pBgAFqQQAgAGsQpAUgA0GAAWokAAwBCwALC4UBAQN/An8gACgCACECQQAhACMAQYABayIDJAADQCAAIANqQf8AakEwQTcgAkEPcSIEQQpJGyAEajoAACAAQQFrIQAgAkEQSSACQQR2IQJFDQALIABBgAFqQYEBSQRAIAFBo6LBAEECIAAgA2pBgAFqQQAgAGsQpAUgA0GAAWokAAwBCwALC/YDAQZ/IwBBQGoiAyQAIANBNGogATYCACADQQM6ADwgA0EgNgIsIANBADYCOCADIAA2AjAgA0EANgIkIANBADYCHAJ/AkACQCACKAIQIgFFBEAgAkEMaigCACIAQQN0IQYgAEH/////AXEhByACKAIAIQggAigCCCEBA0AgBCAGRg0CIAQgCGoiAEEEaigCACIFBEAgAygCMCAAKAIAIAUgAygCNCgCDBEEAA0ECyAEQQhqIQQgASgCACABKAIEIQUgAUEIaiEBIANBHGogBREBAEUNAAsMAgsgAkEUaigCACIEQQV0IQAgBEH///8/cSEHIAIoAgghBiACKAIAIgghBANAIABFDQEgBEEEaigCACIFBEAgAygCMCAEKAIAIAUgAygCNCgCDBEEAA0DCyADIAEoAhA2AiwgAyABLQAcOgA8IAMgASgCGDYC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AkACQAJAIARB8AFrDgUBAAAAAgALIAZBD2pB/wFxQQJLDQQgBUFATg0EDAILIAVB8ABqQf8BcUEwTw0DDAELIAVBj39KDQILIANBAmoiBCACTw0GIAEgBGosAABBv39KDQNCACEKIANBA2oiBCACTw0HIAEgBGosAABBv39MDQVCgICAgIDgAAwECyAAIAE2AgQgAEEIaiACNgIAQQAMBwtCgICAgIAgDAILQgAhCiADQQJqIgQgAk8NBCABIARqLAAAQb9/TA0CC0KAgICAgMAACyEJQoCAgIAQIQoMAgsgBEEBaiEDDAQLQgAhCgsgACAJIAOthCAKhDcCBEEBCzYCAA8LIANBAWohAwwACwALqQIBBX8jAEEwayIEJABBJyECA38gAEKPzgBYBH8gAKciA0HjAEsEQCACQQJrIgIgBEEJamogAKciAyADQf//A3FB5ABuIgNB5ABsa0H//wNxQQF0QaWiwQBqLwAAOwAACwJAIANBCk8EQCACQQJrIgIgBEEJamogA0EBdEGlosEAai8AADsAAAwBCyACQQFrIgIgBEEJamogA0EwajoAAAsgAUGspsEAQQAgBEEJaiACakEnIAJrEKQFIARBMGokAAUgBEEJaiACaiIDQQRrIAAgAEKQzgCAIgBCkM4Afn2nIgVB//8DcUHkAG4iBkEBdEGlosEAai8AADsAACADQQJrIAUgBkHkAGxrQf//A3FBAXRBpaLBAGovAAA7AAAgAkEEayECDAELCwsMACAAMQAAIAEQuAULDAAgADUCACABELgFCwwAIAApAwAgARC4BQugBAENfyMAQTBrIgMkACADQQA7ASwgAyACNgIoIANBADYCJCADQoGAgICgATcCHCADIAI2AhggAyACNgIQIAMgATYCDCADQQo2AgggACgCBCENIAAoAgAhCiAAKAIIIQsgA0EgaiEOQQAhAAJ/A0ACQCAIRQRAAkACQANAIAAgAksNAiAAIAFqIQlBACEEQQAhCCMAQRBrIgUkAAJAIAIgAGsiBkEHTQRAA0AgBCAGRgRAIAYhBAwDCyAEIAlqLQAAQQpGBEBBASEIDAMFIARBAWohBAwBCwALAAsgBUEIakEKIAkgBhC2BSAFKAIMIQQgBSgCCCEICyADIAg2AgAgAyAENgIEIAVBEGokACADKAIAQQFHDQEgAyAAIAMoAgRq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ACEEIAwgDUEIaikDADcDCCAMIAQ3AwAgDUEQaiQAQgEgC0E/ca2GIQQgDEEIaikDACEGIAwpAwAhBwNAAkAgAiAGfSABIAdUrX0iCEIAWQRAIAEgB30hASAEIAWEIQUgCFANASAIIQILIAZCP4YgB0IBiIQhByAEQgGIIQQgBkIBiCEGDAELCyABIAOAIgIgBYQhBSABIAIgA359CyEBQgAhBAsgCiABNwMQIAogBTcDACAKQRhqIAQ3AwAgCiAJNwMIIAxBIGokACAKKQMAIQEgACAKQQhqKQMANwMIIAAgATcDACAKQSBqJAALC9e7AQcAQYCAwAAL919kZW5vbWFtb3VudGJsb2NrdHJhbnNhY3Rpb25jb250cmFjdGhlaWdodHRpbWVjaGFpbl9pZHNlbmRlcmZ1bmRzYWRkcmVzc2luZGV4a2V5X3BhdGhjbGllbnRfc3RhdGVjb25zZW5zdXNfc3RhdGVjaGVja3N1bXJldmlzaW9uX251bWJlcnJldmlzaW9uX2hlaWdodGRhdGFsYXRlc3RfaGVpZ2h0ZGVsYXlfdGltZV9wZXJpb2RkZWxheV9ibG9ja19wZXJpb2Rwcm9vZnBhdGh2YWx1ZWNsaWVudF9tZXNzYWdldXBncmFkZV9jbGllbnRfc3RhdGV1cGdyYWRlX2NvbnNlbnN1c19zdGF0ZXByb29mX3VwZ3JhZGVfY2xpZW50cHJvb2ZfdXBncmFkZV9jb25zZW5zdXNfc3RhdGVydWVhbHNldWxsAENsaWVudFN0YXRlZm9ya19wYXJhbWV0ZXJzY2hhaW5faWRmcm96ZW5faGVpZ2h0c2xvdHNfcGVyX2Vwb2Noc2Vjb25kc19wZXJfc2xvdGdlbmVzaXNfdmFsaWRhdG9yc19yb290Y291bnRlcnBhcnR5X2NvbW1pdG1lbnRfc2xvdG1pbl9zeW5jX2NvbW1pdHRlZV9wYXJ0aWNpcGFudHNsYXRlc3Rfc2xvdHRydXN0X2xldmVsdHJ1c3RpbmdfcGVyaW9kaWJjX2NvbnRyYWN0X2FkZHJlc3NlcG9jaHNfcGVyX3N5bmNfY29tbWl0dGVlX3BlcmlvZGdlbmVzaXNfdGltZUFjY291bnRQcm9vZmNvbnRyYWN0X2FkZHJlc3NzdG9yYWdlX3Jvb3Rwcm9vZlN0b3JhZ2VQcm9vZnByb29mc0FjY291bnRVcGRhdGVhY2NvdW50X3Byb29mU3luY0FnZ3JlZ2F0ZXN5bmNfY29tbWl0dGVlX3NpZ25hdHVyZXN5bmNfY29tbWl0dGVlX2JpdHNTeW5jQ29tbWl0dGVlcHVia2V5c2FnZ3JlZ2F0ZV9wdWJrZXlDb25zZW5zdXNTdGF0ZXNsb3R0aW1lc3RhbXBuZXh0X3N5bmNfY29tbWl0dGVlY3VycmVudF9zeW5jX2NvbW1pdHRlZUZvcmtQYXJhbWV0ZXJzYWx0YWlyZWlwNDg0NGdlbmVzaXNfc2xvdGdlbmVzaXNfZm9ya192ZXJzaW9uY2FwZWxsYWJlbGxhdHJpeEJlYWNvbkJsb2NrSGVhZGVyYm9keV9yb290cGFyZW50X3Jvb3Rwcm9wb3Nlcl9pbmRleHN0YXRlX3Jvb3RMaWdodENsaWVudEhlYWRlcmJlYWNvbmV4ZWN1dGlvbl9icmFuY2hleGVjdXRpb25MaWdodENsaWVudFVwZGF0ZW5leHRfc3luY19jb21taXR0ZWVfYnJhbmNoc3luY19hZ2dyZWdhdGVmaW5hbGl6ZWRfaGVhZGVyZmluYWxpdHlfYnJhbmNoYXR0ZXN0ZWRfaGVhZGVyc2lnbmF0dXJlX3Nsb3RUcnVzdGVkU3luY0NvbW1pdHRlZXRydXN0ZWRfaGVpZ2h0RXhlY3V0aW9uUGF5bG9hZEhlYWRlcmV4dHJhX2RhdGFmZWVfcmVjaXBpZW50cmVjZWlwdHNfcm9vdGJhc2VfZmVlX3Blcl9nYXN3aXRoZHJhd2Fsc19yb290Z2FzX3VzZWRwYXJlbnRfaGFzaHByZXZfcmFuZGFvZ2FzX2xpbWl0bG9nc19ibG9vbWJsb2NrX251bWJlcnRyYW5zYWN0aW9uc19yb290YmxvY2tfaGFzaGludmFsaWQgdGFnIHZhbHVlOiAwaW52YWxpZCBrZXkgdmFsdWU6IAAAXwUQABMAAABpbnZhbGlkIHZhcmludGludmFsaWQgd2lyZSB0eXBlIHZhbHVlOiAAigUQABkAAABGb3JrdmVyc2lvbmVwb2NoUHJvb2ZrZXl2YWx1ZUhlYWRlcnRydXN0ZWRfc3luY19jb21taXR0ZWVhY2NvdW50X3VwZGF0ZWNvbnNlbnN1c191cGRhdGUvbml4L3N0b3JlL2VlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlLXZlbmRvci1jYXJnby1kZXBzL2MxOWI3YzZmOTIzYjU4MGFjMjU5MTY0YTg5ZjI1Nzc5ODRhZDVhYjA5ZWU5ZDU4M2I4ODhmOTM0YWRiYmU4ZDAvYmxvY2stYnVmZmVyLTAuMTAuNC9zcmMvbGliLnJzAwYQAJ0AAACkAAAAIAAAAAMGEACdAAAArgAAABoAAAADBhAAnQAAAJ0AAAAlAAAAYFVwZGF0ZVN0YXRlYCBjYW5ub3QgYmUgY2FsbGVkIHdpdGggYE1pc2JlaGF2aW91cmAAAAQHEAAAAAAAL25peC9zdG9yZS9lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZS12ZW5kb3ItY2FyZ28tZGVwcy9jMTliN2M2ZjkyM2I1ODBhYzI1OTE2NGE4OWYyNTc3OTg0YWQ1YWIwOWVlOWQ1ODNiODg4ZjkzNGFkYmJlOGQwL3NoYTMtMC4xMC44L3NyYy9zdGF0ZS5ycwAMBxAAlwAAACsAAAAPAAAAd2hlbiBkZWNvZGluZyBzdG9yYWdlIHByb29mOiAAAAC0BxAAHQAAAGludmFsaWQgc3RyaW5nIHZhbHVlOiBkYXRhIGlzIG5vdCBVVEYtOCBlbmNvZGVkL25peC9zdG9yZS9lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZS12ZW5kb3ItY2FyZ28tZGVwcy9jMTliN2M2ZjkyM2I1ODBhYzI1OTE2NGE4OWYyNTc3OTg0YWQ1YWIwOWVlOWQ1ODNiODg4ZjkzNGFkYmJlOGQwL3RyaWUtZGItMC4yNy4xL3NyYy9ub2RlLnJzCwgQAJkAAABnAAAAEwAAAAsIEACZAAAAhwAAAB4AAAB0cnVzdGVkX2hlaWdodG5vIGN1cnJlbnQgbm9yIG5leHQgc3luYyBjb21taXR0ZWUvbml4L3N0b3JlL2VlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlLXZlbmRvci1jYXJnby1kZXBzL2MxOWI3YzZmOTIzYjU4MGFjMjU5MTY0YTg5ZjI1Nzc5ODRhZDVhYjA5ZWU5ZDU4M2I4ODhmOTM0YWRiYmU4ZDAvdHJpZS1kYi0wLjI3LjEvc3JjL3RyaWVkYi5ycwD0CBAAmwAAAPIAAAA3AAAA9AgQAJsAAADzAAAAPQAAAENvc21vc01zZ2JhbmtjdXN0b213YXNtQmFua01zZ3NlbmR0b19hZGRyZXNzYW1vdW50YnVybldhc21Nc2dleGVjdXRlY29udHJhY3RfYWRkcm1zZ2Z1bmRzaW5zdGFudGlhdGVhZG1pbmNvZGVfaWRsYWJlbG1pZ3JhdGVuZXdfY29kZV9pZHVwZGF0ZV9hZG1pbmNsZWFyX2FkbWluIjpSZXNwb25zZW1lc3NhZ2VzYXR0cmlidXRlc2V2ZW50c2RhdGFoZWlnaHRkZWxheV90aW1lX3BlcmlvZGRlbGF5X2Jsb2NrX3BlcmlvZHByb29mcGF0aHZhbHVlAHQKEAAGAAAAegoQABEAAACLChAAEgAAAJ0KEAAFAAAAogoQAAQAAACmChAABQAAAHQKEAAGAAAAegoQABEAAACLChAAEgAAAJ0KEAAFAAAAogoQAAQAAABjbGllbnRfbWVzc2FnZQAABAsQAA4AAAB1cGdyYWRlX2NsaWVudF9zdGF0ZXVwZ3JhZGVfY29uc2Vuc3VzX3N0YXRlcHJvb2ZfdXBncmFkZV9jbGllbnRwcm9vZl91cGdyYWRlX2NvbnNlbnN1c19zdGF0ZRwLEAAUAAAAMAsQABcAAABHCxAAFAAAAFsLEAAdAAAAdAoQAAYAAAB2ZXJpZnlfbWVtYmVyc2hpcHZlcmlmeV9ub25fbWVtYmVyc2hpcHVwZGF0ZV9zdGF0ZXVwZGF0ZV9zdGF0ZV9vbl9taXNiZWhhdmlvdXJ2ZXJpZnlfdXBncmFkZV9hbmRfdXBkYXRlX3N0YXRlbWlncmF0ZV9jbGllbnRfc3RvcmUAAACgCxAAEQAAALELEAAVAAAAxgsQAAwAAADSCxAAHAAAAO4LEAAfAAAADQwQABQAAAB2ZXJpZnlfY2xpZW50X21lc3NhZ2VjaGVja19mb3JfbWlzYmVoYXZpb3VydGltZXN0YW1wX2F0X2hlaWdodHN0YXR1c2V4cG9ydF9tZXRhZGF0YQBUDBAAFQAAAGkMEAAWAAAAfwwQABMAAACSDBAABgAAAJgMEAAPAAAAa2V5X3BhdGhjbGllbnRfc3RhdGVjb25zZW5zdXNfc3RhdGVjaGVja3N1bVRpbWVzdGFtcEF0SGVpZ2h0UmVzdWx0dGltZXN0YW1wU3Vkb01zZ1F1ZXJ5TXNnRW1wdHlSZXN1bHRTdGF0dXNSZXN1bHRVcGRhdGVTdGF0ZVJlc3VsdGhlaWdodHNFeHBvcnRNZXRhZGF0YVJlc3VsdGdlbmVzaXNfbWV0YWRhdGFBZGRyaWNzMDA4X3dhc21fY2xpZW50Ojptc2c6Okluc3RhbnRpYXRlTXNnaWNzMDA4X3dhc21fY2xpZW50Ojptc2c6OlN0YXR1c1Jlc3VsdGljczAwOF93YXNtX2NsaWVudDo6bXNnOjpRdWVyeU1zZ2Nvc213YXNtX3N0ZDo6cXVlcnk6OlF1ZXJ5UmVxdWVzdDxldGhlcmV1bV9saWdodF9jbGllbnQ6OmN1c3RvbV9xdWVyeTo6Q3VzdG9tUXVlcnk+aWNzMDA4X3dhc21fY2xpZW50Ojptc2c6OlRpbWVzdGFtcEF0SGVpZ2h0UmVzdWx0aWNzMDA4X3dhc21fY2xpZW50Ojptc2c6OkVtcHR5UmVzdWx0aWNzMDA4X3dhc21fY2xpZW50Ojptc2c6OlVwZGF0ZVN0YXRlUmVzdWx0Y29zbXdhc21fc3RkOjp0eXBlczo6TWVzc2FnZUluZm8oKWljczAwOF93YXNtX2NsaWVudDo6bXNnOjpTdWRvTXNnY29zbXdhc21fc3RkOjpyZXN1bHRzOjpjb250cmFjdF9yZXN1bHQ6OkNvbnRyYWN0UmVzdWx0PGNvc213YXNtX3N0ZDo6cmVzdWx0czo6cmVzcG9uc2U6OlJlc3BvbnNlPmNvc213YXNtX3N0ZDo6YmluYXJ5OjpCaW5hcnljb3Ntd2FzbV9zdGQ6OnR5cGVzOjpFbnZjb3Ntd2FzbV9zdGQ6OnJlc3VsdHM6OmNvbnRyYWN0X3Jlc3VsdDo6Q29udHJhY3RSZXN1bHQ8Y29zbXdhc21fc3RkOjpiaW5hcnk6OkJpbmFyeT5pY3MwMDhfd2FzbV9jbGllbnQ6Om1zZzo6RXhwb3J0TWV0YWRhdGFSZXN1bHRib29sAAcAAAAEAAAABAAAAAgAAABpbnZhbGlkIHRhZyB2YWx1ZTogMGludmFsaWQga2V5IHZhbHVlOiAAQBAQABMAAABkZWxpbWl0ZWQgbGVuZ3RoIGV4Y2VlZGVkYnVmZmVyIHVuZGVyZmxvd3JlY3Vyc2lvbiBsaW1pdCByZWFjaGVkaW52YWxpZCB2YXJpbnRpbnZhbGlkIHdpcmUgdHlwZTogIChleHBlY3RlZCApAAAAqhAQABMAAAC9EBAACwAAAMgQEAABAAAAaW52YWxpZCB3aXJlIHR5cGUgdmFsdWU6IAAAAOQQEAAZAAAAVHJ5RnJvbVByb3RvCgAAAAQAAAAEAAAACwAAAERlY29kZQAACgAAAAQAAAAEAAAADAAAAAoAAAAEAAAABAAAAA0AAAAKAAAABAAAAAQAAAAOAAAACgAAAAQAAAAEAAAADwAAAAoAAAAEAAAABAAAABAAAAAKAAAABAAAAAQAAAARAAAACgAAAAQAAAAEAAAAEgAAAAoAAAAEAAAABAAAABMAAAAKAAAABAAAAAQAAAAUAAAACgAAAAQAAAAEAAAAFQAAAAoAAAAEAAAABAAAABYAAAAKAAAABAAAAAQAAAAXAAAATWVya2xlUm9vdGhhc2hDbGllbnRTdGF0ZW1heF9jbG9ja19kcmlmdGxhdGVzdF9oZWlnaHR0cnVzdGluZ19wZXJpb2Rmcm96ZW5faGVpZ2h0Y2hhaW5faWR1bmJvbmRpbmdfcGVyaW9kQ29uc2Vuc3VzU3RhdGVyb290bmV4dF92YWxpZGF0b3JzX2hhc2h0aW1lc3RhbXBDb2luZGVub21hbW91bnQAGgAAAAAAAAABAAAAGwAAABwAAAAdAAAAGgAAAAAAAAABAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAJAAAACUAAAAaAAAAAAAAAAEAAAAmAAAARW1wdHlFdmVudHR5cGVhdHRyaWJ1dGVzQXR0cmlidXRla2V5dmFsdWVkYXRhY2hlY2tzdW0AAABpbnZhbGlkIHRhZyB2YWx1ZTogMGludmFsaWQga2V5IHZhbHVlOiAANBMQABMAAABpbnZhbGlkIHZhcmludGludmFsaWQgd2lyZSB0eXBlOiAgKGV4cGVjdGVkICkAAABeExAAEwAAAHETEAALAAAAfBMQAAEAAABBbnl0eXBlX3VybGludmFsaWQgd2lyZSB0eXBlIHZhbHVlOiCjExAAGQAAAGludmFsaWQgVWludDY0ICcnIC0gxBMQABAAAADUExAABAAAAAAvbml4L3N0b3JlL2VlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlLXZlbmRvci1jYXJnby1kZXBzL2I2NjQyNThkYzkwZDNjYmRiNTU0ZGVlYjhmYmNlNTRhZmJhNjg1ZTE5N2M3OTVmYmJiMzJkYjRhY2EyZGU1ODQvc3N6X3R5cGVzLTAuNS40L3NyYy9iaXRmaWVsZC5ycwDpExAAngAAAJMBAAApAAAAL2liYy5saWdodGNsaWVudHMud2FzbS52MS5DbGllbnRTdGF0ZS9pYmMubGlnaHRjbGllbnRzLndhc20udjEuQ29uc2Vuc3VzU3RhdGVibG9ja3RyYW5zYWN0aW9uY29udHJhY3RoZWlnaHR0aW1lY2hhaW5faWRzZW5kZXJmdW5kc2FkZHJlc3NpbmRleHRydXN0ZWRfc3luY19jb21taXR0ZWVjb25zZW5zdXNfdXBkYXRlYWNjb3VudF91cGRhdGUAADIAAAA4AAAABAAAADMAAAA0AAAAYXR0ZXN0ZWRfaGVhZGVyZmluYWxpemVkX2hlYWRlcnN5bmNfYWdncmVnYXRlAAAAoBUQAAAAAABlcnJvciB3aGlsZSBkZWNvZGluZyBwcm90byAoKQAAAKgVEAAcAAAAxBUQAAEAAABjbGllbnQgc3RhdGUgbm90IGZvdW5kAADYFRAAFgAAAGludmFsaWQgcHJvb2YgZm9ybWF0ICgAAPgVEAAWAAAAxBUQAAEAAABnaXZlbiB0cnVzdGVkIHN5bmMgY29tbWl0dGVlIGRvZXNuJ3QgbWF0Y2ggdGhlIGdpdmVuIGFnZ3JlZ2F0ZSBwdWJsaWMga2V5ICgpIG9yIHRoZSBzdG9yZWQgb25lICggFhAASwAAAGsWEAAVAAAAxBUQAAEAAABhY3RpdmUgc3luYyBjb21taXR0ZWUgaXMgYG5leHRgIGJ1dCB0aGVyZSBpcyBubyBuZXh0IHN5bmMgY29tbWl0dGVlIGluIHRoZSBjb25zZW5zdXMgc3RhdGUAAJgWEABaAAAAY29uc2Vuc3VzIHN0YXRlIG5vdCBmb3VuZCBhdCBoZWlnaHQg/BYQACQAAABJQkMgcGF0aCBpcyBlbXB0eQAAACgXEAARAAAAaW52YWxpZCBjb21taXRtZW50IGtleSwgZXhwZWN0ZWQgKCkgYnV0IGZvdW5kICgARBcQACIAAABmFxAADQAAAMQVEAABAAAAY2xpZW50J3Mgc3RvcmUgcGVyaW9kIG11c3QgYmUgZXF1YWwgdG8gdXBkYXRlJ3MgZmluYWxpemVkIHBlcmlvZIwXEABAAAAAcHJvb2YgaXMgZW1wdHkAANQXEAAOAAAAY291bnRlcnBhcnR5IHN0b3JhZ2Ugbm90IG5pbOwXEAAcAAAAYmF0Y2hpbmcgcHJvb2ZzIGFyZSBub3Qgc3VwcG9ydGVkAAAAEBgQACEAAABleHBlY3RlZCB2YWx1ZSAoKSBhbmQgc3RvcmVkIHZhbHVlICgpIGRvbid0IG1hdGNoAAAAPBgQABAAAABMGBAAFAAAAGAYEAANAAAAY3VzdG9tIHF1ZXJ5ICgAAIgYEAAOAAAAxBUQAAEAAABzdG9yYWdlIHJvb3QgbWlzbWF0Y2gsIGV4cGVjdGVkIGBgIGJ1dCBmb3VuZCBgYACoGBAAIQAAAMkYEAANAAAA1hgQAAEAAAB3YXNtIGNsaWVudCBlcnJvciAoAPAYEAATAAAAxBUQAAEAAABuZXh0IHN5bmMgY29tbWl0dGVlIGNhbid0IGJlIGNoYW5nZWQgYWZ0ZXIgYmVpbmcgc2V0FBkQADQAAAB0aGUgc2xvdCBudW1iZXIgdGhhdCBpcyBzYXZlZCBwcmV2aW91c2x5IHRvIHRoZSBjb25zZW5zdXMgc3RhdGUgY2Fubm90IGJlIGNoYW5nZWQAAABQGRAAUQAAAHRoZSBwcm9vZiBwYXRoICBpcyBub3QgdW5rbm93bgAArBkQAA8AAAC7GRAADwAAAHRoZSBnaXZlbiBjb250cmFjdCBhZGRyZXNzICgpIGRvZXNuJ3QgbWF0Y2ggdGhlIHN0b3JlZCB2YWx1ZSAoAADcGRAAHAAAAPgZEAAiAAAAxBUQAAEAAABlcnJvciB3aGlsZSBydW5uaW5nIGBmYXN0X2FnZ3JlZ2F0ZV92ZXJpZnlgIHF1ZXJ5ICgANBoQADMAAADEFRAAAQAAAGVycm9yIHdoaWxlIHJ1bm5pbmcgYGFnZ3JlZ2F0ZV9wdWJsaWNfa2V5c2AgcXVlcnkgKAB4GhAAMwAAAMQVEAABAAAAaW52YWxpZCBwdWJsaWMga2V5IGlzIHJldHVybmVkIGZyb20gYGFnZ3JlZ2F0ZV9wdWJsaWNfa2V5YAAAvBoQADoAAABRdWVyeVJlcXVlc3RiYW5rY3VzdG9td2FzbUZyYWN0aW9ubnVtZXJhdG9yZGVub21pbmF0b3Ivbml4L3N0b3JlL2VlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlLXZlbmRvci1jYXJnby1kZXBzL2MxOWI3YzZmOTIzYjU4MGFjMjU5MTY0YTg5ZjI1Nzc5ODRhZDVhYjA5ZWU5ZDU4M2I4ODhmOTM0YWRiYmU4ZDAvYmxvY2stYnVmZmVyLTAuMTAuNC9zcmMvbGliLnJzADYbEACdAAAApAAAACAAAAA2GxAAnQAAAK4AAAAaAAAANhsQAJ0AAACdAAAAJQAAAFN1Yk1zZ2lkbXNnZ2FzX2xpbWl0cmVwbHlfb25SZXBseU9uYWx3YXlzZXJyb3JzdWNjZXNzbmV2ZXJDb250cmFjdFJlc3VsdG9rYmVhY29uZXhlY3V0aW9uAAAAOQAAAAwAAAAEAAAAOgAAADsAAAA8AAAAL25peC9zdG9yZS9lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZS12ZW5kb3ItY2FyZ28tZGVwcy9jMTliN2M2ZjkyM2I1ODBhYzI1OTE2NGE4OWYyNTc3OTg0YWQ1YWIwOWVlOWQ1ODNiODg4ZjkzNGFkYmJlOGQwL3NoYTMtMC4xMC44L3NyYy9zdGF0ZS5ycwB4HBAAlwAAACsAAAAPAAAAdW5rbm93biBmaWVsZCBgYCwgZXhwZWN0ZWQgACAdEAAPAAAALx0QAAwAAABgLCB0aGVyZSBhcmUgbm8gZmllbGRzAAAgHRAADwAAAEwdEAAWAAAAc2lnbmF0dXJlIGNhbm5vdCBiZSB2ZXJpZmllZDogcHVibGljX2tleXM6ICwgbXNnOiAsIHNpZ25hdHVyZTogAHQdEAArAAAAnx0QAAcAAACmHRAADQAAAD0AAAAAAAAAAQAAAD4AAAA/AAAAQAAAAEN1c3RvbVF1ZXJ5YWdncmVnYXRlX3ZlcmlmeXB1YmxpY19rZXlzbWVzc2FnZXNpZ25hdHVyZWFnZ3JlZ2F0ZS9uaXgvc3RvcmUvZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUtdmVuZG9yLWNhcmdvLWRlcHMvYzE5YjdjNmY5MjNiNTgwYWMyNTkxNjRhODlmMjU3Nzk4NGFkNWFiMDllZTlkNTgzYjg4OGY5MzRhZGJiZThkMC9kaWdlc3QtMC4xMC43L3NyYy9jb3JlX2FwaS9jdF92YXJpYWJsZS5ycwAjHhAAqAAAAHwAAAAkAAAAL25peC9zdG9yZS9lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZS12ZW5kb3ItY2FyZ28tZGVwcy9jMTliN2M2ZjkyM2I1ODBhYzI1OTE2NGE4OWYyNTc3OTg0YWQ1YWIwOWVlOWQ1ODNiODg4ZjkzNGFkYmJlOGQwL2Jsb2NrLWJ1ZmZlci0wLjEwLjQvc3JjL2xpYi5ycwAAANweEACdAAAApAAAACAAAADcHhAAnQAAAK4AAAAaAAAA3B4QAJ0AAACdAAAAJQAAANweEACdAAAAOAEAAB4AAADcHhAAnQAAADUBAAAYAAAAV2FzbVF1ZXJ5c21hcnRjb250cmFjdF9hZGRybXNncmF3a2V5Y29udHJhY3RfaW5mb1RpbWVzdGFtcFRyeUZyb21Qcm90bwAARAAAAAQAAAAEAAAARQAAAFByb3N0AAAARAAAAAQAAAAEAAAADAAAAEQAAAAEAAAABAAAAEYAAABjbGllbnRTdGF0ZWVycm9yIHJlYWRpbmcgdGhlIGNsaWVudCBzdGF0ZTogAFcgEAAgAAAAZXJyb3IgcmVhZGluZyBjb25zZW5zdXMgc3RhdGU6IACAIBAAHwAAAC9pYmMubGlnaHRjbGllbnRzLndhc20udjEuQ2xpZW50U3RhdGUvaWJjLmxpZ2h0Y2xpZW50cy53YXNtLnYxLkNvbnNlbnN1c1N0YXRlcmV2aXNpb25fbnVtYmVycmV2aXNpb25faGVpZ2h0AC9uaXgvc3RvcmUvZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUtdmVuZG9yLWNhcmdvLWRlcHMvYzE5YjdjNmY5MjNiNTgwYWMyNTkxNjRhODlmMjU3Nzk4NGFkNWFiMDllZTlkNTgzYjg4OGY5MzRhZGJiZThkMC9zaGEyLTAuMTAuOC9zcmMvY29yZV9hcGkucnMAABQhEACaAAAAQgAAABMAAABn5glqha5nu3Lzbjw69U+lf1IOUYxoBZur2YMfGc3gW0hlaWdodAAAFCEQAAAAAABHAAAAAAAAAAEAAABIAAAASQAAAEoAAABjbGllbnRzY29uc2Vuc3VzU3RhdGVzAQABQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL/////////////////////////////////////////////////////////8+////PzQ1Njc4OTo7PD3/////////AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBn///////8aGxwdHh8gISIjJCUmJygpKissLS4vMDEyM/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAAAvaWJjLmxpZ2h0Y2xpZW50cy53YXNtLnYxLkNvbnNlbnN1c1N0YXRlZCMQACgAAAAvdW5pb24uaWJjLmxpZ2h0Y2xpZW50cy5jb21ldGJscy52MS5DbGllbnRTdGF0ZQCUIxAALwAAAC9pYmMubGlnaHRjbGllbnRzLndhc20udjEuQ2xpZW50U3RhdGUAAADMIxAAJQAAAEJhbmtRdWVyeWJhbGFuY2VhZGRyZXNzZGVub21hbGxfYmFsYW5jZXNRdWVyaWVyIGNvbnRyYWN0IGVycm9yOiAkJBAAGAAAAFF1ZXJpZXIgc3lzdGVtIGVycm9yOiAAAEQkEAAWAAAAU2VyaWFsaXppbmcgUXVlcnlSZXF1ZXN0OiAAAGQkEAAaAAAAcmV2aXNpb25fbnVtYmVycmV2aXNpb25faGVpZ2h0AABOAAAADAAAAAQAAABPAAAAUAAAADwAAABIZWlnaHRHZW5lc2lzTWV0YWRhdGFrZXl2YWx1ZWludmFsaWQgVWludDEyOCAnJyAtIAAA3SQQABEAAADuJBAABAAAAEluY29ycmVjdFR5cGVVcmxmb3VuZAAAAE4AAAAMAAAABAAAAFEAAABleHBlY3RlZFIAAAAEAAAABAAAAFMAAABEZWNvZGUAAFIAAAAEAAAABAAAAFQAAABSAAAABAAAAAQAAABVAAAAUgAAAAQAAAAEAAAAVgAAAFIAAAAEAAAABAAAAFcAAABjbGllbnRTdGF0ZQBYAAAAAAAAAAEAAABZAAAAWgAAAFsAAAAAVHJ5RnJvbVByb3RvAAAAXAAAAAQAAAAEAAAAXQAAAFByb3N0AAAAXAAAAAQAAAAEAAAADAAAAENvZGVJZAAAXAAAAAQAAAAEAAAAXgAAAC9uaXgvc3RvcmUvZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUtdmVuZG9yLWNhcmdvLWRlcHMvYzE5YjdjNmY5MjNiNTgwYWMyNTkxNjRhODlmMjU3Nzk4NGFkNWFiMDllZTlkNTgzYjg4OGY5MzRhZGJiZThkMC90cmllLWRiLTAuMjcuMS9zcmMvbG9va3VwLnJzAAAmEACbAAAAQAAAAB4AAABcAAAADAAAAAQAAABfAAAAYAAAAFwAAAAUAAAABAAAAGEAAABiAAAAYwAAAAwAAAAEAAAAZAAAAGUAAAA8AAAAQWN0aXZlAADsJhAABgAAAEZyb3plbgAA/CYQAAYAAABFeHBpcmVkAAwnEAAHAAAALy0AAOwmEAAAAAAAHCcQAAEAAAAdJxAAAQAAAGNvbnNlbnN1c1N0YXRlcwA4JxAADwAAAGYAAAAEAAAABAAAAGcAAABJbnZhbGlkU3RhdGVSb290ZgAAAAQAAAAEAAAAaAAAAEluY29tcGxldGVEYXRhYmFzZVZhbHVlQXRJbmNvbXBsZXRlS2V5AABpAAAADAAAAAQAAAA3AAAAZgAAAAQAAAAEAAAAagAAAERlY29kZXJFcnJvcmsAAAAgAAAAAQAAAGwAAABmAAAABAAAAAQAAABtAAAASW52YWxpZEhhc2gAZgAAAAQAAAAEAAAAbgAAAGxpYi9ldGhlcmV1bS12ZXJpZmllci9zcmMvdXRpbHMucnMAABAoEAAiAAAAUQAAABEAAAAQKBAAIgAAAFIAAAARAAAAL25peC9zdG9yZS9lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZS12ZW5kb3ItY2FyZ28tZGVwcy9jMTliN2M2ZjkyM2I1ODBhYzI1OTE2NGE4OWYyNTc3OTg0YWQ1YWIwOWVlOWQ1ODNiODg4ZjkzNGFkYmJlOGQwL2Jsb2NrLWJ1ZmZlci0wLjEwLjQvc3JjL2xpYi5ycwAAAFQoEACdAAAApAAAACAAAABUKBAAnQAAAK4AAAAaAAAAVCgQAJ0AAACdAAAAJQAAAC9uaXgvc3RvcmUvZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUtdmVuZG9yLWNhcmdvLWRlcHMvYzE5YjdjNmY5MjNiNTgwYWMyNTkxNjRhODlmMjU3Nzk4NGFkNWFiMDllZTlkNTgzYjg4OGY5MzRhZGJiZThkMC9zaGEzLTAuMTAuOC9zcmMvc3RhdGUucnMAJCkQAJcAAAArAAAADwAAAFJscCBpcyBub3QgdmFsaWQuAAAASW52YWxpZE1lcmtsZUJyYW5jaGxlYWYAdQAAACAAAAABAAAAdgAAAGJyYW5jaAAAdwAAAAwAAAAEAAAAeAAAAGRlcHRoAAAAeQAAAAQAAAAEAAAAegAAAGluZGV4AAAAewAAAAgAAAAIAAAAfAAAAHJvb3R5AAAABAAAAAQAAABnAAAAaW52YWxpZCBtZXJrbGUgYnJhbmNoICgpZCoQABcAAAB7KhAAAQAAAGludmFsaWQgY2hhaW4gY29udmVyc2lvbowqEAAYAAAAY3J5cHRvIGVycm9yrCoQAAwAAABleHBlY3RlZCBjdXJyZW50IHN5bmMgY29tbWl0dGVlIHRvIGJlIHByb3ZpZGVkIHNpbmNlIGB1cGRhdGVfcGVyaW9kID09IGN1cnJlbnRfcGVyaW9kYAAAwCoQAFYAAABleHBlY3RlZCBuZXh0IHN5bmMgY29tbWl0dGVlIHRvIGJlIHByb3ZpZGVkIHNpbmNlIGB1cGRhdGVfcGVyaW9kID4gY3VycmVudF9wZXJpb2RgAAAgKxAAUgAAAGlycmVsZXZhbnQgdXBkYXRlIHNpbmNlIHRoZSBvcmRlciBvZiB0aGUgc2xvdHMgaW4gdGhlIHVwZGF0ZSBkYXRhLCBhbmQgc3RvcmVkIGRhdGEgaXMgbm90IGNvcnJlY3QAAAB8KxAAYQAAAHRoZSBvcmRlciBvZiB0aGUgc2xvdHMgaW4gdGhlIHVwZGF0ZSBkYXRhLCBhbmQgc3RvcmVkIGRhdGEgaXMgbm90IGNvcnJlY3QAAADoKxAASQAAAHNpZ25hdHVyZSBwZXJpb2QgKCkgbXVzdCBiZSBlcXVhbCB0byBgc3RvcmVfcGVyaW9kYCAoKSBvciBgc3RvcmVfcGVyaW9kICsgMWAgd2hlbiB0aGUgbmV4dCBzeW5jIGNvbW1pdHRlZSBpcyBzdG9yZWQAPCwQABIAAABOLBAAIwAAAHEsEAA+AAAAKSB3aGVuIHRoZSBuZXh0IHN5bmMgY29tbWl0dGVlIGlzIG5vdCBzdG9yZWQ8LBAAEgAAAE4sEAAjAAAAyCwQACwAAABuZXh0IHN5bmMgY29tbWl0dGVlICgpIGRvZXMgbm90IG1hdGNoIHdpdGggdGhlIG9uZSBpbiB0aGUgY3VycmVudCBzdGF0ZSAoAAAADC0QABUAAAAhLRAANAAAAHsqEAABAAAAaW5zdWZmaWNpZW50IG51bWJlciBvZiBzeW5jIGNvbW1pdHRlZSBwYXJ0aWNpcGFudHMsIGV4cGVjdGVkIGl0IHRvIGJlIGF0IGxlYXN0ICgpIGJ1dCBnb3QgKABwLRAAUAAAAMAtEAALAAAAeyoQAAEAAABibHMgZXJyb3IgKADkLRAACwAAAHsqEAABAAAAcHJvb2YgaXMgaW52YWxpZCBkdWUgdG8gdmFsdWUgbWlzbWF0Y2gAAAAuEAAmAAAAdHJpZSBlcnJvciAoMC4QAAwAAAB7KhAAAQAAAHJscCBkZWNvZGluZyBmYWlsZWQgKAAAAEwuEAAVAAAAeyoQAAEAAABjdXN0b20gcXVlcnkgZXJyb3I6ICgAAAB0LhAAFQAAAHsqEAABAAAAdmVyaWZ5IHN0b3JhZ2UgYWJzZW5jZSBlcnJvcjogAACcLhAAHgAAAHZhbGlkYXRlIGxpZ2h0IGNsaWVudCBlcnJvcjogAAAAxC4QAB0AAAB2ZXJpZnkgYWNjb3VudCBzdG9yYWdlIHJvb3QgZXJyb3I6IADsLhAAIwAAAHZlcmlmeSBzdG9yYWdlIHByb29mIGVycm9yOiAYLxAAHAAAAC9uaXgvc3RvcmUvZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUtdmVuZG9yLWNhcmdvLWRlcHMvYzE5YjdjNmY5MjNiNTgwYWMyNTkxNjRhODlmMjU3Nzk4NGFkNWFiMDllZTlkNTgzYjg4OGY5MzRhZGJiZThkMC90cmllLWRiLTAuMjcuMS9zcmMvbmliYmxlL25pYmJsZXZlYy5ycwAAADwvEAClAAAANQAAADIAAAD0LxAAQYDgwAALkUEtaW52YWxpZCBoZWlnaHQgc3RyaW5nOiABMBAAFwAAAGludmFsaWQgaGVpZ2h0IHN0cmluZwAAACAwEAAVAAAAADAQAAAAAAAAMBAAAQAAAEhhc2h+AAAABAAAAAQAAABeAAAAQ3VycmVudFN5bmNDb21taXR0ZWVOZXh0U3luY0NvbW1pdHRlZVN0b3JhZ2VSb290UHJvb2ZzAAB+AAAABAAAAAQAAAB/AAAAgAAAAAwAAAAEAAAAgQAAAIIAAAA8AAAAaW52YWxpZCB0YWcgdmFsdWU6IDBpbnZhbGlkIGtleSB2YWx1ZTogANgwEAATAAAAdW5leHBlY3RlZCBlbmQgZ3JvdXAgdGFnYnVmZmVyIHVuZGVyZmxvd3JlY3Vyc2lvbiBsaW1pdCByZWFjaGVkaW52YWxpZCB2YXJpbnRpbnZhbGlkIHdpcmUgdHlwZSB2YWx1ZTogAABBMRAAGQAAAGNvbm5lY3Rpb25zY2hhbm5lbEVuZHNwb3J0c2NoYW5uZWxzY29tbWl0bWVudHNzZXF1ZW5jZXNhY2tzAIMAAAAEAAAABAAAAF4AAABLZXlWYWx1ZWludmFsaWQgdmFyaW50aW52YWxpZCB3aXJlIHR5cGU6ICAoZXhwZWN0ZWQgKQAAAMYxEAATAAAA2TEQAAsAAADkMRAAAQAAAGJ1ZmZlciB1bmRlcmZsb3cwMTIzNDU2Nzg5YWJjZGVmEDIQAAAAAAAvbml4L3N0b3JlL2VlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlLXZlbmRvci1jYXJnby1kZXBzL2MxOWI3YzZmOTIzYjU4MGFjMjU5MTY0YTg5ZjI1Nzc5ODRhZDVhYjA5ZWU5ZDU4M2I4ODhmOTM0YWRiYmU4ZDAvYnl0ZW9yZGVyLTEuNS4wL3NyYy9saWIucnMAAAAoMhAAmQAAAMUHAAASAAAAhgAAAAwAAAAEAAAAhwAAAIgAAAA8AAAACgAAAEAAAAAAAAAACAAAAEAAAAAAAAAAAgAAAIAAAAAAAAAAaW52YWxpZCBpY3MtMDI0IGlkZW50aWZpZXIgY2hhcmFjdGVyOiBgYBAzEAAnAAAANzMQAAEAAABhbHRhaXJiZWxsYXRyaXhjYXBlbGxhZWlwNDg0NE1pc3NpbmdGaWVsZAAAAIkAAAAEAAAABAAAAIoAAACJAAAABAAAAAQAAABeAAAASW52YWxpZExlbmd0aEZvcmtsaWIvdW5pb25sYWJzL3NyYy9ldGhlcmV1bS9jb25maWcucnMAAAClMxAAJAAAAJQAAAAdAAAApTMQACQAAACcAAAACwAAAOwzEAAAAAAAZnJvemVuX2hlaWdodGxhdGVzdF9oZWlnaHRyb290Zm9ya19wYXJhbWV0ZXJzdHJ1c3RfbGV2ZWxQdWJsaWNLZXkoMHgpAAAALDQQAAwAAAA4NBAAAQAAAE1pc3NpbmdGaWVsZI0AAAAEAAAABAAAAIoAAABSb290jQAAAAQAAAAEAAAAjgAAAE5leHRWYWxpZGF0b3JzSGFzaAAAjQAAAAQAAAAEAAAAXgAAAENoYWluSWQAjQAAAAQAAAAEAAAAjwAAAEZvcmtQYXJhbWV0ZXJzAACNAAAABAAAAAQAAACQAAAAR2VuZXNpc1ZhbGlkYXRvcnNSb290Q291bnRlcnBhcnR5Q29tbWl0bWVudFNsb3RJYmNDb250cmFjdEFkZHJlc3MAAACNAAAABAAAAAQAAACRAAAAjQAAAAQAAAAEAAAAkgAAAI0AAAAEAAAABAAAAFMAAABJbnZhbGlkTGVuZ3RoZXhwZWN0ZWQAAACNAAAADAAAAAQAAACTAAAAZm91bmRpbnZhbGlkIGxlbmd0aDogZXhwZWN0ZWQgLCBmb3VuZCAAAHk1EAAZAAAAkjUQAAgAAABFeGFjdExlc3NUaGFuQmV0d2VlbmV4YWN0bHkgwDUQAAgAAABsZXNzIHRoYW4gAADQNRAACgAAAGJldHdlZW4gKCwgAOQ1EAAJAAAA7TUQAAIAAAA4NBAAAQAAAClhY2NvdW50X3Byb29mMHgWNhAAAgAAAEgyNTYoAAAAIDYQAAUAAAAINhAAAQAAAEFnZ3JlZ2F0ZUVtcHR5UG9pbnRzSGFzaFRvRmllbGRFcnJvckludmFsaWRTZWNyZXRLZXlTaXplSW52YWxpZFNlY3JldEtleVJhbmdlSW52YWxpZFBvaW50SW52YWxpZEcxU2l6ZUludmFsaWRHMlNpemVJbnZhbGlkWUZsYWcAFAAAABAAAAAUAAAAFQAAAAwAAAANAAAADQAAAAwAAAA4NhAATDYQAFw2EABwNhAAhTYQAJE2EACeNhAAqzYQAC9uaXgvc3RvcmUvZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUtdmVuZG9yLWNhcmdvLWRlcHMvYzE5YjdjNmY5MjNiNTgwYWMyNTkxNjRhODlmMjU3Nzk4NGFkNWFiMDllZTlkNTgzYjg4OGY5MzRhZGJiZThkMC9ldGhhYmktMTguMC4wL3NyYy9lbmNvZGVyLnJzAPg2EACbAAAAKwAAABsAAAD4NhAAmwAAAKEAAAAaAAAAL25peC9zdG9yZS9lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZS12ZW5kb3ItY2FyZ28tZGVwcy9jMTliN2M2ZjkyM2I1ODBhYzI1OTE2NGE4OWYyNTc3OTg0YWQ1YWIwOWVlOWQ1ODNiODg4ZjkzNGFkYmJlOGQwL2V0aGFiaS0xOC4wLjAvc3JjL3V0aWwucnO0NxAAmAAAABAAAAAUAAAAAAAAAAEAAAAAAAAAgoAAAAAAAACKgAAAAAAAgACAAIAAAACAi4AAAAAAAAABAACAAAAAAIGAAIAAAACACYAAAAAAAICKAAAAAAAAAIgAAAAAAAAACYAAgAAAAAAKAACAAAAAAIuAAIAAAAAAiwAAAAAAAICJgAAAAAAAgAOAAAAAAACAAoAAAAAAAICAAAAAAAAAgAqAAAAAAAAACgAAgAAAAICBgACAAAAAgICAAAAAAACAAQAAgAAAAAAIgACAAAAAgC9uaXgvc3RvcmUvZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUtdmVuZG9yLWNhcmdvLWRlcHMvYzE5YjdjNmY5MjNiNTgwYWMyNTkxNjRhODlmMjU3Nzk4NGFkNWFiMDllZTlkNTgzYjg4OGY5MzRhZGJiZThkMC9ieXRlb3JkZXItMS41LjAvc3JjL2xpYi5ycwAAACA5EACZAAAAfwgAABIAAAAvbml4L3N0b3JlL2VlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlLXZlbmRvci1jYXJnby1kZXBzLzIxNjMxMTQwMmEyMjJhMGVjMGU2ODFmYjViNTRhNzJmNzliN2QyNTM0MTJmNjNiYWEzNzAzODBjMzhlZjk0YjUvdHJlZV9oYXNoLTAuNS4yL3NyYy9tZXJrbGVfaGFzaGVyLnJzAMw5EACjAAAA2AAAACEAAADMORAAowAAANkAAAAhAAAAzDkQAKMAAAANAQAAJwAAAC9uaXgvc3RvcmUvZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUtdmVuZG9yLWNhcmdvLWRlcHMvMjE2MzExNDAyYTIyMmEwZWMwZTY4MWZiNWI1NGE3MmY3OWI3ZDI1MzQxMmY2M2JhYTM3MDM4MGMzOGVmOTRiNS90cmVlX2hhc2gtMC41LjIvc3JjL2ltcGxzLnJzAKA6EACbAAAABwAAABEAAAAvbml4L3N0b3JlL2VlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlLXZlbmRvci1jYXJnby1kZXBzLzIxNjMxMTQwMmEyMjJhMGVjMGU2ODFmYjViNTRhNzJmNzliN2QyNTM0MTJmNjNiYWEzNzAzODBjMzhlZjk0YjUvdHJlZV9oYXNoLTAuNS4yL3NyYy9saWIucnMAAABMOxAAmQAAAEQAAAAgAAAAL25peC9zdG9yZS9lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZS12ZW5kb3ItY2FyZ28tZGVwcy9jMTliN2M2ZjkyM2I1ODBhYzI1OTE2NGE4OWYyNTc3OTg0YWQ1YWIwOWVlOWQ1ODNiODg4ZjkzNGFkYmJlOGQwL2xhenlfc3RhdGljLTEuNC4wL3NyYy9pbmxpbmVfbGF6eS5ycwD4OxAAowAAAB4AAAAQAAAAL25peC9zdG9yZS9lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZS12ZW5kb3ItY2FyZ28tZGVwcy9jMTliN2M2ZjkyM2I1ODBhYzI1OTE2NGE4OWYyNTc3OTg0YWQ1YWIwOWVlOWQ1ODNiODg4ZjkzNGFkYmJlOGQwL2RpZ2VzdC0wLjEwLjcvc3JjL2NvcmVfYXBpL2N0X3ZhcmlhYmxlLnJzrDwQAKgAAAB8AAAAJAAAAC9uaXgvc3RvcmUvZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUtdmVuZG9yLWNhcmdvLWRlcHMvYzE5YjdjNmY5MjNiNTgwYWMyNTkxNjRhODlmMjU3Nzk4NGFkNWFiMDllZTlkNTgzYjg4OGY5MzRhZGJiZThkMC9ibG9jay1idWZmZXItMC4xMC40L3NyYy9saWIucnMAAABkPRAAnQAAAKQAAAAgAAAAZD0QAJ0AAACuAAAAGgAAAGQ9EACdAAAAnQAAACUAAABkPRAAnQAAADgBAAAeAAAAZD0QAJ0AAAA1AQAAGAAAAC9uaXgvc3RvcmUvZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUtdmVuZG9yLWNhcmdvLWRlcHMvYzE5YjdjNmY5MjNiNTgwYWMyNTkxNjRhODlmMjU3Nzk4NGFkNWFiMDllZTlkNTgzYjg4OGY5MzRhZGJiZThkMC9zaGEyLTAuMTAuOC9zcmMvY29yZV9hcGkucnMAAFQ+EACaAAAAQgAAABMAAABn5glqha5nu3Lzbjw69U+lf1IOUYxoBZur2YMfGc3gWy9uaXgvc3RvcmUvZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUtdmVuZG9yLWNhcmdvLWRlcHMvYzE5YjdjNmY5MjNiNTgwYWMyNTkxNjRhODlmMjU3Nzk4NGFkNWFiMDllZTlkNTgzYjg4OGY5MzRhZGJiZThkMC9ieXRlb3JkZXItMS41LjAvc3JjL2xpYi5ycwAAACA/EACZAAAAxQcAABIAAAAvbml4L3N0b3JlL2VlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlLXZlbmRvci1jYXJnby1kZXBzL2MxOWI3YzZmOTIzYjU4MGFjMjU5MTY0YTg5ZjI1Nzc5ODRhZDVhYjA5ZWU5ZDU4M2I4ODhmOTM0YWRiYmU4ZDAvcHJpbWl0aXZlLXR5cGVzLTAuMTIuMi9zcmMvbGliLnJzMHgwAG5AEAABAAAAzD8QAKAAAAAmAAAAAQAAACA/EAAAAAAAbEAQAAIAAADMPxAAoAAAADwAAAABAAAASW52YWxpZENoYXJhY3RlckludmFsaWRMZW5ndGhSbHBJc1Rvb0JpZ1JscElzVG9vU2hvcnRSbHBFeHBlY3RlZFRvQmVMaXN0UmxwRXhwZWN0ZWRUb0JlRGF0YVJscEluY29ycmVjdExpc3RMZW5SbHBEYXRhTGVuV2l0aFplcm9QcmVmaXhSbHBMaXN0TGVuV2l0aFplcm9QcmVmaXhSbHBJbnZhbGlkSW5kaXJlY3Rpb25SbHBJbmNvbnNpc3RlbnRMZW5ndGhBbmREYXRhUmxwSW52YWxpZExlbmd0aEN1c3RvbQAAAJYAAAAEAAAABAAAAJcAAACYAAAABAAAAAQAAACZAAAAmAAAAAQAAAAEAAAAlwAAAERlY29kZUVycm9yZGVzY3JpcHRpb24AAJoAAAAMAAAABAAAAJsAAABzdGFjawAAAJwAAAAMAAAABAAAAJ0AAABWYXJpbnRTaXh0eUZvdXJCaXRMZW5ndGhEZWxpbWl0ZWRTdGFydEdyb3VwRW5kR3JvdXBUaGlydHlUd29CaXQABgAAAAwAAAAPAAAACgAAAAgAAAAMAAAAAEIQAAZCEAASQhAAIUIQACtCEAAzQhAAoAAAAKEAAACiAAAAowAAAKQAAAClAAAApgAAAKcAAACoAAAAqQAAAKoAAACrAAAArAAAAK0AAACuAAAAQ2Fubm90IHBhcnNlIHJlcXVlc3Q6ICBpbjogAKxCEAAWAAAAwkIQAAUAAABDYW5ub3QgcGFyc2UgcmVzcG9uc2U6IADYQhAAFwAAAMJCEAAFAAAATm8gc3VjaCBjb250cmFjdDogAAAAQxAAEgAAAE5vIHN1Y2ggY29kZTogAAAcQxAADgAAAFVua25vd24gc3lzdGVtIGVycm9yNEMQABQAAABVbnN1cHBvcnRlZCBxdWVyeSB0eXBlOiBQQxAAGAAAAFN5c3RlbUVycm9yaW52YWxpZF9yZXF1ZXN0aW52YWxpZF9yZXNwb25zZW5vX3N1Y2hfY29udHJhY3Rub19zdWNoX2NvZGV1bmtub3dudW5zdXBwb3J0ZWRfcmVxdWVzdHtDEAAPAAAAikMQABAAAACaQxAAEAAAAKpDEAAMAAAAtkMQAAcAAAC9QxAAEwAAAGVycm9ycmVxdWVzdABEEAAFAAAABUQQAAcAAAByZXNwb25zZQBEEAAFAAAAHEQQAAgAAABhZGRyNEQQAAQAAABjb2RlX2lkAEBEEAAHAAAAa2luZFBEEAAEAAAAU3lzdGVtUmVzdWx0b2tlcnJvcgBoRBAAAgAAAGpEEAAFAAAAbWlzc2luZyBmaWVsZCBgYIBEEAAPAAAAj0QQAAEAAABkdXBsaWNhdGUgZmllbGQgYAAAAKBEEAARAAAAj0QQAAEAAAB1bmtub3duIHZhcmlhbnQgYGAsIGV4cGVjdGVkIAAAAMREEAARAAAA1UQQAAwAAABgLCB0aGVyZSBhcmUgbm8gdmFyaWFudHPERBAAEQAAAPREEAAYAAAAuQAAAAwAAAAEAAAAugAAALsAAAA8AAAANEUQAAAAAABJbnZhbGlkIGhhc2ggZm9ybWF0ADxFEAATAAAASW52YWxpZCBzaWduYXR1cmUgZm9ybWF0WEUQABgAAABJbnZhbGlkIHJlY292ZXJ5IHBhcmFtZXRlci4gU3VwcG9ydGVkIHZhbHVlczogMCBhbmQgMS4AAHhFEAA2AAAAVW5rbm93biBlcnJvcjogALhFEAAPAAAAVmVyaWZpY2F0aW9uIGVycm9yOiDQRRAAFAAAAFJlY292ZXIgcHVia2V5IGVycm9yOiAAAOxFEAAWAAAAR2VuZXJpYyBlcnJvcjogAAxGEAAPAAAASW52YWxpZCBCYXNlNjQgc3RyaW5nOiAAJEYQABcAAABJbnZhbGlkIGRhdGEgc2l6ZTogZXhwZWN0ZWQ9IGFjdHVhbD1ERhAAHAAAAGBGEAAIAAAASW52YWxpZCBoZXggc3RyaW5nOiB4RhAAFAAAAENhbm5vdCBkZWNvZGUgVVRGOCBieXRlcyBpbnRvIHN0cmluZzogAACURhAAJgAAACBub3QgZm91bmQAADRFEAAAAAAAxEYQAAoAAABFcnJvciBwYXJzaW5nIGludG8gdHlwZSA6IAAA4EYQABgAAAD4RhAAAgAAAEVycm9yIHNlcmlhbGl6aW5nIHR5cGUgAAxHEAAXAAAA+EYQAAIAAABPdmVyZmxvdzogAAA0RxAACgAAAERpdmlkZSBieSB6ZXJvOiBIRxAAEAAAAENvbnZlcnNpb24gZXJyb3I6IAAAYEcQABIAAABBZGRTdWJNdWxQb3dTaHJTaGxDYW5ub3QgIHdpdGggIGFuZCCORxAABwAAAJVHEAAGAAAAm0cQAAUAAABDYW5ub3QgZGl2aWRlICBieSB6ZXJvAAC4RxAADgAAAMZHEAAIAAAAQ29udHJhY3RSZXN1bHRva2Vycm9yAAAA7kcQAAIAAADwRxAABQAAAHxHEAB/RxAAgkcQAIVHEACIRxAAi0cQAGNvc213YXNtX3N0ZDo6cmVzdWx0czo6c3lzdGVtX3Jlc3VsdDo6U3lzdGVtUmVzdWx0PGNvc213YXNtX3N0ZDo6cmVzdWx0czo6Y29udHJhY3RfcmVzdWx0OjpDb250cmFjdFJlc3VsdDxjb3Ntd2FzbV9zdGQ6OmJpbmFyeTo6QmluYXJ5Pj4BAABBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsv/////////////////////////////////////////////////////////z7///8/NDU2Nzg5Ojs8Pf////////8AAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGf///////xobHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIz/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////2ludmFsaWQgYmFzZTY0OiAA60kQABAAAABlcnJvcnJlcXVlc3RyZXNwb25zZWFkZHJjb2RlX2lka2luZAC9AAAADAAAAAQAAAC+AAAAvwAAADwAAADAAAAAAAAAAAEAAADBAAAAwgAAAMIAAABhZGRyX3ZhbGlkYXRlIGVycm9yZWQ6IABYShAAFwAAAGlucHV0IHRvbyBsb25nIGZvciBhZGRyX3ZhbGlkYXRlYWRkcl9jYW5vbmljYWxpemUgZXJyb3JlZDogAJhKEAAbAAAAaW5wdXQgdG9vIGxvbmcgZm9yIGFkZHJfY2Fub25pY2FsaXplYWRkcl9odW1hbml6ZSBlcnJvcmVkOiAA4EoQABcAAABCYXRjaCBlcnJvcgAASxAACwAAAEdlbmVyaWMgZXJyb3IAAAAUSxAADQAAAEludmFsaWQgaGFzaCBmb3JtYXQALEsQABMAAABJbnZhbGlkIHNpZ25hdHVyZSBmb3JtYXRISxAAGAAAAEludmFsaWQgcHVibGljIGtleSBmb3JtYXQAAABoSxAAGQAAAEludmFsaWQgcmVjb3ZlcnkgcGFyYW1ldGVyLiBTdXBwb3J0ZWQgdmFsdWVzOiAwIGFuZCAxLgAAjEsQADYAAABVbmtub3duIGVycm9yOiAAzEsQAA8AAABCdWZmZXIgaXMgZnVsbAAA5EsQAA4AAADkSxAAAAAAAG51bGwITBAAAAAAAENvbnRyb2wgY2hhcmFjdGVyIGZvdW5kIGluIHN0cmluZy5FT0Ygd2hpbGUgcGFyc2luZyBhIGxpc3QuRU9GIHdoaWxlIHBhcnNpbmcgYW4gb2JqZWN0LkVPRiB3aGlsZSBwYXJzaW5nIGEgc3RyaW5nLkVPRiB3aGlsZSBwYXJzaW5nIGEgSlNPTiB2YWx1ZS5FeHBlY3RlZCB0aGlzIGNoYXJhY3RlciB0byBiZSBhIGAnOidgLkV4cGVjdGVkIGEgaGlnaCBzdXJyb2dhdGUgKEQ4MDDigJNEQkZGKS5FeHBlY3RlZCB0aGlzIGNoYXJhY3RlciB0byBiZSBlaXRoZXIgYSBgJywnYCBvcmEgYCddJ2AuRXhwZWN0ZWQgYSBsb3cgc3Vycm9nYXRlIChEQzAw4oCTREZGRikuRXhwZWN0ZWQgdGhpcyBjaGFyYWN0ZXIgdG8gYmUgZWl0aGVyIGEgYCcsJ2Agb3IgYSBgJ30nYC5FeHBlY3RlZCB0byBwYXJzZSBlaXRoZXIgYSBgdHJ1ZWAsIGBmYWxzZWAsIG9yIGEgYG51bGxgLkV4cGVjdGVkIHRoaXMgY2hhcmFjdGVyIHRvIHN0YXJ0IGEgSlNPTiB2YWx1ZS5JbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZS5JbnZhbGlkIG51bWJlci5JbnZhbGlkIHR5cGVJbnZhbGlkIHVuaWNvZGUgY29kZSBwb2ludC5PYmplY3Qga2V5IGlzIG5vdCBhIHN0cmluZy5Gb3VuZCBhIGxvbmUgc3Vycm9nYXRlLCB3aGljaCBjYW4gZXhpc3QgaW4gSlNPTiBidXQgY2Fubm90IGJlIGVuY29kZWQgdG8gVVRGLTguSlNPTiBoYXMgbm9uLXdoaXRlc3BhY2UgdHJhaWxpbmcgY2hhcmFjdGVycyBhZnRlciB0aGUgdmFsdWUuSlNPTiBoYXMgYSBjb21tYSBhZnRlciB0aGUgbGFzdCB2YWx1ZSBpbiBhbiBhcnJheSBvciBtYXAuL25peC9zdG9yZS9lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZS12ZW5kb3ItY2FyZ28tZGVwcy9jMTliN2M2ZjkyM2I1ODBhYzI1OTE2NGE4OWYyNTc3OTg0YWQ1YWIwOWVlOWQ1ODNiODg4ZjkzNGFkYmJlOGQwL2Jhc2U2NC0wLjIxLjUvc3JjL2VuZ2luZS9nZW5lcmFsX3B1cnBvc2UvZGVjb2RlLnJzAAAAGE8QALEAAAA2AQAAEgAAABhPEACxAAAAPQEAABEAAABJbnZhbGlkIGJ5dGUgLCBvZmZzZXQgLgDsTxAADQAAAPlPEAAJAAAAAlAQAAEAAABFbmNvZGVkIHRleHQgY2Fubm90IGhhdmUgYSA2LWJpdCByZW1haW5kZXIuABxQEAArAAAASW52YWxpZCBsYXN0IHN5bWJvbCBQUBAAFAAAAPlPEAAJAAAAAlAQAAEAAABJbnZhbGlkIHBhZGRpbmcAfFAQAA8AQZyhwQAL+gMIAAAAEAAAABgAAAAAAAAAIAAAACgAAAAwAAAAYAAAALhQEAABAAAAuFAQAAEAAABgIG9yIGAAALhQEAABAAAAzFAQAAYAAAC4UBAAAQAAAG9uZSBvZiAA7FAQAAcAAAAsIAAA/FAQAAIAAADHAAAADAAAAAQAAADIAAAAyQAAADwAAADvv70weDAwMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYxNzE4MTkyMDIxMjIyMzI0MjUyNjI3MjgyOTMwMzEzMjMzMzQzNTM2MzczODM5NDA0MTQyNDM0NDQ1NDY0NzQ4NDk1MDUxNTI1MzU0NTU1NjU3NTg1OTYwNjE2MjYzNjQ2NTY2Njc2ODY5NzA3MTcyNzM3NDc1NzY3Nzc4Nzk4MDgxODI4Mzg0ODU4Njg3ODg4OTkwOTE5MjkzOTQ5NTk2OTc5ODk5AAAAywAAAAwAAAAEAAAAzAAAAM0AAADOAAAAcGFuaWNrZWQgYXQgOgoBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB2KXBAAszAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMDAwMDAwMDAwMDAwMDAwQEBAQEAEGWpsEAC/IJMDEyMzQ1Njc4OWFiY2RlZlx1ewAAAAADAACDBCAAkQVgAF0ToAASFyAfDCBgH+8soCsqMCAsb6bgLAKoYC0e+2AuAP4gNp7/YDb9AeE2AQohNyQN4TerDmE5LxihOTAcYUjzHqFMQDRhUPBqoVFPbyFSnbyhUgDPYVNl0aFTANohVADg4VWu4mFX7OQhWdDooVkgAO5Z8AF/WgBwAAcALQEBAQIBAgEBSAswFRABZQcCBgICAQQjAR4bWws6CQkBGAQBCQEDAQUrAzwIKhgBIDcBAQEECAQBAwcKAh0BOgEBAQIECAEJAQoCGgECAjkBBAIEAgIDAwEeAgMBCwI5AQQFAQIEARQCFgYBAToBAQIBBAgBBwMKAh4BOwEBAQwBCQEoAQMBNwEBAwUDAQQHAgsCHQE6AQIBAgEDAQUCBwILAhwCOQIBAQIECAEJAQoCHQFIAQQBAgMBAQgBUQECBwwIYgECCQsHSQIbAQEBAQE3DgEFAQIFCwEkCQFmBAEGAQICAhkCBAMQBA0BAgIGAQ8BAAMAAx0CHgIeAkACAQcIAQILCQEtAwEBdQIiAXYDBAIJAQYD2wICAToBAQcBAQEBAggGCgIBMB8xBDAHAQEFASgJDAIgBAICAQM4AQECAwEBAzoIAgKYAwENAQcEAQYBAwLGQAABwyEAA40BYCAABmkCAAQBCiACUAIAAQMBBAEZAgUBlwIaEg0BJggZCy4DMAECBAICJwFDBgICAgIMAQgBLwEzAQEDAgIFAgEBKgIIAe4BAgEEAQABABAQEAACAAHiAZUFAAMBAgUEKAMEAaUCAAQAAlADRgsxBHsBNg8pAQICCgMxBAICBwE9AyQFAQg+AQwCNAkKBAIBXwMCAQECBgECAZ0BAwgVAjkCAQEBARYBDgcDBcMIAgMBARcBUQECBgEBAgEBAgEC6wECBAYCAQIbAlUIAgEBAmoBAQECBgEBZQMCBAEFAAkBAvUBCgIBAQQBkAQCAgQBIAooBgIECAEJBgIDLg0BAgAHAQYBAVIWAgcBAgECegYDAQECAQcBAUgCAwEBAQACCwI0BQUBAQEAAQYPAAU7BwABPwRRAQACAC4CFwABAQMEBQgIAgceBJQDADcEMggBDgEWBQEPAAcBEQIHAQIBBWQBoAcAAT0EAAQAB20HAGCA8AApICAgICB7ICwgOiAgewosCn0gfSgoCiwKWwAAAM8AAAAEAAAABAAAAGoAAABdAAAAzwAAAAwAAAAEAAAAzAAAAM0AAADOAAAAY2Fubm90IHBhcnNlIGludGVnZXIgZnJvbSBlbXB0eSBzdHJpbmdpbnZhbGlkIGRpZ2l0IGZvdW5kIGluIHN0cmluZ251bWJlciB0b28gbGFyZ2UgdG8g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" + } + ], + "initial_deposit": [], + "proposer": "union1g9fqjzcvjhy53mwyq7v42c87a49fm7q7rdeh8c", + "metadata": "", + "title": "eth mainnet lc", + "summary": "", + "expedited": false + } + ], + "memo": "", + "timeout_height": "0", + "extension_options": [], + "non_critical_extension_options": [] + }, + "auth_info": { + "signer_infos": [], + "fee": { "amount": [], "gas_limit": "5000000", "payer": "", "granter": "" }, + "tip": null + }, + "signatures": [] +} diff --git a/tools/generate-rust-sol-bindings/generate-rust-sol-bindings.nix b/tools/generate-rust-sol-bindings/generate-rust-sol-bindings.nix index 00f2f38f3b..fd0760e41e 100644 --- a/tools/generate-rust-sol-bindings/generate-rust-sol-bindings.nix +++ b/tools/generate-rust-sol-bindings/generate-rust-sol-bindings.nix @@ -28,6 +28,10 @@ ${generate-rust-sol-bindings-crate}/bin/generate-rust-sol-bindings \ --cratedir ./out/ \ ${self'.packages.evm-contracts}/out/IBCHandler.sol/IBCHandler.json \ + ${self'.packages.evm-contracts}/out/IBCClient.sol/IBCClient.json \ + ${self'.packages.evm-contracts}/out/IBCConnection.sol/IBCConnection.json \ + ${self'.packages.evm-contracts}/out/IBCChannelHandshake.sol/IBCChannelHandshake.json \ + ${self'.packages.evm-contracts}/out/IBCPacket.sol/IBCPacket.json \ ${self'.packages.evm-contracts}/out/Glue.sol/Glue.json \ ${self'.packages.evm-contracts}/out/DevnetOwnableIBCHandler.sol/DevnetOwnableIBCHandler.json \ ${self'.packages.external-evm-contracts}/out/ERC20.sol/ERC20.json \ diff --git a/ucli/src/main.rs b/ucli/src/main.rs index 3d965203c5..98174df1af 100644 --- a/ucli/src/main.rs +++ b/ucli/src/main.rs @@ -144,7 +144,7 @@ async fn handle_ucs_balance( )); let relay = UCS01Relay::new(contract_address, signer_middleware.clone()); - let denom = relay.denom_to_address(denom).await.unwrap(); + let denom = relay.get_denom_address(denom).await.unwrap(); println!("Corresponding ERC20 address: {}", denom); let erc_contract = erc20::ERC20::new(denom, signer_middleware.clone()); @@ -183,7 +183,7 @@ async fn handle_transfer( )); let relay = UCS01Relay::new(relay_address, signer_middleware.clone()); - let denom = relay.denom_to_address(denom).await.unwrap(); + let denom = relay.get_denom_address(denom).await.unwrap(); println!("Address is: {}", denom); let erc_contract = erc20::ERC20::new(denom, signer_middleware.clone()); diff --git a/uniond/go.mod b/uniond/go.mod index 1725577daf..d7081d5159 100644 --- a/uniond/go.mod +++ b/uniond/go.mod @@ -189,6 +189,7 @@ require ( github.com/tendermint/go-amino v0.16.0 // indirect github.com/thomaso-mirodin/intmath v0.0.0-20160323211736-5dc6d854e46e // indirect github.com/tidwall/btree v1.7.0 // indirect + github.com/tunabay/go-bitarray v1.3.1 // indirect github.com/ulikunitz/xz v0.5.11 // indirect github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v0.14.3 // indirect @@ -219,12 +220,12 @@ require ( ) replace ( - github.com/cometbft/cometbft => github.com/unionlabs/cometbls v0.0.0-20240111183309-e159e964fa07 + github.com/cometbft/cometbft => github.com/unionlabs/cometbls v0.0.0-20240125180347-5b33e3460932 github.com/consensys/gnark => github.com/consensys/gnark v0.9.1-0.20231013131835-4ebcccd9c0a8 // Fork of gnark crypto until https://github.com/ConsenSys/gnark-crypto/pull/314 is merged github.com/consensys/gnark-crypto => github.com/unionlabs/gnark-crypto v0.0.0-20231016072529-15c0507b6578 - github.com/cosmos/cosmos-sdk => github.com/unionlabs/cosmos-sdk v0.0.0-20240111212621-d8e5bd6e5f86 + github.com/cosmos/cosmos-sdk => github.com/unionlabs/cosmos-sdk v0.0.0-20240125200611-e1b8b82c712b github.com/cosmos/ibc-go/modules/light-clients/08-wasm => github.com/unionlabs/ibc-go/modules/light-clients/08-wasm v0.0.0-20231219091832-0947f2e3d1aa github.com/cosmos/ibc-go/v8 => github.com/unionlabs/ibc-go/v8 v8.0.0-20231219091832-0947f2e3d1aa diff --git a/uniond/go.sum b/uniond/go.sum index e514417351..8aebdb71bf 100644 --- a/uniond/go.sum +++ b/uniond/go.sum @@ -1070,6 +1070,8 @@ github.com/thomaso-mirodin/intmath v0.0.0-20160323211736-5dc6d854e46e/go.mod h1: github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tunabay/go-bitarray v1.3.1 h1:5q38uagXhrdzT0LjKWBB5ILO56fptGrJG8750171cAo= +github.com/tunabay/go-bitarray v1.3.1/go.mod h1:k6MncM9mWklQRcVy5Xe9RYixeDd9b3H0xqtgiANJFF4= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= @@ -1080,10 +1082,10 @@ github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZ github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/unionlabs/cometbls v0.0.0-20240111183309-e159e964fa07 h1:y2q9sWscXNgo0w/iDdnRID3Fd2s4Mbdcn4poDwwSfpI= -github.com/unionlabs/cometbls v0.0.0-20240111183309-e159e964fa07/go.mod h1:3H1gcLEVOQZbPwdH8gyv4UzwHtEawNgcnytglkCQVOQ= -github.com/unionlabs/cosmos-sdk v0.0.0-20240111212621-d8e5bd6e5f86 h1:IceIrcM+/hzbQAbMK2NFhPAG242s3m5jC0ymCGirWZc= -github.com/unionlabs/cosmos-sdk v0.0.0-20240111212621-d8e5bd6e5f86/go.mod h1:7APxtjR0pTYrLeTG/iMp77at8y8BoUttNGjMkxQUAVo= +github.com/unionlabs/cometbls v0.0.0-20240125180347-5b33e3460932 h1:ecEdIXw7w3I4JEpNoNMwpHu4Iy6PRgGl++uWQIcPYBw= +github.com/unionlabs/cometbls v0.0.0-20240125180347-5b33e3460932/go.mod h1:ZN5TH4WzX9x+hgcipytd0WghjGcCBy6M8YVgnHOCd/0= +github.com/unionlabs/cosmos-sdk v0.0.0-20240125200611-e1b8b82c712b h1:eUv6PZDYQaO4vFVGYXlufFjiDq8UnZtmoVyBen+uzyo= +github.com/unionlabs/cosmos-sdk v0.0.0-20240125200611-e1b8b82c712b/go.mod h1:iEaeKpRLz88bVPyU7Zk0WODyY05qHmR33vNsFaJ4lP8= github.com/unionlabs/gnark-crypto v0.0.0-20231016072529-15c0507b6578 h1:Owzup0XvshGNHgS1s0xUI/mZM+fPvTT7dLg7P0cT2vQ= github.com/unionlabs/gnark-crypto v0.0.0-20231016072529-15c0507b6578/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= github.com/unionlabs/ibc-go/modules/light-clients/08-wasm v0.0.0-20231219091832-0947f2e3d1aa h1:pzXp42whoLAzvNkdJHPnWPzWAN2iDtqAFoN/BksxmAE= diff --git a/uniond/vendor/github.com/cometbft/cometbft/crypto/bn254/bn254.go b/uniond/vendor/github.com/cometbft/cometbft/crypto/bn254/bn254.go index 1f641e7efe..597ba014f0 100644 --- a/uniond/vendor/github.com/cometbft/cometbft/crypto/bn254/bn254.go +++ b/uniond/vendor/github.com/cometbft/cometbft/crypto/bn254/bn254.go @@ -13,7 +13,6 @@ import ( "github.com/consensys/gnark-crypto/ecc/bn254" "github.com/consensys/gnark-crypto/ecc/bn254/fp" "github.com/consensys/gnark-crypto/ecc/bn254/fr" - "github.com/consensys/gnark-crypto/ecc/bn254/fr/mimc" bls254 "github.com/consensys/gnark-crypto/ecc/bn254/signature/bls" "github.com/cometbft/cometbft/crypto" @@ -28,18 +27,20 @@ const ( sizeFp = fp.Bytes sizePublicKey = sizeFp sizePrivateKey = sizeFr + sizePublicKey - XHashToScalarFieldPrefix = 0 - YHashToScalarFieldPrefix = 1 PrivKeyName = "tendermint/PrivKeyBn254" PubKeyName = "tendermint/PubKeyBn254" KeyType = "bn254" + CometblsSigDST = "COMETBLS_SIG_BN254G2_XMD:MIMC256" + CometblsHMACKey = "CometBLS" ) -var G1Gen bn254.G1Affine -var G2Gen bn254.G2Affine -var G2Cofactor big.Int +var ( + G1Gen bn254.G1Affine + G1GenNeg bn254.G1Affine + G2Gen bn254.G2Affine -var Hash = sha3.NewLegacyKeccak256 + Hash = sha3.NewLegacyKeccak256 +) func init() { cjson.RegisterType(PubKey{}, PubKeyName) @@ -47,13 +48,7 @@ func init() { _, _, G1Gen, G2Gen = bn254.Generators() - // BN254 cofactor - value, err := new(big.Int).SetString("30644e72e131a029b85045b68181585e06ceecda572a2489345f2299c0f9fa8d", 16) - if !err { - panic("Cannot build cofactor") - } - - G2Cofactor.Set(value) + G1GenNeg.Neg(&G1Gen) } var _ crypto.PrivKey = PrivKey{} @@ -67,20 +62,20 @@ func (privKey PrivKey) Bytes() []byte { } func (privKey PrivKey) Sign(msg []byte) ([]byte, error) { - s := new(big.Int) - s = s.SetBytes(privKey) + var s big.Int + s.SetBytes(privKey) hm := HashToG2(msg) var p bn254.G2Affine - p.ScalarMultiplication(&hm, s) + p.ScalarMultiplication(&hm, &s) compressedSig := p.Bytes() return compressedSig[:], nil } func (privKey PrivKey) PubKey() crypto.PubKey { - s := new(big.Int) + var s big.Int s.SetBytes(privKey) var pk bn254.G1Affine - pk.ScalarMultiplication(&G1Gen, s) + pk.ScalarMultiplication(&G1Gen, &s) pkBytes := pk.Bytes() return PubKey(pkBytes[:]) } @@ -123,13 +118,13 @@ func (pubKey PubKey) Bytes() []byte { } func (pubKey PubKey) VerifySignature(msg []byte, sig []byte) bool { - hashedMessage := HashToG2(msg) - var public bn254.G1Affine - _, err := public.SetBytes(pubKey) + hm := HashToG2(msg) + var pk bn254.G1Affine + _, err := pk.SetBytes(pubKey) if err != nil { return false } - if public.IsInfinity() { + if pk.IsInfinity() { return false } @@ -142,10 +137,15 @@ func (pubKey PubKey) VerifySignature(msg []byte, sig []byte) bool { return false } - var G1BaseNeg bn254.G1Affine - G1BaseNeg.Neg(&G1Gen) - - valid, err := bn254.PairingCheck([]bn254.G1Affine{G1BaseNeg, public}, []bn254.G2Affine{signature, hashedMessage}) + valid, err := bn254.PairingCheck( + []bn254.G1Affine{ + G1GenNeg, + pk, + }, + []bn254.G2Affine{ + signature, + hm, + }) if err != nil { return false } @@ -167,35 +167,27 @@ func (pubKey PubKey) Equals(other crypto.PubKey) bool { return false } -func GenPrivKey() PrivKey { - secret, err := bls254.GenerateKey(rand.Reader) +func GenPrivKeyFromSeed(seed []byte) PrivKey { + reader := bytes.NewReader(seed) + + secret, err := bls254.GenerateKey(reader) if err != nil { panic(err) } return PrivKey(secret.Bytes()) } -// Naive scalar multiplication used for cofactor clearing, basic double-and-add -func nativeNaiveScalarMul(p bn254.G2Affine, s *big.Int) bn254.G2Affine { - // initialize result point to infinity - var result bn254.G2Affine - result.X.SetZero() - result.Y.SetZero() - bits := s.BitLen() - // iterate over binary digits of s and double the current result point at each iteration - for i := bits - 1; i >= 0; i-- { - result.Add(&result, &result) - // if current binary digit is 1, add the original point p to the result - if s.Bit(i) == 1 { - result.Add(&result, &p) - } +func GenPrivKey() PrivKey { + secret, err := bls254.GenerateKey(rand.Reader) + if err != nil { + panic(err) } - return result + return PrivKey(secret.Bytes()) } -// TODO: link union whitepaper 4.1.1, equation (1), H_p +// TODO: link union whitepaper 4.1.1, equation (1), H_r func HashToField(msg []byte) fr.Element { - hmac := hmac.New(Hash, []byte("CometBLS")) + hmac := hmac.New(Hash, []byte(CometblsHMACKey)) hmac.Write(msg) modMinusOne := new(big.Int).Sub(fr.Modulus(), big.NewInt(1)) num := new(big.Int).SetBytes(hmac.Sum(nil)) @@ -214,93 +206,21 @@ func HashToField(msg []byte) fr.Element { return element } -// TODO: link union whitepaper 4.1.1, H_{p^2} -func HashToField2(msg []byte) (fr.Element, fr.Element) { - x := HashToField(append([]byte{XHashToScalarFieldPrefix}, msg...)) - y := HashToField(append([]byte{YHashToScalarFieldPrefix}, msg...)) - return x, y -} - // TODO: link union whitepaper 4.1.1, M func HashToG2(msg []byte) bn254.G2Affine { - x, y := HashToField2(msg) - point := bn254.MapToG2(bn254.E2{ - A0: *new(fp.Element).SetBigInt(x.BigInt(new(big.Int))), - A1: *new(fp.Element).SetBigInt(y.BigInt(new(big.Int))), - }) - // Must not be zero - if point.IsInfinity() { - panic("Point is zero") - } - return point -} - -type MerkleLeaf struct { - VotingPower int64 - ShiftedX fr.Element - ShiftedY fr.Element - MsbX uint8 - MsbY uint8 -} - -func NewMerkleLeaf(pubKey bn254.G1Affine, votingPower int64) (MerkleLeaf, error) { - x := pubKey.X.BigInt(new(big.Int)) - y := pubKey.Y.BigInt(new(big.Int)) - msbX := x.Bit(253) - msbY := y.Bit(253) - var frX, frY fr.Element - x.SetBit(x, 253, 0) - var padded [32]byte - x.FillBytes(padded[:]) - err := frX.SetBytesCanonical(padded[:]) - if err != nil { - return MerkleLeaf{}, err - } - y.SetBit(y, 253, 0) - y.FillBytes(padded[:]) - err = frY.SetBytesCanonical(padded[:]) - if err != nil { - return MerkleLeaf{}, err - } - return MerkleLeaf{ - VotingPower: votingPower, - ShiftedX: frX, - ShiftedY: frY, - MsbX: uint8(msbX), - MsbY: uint8(msbY), - }, nil -} - -// mimc(X, Xmsb, Y, Ymsb, power) -func (l MerkleLeaf) Hash() ([]byte, error) { - frXBytes := l.ShiftedX.Bytes() - frYBytes := l.ShiftedY.Bytes() - mimc := mimc.NewMiMC() - _, err := mimc.Write(frXBytes[:]) + img := HashToField(msg) + var imgBytes [32]byte + fr.LittleEndian.PutElement(&imgBytes, img) + var dst fr.Element + dst.SetBytes([]byte(CometblsSigDST)) + var dstBytes [32]byte + fr.LittleEndian.PutElement(&dstBytes, dst) + point, err := HashToG2MiMC(imgBytes[:], dstBytes[:]) if err != nil { - return nil, err - } - _, err = mimc.Write(frYBytes[:]) - if err != nil { - return nil, err - } - var padded [32]byte - big.NewInt(int64(l.MsbX)).FillBytes(padded[:]) - _, err = mimc.Write(padded[:]) - if err != nil { - return nil, err - } - big.NewInt(int64(l.MsbY)).FillBytes(padded[:]) - _, err = mimc.Write(padded[:]) - if err != nil { - return nil, err + panic("impossible; qed;") } - var powerBytes big.Int - powerBytes.SetUint64(uint64(l.VotingPower)) - powerBytes.FillBytes(padded[:]) - _, err = mimc.Write(padded[:]) - if err != nil { - return nil, err + if point.IsInfinity() || !point.IsOnCurve() || !point.IsInSubGroup() { + panic("impossible; qed;") } - return mimc.Sum(nil), nil + return point } diff --git a/uniond/vendor/github.com/cometbft/cometbft/crypto/bn254/g2.go b/uniond/vendor/github.com/cometbft/cometbft/crypto/bn254/g2.go new file mode 100644 index 0000000000..26c618dc09 --- /dev/null +++ b/uniond/vendor/github.com/cometbft/cometbft/crypto/bn254/g2.go @@ -0,0 +1,184 @@ +package bn254 + +import ( + "errors" + "math/big" + "slices" + + curve "github.com/consensys/gnark-crypto/ecc/bn254" + bn254fp "github.com/consensys/gnark-crypto/ecc/bn254/fp" + bn254fr "github.com/consensys/gnark-crypto/ecc/bn254/fr" + "github.com/consensys/gnark-crypto/ecc/bn254/fr/mimc" + "github.com/tunabay/go-bitarray" +) + +// BN254G2_XMD:MIMC-256_SVDW +// HashToG2 hashes a message to a point on the G2 curve using the SVDW map. +// Slower than EncodeToG2, but usable as a random oracle. +// dst stands for "domain separation tag", a string unique to the construction using the hash function +// https://www.ietf.org/archive/id/draft-irtf-cfrg-hash-to-curve-16.html#roadmap +func HashToG2MiMC(msg, dst []byte) (curve.G2Affine, error) { + u, err := HashToFieldMiMC(msg, dst) + if err != nil { + return curve.G2Affine{}, err + } + Q0 := curve.MapToCurve2(&curve.E2{ + A0: u[0], + A1: u[1], + }) + Q1 := curve.MapToCurve2(&curve.E2{ + A0: u[2], + A1: u[3], + }) + var _Q0, _Q1 curve.G2Jac + _Q0.FromAffine(&Q0) + _Q1.FromAffine(&Q1).AddAssign(&_Q0) + _Q1.ClearCofactor(&_Q1) + Q1.FromJacobian(&_Q1) + if !Q1.IsOnCurve() || Q1.IsInfinity() || !Q1.IsInSubGroup() { + panic("impossible") + } + return Q1, nil +} + +// Hash msg to 4 prime field elements (actually bound to scalar elements). +// https://tools.ietf.org/html/draft-irtf-cfrg-hash-to-curve-06#section-5.2 +func HashToFieldMiMC(msg, dst []byte) ([4]bn254fp.Element, error) { + // 128 bits of security + // L = ceil((ceil(log2(p)) + k) / 8), where k is the security parameter = 128 + const Bytes = 1 + (254-1)/8 + const L = 16 + Bytes + + pseudoRandomBytes, err := ExpandMsgXmdMiMC(msg, dst, 4*L) + if err != nil { + return [4]bn254fp.Element{}, err + } + + var res [4]bn254fp.Element + for i := 0; i < 4; i++ { + elemBytes := pseudoRandomBytes[i*L : (i+1)*L] + slices.Reverse(elemBytes) + res[i].SetBytes(elemBytes) + } + + return res, nil +} + +// BN254G2_XMD +// This is not a general implementation as the input/output length are fixed. +// https://tools.ietf.org/html/draft-irtf-cfrg-hash-to-curve-06#section-5 +// https://tools.ietf.org/html/rfc8017#section-4.1 (I2OSP/O2ISP) +// NOTE: block size is 256 bits, we could use 253 bits block to avoid the modulus, not sure if this would increase security +func ExpandMsgXmdMiMC(msg, dst []byte, lenInBytes int) ([]byte, error) { + h := mimc.NewMiMC() + + ell := (lenInBytes + h.Size() - 1) / h.Size() // ceil(len_in_bytes / b_in_bytes) + if ell > 255 { + return nil, errors.New("invalid lenInBytes") + } + if len(dst) > 255 { + return nil, errors.New("invalid domain size (>255 bytes)") + } + + block := bitarray.New() + writeU8 := func(b byte) { + block = block.Append(bitarray.NewBufferFromByteSlice([]byte{b}).BitArray().Reverse()) + } + write := func(bs []byte) { + for _, b := range bs { + writeU8(b) + } + } + sum := func() []byte { + // zero pad block + if block.Len()%256 != 0 { + block = block.Append(bitarray.NewZeroFilled(256 - block.Len()%256)) + } + data := []byte{} + for i := 0; i < block.Len(); i += 256 { + slice := block.Slice(i, i+256) + bits := big.NewInt(0) + c := big.NewInt(1) + for j := 0; j < 256; j++ { + bits = bits.Add(bits, new(big.Int).Mul(c, big.NewInt(int64(slice.BitAt(j))))) + c.Lsh(c, 1) + } + bits.Mod(bits, bn254fr.Modulus()) + bitsB := make([]byte, 32) + bits.FillBytes(bitsB) + data = append(data, bitsB...) + } + _, err := h.Write(data) + if err != nil { + panic(err) + } + block = bitarray.New() + s := h.Sum(nil) + h.Reset() + slices.Reverse(s) + return s + } + + // Z_pad = I2OSP(0, r_in_bytes) + write_Z_pad := func() { + write(make([]byte, h.BlockSize())) + } + + write_msg := func() { + write(msg) + } + + // l_i_b_str = I2OSP(len_in_bytes, 2) + write_l_i_b_str := func() { + writeU8(uint8(lenInBytes >> 8)) + writeU8(uint8(lenInBytes)) + } + + // DST_prime = DST ∥ I2OSP(len(DST), 1) + write_DST_prime := func() { + write(dst) + writeU8(uint8(len(dst))) + } + + // Z_pad = I2OSP(0, r_in_bytes) + // l_i_b_str = I2OSP(len_in_bytes, 2) + // DST_prime = DST ∥ I2OSP(len(DST), 1) + // b₀ = H(Z_pad ∥ msg ∥ l_i_b_str ∥ I2OSP(0, 1) ∥ DST_prime) + write_Z_pad() + write_msg() + write_l_i_b_str() + writeU8(byte(0)) + write_DST_prime() + b0 := sum() + + // b₁ = H(b₀ ∥ I2OSP(1, 1) ∥ DST_prime) + write(b0) + writeU8(byte(1)) + write_DST_prime() + b1 := sum() + + res := make([]byte, lenInBytes) + copy(res[:h.Size()], b1) + + for i := 2; i <= ell; i++ { + // b_i = H(strxor(b₀, b_(i - 1)) ∥ I2OSP(i, 1) ∥ DST_prime) + strxor := make([]byte, h.Size()) + for j := 0; j < h.Size(); j++ { + strxor[j] = b0[j] ^ b1[j] + } + + write(strxor) + writeU8(byte(i)) + write_DST_prime() + b1 = sum() + copy(res[h.Size()*(i-1):min(h.Size()*i, len(res))], b1) + } + return res, nil +} + +func min(a, b int) int { + if a < b { + return a + } + return b +} diff --git a/uniond/vendor/github.com/cometbft/cometbft/crypto/bn254/merkle.go b/uniond/vendor/github.com/cometbft/cometbft/crypto/bn254/merkle.go new file mode 100644 index 0000000000..b5c16cd0fe --- /dev/null +++ b/uniond/vendor/github.com/cometbft/cometbft/crypto/bn254/merkle.go @@ -0,0 +1,78 @@ +package bn254 + +import ( + "github.com/consensys/gnark-crypto/ecc/bn254" + "github.com/consensys/gnark-crypto/ecc/bn254/fr" + "github.com/consensys/gnark-crypto/ecc/bn254/fr/mimc" + "math/big" +) + +type MerkleLeaf struct { + VotingPower int64 + ShiftedX fr.Element + ShiftedY fr.Element + MsbX uint8 + MsbY uint8 +} + +func NewMerkleLeaf(pubKey bn254.G1Affine, votingPower int64) (MerkleLeaf, error) { + x := pubKey.X.BigInt(new(big.Int)) + y := pubKey.Y.BigInt(new(big.Int)) + msbX := x.Bit(253) + msbY := y.Bit(253) + var frX, frY fr.Element + x.SetBit(x, 253, 0) + var padded [32]byte + x.FillBytes(padded[:]) + err := frX.SetBytesCanonical(padded[:]) + if err != nil { + return MerkleLeaf{}, err + } + y.SetBit(y, 253, 0) + y.FillBytes(padded[:]) + err = frY.SetBytesCanonical(padded[:]) + if err != nil { + return MerkleLeaf{}, err + } + return MerkleLeaf{ + VotingPower: votingPower, + ShiftedX: frX, + ShiftedY: frY, + MsbX: uint8(msbX), + MsbY: uint8(msbY), + }, nil +} + +// mimc(X, Y, XMSB, YMSB) +func (l MerkleLeaf) Hash() ([]byte, error) { + frXBytes := l.ShiftedX.Bytes() + frYBytes := l.ShiftedY.Bytes() + mimc := mimc.NewMiMC() + _, err := mimc.Write(frXBytes[:]) + if err != nil { + return nil, err + } + _, err = mimc.Write(frYBytes[:]) + if err != nil { + return nil, err + } + var padded [32]byte + big.NewInt(int64(l.MsbX)).FillBytes(padded[:]) + _, err = mimc.Write(padded[:]) + if err != nil { + return nil, err + } + big.NewInt(int64(l.MsbY)).FillBytes(padded[:]) + _, err = mimc.Write(padded[:]) + if err != nil { + return nil, err + } + var powerBytes big.Int + powerBytes.SetUint64(uint64(l.VotingPower)) + powerBytes.FillBytes(padded[:]) + _, err = mimc.Write(padded[:]) + if err != nil { + return nil, err + } + return mimc.Sum(nil), nil +} diff --git a/uniond/vendor/github.com/cometbft/cometbft/types/validator_set.go b/uniond/vendor/github.com/cometbft/cometbft/types/validator_set.go index 58e6c17108..a46c6a7c76 100644 --- a/uniond/vendor/github.com/cometbft/cometbft/types/validator_set.go +++ b/uniond/vendor/github.com/cometbft/cometbft/types/validator_set.go @@ -351,8 +351,9 @@ func (vals *ValidatorSet) Hash() []byte { for i, val := range vals.Validators { var pubKey bn254.G1Affine _, err := pubKey.SetBytes(val.PubKey.Bytes()) + fmt.Printf("Len: %d\n", len(val.PubKey.Bytes())) if err != nil { - panic(fmt.Errorf("ValidatorSet.Hash(): impossible invalid validator: %v", val)) + panic(fmt.Errorf("ValidatorSet.Hash(): impossible invalid validator: %v: Err %s", val, err)) } leaf, err := cometbn254.NewMerkleLeaf(pubKey, val.VotingPower) if err != nil { diff --git a/uniond/vendor/github.com/cosmos/cosmos-sdk/client/config/toml.go b/uniond/vendor/github.com/cosmos/cosmos-sdk/client/config/toml.go index d927d0d51d..b3ef23ee51 100644 --- a/uniond/vendor/github.com/cosmos/cosmos-sdk/client/config/toml.go +++ b/uniond/vendor/github.com/cosmos/cosmos-sdk/client/config/toml.go @@ -47,7 +47,6 @@ func writeConfigToFile(configFilePath string, config *ClientConfig) error { // getClientConfig reads values from client.toml file and unmarshalls them into ClientConfig func getClientConfig(configPath string, v *viper.Viper) (*ClientConfig, error) { - v = viper.New() v.AddConfigPath(configPath) v.SetConfigName("client") v.SetConfigType("toml") diff --git a/uniond/vendor/github.com/cosmos/cosmos-sdk/crypto/keys/bn254/bn254.go b/uniond/vendor/github.com/cosmos/cosmos-sdk/crypto/keys/bn254/bn254.go index f3ac20f2fa..4622e86772 100644 --- a/uniond/vendor/github.com/cosmos/cosmos-sdk/crypto/keys/bn254/bn254.go +++ b/uniond/vendor/github.com/cosmos/cosmos-sdk/crypto/keys/bn254/bn254.go @@ -2,6 +2,7 @@ package bn254 import ( "crypto/sha256" + "crypto/sha512" "crypto/subtle" "fmt" @@ -50,6 +51,13 @@ func GenPrivKey() *PrivKey { return &PrivKey{Key: bn254.GenPrivKey()} } +func GenPrivKeyFromSecret(secret []byte) *PrivKey { + hasher := sha512.New() + hasher.Write(secret) + seed := hasher.Sum(nil) + return &PrivKey{Key: bn254.GenPrivKeyFromSeed(seed)} +} + // PubKey gets the corresponding public key from the private key. // // Panics if the private key is not initialized. diff --git a/uniond/vendor/github.com/cosmos/cosmos-sdk/server/util.go b/uniond/vendor/github.com/cosmos/cosmos-sdk/server/util.go index 080fa6df78..c3f64a1fa1 100644 --- a/uniond/vendor/github.com/cosmos/cosmos-sdk/server/util.go +++ b/uniond/vendor/github.com/cosmos/cosmos-sdk/server/util.go @@ -215,13 +215,15 @@ func GetServerContextFromCmd(cmd *cobra.Command) *Context { // SetCmdServerContext sets a command's Context value to the provided argument. // If the context has not been set, set the given context as the default. func SetCmdServerContext(cmd *cobra.Command, serverCtx *Context) error { - v := cmd.Context().Value(ServerContextKey) - if v == nil { - v = serverCtx + var cmdCtx context.Context + + if cmd.Context() == nil { + cmdCtx = context.Background() + } else { + cmdCtx = cmd.Context() } - serverCtxPtr := v.(*Context) - *serverCtxPtr = *serverCtx + cmd.SetContext(context.WithValue(cmdCtx, ServerContextKey, serverCtx)) return nil } diff --git a/uniond/vendor/github.com/cosmos/cosmos-sdk/types/simulation/account.go b/uniond/vendor/github.com/cosmos/cosmos-sdk/types/simulation/account.go index b9f69ffa61..22e1875775 100644 --- a/uniond/vendor/github.com/cosmos/cosmos-sdk/types/simulation/account.go +++ b/uniond/vendor/github.com/cosmos/cosmos-sdk/types/simulation/account.go @@ -4,7 +4,7 @@ import ( "fmt" "math/rand" - "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" + "github.com/cosmos/cosmos-sdk/crypto/keys/bn254" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -44,7 +44,7 @@ func RandomAccounts(r *rand.Rand, n int) []Account { accs[i].PubKey = accs[i].PrivKey.PubKey() accs[i].Address = sdk.AccAddress(accs[i].PubKey.Address()) - accs[i].ConsKey = ed25519.GenPrivKeyFromSecret(privkeySeed) + accs[i].ConsKey = bn254.GenPrivKeyFromSecret(privkeySeed) } return accs diff --git a/uniond/vendor/github.com/cosmos/cosmos-sdk/x/staking/README.md b/uniond/vendor/github.com/cosmos/cosmos-sdk/x/staking/README.md index c011a593dd..2c4ae46159 100644 --- a/uniond/vendor/github.com/cosmos/cosmos-sdk/x/staking/README.md +++ b/uniond/vendor/github.com/cosmos/cosmos-sdk/x/staking/README.md @@ -18,6 +18,50 @@ ultimately determining the effective validator set for the system. This module is used in the Cosmos Hub, the first Hub in the Cosmos network. +## Epoch Staking Additions + +*The design of the epoch staking changes to the `x/staking` module are heavily inspired by [ADR 039: Epoch Staking](https://docs.cosmos.network/v0.45/architecture/adr-039-epoched-staking.html). The primary difference in design is the addition of a `JailedValidatorThreshold`, which exists to prevent the network from halting in the case of the active set becoming entirely jailed.* + +To avoid a heavy block at the end of each epoch, we eagerly perform the stake and delegation changes at the end of each block but buffer the validator set state changes until the end of each epoch. + +Two conditions trigger a validator set update: + +1. The first block of an epoch. This will also determine the timestamp of the next epoch. + +2. The number of jailed validators exceeding a defined threshold. + +### Changes + +To minimize maintenance efforts until a variation of epoch staking is up-streamed, all changes for epoch staking are contained in the existing `x/staking` module. + +To introduce epoch staking to the `x/staking` module, we've introduced several new storage items and parameters to the `x/staking` module. + +#### Storage Items + +- `NumberOfValidatorsInEpoch` +- `NumberOfValidatorsInJail` + +#### Parameters + +- `JailedValidatorTrheshold` *(default: `50`)* +- `EpochLength` *(default: `1`)* + +In addition to these storage items and paramaters, changes were made to the `BlockValidatorUpdates` function workflow. + +Instead of always running `ApplyAndRetrunValidatorSetUpdates`, the set updates are now only triggered by the logic defined below: + +```mermaid +flowchart TD + A[EndBlocker] + A --> C{End of Epoch?} + C -->|Yes| D[FullValidatorUpdates] + C -->|No| E{JailedValidators >= THRESHOLD} + E -->|Yes| D[BlockValidatorUpdates] + E -->|No| F[MinimumValidatorUpdates] +``` + +The logic that determines the end of the epoch is based off the current height of the network and can be expressed as true or false with `currentHeight % epochLength == 0`. + ## Contents * [State](#state) diff --git a/uniond/vendor/github.com/cosmos/cosmos-sdk/x/staking/keeper/params.go b/uniond/vendor/github.com/cosmos/cosmos-sdk/x/staking/keeper/params.go index cd74a8acb9..276826c4bd 100644 --- a/uniond/vendor/github.com/cosmos/cosmos-sdk/x/staking/keeper/params.go +++ b/uniond/vendor/github.com/cosmos/cosmos-sdk/x/staking/keeper/params.go @@ -58,18 +58,21 @@ func (k Keeper) MinCommissionRate(ctx context.Context) (math.LegacyDec, error) { func (k Keeper) EpochLength(ctx context.Context) int64 { params, err := k.GetParams(ctx) - if err != nil { // TODO(aeryz): Check if its ok to panic here panic(err) } + // Epoch should never be 0, minimum of 1 + if params.EpochLength == 0 { + return 1 + } + return params.EpochLength } func (k Keeper) JailedValidatorThreshold(ctx context.Context) uint32 { params, err := k.GetParams(ctx) - if err != nil { // TODO(aeryz): Check if its ok to panic here panic(err) diff --git a/uniond/vendor/github.com/cosmos/cosmos-sdk/x/staking/keeper/validator.go b/uniond/vendor/github.com/cosmos/cosmos-sdk/x/staking/keeper/validator.go index bef724c9fb..c05f26b547 100644 --- a/uniond/vendor/github.com/cosmos/cosmos-sdk/x/staking/keeper/validator.go +++ b/uniond/vendor/github.com/cosmos/cosmos-sdk/x/staking/keeper/validator.go @@ -68,7 +68,6 @@ func (k Keeper) IncermentNumberofValidatorsInJail(ctx context.Context) { store := k.storeService.OpenKVStore(ctx) has, err := store.Has(types.NumberOfValidatorsInJail) - if err != nil { // TODO(aeryz): Seems like panics are changed into errors, check if it is okay to panic here panic(err) @@ -102,7 +101,6 @@ func (k Keeper) IncermentNumberofValidatorsInJail(ctx context.Context) { func (k Keeper) DecrementNumberofValidatorsInJail(ctx context.Context) error { store := k.storeService.OpenKVStore(ctx) bz, err := store.Get(types.NumberOfValidatorsInJail) - if err != nil { return err } @@ -730,7 +728,6 @@ func (k Keeper) GetNumberOfValidatorsInEpoch(ctx context.Context) uint32 { store := k.storeService.OpenKVStore(ctx) has, err := store.Has(types.NumberOfValidatorsInEpoch) - if err != nil { // TODO(aeryz): check if its ok to panic here panic(err) @@ -754,7 +751,6 @@ func (k Keeper) GetNumberOfJailedValidators(ctx context.Context) uint32 { store := k.storeService.OpenKVStore(ctx) has, err := store.Has(types.NumberOfValidatorsInJail) - if err != nil { // TODO(aeryz): check if its ok to panic here panic(err) diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/LICENSE b/uniond/vendor/github.com/tunabay/go-bitarray/LICENSE new file mode 100644 index 0000000000..363586f463 --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/LICENSE @@ -0,0 +1,18 @@ +Copyright (c) 2021 Hirotsuna Mizuno - https://github.com/tunabay + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/README.md b/uniond/vendor/github.com/tunabay/go-bitarray/README.md new file mode 100644 index 0000000000..077f5dc620 --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/README.md @@ -0,0 +1,100 @@ +# go-bitarray + +[![Go Reference](https://pkg.go.dev/badge/github.com/tunabay/go-bitarray.svg)](https://pkg.go.dev/github.com/tunabay/go-bitarray) +[![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](LICENSE) + +## Overview + +Package bitarray provides data types and functions for manipulating bit arrays, +aka bit strings, of arbitrary length. + +This is designed to handle bit arrays across byte boundaries naturally, without +error-prone bitwise operation code such as shifting, masking, and ORing. It may +be useful when dealing with Huffman coding, raw packet of various protocols, and +binary file formats, etc. + +## Usage + +### Manipulate bitarrays using the `BitArray` type. +```go +import ( + "fmt" + "github.com/tunabay/go-bitarray" +) + +func main() { + // Parse string representation + ba1, err := bitarray.Parse("111000") + if err != nil { + panic(err) + } + fmt.Println(ba1) // 111000 + + // Slice and Repeat + ba2 := ba1.Slice(2, 5).Repeat(2) + fmt.Println(ba2) // 100100 + + // Append + ba3 := ba2.Append(bitarray.MustParse("101011")) + // alternative formatting + fmt.Printf("% b\n", ba3) // 10010010 1011 + + // Extract bits from []byte across byte boundary + buf := []byte{0xff, 0x00} + ba4 := bitarray.NewFromBytes(buf, 4, 7) + fmt.Println(ba4) // 1111000 +} +``` +[Run in Go Playground](https://play.golang.org/p/qm4fpMCPdWa) + +### Use the `Buffer` type for bitwise access to byte slices. +```go +import ( + "fmt" + "github.com/tunabay/go-bitarray" +) + +// This example assumes 8-byte data with the following bit layout, and +// accesses the 5-bit integer X and the 50-bit integer Y in it. +// +// |0 |1 |2 |3 | +// |0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7|0 1 2 3 4 5 6 7| +// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// | 9-bit flag area | 5-bit X | Upper 18 bits of the 50-bit int Y | +// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// | Lower 32 bits of the 50-bit int Y | +// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +func main() { + data := make([]byte, 8) + buf := bitarray.NewBufferFromByteSlice(data) + + // set 9-bit flag area to 110000011 + buf.PutBitAt(0, 1) + buf.PutBitAt(1, 1) + buf.PutBitAt(7, 1) + buf.PutBitAt(8, 1) + + // set 5-bit integer X + buf.Slice(9, 14).PutUint8(25) // = 0b_11001 + + // set 50-bit integer Y + buf.Slice(14, 64).PutUint64(0x_3_f0ff_f0f0_ff0f) + + // raw bytes updated + fmt.Printf("%08b\n%08b\n", data[:4], data[4:]) + + // read fields + fmt.Printf("F = %b\n", buf.Slice(0, 9)) + fmt.Printf("X = %d\n", buf.Slice(9, 14).Uint8()) + fmt.Printf("Y = %x\n", buf.SliceToEnd(14).Uint64()) +} +``` +[Run in Go Playground](https://play.golang.org/p/INosZRfZsuR) + +## Documentation and more examples + +- Read the [documentation](https://pkg.go.dev/github.com/tunabay/go-bitarray). + +## License + +go-bitarray is available under the MIT license. See the [LICENSE](LICENSE) file for more information. diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/alignment.go b/uniond/vendor/github.com/tunabay/go-bitarray/alignment.go new file mode 100644 index 0000000000..b7dee084ee --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/alignment.go @@ -0,0 +1,22 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +// Alignment is used in some bitwise operations to specify whether the bits are +// left-aligned or right-aligned. The zero value is AlignLeft. +type Alignment bool + +const ( + AlignLeft Alignment = false + AlignRight Alignment = true +) + +// String returns the string representation of Alignment. +func (a Alignment) String() string { + if a == AlignLeft { + return "align-left" + } + return "align-right" +} diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/bitarray.go b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray.go new file mode 100644 index 0000000000..7a4b6f8e9c --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray.go @@ -0,0 +1,363 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "hash" + "math/bits" +) + +// BitArray represents an immutable bit array, or a sequence of bits, of +// arbitrary length. Unlike the builtin []byte, BitArray can properly hold and +// handle fractional bits less than 8 bits. The zero value for BitArray +// represents an empty bit array of zero length. Since it is immutable, it can +// be shared, copied and is safe for concurrent use by multiple goroutines. +type BitArray struct { + b []byte // nil for zero filled bit array including zero length + nBits int // number of bits contained +} + +// zeroBitArray is a shared instance representing an empty bit array. +var zeroBitArray = &BitArray{} + +// New creates and returns a new BitArray instance from the bits passed as +// parameters. Each parameter should be 0 or 1, but if any other value is +// passed, no error is reported and only the LSB of each is silently used. In +// most cases it is more convenient to use Parse, NewFromBytes or other +// functions instead of New. +func New(bits ...byte) *BitArray { + if len(bits) == 0 { + return zeroBitArray + } + var zfb byte + buf := allocByteSlice((len(bits) + 7) >> 3) + for i, bit := range bits { + bit &= 1 + zfb |= bit + buf[i>>3] |= bit << (7 - i&7) + } + if zfb == 0 { + return &BitArray{nBits: len(bits)} + } + + return &BitArray{b: buf, nBits: len(bits)} +} + +// NewFromBytes reads bits from a byte slice b, creates a new BitArray instance +// and returns it. It skips off bits from the beginning of p and reads nBits +// bits from the next bit. +func NewFromBytes(p []byte, off, nBits int) *BitArray { + switch { + case nBits < 0: + panicf("NewFromBytes: negative nBits %d.", nBits) + case off < 0: + panicf("NewFromBytes: negative off %d.", off) + case len(p)<<3 < off+nBits: + panicf("NewFromBytes: out of range off=%d + nBits=%d > p.len=%d.", off, nBits, len(p)<<3) + case nBits == 0: + return zeroBitArray + } + buf := allocByteSlice((nBits + 7) >> 3) + if copyBits(buf, p, 0, off, nBits) { + return &BitArray{nBits: nBits} + } + + return &BitArray{b: buf, nBits: nBits} +} + +// NewFromByteBits creates a new BitArray from a []byte in which each element +// represents 1 bit as 0 or 1. If an element is neighter 0 nor 1, only its LSB +// is silently used. +func NewFromByteBits(bits []byte) *BitArray { + if len(bits) == 0 { + return zeroBitArray + } + var zfb byte + buf := allocByteSlice((len(bits) + 7) >> 3) + for i, bit := range bits { + bit &= 1 + zfb |= bit + buf[i>>3] |= bit << (7 - i&7) + } + if zfb == 0 { + return &BitArray{nBits: len(bits)} + } + + return &BitArray{b: buf, nBits: len(bits)} +} + +// NewZeroFilled creates a BitArray with all digits filled with 0. An all zero +// filled bit array does not allocate memory for 0 bits. If all bits in a bit +// array are guaranteed to be 0, using this function saves memory usage and +// optimizes some bitwise operations. +func NewZeroFilled(nBits int) *BitArray { + switch { + case nBits < 0: + panicf("NewZeroFilled: negative nBits %d.", nBits) + case nBits == 0: + return zeroBitArray + } + + return &BitArray{nBits: nBits} +} + +// NewOneFilled creates a BitArray with all digits filled with 1. +func NewOneFilled(nBits int) *BitArray { + switch { + case nBits < 0: + panicf("NewOneFilled: negative nBits %d.", nBits) + case nBits == 0: + return zeroBitArray + } + buf := allocByteSlice((nBits + 7) >> 3) + fillFF(buf) + if f := nBits & 7; f != 0 { + buf[len(buf)-1] &= byte(0xff) << (8 - f) + } + + return &BitArray{b: buf, nBits: nBits} +} + +// NewByRunLength creates a BitArray with the argument that represents the +// number of consecutive 0 and 1 bits. The (2n+1)th arguments including the +// first specifies the length of 0s, and the (2n)th arguments including the +// second specifies the length of 1s. Passing 0 as the first argument allows to +// create a bit array starting with 1. It is suitable for making simple bit +// masks. +func NewByRunLength(lengths ...int) *BitArray { + max1Len, sumLen := 0, 0 + for i := 0; i < len(lengths); i++ { + sumLen += lengths[i] + if i&1 != 0 && max1Len < lengths[i] { + max1Len = lengths[i] + } + } + switch { + case sumLen == 0: + return zeroBitArray + case max1Len == 0: + return &BitArray{nBits: sumLen} + } + + buf1 := make([]byte, (max1Len+7)>>3) + fillFF(buf1) + + bb := NewBuilder() + for i, length := range lengths { + switch { + case length == 0: + case i&1 == 0: + bb.append(nil, 0, length, true) + default: + bb.append(buf1, 0, length, false) + } + } + + return bb.BitArray() +} + +// IsZero returns whether the BitArray is empty, zero length. +func (ba *BitArray) IsZero() bool { + return ba == nil || ba.nBits == 0 +} + +// Len returns the number of bits contained in the BitArray. +func (ba *BitArray) Len() int { + if ba == nil { + return 0 + } + + return ba.nBits +} + +// NumPadding returns the number of LSBs padded when expressing the bit array as +// []byte type, that is, the number of bits to be added to make it a multiple of +// 8 bits. +func (ba *BitArray) NumPadding() int { + if ba == nil { + return 0 + } + + return (8 - ba.nBits&7) & 7 +} + +// String returns the string representation of the BitArray. +func (ba BitArray) String() string { + if ba.IsZero() { + return "" + } + sb := make([]byte, ba.nBits) + if ba.b == nil { + fill30(sb) + } else { + for i := 0; i < ba.nBits; i++ { + sb[i] = '0' + ba.b[i>>3]>>(7-i&7)&1 + } + } + + return string(sb) +} + +// Bytes returns the byte slice containing the bit array. It also returns the +// number of the padded LSBs. +func (ba *BitArray) Bytes() ([]byte, int) { + n := ba.Len() //nolint:ifshort // false positive + if n == 0 { + return []byte{}, 0 + } + b := make([]byte, (n+7)>>3) + copy(b, ba.b) // works with ba.b == nil + + return b, (8 - ba.nBits&7) & 7 +} + +// BitArray implements the BitArrayer interface returning itself. +func (ba *BitArray) BitArray() *BitArray { + return ba +} + +// BitAt returns a single bit at the specified offset as 0 or 1. It panics if +// the off is negative or greater than ba.Len()-1. +func (ba *BitArray) BitAt(off int) byte { + switch { + case off < 0: + panicf("BitAt: negative off %d.", off) + case ba.Len() <= off: + panicf("BitAt: out of range: off=%d >= len=%d.", off, ba.Len()) + case ba.b == nil: + return 0 + } + + return ba.b[off>>3] >> (7 - off&7) & 1 +} + +// Hash calculates the hash of the bit array using the hash function h. The +// hash.Hash is designed to accept input in bytes instead of bits. This causes +// problems with bit arrays that have padding LSBs at the end. For example, the +// two bit arrays "1111" and "1111000" would both be represented as the same +// single byte 0xf0. In order to prevent these from being mapped to the same +// hash value, the hash is calculated after appending a 3 bits marker +// indicating the number of padding LSBs at the end of the original bit array. +// +// Deprecated: Most hash functions can handle bit-oriented messages as-is by +// design, and it is not appropriate to use the byte-oriented standard hash.Hash +// with padding bits. The result does not comply with the specifications. Not +// all hash functions are available, but for SHA-1 and SHA-2, which can handle +// bit-oriented messages correctly, dedicated methods such as SHA512, SHA256, +// and SHA1 are now available. It is better to use them instead. +func (ba *BitArray) Hash(h hash.Hash) []byte { + b, _ := ba.MarshalBinary() + h.Write(b) + + return h.Sum(nil) +} + +// MapKey returns a string that can be used as a key for the Go built-in map. +// Only the same bit array returns the same string. The String method can also +// be used for the same purpose, but MapKey is faster. Note that it can be used +// as a map key, but it may contain non-printable characters. +func (ba *BitArray) MapKey() string { + if ba.IsZero() { + return "" + } + nBytes := (ba.nBits + 7) >> 3 + sb := make([]byte, nBytes+1) + sb[0] = byte(ba.nBits & 7) + copy(sb[1:], ba.b) // works with ba.b == nil + + return string(sb) +} + +// ToPadded8 returns a new BitArray with a length that is a multiple of 8 bits +// by apending 0 to 7 padding bits at the end. For the returned bit array, +// NumPadding() returns 0. +func (ba *BitArray) ToPadded8() *BitArray { + switch { + case ba.IsZero(): + return zeroBitArray + case ba.nBits&7 == 0: + return ba + } + nBits := (ba.nBits + 7) & ^7 + if ba.b == nil { + return &BitArray{nBits: nBits} + } + + return &BitArray{b: ba.b, nBits: nBits} +} + +// ToPadded64 returns a new BitArray with a length that is a multiple of 64 bits +// by apending 0 to 63 padding bits at the end. For the returned bit array, +// NumPadding() returns 0, and Len() returns a multiple of 8. +func (ba *BitArray) ToPadded64() *BitArray { + switch { + case ba.IsZero(): + return zeroBitArray + case ba.nBits&63 == 0: + return ba + } + nBits := (ba.nBits + 63) & ^63 + if ba.b == nil { + return &BitArray{nBits: nBits} + } + + return &BitArray{b: ba.b[:nBits>>3], nBits: nBits} +} + +// ToByteBits returns a byte slice that represents the bit array with 1 byte +// per bit. Each byte element of the returned slice represents a single bit with +// 0 or 1. It is a memory-wasting data type, but for the purpose of repeating +// searches and matching using the same bit array, converting to this format +// allows the standard bytes package to be used. +func (ba *BitArray) ToByteBits() []byte { + if ba.IsZero() { + return []byte{} + } + return ba.bits8() +} + +// ParityBit calculates the odd parity bit of the bit array. +func (ba *BitArray) ParityBit() int { + if ba.IsZero() || ba.b == nil { + return 1 + } + + // TODO: use an optimized algorithm + var sum uint64 + for _, b := range asUint64Slice(ba.b) { + sum ^= b + } + + return (bits.OnesCount64(sum) + 1) & 1 +} + +// RepeatEach returns a new BitArray in which each bit is repeated the specified +// number of times. It is an operation like "scaling" a bit pattern. +func (ba *BitArray) RepeatEach(count int) *BitArray { + switch { + case count < 0: + panicf("RepeatEach: negative count %d.", count) + case ba.IsZero(), count == 0: + return zeroBitArray + case count == 1: + return ba + case ba.b == nil: + return &BitArray{nBits: ba.nBits * count} + } + + buf1 := make([]byte, (count+7)>>3) + fillFF(buf1) + + bb := NewBuilder() + for i := 0; i < ba.nBits; i++ { + if ba.b[i>>3]>>(7-i&7)&1 == 0 { + bb.append(nil, 0, count, true) + } else { + bb.append(buf1, 0, count, false) + } + } + + return bb.BitArray() +} diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_bitwise.go b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_bitwise.go new file mode 100644 index 0000000000..4430404038 --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_bitwise.go @@ -0,0 +1,301 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "math/bits" +) + +// LeadingZeros returns the number of leading zero bits in the BitArray. +func (ba *BitArray) LeadingZeros() int { + switch { + case ba.IsZero(): + return 0 + case ba.b == nil: + return ba.nBits + } + n := 0 + nb := ba.nBits >> 3 + for i := 0; i < nb; i++ { + z := bits.LeadingZeros8(ba.b[i]) + n += z + if z != 8 { + return n + } + } + + fb := ba.nBits & 7 + if fb == 0 { + return n + } + z := bits.LeadingZeros8(ba.b[nb]) + if fb < z { + z = fb + } + + return n + z +} + +// TrailingZeros returns the number of trailing zero bits in the BitArray. +func (ba *BitArray) TrailingZeros() int { + switch { + case ba.IsZero(): + return 0 + case ba.b == nil: + return ba.nBits + } + n := 0 + for i := len(ba.b) - 1; 0 <= i; i-- { + z := bits.TrailingZeros8(ba.b[i]) + n += z + if z != 8 { + return n - ba.NumPadding() + } + } + + return n - ba.NumPadding() +} + +func (ba *BitArray) hasTrailingZeros(n int) bool { + if n == 0 { + return true + } + n += ba.NumPadding() + + for i := len(ba.b) - 1; 0 <= i; i-- { + z := bits.TrailingZeros8(ba.b[i]) + n -= z + switch { + case n <= 0: + return true + case z != 8: + return false + } + } + return false +} + +// OnesCount returns the number of one bits, population count, in the BitArray. +func (ba *BitArray) OnesCount() int { + if ba.IsZero() || ba.b == nil { + return 0 + } + n := 0 + for _, u64 := range asUint64Slice(ba.b) { + n += bits.OnesCount64(u64) + } + + return n +} + +// And returns a new BitArray as a result of a bitwise AND with x. The ba and x +// must be the same length, otherwise And will panic. Use AndAt instead to apply +// a partial AND with a short bit array. +func (ba *BitArray) And(x BitArrayer) *BitArray { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + baLen, xLen := ba.Len(), bax.Len() + switch { + case baLen != xLen: + panicf("And: length is not the same: %d != %d.", baLen, xLen) + case baLen == 0: + return zeroBitArray + case ba.b == nil: + return ba + case bax.b == nil: + return bax + } + zv := uint64(0) + buf := allocByteSlice(len(ba.b)) + buf64 := asUint64Slice(buf) + x64 := asUint64Slice(bax.b) + for i, u64 := range asUint64Slice(ba.b) { + buf64[i] = u64 & x64[i] + zv |= buf64[i] + } + if zv == 0 { + return &BitArray{nBits: ba.nBits} + } + return &BitArray{b: buf, nBits: ba.nBits} +} + +// Or returns a new BitArray as a result of a bitwise OR with x. The ba and x +// must be the same length, otherwise Or will panic. Use OrAt instead to apply a +// partial OR with a short bit array. +func (ba *BitArray) Or(x BitArrayer) *BitArray { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + baLen, xLen := ba.Len(), bax.Len() + switch { + case baLen != xLen: + panicf("Or: length is not the same: %d != %d.", baLen, xLen) + case baLen == 0: + return zeroBitArray + case ba.b == nil: + return bax + case bax.b == nil: + return ba + } + zv := uint64(0) + buf := allocByteSlice(len(ba.b)) + buf64 := asUint64Slice(buf) + x64 := asUint64Slice(bax.b) + for i, u64 := range asUint64Slice(ba.b) { + buf64[i] = u64 | x64[i] + zv |= buf64[i] + } + if zv == 0 { + return &BitArray{nBits: ba.nBits} + } + return &BitArray{b: buf, nBits: ba.nBits} +} + +// Xor returns a new BitArray as a result of a bitwise XOR with x. The ba and x +// must be the same length, otherwise Xor will panic. Use XorAt instead to apply +// a partial XOR with a short bit array. +func (ba *BitArray) Xor(x BitArrayer) *BitArray { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + baLen, xLen := ba.Len(), bax.Len() + switch { + case baLen != xLen: + panicf("Xor: length is not the same: %d != %d.", baLen, xLen) + case baLen == 0: + return zeroBitArray + case ba.b == nil: + return bax + case bax.b == nil: + return ba + } + zv := uint64(0) + buf := allocByteSlice(len(ba.b)) + buf64 := asUint64Slice(buf) + x64 := asUint64Slice(bax.b) + for i, u64 := range asUint64Slice(ba.b) { + buf64[i] = u64 ^ x64[i] + zv |= buf64[i] + } + if zv == 0 { + return &BitArray{nBits: ba.nBits} + } + return &BitArray{b: buf, nBits: ba.nBits} +} + +// Not returns a new BitArray that is the result of inverting all the bits. +func (ba *BitArray) Not() *BitArray { + switch { + case ba.IsZero(): + return zeroBitArray + case ba.b == nil: + return NewOneFilled(ba.nBits) + } + // TODO: use asUint64Slice() + zv := byte(0) + buf := allocByteSlice(len(ba.b)) + for i := 0; i < len(buf)-1; i++ { + buf[i] = ^ba.b[i] + zv |= buf[i] + } + buf[len(buf)-1] = ^ba.b[len(ba.b)-1] & (byte(0xff) << ba.NumPadding()) + zv |= buf[len(buf)-1] + if zv == 0 { + return &BitArray{nBits: ba.nBits} + } + return &BitArray{b: buf, nBits: ba.nBits} +} + +// AndAt returns a new BitArray resulting from applying a bitwise AND operation +// with x at the offset off. AND is applied only to the range from off to +// off+x.Len(), and other bits are preserved. +func (ba *BitArray) AndAt(off int, x BitArrayer) *BitArray { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + baLen, xLen := ba.Len(), bax.Len() + switch { + case off < 0: + panicf("AndAt: negative off %d.", off) + case baLen < off+xLen: + panicf("AndAt: out of range: off=%d + x.len=%d > len=%d.", off, xLen, baLen) + case baLen == 0: + return zeroBitArray + case ba.b == nil: + return ba + case bax.b == nil: + buf := allocByteSlice(len(ba.b)) + copy(buf, ba.b) + clearBits(buf, off, xLen) + return &BitArray{b: buf, nBits: baLen} + } + buf := allocByteSlice(len(ba.b)) + copy(buf, ba.b) + andBits(buf, bax.b, off, 0, xLen) + return &BitArray{b: buf, nBits: baLen} +} + +// OrAt returns a new BitArray resulting from applying a bitwise OR operation +// with x at the offset off. OR is applied only to the range from off to +// off+x.Len(), and other bits are preserved. +func (ba *BitArray) OrAt(off int, x BitArrayer) *BitArray { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + baLen, xLen := ba.Len(), bax.Len() + switch { + case off < 0: + panicf("OrAt: negative off %d.", off) + case baLen < off+xLen: + panicf("OrAt: out of range: off=%d + x.len=%d > len=%d.", off, xLen, baLen) + case baLen == 0: + return zeroBitArray + case bax.b == nil: + return ba + case ba.b == nil: + buf := allocByteSlice((baLen + 7) >> 3) + _ = copyBits(buf, bax.b, off, 0, xLen) + return &BitArray{b: buf, nBits: baLen} + } + buf := allocByteSlice(len(ba.b)) + copy(buf, ba.b) + orBits(buf, bax.b, off, 0, xLen) + return &BitArray{b: buf, nBits: baLen} +} + +// XorAt returns a new BitArray resulting from applying a bitwise XOR operation +// with x at the offset off. XOR is applied only to the range from off to +// off+x.Len(), and other bits are preserved. +func (ba *BitArray) XorAt(off int, x BitArrayer) *BitArray { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + baLen, xLen := ba.Len(), bax.Len() + switch { + case off < 0: + panicf("XorAt: negative off %d.", off) + case baLen < off+xLen: + panicf("XorAt: out of range: off=%d + x.len=%d > len=%d", off, xLen, baLen) + case baLen == 0: + return zeroBitArray + case bax.b == nil: + return ba + case ba.b == nil: + buf := allocByteSlice((baLen + 7) >> 3) + _ = copyBits(buf, bax.b, off, 0, xLen) + return &BitArray{b: buf, nBits: baLen} + } + buf := allocByteSlice(len(ba.b)) + copy(buf, ba.b) + xorBits(buf, bax.b, off, 0, xLen) + return &BitArray{b: buf, nBits: baLen} +} diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_compare.go b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_compare.go new file mode 100644 index 0000000000..bb9ade6caa --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_compare.go @@ -0,0 +1,97 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "bytes" +) + +// Compare returns an integer comparing two bit arrays lexicographically. The +// result will be 0 if x == y, -1 if x < y, and +1 if y < x. A nil argument is +// equivalent to an empty bit array. +func Compare(x, y BitArrayer) int { + var bax, bay *BitArray + if x != nil { + bax = x.BitArray() + } + if y != nil { + bay = y.BitArray() + } + xLen, yLen, xlty := bax.Len(), bay.Len(), -1 + if yLen < xLen { + bax, bay, xLen, yLen, xlty = bay, bax, yLen, xLen, +1 + } + + switch { + case yLen == 0: + return 0 + case xLen == 0: + return xlty + case bax.b == nil: + if xLen == yLen && (bay.b == nil || allBytesZero(bay.b)) { + return 0 + } + return xlty + case bay.b == nil: + if allBytesZero(bax.b) { + if xLen == yLen { + return 0 + } + return xlty + } + return -xlty + } + + ce := bax.nBits >> 3 // end index of common bytes + cc := bytes.Compare(bax.b[:ce], bay.b[:ce]) + switch { + case 0 < cc: + return -xlty + case cc < 0: + return xlty + } + + if bax.nBits&7 == 0 { // no more x bits + if xLen == yLen { + return 0 + } + return xlty + } + + // compare the fractional bits in the last byte + cs := 8 - bax.nBits&7 + xl, yl := bax.b[ce]>>cs, bay.b[ce]>>cs + switch { + case yl < xl: + return -xlty + case xl < yl, xLen != yLen: + return xlty + } + + return 0 +} + +// Equal returns whether the bit array is the same as specified one. +// nil and zero length bit array are considered to be equal. +func (ba *BitArray) Equal(x BitArrayer) bool { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + switch { + case ba.IsZero(): + return bax.IsZero() + case bax.IsZero(): + return false + case ba.nBits != bax.nBits: + return false + case ba.b == nil: + return bax.b == nil || allBytesZero(bax.b) + case bax.b == nil: + return allBytesZero(ba.b) + } + + return bytes.Equal(ba.b, bax.b) +} diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_concat.go b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_concat.go new file mode 100644 index 0000000000..80b2eb64e2 --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_concat.go @@ -0,0 +1,138 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +// Join concatenates the elements of its first parameter to create a single +// bit array. The separator sep is placed between elements in the result. +func Join(elems []*BitArray, sep BitArrayer) *BitArray { + var basep *BitArray + if sep != nil { + basep = sep.BitArray() + } + switch len(elems) { + case 0: + return zeroBitArray + case 1: + return elems[0] + } + bb := NewBuilder() + for i, elem := range elems { + if i != 0 && basep != nil { + _, _ = bb.WriteBitArray(basep) + } + _, _ = bb.WriteBitArray(elem) + } + + return bb.BitArray() +} + +// JoinBitArrayer is identical to Join except that it accepts elems in +// []BitArrayer type instead of []*BitArray type. +func JoinBitArrayer(elems []BitArrayer, sep BitArrayer) *BitArray { + var basep *BitArray + if sep != nil { + basep = sep.BitArray() + } + switch len(elems) { + case 0: + return zeroBitArray + case 1: + if elems[0] == nil { + return zeroBitArray + } + return elems[0].BitArray() + } + bb := NewBuilder() + for i, elem := range elems { + if i != 0 && basep != nil { + _, _ = bb.WriteBitArray(basep) + } + if elem != nil { + _, _ = bb.WriteBitArray(elem) + } + } + + return bb.BitArray() +} + +// Append returns the new BitArray resulting from appending the passed elements +// to the current bit array. +func (ba *BitArray) Append(bas ...BitArrayer) *BitArray { + switch len(bas) { + case 0: + if ba.IsZero() { + return zeroBitArray + } + return ba + case 1: + if bas[0] == nil { + return ba + } + return ba.append1(bas[0]) + } + + bb := NewBuilder(ba) + for _, bai := range bas { + _, _ = bb.WriteBitArray(bai) + } + + return bb.BitArray() +} + +func (ba *BitArray) append1(x BitArrayer) *BitArray { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + switch { + case ba.IsZero(): + if bax.IsZero() { + return zeroBitArray + } + return bax + case bax.IsZero(): + return ba + } + if bax.b == nil { + nBits := ba.nBits + bax.nBits + if ba.b == nil { + return &BitArray{nBits: nBits} + } + nBytes := (nBits + 7) >> 3 + if nBytes <= cap(ba.b) { + return &BitArray{b: ba.b[:nBytes], nBits: nBits} + } + buf := allocByteSlice(nBytes) + copy(buf, ba.b) + return &BitArray{b: buf, nBits: nBits} + } + nBits := ba.nBits + bax.nBits + buf := allocByteSlice((nBits + 7) >> 3) + copy(buf, ba.b) + if copyBits(buf, bax.b, ba.nBits, 0, bax.nBits) && ba.b == nil { + return &BitArray{nBits: nBits} + } + return &BitArray{b: buf, nBits: nBits} +} + +// Repeat returns a bit array consisting of count copies of the bit array ba. +func (ba *BitArray) Repeat(count int) *BitArray { + switch { + case count < 0: + panicf("invalid count: %d < 0", count) + case ba.IsZero(), count == 0: + return zeroBitArray + case count == 1: + return ba + case ba.b == nil: + return &BitArray{nBits: ba.nBits * count} + } + bb := NewBuilder() + for i := 0; i < count; i++ { + _, _ = bb.WriteBitArray(ba) + } + + return bb.BitArray() +} diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_convert.go b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_convert.go new file mode 100644 index 0000000000..208ccb78b5 --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_convert.go @@ -0,0 +1,53 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "encoding/binary" + "math/big" +) + +// NewFromInt creates a BitArray from big.Int. The returned bit array represents +// the absolute value of v in big-endian byte order. For big.Int(0), it returns +// a "0" instead of an empty bit array. +func NewFromInt(v *big.Int) *BitArray { + nBits := v.BitLen() + if nBits == 0 { + return &BitArray{nBits: 1} + } + + return NewFromBytes(v.Bytes(), (8-nBits&7)&7, nBits) +} + +// ToInt parses the bit array as a big-endian representation, and convert it to +// an unsigned integer value. The leading 0s have no effect on the result. +func (ba *BitArray) ToInt() *big.Int { + v := big.NewInt(0) + if ba.IsZero() || ba.b == nil { + return v + } + v.SetBytes(ba.b) + + return v.Rsh(v, uint(ba.NumPadding())) +} + +// ToUint64 is the same as ToInt except that it returns uint64 instead of +// *big.Int. If the bit array length exceeds 64 bits, only the last 64 bits +// will be used. +func (ba *BitArray) ToUint64() uint64 { + if ba.IsZero() || ba.b == nil { + return 0 + } + switch { + case ba.nBits < 64: + buf := make([]byte, 8) + copy(buf[8-len(ba.b):], ba.b) + return binary.BigEndian.Uint64(buf) >> ba.NumPadding() + case 64 < ba.nBits: + ba = ba.Slice(ba.nBits-64, ba.nBits) + } + + return binary.BigEndian.Uint64(ba.b) +} diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_encoding.go b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_encoding.go new file mode 100644 index 0000000000..217060f6ab --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_encoding.go @@ -0,0 +1,93 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +// import () + +// MarshalBinary implements the standard encoding.BinaryMarshaler interface to +// marshal a BitArray into a binary form. +// +// This appends 0 to 7 bits padding followed by 3 bits marker indicating the +// actual number of padding LSBs at the end of the original bit array. +// +// | nBits&7 | last two bytes mark | pad | +// +---------+-----------+------------+-----+ +// | 5 | 1111 1111 | 1111 1:000 | 3 | +// | 4 | 1111 1111 | 1111 -:001 | 4 | +// | 3 | 1111 1111 | 111- -:010 | 5 | +// | 2 | 1111 1111 | 11-- -:011 | 6 | +// | 1 | 1111 1111 | 1--- -:100 | 7 | +// | 0 | 1111 1111 | ---- -:101 | 8 | +// | 7 | 1111 111- | ---- -:110 | 9 | +// | 6 | 1111 11-- | ---- -:111 | 10 | +func (ba *BitArray) MarshalBinary() ([]byte, error) { + if ba.IsZero() { + return []byte{}, nil + } + nBytes := (ba.nBits + 7) >> 3 + nfrac := ba.nBits & 7 + marker := byte((13 - nfrac) & 7) + if nfrac == 0 || nfrac>>1 == 3 { + buf := make([]byte, nBytes+1) + if ba.b != nil { + copy(buf, ba.b) + } + buf[nBytes] = marker + return buf, nil + } + buf := make([]byte, nBytes) + if ba.b != nil { + copy(buf, ba.b) + } + buf[nBytes-1] |= marker + + return buf, nil +} + +// MarshalText implements the standard encoding.TextMarshaler interface to +// marshal a BitArray into a textual form. This always returns a nil error. +func (ba *BitArray) MarshalText() ([]byte, error) { + if ba.IsZero() { + return []byte{}, nil + } + sb := make([]byte, ba.nBits) + if ba.b == nil { + fill30(sb) + } else { + for i := 0; i < ba.nBits; i++ { + sb[i] = '0' + ba.b[i>>3]>>(7-i&7)&1 + } + } + + return sb, nil +} + +// MarshalJSON implements the standard json.Marshaler interface to marshal a +// BitArray into a JSON form. This always returns a nil error. +func (ba *BitArray) MarshalJSON() ([]byte, error) { + if ba.IsZero() { + return []byte(`""`), nil + } + sb := make([]byte, ba.nBits+2) + if ba.b == nil { + fill30(sb) + } else { + for i := 0; i < ba.nBits; i++ { + sb[i+1] = '0' + ba.b[i>>3]>>(7-i&7)&1 + } + } + sb[0] = '"' + sb[ba.nBits+1] = '"' + + return sb, nil +} + +// MarshalYAML implements the yaml.Marshaler. +func (ba *BitArray) MarshalYAML() (interface{}, error) { + if ba == nil { + return nil, nil + } + return ba.String(), nil +} diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_format.go b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_format.go new file mode 100644 index 0000000000..25d120a674 --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_format.go @@ -0,0 +1,342 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "bytes" + "fmt" + "io" +) + +// Format implements the fmt.Formatter interface to format BitArray values using +// the standard fmt.Printf family functions. +// +// Verbs: +// %b, %s binary, 1 digit represents 1 bit. +// %q quoted version of %b. +// %v default format, same as %b. +// %o octal, 1 digit represents 3 bits. +// %x, %X hexadecimal, 1 digit represents 4 bits. +// +// Flags: +// ' ' (space) print a separator space every 8 digits. +// # more separators, ' ' and/or '-' every 4 digits. +// - left-justify +// + print the number of padding bits at the end, for %o, %x, %X +func (ba BitArray) Format(s fmt.State, verb rune) { + switch verb { + case 'b', 's', 'q': + wid, widOK := s.Width() + if !widOK { + wid = 0 + } + if s.Flag(int('0')) { + fmt.Fprintf(s, "%%!%c(ERROR: unsupported flag 0)", verb) + break + } + if err := ba.writeBinStr( + s, wid, s.Flag(int(' ')), s.Flag(int('#')), + verb == 'q', s.Flag(int('-')), + ); err != nil { + fmt.Fprintf(s, "%%!%c(ERROR: %v)", verb, err) + break + } + + case 'v': + if s.Flag(int('#')) { + fmt.Fprintf(s, "%%!%c(ERROR: unsupported flag #)", verb) + break + } + if err := ba.writeBinStr(s, 0, false, false, false, false); err != nil { + fmt.Fprintf(s, "%%!%c(ERROR: %v)", verb, err) + break + } + + case 'o': + wid, widOK := s.Width() + if !widOK { + wid = 0 + } + if s.Flag(int('0')) { + fmt.Fprintf(s, "%%!%c(ERROR: unsupported flag 0)", verb) + break + } + if err := ba.writeOctStr( + s, wid, + s.Flag(int(' ')), s.Flag(int('#')), + s.Flag(int('+')), s.Flag(int('-')), + ); err != nil { + fmt.Fprintf(s, "%%!%c(ERROR: %v)", verb, err) + break + } + + case 'x', 'X': + wid, widOK := s.Width() + if !widOK { + wid = 0 + } + if s.Flag(int('0')) { + fmt.Fprintf(s, "%%!%c(ERROR: unsupported flag 0)", verb) + break + } + if err := ba.writeHexStr( + s, wid, verb == 'X', + s.Flag(int(' ')), s.Flag(int('#')), + s.Flag(int('+')), s.Flag(int('-')), + ); err != nil { + fmt.Fprintf(s, "%%!%c(ERROR: %v)", verb, err) + break + } + + default: + fmt.Fprintf(s, "%%!%c(BitArray=", verb) + if err := ba.writeBinStr(s, 0, true, true, true, false); err != nil { + fmt.Fprintf(s, "(ERROR: %v)", err) + } + fmt.Fprint(s, ")") + } +} + +func (ba *BitArray) writeBinStr(wr io.Writer, wid int, sep8, sep4, quote, left bool) error { + sep8 = sep8 || sep4 + sLen := ba.Len() + if 0 < ba.nBits && sep8 { + n4d := (ba.nBits + 3) >> 2 // num of 1111 + n8d := (n4d + 1) >> 1 // num of 11111111 + if sep4 { + sLen += n4d - 1 + } else { + sLen += n8d - 1 + } + } + if quote { + sLen += 2 + } + if wid < sLen { + wid = sLen + } + if !left { + if pad := wid - sLen; 0 < pad { + if _, err := wr.Write(bytes.Repeat([]byte{' '}, pad)); err != nil { + return fmt.Errorf("pad-l: %w", err) + } + } + } + if quote { + if _, err := wr.Write([]byte{'"'}); err != nil { + return fmt.Errorf("quote-l: %w", err) + } + } + octbuf := make([]byte, 9) + for i := 0; i < (ba.nBits+7)>>3; i++ { + var wb byte + if ba.b != nil { + wb = ba.b[i] + } + if sep8 && i != 0 { + if _, err := wr.Write([]byte{' '}); err != nil { + return fmt.Errorf("oct-sep: %w", err) + } + } + cLSB := 0 // num of LSBs to be cleared + if i+1 == (ba.nBits+7)>>3 { // last byte + cLSB = ba.NumPadding() + } + bi := 0 + for j := 7; cLSB <= j; j-- { + if sep4 && j == 3 { + octbuf[bi] = byte('-') + bi++ + } + octbuf[bi] = '0' + wb>>j&1 + bi++ + } + if _, err := wr.Write(octbuf[:bi]); err != nil { + return fmt.Errorf("byte: %d(%d): %w", i, cLSB, err) + } + } + if quote { + if _, err := wr.Write([]byte{'"'}); err != nil { + return fmt.Errorf("quote-r: %w", err) + } + } + if left { + if pad := wid - sLen; 0 < pad { + if _, err := wr.Write(bytes.Repeat([]byte{' '}, pad)); err != nil { + return fmt.Errorf("pad-r: %w", err) + } + } + } + + return nil +} + +func (ba *BitArray) writeOctStr(wr io.Writer, wid int, sep8, sep4, rpad, left bool) error { + sep8 = sep8 || sep4 + ntri, nfrc := ba.nBits/3, ba.nBits%3 // num of 777, and remaining bits + if nfrc != 0 { + ntri++ + } + npad := (3 - nfrc) % 3 // num of last padding bits + + sLen := ntri + if 0 < ba.nBits && sep8 { + n4d := (ntri + 3) >> 2 // num of 7777 + n8d := (n4d + 1) >> 1 // num of 77777777 + if sep4 { + sLen += n4d - 1 + } else { + sLen += n8d - 1 + } + } + if rpad && npad != 0 { // (pad=2) + if sep8 { + sLen++ + } + sLen += 7 + } + if wid < sLen { + wid = sLen + } + if !left { + if pad := wid - sLen; 0 < pad { + if _, err := wr.Write(bytes.Repeat([]byte{' '}, pad)); err != nil { + return fmt.Errorf("pad-l: %w", err) + } + } + } + + iby, ibi := 0, 0 // source cursor on ba.b, byte and bit + for i := 0; i < ntri; i++ { + if sep8 && i != 0 && i&3 == 0 { + if i&7 == 0 { + if _, err := wr.Write([]byte{' '}); err != nil { + return fmt.Errorf("sep8: %w", err) + } + } else if sep4 { + if _, err := wr.Write([]byte{'-'}); err != nil { + return fmt.Errorf("sep4: %w", err) + } + } + } + var b byte + if ba.b != nil { + b = ba.b[iby] + } + rsf := (5 - ibi) + if 0 < rsf { + b >>= rsf + } else { + b <<= -rsf + } + b &= 7 + ibi += 3 + if 7 < ibi { + iby++ + if iby < (ba.nBits+7)>>3 { + ibi &= 7 + if ba.b != nil { + b |= ba.b[iby] >> (8 - ibi) & byte(ibi|1) + } + } + } + if _, err := wr.Write([]byte{'0' + b}); err != nil { + return fmt.Errorf("oct: %w", err) + } + } + if rpad && npad != 0 { // (pad=2) + b := []byte{' ', '(', 'p', 'a', 'd', '=', '0' + byte(npad), ')'} + if !sep8 { + b = b[1:] + } + if _, err := wr.Write(b); err != nil { + return fmt.Errorf("npad: %w", err) + } + } + if left { + if pad := wid - sLen; 0 < pad { + if _, err := wr.Write(bytes.Repeat([]byte{' '}, pad)); err != nil { + return fmt.Errorf("pad-r: %w", err) + } + } + } + + return nil +} + +func (ba *BitArray) writeHexStr(wr io.Writer, wid int, upper, sep8, sep4, rpad, left bool) error { + const ( + hexCharsL = "0123456789abcdef" + hexCharsU = "0123456789ABCDEF" + ) + sep8 = sep8 || sep4 + nnbl := (ba.nBits + 3) >> 2 // num of f + npad := ba.NumPadding() & 3 + sLen := nnbl + if 0 < ba.nBits && sep8 { + n4d := (nnbl + 3) >> 2 // num of ffff + n8d := (n4d + 1) >> 1 // num of ffffffff + if sep4 { + sLen += n4d - 1 + } else { + sLen += n8d - 1 + } + } + if rpad && npad != 0 { // (pad=3) + if sep8 { + sLen++ + } + sLen += 7 + } + if wid < sLen { + wid = sLen + } + if !left { + if pad := wid - sLen; 0 < pad { + if _, err := wr.Write(bytes.Repeat([]byte{' '}, pad)); err != nil { + return fmt.Errorf("pad-l: %w", err) + } + } + } + hexc := hexCharsL + if upper { + hexc = hexCharsU + } + for i := 0; i < nnbl; i++ { + if i != 0 && sep8 && i&3 == 0 { + if sep4 || i&7 == 0 { + if _, err := wr.Write([]byte{' '}); err != nil { + return fmt.Errorf("sep: %w", err) + } + } + } + boff := 4 ^ i&1<<2 + var b byte + if ba.b != nil { + b = ba.b[i>>1] + } + if _, err := wr.Write([]byte{hexc[b>>boff&0xf]}); err != nil { + return fmt.Errorf("nibble: %w", err) + } + } + if rpad && npad != 0 { // (pad=3) + b := []byte{' ', '(', 'p', 'a', 'd', '=', '0' + byte(npad), ')'} + if !sep8 { + b = b[1:] + } + if _, err := wr.Write(b); err != nil { + return fmt.Errorf("npad: %w", err) + } + } + if left { + if pad := wid - sLen; 0 < pad { + if _, err := wr.Write(bytes.Repeat([]byte{' '}, pad)); err != nil { + return fmt.Errorf("pad-r: %w", err) + } + } + } + + return nil +} diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_iterate.go b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_iterate.go new file mode 100644 index 0000000000..05a040af47 --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_iterate.go @@ -0,0 +1,55 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "errors" +) + +// BreakIteration is used as a return value from IterateFunc to indicate the +// current iteration is to be terminated without error. +//nolint:revive,stylecheck,errname // this is not an error +var BreakIteration = errors.New("break iteration") + +// IterateFunc is the type of the function called by Iterate to process each bit +// of a BitArray. The i argument contains the offset from the beginning. The b +// argument is the actual bit value, 0 or 1. +// +// If the function returns the special error BreakIteration, Iterate breaks the +// current iteration without error. Otherwise, if the function returns a non-nil +// error, Iterate stops the current iteration and returns that error. +type IterateFunc func(i, b int) error + +// Iterate iterates calling the function fn for each bit in order from the +// beginning of the bit array. Iterate returns an error only if the function fn +// returns an error that is not BreakIteration. Otherwise, it returns nil after +// calling fn for the last bit. +func (ba *BitArray) Iterate(fn IterateFunc) error { + switch { + case ba.IsZero(): + return nil + case ba.b == nil: + for i := 0; i < ba.nBits; i++ { + if err := fn(i, 0); err != nil { + if errors.Is(err, BreakIteration) { + return nil + } + return err + } + } + return nil + } + for i := 0; i < ba.nBits; i++ { + b := int(ba.b[i>>3] >> (7 - i&7) & 1) + if err := fn(i, b); err != nil { + if errors.Is(err, BreakIteration) { + return nil + } + return err + } + } + + return nil +} diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_parse.go b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_parse.go new file mode 100644 index 0000000000..c73d1681cd --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_parse.go @@ -0,0 +1,221 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "fmt" + "regexp" + "strings" + "unicode" +) + +var ( + parsePSepRE = regexp.MustCompile(`\s*[+]\s*`) + parseScanRE = regexp.MustCompile( + `^\s*(0([box]))?([-_:0-9a-fA-F]+)( ?[(](pad=|!)([0-3])[)])?\s*(.*)$`, + ) + parseBaseExpr = map[byte]byte{'b': 2, 'o': 8, 'x': 16} + parseDigits = map[rune]byte{ + '0': 0, '1': 1, '2': 2, '3': 3, '4': 4, + '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, + 'a': 0xa, 'b': 0xb, 'c': 0xc, 'd': 0xd, 'e': 0xe, 'f': 0xf, + 'A': 0xa, 'B': 0xb, 'C': 0xc, 'D': 0xd, 'E': 0xe, 'F': 0xf, + } +) + +// MustParse is like Parse but panics if the expression can not be parsed. It +// simplifies safe initialization of global variables holding bit arrays. +func MustParse(s string) *BitArray { + ba, err := Parse(s) + if err != nil { + panicf("MustParse(%q): %d", s, err) + } + return ba +} + +// Parse parses a string as a bit array representation, like "01010". +// +// Multiple tokens can be presented, which are separated by one or more spaces +// and/or a single "+" sign. All bits contained in tokens will be simply +// concatenated. Each token can be binary, octal, or hexademical, and the type +// is specified by the prefixes "0b", "0o" or "0x". Tokens without a prefix are +// always parsed as binary representation. Each token also can contain any +// number of separators "-", "_", and ":". These separators are safely ignored. +// +// Note that spaces between digits are parsed as token delimiters, not +// separators within tokens. This is not a problem for binary representations, +// but "0o" and "0x" prefixes have no effect beyond the spaces. For example, +// "0b0000 1111" is legal, but "0x0000 ffff" is illegal. Because the "ffff" is +// interpreted as a second token without a prefix, so "f" cannot be parsed as +// binary representation. Use other separators instead: e.g. "0x0000_ffff". +// +// bitarray = *WSP [ token *( token-sep token ) ] *WSP +// token-sep = *WSP ( WSP / "+" ) *WSP +// token = bin-token / oct-token / hex-token +// bin-token = [ "0b" [ char-sep ] ] bin-char *( [ char-sep ] bin-char ) +// oct-token = "0o" 1*( [ char-sep ] oct-char ) [ oct-pad ] +// hex-token = "0x" 1*( [ char-sep ] hex-char ) [ hex-pad ] +// char-sep = "-" / "_" / ":" +// bin-char = "0" / "1" +// oct-char = bin-char / "2" / "3" / "4" / "5" / "6" / "7" +// hex-char = oct-char / "8" / "9" +// / "a" / "b" / "c" / "d" / "e" / "f" +// / "A" / "B" / "C" / "D" / "E" / "F" +// oct-pad = [ " " ] "(" pad-ind ( "0" / "1" / "2" ) ")" +// hex-pad = [ " " ] "(" pad-ind ( "0" / "1" / "2" / "3" ) ")" +// pad-ind = "pad=" / "!" +func Parse(s string) (*BitArray, error) { + s = strings.Map(parseMapSpaces, s) + zf := true + bb := NewBuilder() + lines := parsePSepRE.Split(s, -1) + for _, line := range lines { + line = strings.TrimSpace(line) + if len(line) == 0 && 1 < len(lines) { + return nil, fmt.Errorf("%q: %w: empty token", s, ErrIllegalExpression) + } + for 0 < len(line) { + m := parseScanRE.FindStringSubmatch(line) + if len(m) != parseScanRE.NumSubexp()+1 { + return nil, fmt.Errorf("%q: %w: malformed input", line, ErrIllegalExpression) + } + tzf, err := parseToken(bb, m[2], m[3], m[6]) + if err != nil { + return nil, fmt.Errorf("%q: malformed token: %w", m[0], err) + } + zf = zf && tzf + line = m[7] + } + } + if zf { + return &BitArray{nBits: bb.nBits}, nil + } + + return bb.BitArray(), nil +} + +func parseMapSpaces(r rune) rune { + if unicode.IsSpace(r) { + return ' ' + } + return r +} + +func parseToken(bb *Builder, baseStr, bodyStr, npadStr string) (bool, error) { + base := byte(2) + if len(baseStr) != 0 { + b, ok := parseBaseExpr[baseStr[0]] + if !ok { + return false, fmt.Errorf(`%w: base %q`, ErrIllegalExpression, baseStr) + } + base = b + } + + // digits + var zfb byte + digits := make([]byte, 0, len(bodyStr)) + allowSep := baseStr != "" + var lastSep rune + for _, r := range bodyStr { + if dv, ok := parseDigits[r]; ok { + if base <= dv { + return false, fmt.Errorf(`%w: digit '%x' for base %d`, ErrIllegalExpression, dv, base) + } + zfb |= dv + digits = append(digits, dv) + allowSep = true + continue + } + if strings.ContainsRune("-_:", r) { + if !allowSep { + return false, fmt.Errorf(`%w: separator '%c'`, ErrIllegalExpression, r) + } + allowSep = false + lastSep = r + continue + } + return false, fmt.Errorf("%w: unexpected '%c'", ErrIllegalExpression, r) + } + if !allowSep { + return false, fmt.Errorf(`%w: token ends with a separator '%c'`, ErrIllegalExpression, lastSep) + } + + // padding + npad := 0 + if npadStr != "" { + npad = int(npadStr[0]) - int('0') + } + switch base { + case 2: + if npadStr != "" { + return false, fmt.Errorf("%w: pad=%s for bin token", ErrIllegalExpression, npadStr) + } + bb.WriteByteBits(digits) + case 8: + if 2 < npad { + return false, fmt.Errorf("%w: pad=%s for oct token", ErrIllegalExpression, npadStr) + } + for i, digit := range digits { + switch { + case i+1 < len(digits) || npad == 0: + bb.WriteByteBits([]byte{ + digit >> 2, + digit >> 1, + digit, + }) + case npad == 1: + bb.WriteByteBits([]byte{ + digit >> 2, + digit >> 1, + }) + case npad == 2: + bb.WriteByteBits([]byte{ + digit >> 2, + }) + } + } + case 16: + if 3 < npad { // this case should have been eliminated by regex + return false, fmt.Errorf( + "%w: pad=%s for hex token", + ErrIllegalExpression, npadStr, + ) + } + for i, digit := range digits { + switch { + case i+1 < len(digits) || npad == 0: + bb.WriteByteBits([]byte{ + digit >> 3, + digit >> 2, + digit >> 1, + digit, + }) + case npad == 1: + bb.WriteByteBits([]byte{ + digit >> 3, + digit >> 2, + digit >> 1, + }) + case npad == 2: + bb.WriteByteBits([]byte{ + digit >> 3, + digit >> 2, + }) + case npad == 3: + bb.WriteByteBits([]byte{ + digit >> 3, + }) + } + } + default: + // this should never happen + return false, fmt.Errorf( + "%w: base %d(%s)", + ErrIllegalExpression, base, baseStr, + ) + } + + return zfb == 0, nil +} diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_rand.go b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_rand.go new file mode 100644 index 0000000000..fa571e247f --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_rand.go @@ -0,0 +1,60 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + crand "crypto/rand" + "fmt" + "math/rand" +) + +// Rand generates a random bit array with nBits length. +// +// This is based on the crypto/rand package and cryptographically secure. +func Rand(nBits int) (*BitArray, error) { + if nBits == 0 { + return zeroBitArray, nil + } + + buf := allocByteSlice((nBits + 7) >> 3) + if _, err := crand.Read(buf); err != nil { + return &BitArray{nBits: nBits}, fmt.Errorf("failed to read random: %w", err) + } + if npad := (8 - nBits&7) & 7; npad != 0 { + buf[len(buf)-1] &= byte(0xff) << npad + } + + return &BitArray{b: buf, nBits: nBits}, nil +} + +// PseudoRand generates a random bit array with nBits length. If gen is non-nil, +// it will be used as the source instead of the default source. In this case, it +// is not safe for concurrent use by multiple goroutines. Only the default +// source is safe for concurrent use. +// +// This is based on math/rand package, and not cryptographically secure. Use +// Rand for security-sensitive data. +// +// Note that even generating less than 8 bits consumes 1 byte from the source. +// Therefore, the results are different between the case where 4 bits are +// generated twice and concatenated, and the case where 8 bits are generated at +// once, even in the same source state. +func PseudoRand(nBits int, gen *rand.Rand) *BitArray { + if nBits == 0 { + return zeroBitArray + } + + buf := allocByteSlice((nBits + 7) >> 3) + if gen == nil { + _, _ = rand.Read(buf) //nolint:gosec // intentionally provided option + } else { + _, _ = gen.Read(buf) + } + if npad := (8 - nBits&7) & 7; npad != 0 { + buf[len(buf)-1] &= byte(0xff) << npad + } + + return &BitArray{b: buf, nBits: nBits} +} diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_search.go b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_search.go new file mode 100644 index 0000000000..b1bfe498c7 --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_search.go @@ -0,0 +1,144 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "bytes" +) + +// HasPrefix reports whether the bit array starts with prefix. +func (ba *BitArray) HasPrefix(prefix BitArrayer) bool { + var baPrefix *BitArray + if prefix != nil { + baPrefix = prefix.BitArray() + } + switch { + case baPrefix.IsZero(): + return true + case ba.IsZero(), ba.nBits < baPrefix.nBits: + return false + case ba.b == nil: + return baPrefix.b == nil || allBytesZero(baPrefix.b) + } + if baPrefix.nBits < ba.nBits { + ba = ba.Slice(0, baPrefix.nBits) + } + switch { + case baPrefix.b == nil: + return ba.b == nil || allBytesZero(ba.b) + case ba.b == nil: + return allBytesZero(baPrefix.b) + } + + return bytes.Equal(ba.b, baPrefix.b) +} + +// HasSuffix reports whether the bit array ends with suffix. +func (ba *BitArray) HasSuffix(suffix BitArrayer) bool { + var baSuffix *BitArray + if suffix != nil { + baSuffix = suffix.BitArray() + } + switch { + case baSuffix.IsZero(): + return true + case ba.IsZero(), ba.nBits < baSuffix.nBits: + return false + case ba.b == nil: + return baSuffix.b == nil || allBytesZero(baSuffix.b) + } + if baSuffix.nBits < ba.nBits { + ba = ba.Slice(ba.nBits-baSuffix.nBits, ba.nBits) + } + switch { + case baSuffix.b == nil: + return ba.b == nil || allBytesZero(ba.b) + case ba.b == nil: + return allBytesZero(baSuffix.b) + } + + return bytes.Equal(ba.b, baSuffix.b) +} + +// Index returns the index of the first instance of x in the bit array ba, or -1 +// if x is not present in ba. +func (ba *BitArray) Index(x BitArrayer) int { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + switch { + case ba.Len() < bax.Len(): + return -1 + case bax.IsZero(): + return 0 + case ba.b == nil && bax.b == nil: + return 0 + } + ba8 := ba.bits8() + bax8 := bax.bits8() + + return bytes.Index(ba8, bax8) +} + +// LastIndex returns the index of the last instance of x in the bit array ba, or +// -1 if x is not present in ba. +func (ba *BitArray) LastIndex(x BitArrayer) int { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + switch { + case ba.Len() < bax.Len(): + return -1 + case bax.IsZero(): + return ba.Len() + case ba.b == nil && bax.b == nil: + return ba.nBits - bax.nBits + } + ba8 := ba.bits8() + bax8 := bax.bits8() + + return bytes.LastIndex(ba8, bax8) +} + +// AllIndex returns the indexes of the all instance of x in the bit array ba, or +// empty slice if x is not present in ba. +func (ba *BitArray) AllIndex(x BitArrayer) []int { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + switch { + case ba.Len() < bax.Len(): + return []int{} + case bax.IsZero(): + idxs := make([]int, ba.Len()+1) + for i := range idxs { + idxs[i] = i + } + return idxs + case ba.b == nil && bax.b == nil: + idxs := make([]int, ba.nBits-bax.nBits+1) + for i := range idxs { + idxs[i] = i + } + return idxs + } + ba8 := ba.bits8() + bax8 := bax.bits8() + var idxs []int + i := 0 + for i < ba.nBits-bax.nBits+1 { + idx := bytes.Index(ba8[i:], bax8) + if idx < 0 { + break + } + idx += i + idxs = append(idxs, idx) + i = idx + 1 + } + return idxs +} diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_sha1.go b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_sha1.go new file mode 100644 index 0000000000..71c8c25376 --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_sha1.go @@ -0,0 +1,48 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + //nolint:gosec // intentionally provided option + _ "crypto/sha1" // block() + "encoding/binary" + _ "unsafe" // linkname +) + +// SHA1 returns the SHA-1 checksum of the bit array. It treats the bit array as +// a bit-oriented message to compute the checksum as defined in RFC 3174. +func (ba *BitArray) SHA1() [20]byte { + nBits := ba.Len() + buf := NewBuffer((nBits + 1 + 64 + 511) &^ 511) + buf.PutBitArrayAt(0, ba) + buf.PutBitAt(nBits, 1) + binary.BigEndian.PutUint64(buf.b[len(buf.b)-8:], uint64(nBits)) + + d := &sha1Digest{} + sha1Reset(d) + sha1Block(d, buf.b) + + var sha1 [20]byte + for i := 0; i < 5; i++ { + binary.BigEndian.PutUint32(sha1[i<<2:], d.h[i]) + } + + return sha1 +} + +// crypto/sha1.digest +// TODO: if possible, use crypto/sha1.digest directly +type sha1Digest struct { + h [5]uint32 + x [64]byte //nolint:structcheck,unused // for Reset() + nx int //nolint:structcheck,unused // for Reset() + len uint64 //nolint:structcheck,unused // for Reset() +} + +//go:linkname sha1Block crypto/sha1.block +func sha1Block(*sha1Digest, []byte) + +//go:linkname sha1Reset crypto/sha1.(*digest).Reset +func sha1Reset(*sha1Digest) diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_sha256.go b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_sha256.go new file mode 100644 index 0000000000..4b5f0536f5 --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_sha256.go @@ -0,0 +1,64 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + _ "crypto/sha256" // block() + "encoding/binary" + _ "unsafe" // linkname +) + +// SHA256 returns the SHA-256 checksum of the bit array. It treats the bit array +// as a bit-oriented message to compute the checksum as defined in FIPS 180-4. +func (ba *BitArray) SHA256() (d256 [32]byte) { + return ba.sha256CheckSum(false) +} + +// SHA224 returns the SHA-224 checksum of the bit array. It treats the bit array +// as a bit-oriented message to compute the checksum as defined in FIPS 180-4. +func (ba *BitArray) SHA224() (d224 [28]byte) { + d256 := ba.sha256CheckSum(true) + copy(d224[:], d256[:]) + return +} + +func (ba *BitArray) sha256CheckSum(is224 bool) [32]byte { + nBits := ba.Len() + buf := NewBuffer((nBits + 1 + 64 + 511) &^ 511) + buf.PutBitArrayAt(0, ba) + buf.PutBitAt(nBits, 1) + binary.BigEndian.PutUint64(buf.b[len(buf.b)-8:], uint64(nBits)) + + d := &sha256Digest{is224: is224} + sha256Reset(d) + sha256Block(d, buf.b) + + n := 8 + if is224 { + n = 7 + } + var d256 [32]byte + for i := 0; i < n; i++ { + binary.BigEndian.PutUint32(d256[i<<2:], d.h[i]) + } + + return d256 +} + +// crypto/sha256.digest +// TODO: if possible, use crypto/sha256.digest directly +type sha256Digest struct { + h [8]uint32 + x [64]byte //nolint:structcheck,unused // for Reset() + nx int //nolint:structcheck,unused // for Reset() + len uint64 //nolint:structcheck,unused // for Reset() + is224 bool +} + +//go:linkname sha256Block crypto/sha256.block +func sha256Block(*sha256Digest, []byte) + +//go:linkname sha256Reset crypto/sha256.(*digest).Reset +func sha256Reset(*sha256Digest) diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_sha512.go b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_sha512.go new file mode 100644 index 0000000000..da6ee6be1f --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_sha512.go @@ -0,0 +1,86 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "crypto" + _ "crypto/sha512" // block() + "encoding/binary" + _ "unsafe" // linkname +) + +// SHA512 returns the SHA-512 checksum of the bit array. It treats the bit array +// as a bit-oriented message to compute the checksum as defined in FIPS 180-4. +func (ba *BitArray) SHA512() (d512 [64]byte) { + return ba.sha512CheckSum(crypto.SHA512) +} + +// SHA384 returns the SHA-384 checksum of the bit array. It treats the bit array +// as a bit-oriented message to compute the checksum as defined in FIPS 180-4. +func (ba *BitArray) SHA384() (d384 [48]byte) { + d512 := ba.sha512CheckSum(crypto.SHA384) + copy(d384[:], d512[:]) + return +} + +// SHA512_256 returns the SHA-512/256 checksum of the bit array. It treats the +// bit array as a bit-oriented message to compute the checksum as defined in +// FIPS 180-4. +//nolint:revive,stylecheck // not an ALL_CAPS +func (ba *BitArray) SHA512_256() (d256 [32]byte) { + d512 := ba.sha512CheckSum(crypto.SHA512_256) + copy(d256[:], d512[:]) + return +} + +// SHA512_224 returns the SHA-512/224 checksum of the bit array. It treats the +// bit array as a bit-oriented message to compute the digest as defined in FIPS +// 180-4. +//nolint:revive,stylecheck // not an ALL_CAPS +func (ba *BitArray) SHA512_224() (d224 [28]byte) { + d512 := ba.sha512CheckSum(crypto.SHA512_224) + copy(d224[:], d512[:]) + return +} + +func (ba *BitArray) sha512CheckSum(hash crypto.Hash) [64]byte { + nBits := ba.Len() + buf := NewBuffer((nBits + 1 + 128 + 1023) &^ 1023) + buf.PutBitArrayAt(0, ba) + buf.PutBitAt(nBits, 1) + // binary.BigEndian.PutUint64(buf.b[len(buf.b)-16:], uint64(hi)) // for nBits > max-uint64 + binary.BigEndian.PutUint64(buf.b[len(buf.b)-8:], uint64(nBits)) + + d := &sha512Digest{function: hash} + sha512Reset(d) + sha512Block(d, buf.b) + + n := 8 + if hash == crypto.SHA384 { + n = 6 + } + var d512 [64]byte + for i := 0; i < n; i++ { + binary.BigEndian.PutUint64(d512[i<<3:], d.h[i]) + } + + return d512 +} + +// crypto/sha512.digest +// TODO: if possible, use crypto/sha512.digest directly +type sha512Digest struct { + h [8]uint64 + x [128]byte //nolint:structcheck,unused // for Reset() + nx int //nolint:structcheck,unused // for Reset() + len uint64 //nolint:structcheck,unused // for Reset() + function crypto.Hash +} + +//go:linkname sha512Block crypto/sha512.block +func sha512Block(*sha512Digest, []byte) + +//go:linkname sha512Reset crypto/sha512.(*digest).Reset +func sha512Reset(*sha512Digest) diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_shift.go b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_shift.go new file mode 100644 index 0000000000..2c6a5058a8 --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_shift.go @@ -0,0 +1,117 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "math/bits" +) + +// Reverse returns the bit array with its bits in reversed order. +func (ba *BitArray) Reverse() *BitArray { + switch { + case ba.IsZero(): + return zeroBitArray + case ba.Len() == 1, ba.b == nil: + return ba + } + buf := make([]byte, len(ba.b)) + for i, o := range ba.b { + buf[len(ba.b)-1-i] = bits.Reverse8(o) + } + + return NewFromBytes(buf, ba.NumPadding(), ba.nBits) +} + +// ShiftLeft returns the bit array of shifted left by k bits. +// To shift to right, call ShiftLeft(-k). +func (ba *BitArray) ShiftLeft(k int) *BitArray { + switch { + case ba.IsZero(): + return zeroBitArray + case ba.b == nil: + return ba + case ba.nBits <= k, ba.nBits <= -k: + return &BitArray{nBits: ba.nBits} + case 0 < k: + return ba.shiftLeft(k) + case k < 0: + return ba.shiftRight(-k) + } + + return ba +} + +func (ba *BitArray) shiftLeft(k int) *BitArray { + if k&7 == 0 { + buf := allocByteSlice(len(ba.b)) + copy(buf, ba.b[k>>3:]) + return &BitArray{b: buf, nBits: ba.nBits} + } + + return ba.Slice(k, ba.nBits).append1(&BitArray{nBits: k}) +} + +func (ba *BitArray) shiftRight(k int) *BitArray { + if k&7 == 0 { + buf := allocByteSlice(len(ba.b)) + copy(buf[k>>3:], ba.b) + if npad := ba.NumPadding(); npad != 0 { + mask := byte(0xff) << npad + buf[len(buf)-1] &= mask + } + return &BitArray{b: buf, nBits: ba.nBits} + } + + return (&BitArray{nBits: k}).append1(ba.Slice(0, ba.nBits-k)) +} + +// RotateLeft returns the bit array of rotated left by k bits. +// To rotate to right, call RotateLeft(-k). +func (ba *BitArray) RotateLeft(k int) *BitArray { + switch { + case ba.IsZero(): + return zeroBitArray + case ba.b == nil: + return ba + case 0 < k: + return ba.rotateLeft(k) + case k < 0: + return ba.rotateRight(-k) + } + + return ba +} + +func (ba *BitArray) rotateLeft(k int) *BitArray { + k %= ba.nBits + switch { + case k == 0: + return ba + case k&7 == 0 && ba.nBits&7 == 0: + buf := allocByteSlice(len(ba.b)) + nbs := k >> 3 + copy(buf, ba.b[nbs:]) + copy(buf[len(buf)-nbs:], ba.b) + return &BitArray{b: buf, nBits: ba.nBits} + } + + return ba.Slice(k, ba.nBits).append1(ba.Slice(0, k)) +} + +func (ba *BitArray) rotateRight(k int) *BitArray { + k %= ba.nBits + switch { + case k == 0: + return ba + case k&7 == 0 && ba.nBits&7 == 0: + buf := allocByteSlice(len(ba.b)) + nbs := k >> 3 + copy(buf[nbs:], ba.b) + copy(buf, ba.b[len(ba.b)-nbs:]) + return &BitArray{b: buf, nBits: ba.nBits} + } + + return ba.Slice(ba.nBits-k, ba.nBits).append1(ba.Slice(0, ba.nBits-k)) +} diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_slice.go b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_slice.go new file mode 100644 index 0000000000..7a77b151a1 --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_slice.go @@ -0,0 +1,122 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +// Slice returns a new BitArray extracted as a subpart from the bit array in +// the same manner as Go's native slices. The two arguments start and end +// specify the indexes of the bits to select. 0 points to the first bit and +// ba.Len()-1 points to the last bit. The start and end select a half-open +// range which includes the start, but excludes the end. If the index is +// outside the range of the bit array, Slice will panic. +func (ba *BitArray) Slice(start, end int) *BitArray { + switch { + case start < 0, ba.Len() < start: + panicf("Slice: start %d out of range: 0..%d.", start, ba.Len()) + case end < 0, ba.Len() < end: + panicf("Slice: end %d out of range: 0..%d.", end, ba.Len()) + case end < start: + panicf("Slice: invalid range start=%d > end=%d.", start, end) + } + nBits := end - start + switch { + case nBits == 0: + return zeroBitArray + case start == 0 && end == ba.nBits: + return ba + case ba.b == nil: + return &BitArray{nBits: nBits} + case start == 0 && ba.hasTrailingZeros(ba.nBits-end): + return &BitArray{b: ba.b[:(end+7)>>3], nBits: nBits} + } + buf := allocByteSlice((nBits + 7) >> 3) + if copyBits(buf, ba.b, 0, start, nBits) { + return &BitArray{nBits: nBits} + } + + return &BitArray{b: buf, nBits: nBits} +} + +// SliceToEnd is shorthand for Slice(start, ba.Len()) and returns the subpart +// from the position specified start to the last bit. +func (ba *BitArray) SliceToEnd(start int) *BitArray { return ba.Slice(start, ba.Len()) } + +// ToWidth returns a new BitArray resized to wid bits with its contents +// preserved. If wid is less than ba.Len(), some bits will be lost. If wid is +// greater than be.Len(), the expanded space will be filled with 0s. In both +// cases, the MSBs or LSBs are fixed according to the specified align. +func (ba *BitArray) ToWidth(wid int, align Alignment) *BitArray { + switch { + case wid < 0: + panicf("ToWidth: negative wid %d.", wid) + case wid == 0: + return zeroBitArray + case ba.IsZero(), ba.b == nil: + return &BitArray{nBits: wid} + case wid == ba.nBits: + return ba + case wid < ba.nBits: + if align == AlignLeft { + return ba.Slice(0, wid) + } + return ba.Slice(ba.nBits-wid, ba.nBits) + } + add := &BitArray{nBits: wid - ba.nBits} + if align == AlignLeft { + return ba.append1(add) + } + return add.append1(ba) +} + +// TrimPrefix returns a new BitArray with the leading prefix removed. If the bit +// array does not start with prefix, ba itself is returned unchanged. +func (ba *BitArray) TrimPrefix(prefix BitArrayer) *BitArray { + var baPrefix *BitArray + if prefix != nil { + baPrefix = prefix.BitArray() + } + switch { + case ba.IsZero(): + return zeroBitArray + case !ba.HasPrefix(baPrefix), baPrefix.IsZero(): + return ba + } + + return ba.Slice(baPrefix.nBits, ba.nBits) +} + +// TrimSuffix returns a new BitArray with the trailing suffix removed. If the +// bit array does not end with prefix, ba itself is returned unchanged. +func (ba *BitArray) TrimSuffix(suffix BitArrayer) *BitArray { + var baSuffix *BitArray + if suffix != nil { + baSuffix = suffix.BitArray() + } + switch { + case ba.IsZero(): + return zeroBitArray + case !ba.HasSuffix(baSuffix), baSuffix.IsZero(): + return ba + } + + return ba.Slice(0, ba.nBits-baSuffix.nBits) +} + +// TrimLeadingZeros returns a new BitArray with the leading zeros removed. +func (ba *BitArray) TrimLeadingZeros() *BitArray { + if ba.IsZero() || ba.b == nil { + return zeroBitArray + } + + return ba.Slice(ba.LeadingZeros(), ba.nBits) +} + +// TrimTrailingZeros returns a new BitArray with the trailing zeros removed. +func (ba *BitArray) TrimTrailingZeros() *BitArray { + if ba.IsZero() || ba.b == nil { + return zeroBitArray + } + + return ba.Slice(0, ba.nBits-ba.TrailingZeros()) +} diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_sort.go b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_sort.go new file mode 100644 index 0000000000..bfd6019bfd --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/bitarray_sort.go @@ -0,0 +1,27 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "sort" +) + +// Slice attaches the methods of sort.Interface to []*BitArray, sorting in +// increasing order. +type Slice []*BitArray + +func (s Slice) Len() int { return len(s) } +func (s Slice) Less(i, j int) bool { return Compare(s[i], s[j]) < 0 } +func (s Slice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +// Sort is a convenience method: s.Sort() calls sort.Sort(s). +func (s Slice) Sort() { sort.Sort(s) } + +// Search searches for x in the sorted slice s using binary search and returns +// the index. The return value is the index to insert x if x is not present (it +// could be s.Len()). The slice must be sorted in ascending order. +func (s Slice) Search(x BitArrayer) int { + return sort.Search(len(s), func(i int) bool { return 0 <= Compare(s[i], x) }) +} diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/bitarrayer.go b/uniond/vendor/github.com/tunabay/go-bitarray/bitarrayer.go new file mode 100644 index 0000000000..9bdb843624 --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/bitarrayer.go @@ -0,0 +1,17 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +// BitArrayer is an interface implemented by any type that can be treated as a +// BitArray. Within this package, BitArray itself, Builder and Buffer implement +// this interface. +// +// BitArray returns the value of itself converted to a BitArray. Note that for +// non-immutable types, multiple calls may return different values. It is legal +// to return nil to represent an empty BitArray, and it should be treated the +// same as a zero-length BitArray. +type BitArrayer interface { + BitArray() *BitArray +} diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/buffer.go b/uniond/vendor/github.com/tunabay/go-bitarray/buffer.go new file mode 100644 index 0000000000..4b616405b1 --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/buffer.go @@ -0,0 +1,184 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "fmt" +) + +// Buffer is a bit array buffer whose contents can be updated by partial reading +// and writing with an offset. It is not safe for concurrent use by multiple +// goroutines. The zero value for Buffer represents a zero length buffer that +// can be resized and used. +type Buffer struct { + b []byte // nil only for zero length + nBits int + off int +} + +// NewBuffer creates a Buffer with the specified bit length. +func NewBuffer(nBits int) *Buffer { + switch { + case nBits < 0: + panicf("NewBuffer: negative nBits %d.", nBits) + case nBits == 0: + return &Buffer{} + } + + return &Buffer{ + b: allocByteSlice((nBits + 7) >> 3), + nBits: nBits, + } +} + +// NewBufferFromBitArray creates a new Buffer with the same bit length and +// initial content as the specified BitArray. +func NewBufferFromBitArray(ba BitArrayer) *Buffer { + if ba == nil { + return &Buffer{} + } + bab := ba.BitArray() + buf := NewBuffer(bab.Len()) + if 0 < buf.nBits { + copy(buf.b, bab.b) + } + return buf +} + +// NewBufferFromByteSlice creates a new Buffer that references an existing byte +// slice b. The created Buffer references b without copying it, therefore, +// changes to the buffer affect b and vice versa. The length of the buffer +// created will be len(b) * 8. NewBufferFromByteSlice is useful when reading or +// writing a subpart of a byte slice as a bit array without copying or +// bit-shifting. +func NewBufferFromByteSlice(b []byte) *Buffer { + return NewBufferFromByteSlicePartial(b, 0, len(b)<<3) +} + +// NewBufferFromByteSlicePartial is identical to NewBufferFromByteSlice except +// that it creates a buffer with the first bit specified by off, and the length +// specified by nBits. +func NewBufferFromByteSlicePartial(b []byte, off, nBits int) *Buffer { + switch { + case off < 0: + panicf("NewBufferFromByteSlice: negative off %d.", nBits) + case nBits < 0: + panicf("NewBufferFromByteSlice: negative nBits %d.", nBits) + case len(b)<<3 < off+nBits: + panicf("NewBufferFromByteSlice: out of range: off=%d, nBits=%d > len=%d.", off, nBits, len(b)) + case nBits == 0: + return &Buffer{} + } + return &Buffer{b: b[off>>3:], nBits: nBits, off: off & 7} +} + +// IsZero returns whether the Buffer is zero length. +func (buf *Buffer) IsZero() bool { + return buf.Len() == 0 +} + +// Len returns the number of bits contained in the buffer. +func (buf *Buffer) Len() int { + if buf == nil { + return 0 + } + return buf.nBits +} + +// Clone clones the Buffer with its content. +func (buf *Buffer) Clone() *Buffer { + if buf.Len() == 0 { + return &Buffer{} + } + b := make([]byte, len(buf.b)) + copy(b, buf.b) + + return &Buffer{b: b, nBits: buf.nBits, off: buf.off} +} + +// BitArray creates an imuurable BitArray from the current content. +func (buf *Buffer) BitArray() *BitArray { + return NewFromBytes(buf.b, buf.off, buf.nBits) +} + +// String returns the string representation of the current content. +func (buf Buffer) String() string { + sb := make([]byte, buf.nBits) + for i := 0; i < buf.nBits; i++ { + sb[i] = '0' + buf.b[(buf.off+i)>>3]>>(7-(buf.off+i)&7)&1 + } + return string(sb) +} + +// Resize resizes the Buffer to the size specified by nBits. When expanding, all +// bits in the new range to be extended are initialized with 0. When shrinking, +// the extra bits are truncated. In either case, the align specifies whether to +// fix the MSBs or the LSBs. +// +// Resize always reallocates internal memory. That is, the buffers created by +// Slice method or NewBufferFromByteSlice break their relationship with the +// parent buffer or slice by calling this Resize, even if nBits is equivalent to +// or less than its current size. +func (buf *Buffer) Resize(nBits int, align Alignment) { + switch { + case nBits < 0: + panicf("Resize: negative nBits %d.", nBits) + case nBits == 0: + buf.b = nil + buf.nBits = 0 + buf.off = 0 + return + } + + b := allocByteSlice((nBits + 7) >> 3) + if buf.nBits == 0 { + buf.b = b + buf.nBits = nBits + buf.off = 0 + return + } + if align == AlignLeft { + if nBits < buf.nBits { // shrink + copyBits(b, buf.b, 0, buf.off, nBits) + } else { // extend + copyBits(b, buf.b, 0, buf.off, buf.nBits) + } + } else { + if nBits < buf.nBits { // shrink + copyBits(b, buf.b, 0, buf.off+buf.nBits-nBits, nBits) + } else { // extend + copyBits(b, buf.b, nBits-buf.nBits, buf.off, buf.nBits) + } + } + + buf.b = b + buf.nBits = nBits + buf.off = 0 +} + +// FillBits sets all the bits in the buffer to the value bit, 0 or 1. +func (buf *Buffer) FillBits(bit byte) { + buf.FillBitsAt(0, buf.nBits, bit) +} + +// FillBitsAt sets the nBits bits starting at off to the value bit. +func (buf *Buffer) FillBitsAt(off, nBits int, bit byte) { + switch { + case off < 0: + panicf("FillBitsAt: negative off %d.", off) + case nBits < 0: + panicf("FillBitsAt: negative nBits %d.", nBits) + case buf.nBits < off+nBits: + panicf("FillBitsAt: out of range: off=%d + nBits=%d > len=%d.", off, nBits, buf.nBits) + case bit&1 == 0: + clearBits(buf.b, buf.off+off, nBits) + default: + setBits(buf.b, buf.off+off, nBits) + } +} + +// Format implements the fmt.Formatter interface to format Buffer value using +// the standard fmt.Printf family functions. +func (buf Buffer) Format(s fmt.State, verb rune) { buf.BitArray().Format(s, verb) } diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/buffer_bitwise.go b/uniond/vendor/github.com/tunabay/go-bitarray/buffer_bitwise.go new file mode 100644 index 0000000000..661455c551 --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/buffer_bitwise.go @@ -0,0 +1,104 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +// ToggleBitAt flips a single bit at the position specified by off in the +// buffer. +func (buf *Buffer) ToggleBitAt(off int) { + switch { + case off < 0: + panicf("ToggleBitAt: negative off %d.", off) + case buf.nBits <= off: + panicf("ToggleBitAt: out of range: off=%d >= len=%d.", off, buf.nBits) + } + off += buf.off + buf.b[off>>3] ^= byte(0x80) >> (off & 7) +} + +// ToggleBitsAt inverts the nBits bits starting at off. +func (buf *Buffer) ToggleBitsAt(off, nBits int) { + switch { + case off < 0: + panicf("ToggleBitsAt: negative off %d.", off) + case nBits < 0: + panicf("ToggleBitsAt: negative nBits %d.", nBits) + case buf.nBits < off+nBits: + panicf("ToggleBitsAt: out of range: off=%d + nBits=%d > len=%d.", off, nBits, buf.nBits) + case nBits == 0: + // no-op + default: + toggleBits(buf.b, buf.off+off, nBits) + } +} + +// AndAt applies a bitwise AND operation with x at the offset off. AND is +// applied only to the range from off to off+x.Len(), and other bits are +// preserved. +func (buf *Buffer) AndAt(off int, x BitArrayer) { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + switch { + case off < 0: + panicf("AndAt: negative off %d.", off) + case buf.nBits < off+bax.Len(): + panicf("AndAt: out of range: off=%d + x.len=%d > len=%d.", off, bax.Len(), buf.nBits) + case bax.IsZero(): + // no-op + case bax.b == nil: + clearBits(buf.b, buf.off+off, bax.nBits) + default: + andBits(buf.b, bax.b, buf.off+off, 0, bax.nBits) + } +} + +// OrAt applies a bitwise OR operation with x at the offset off. OR is applied +// only to the range from off to off+x.Len(), and other bits are preserved. +func (buf *Buffer) OrAt(off int, x BitArrayer) { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + switch { + case off < 0: + panicf("OrAt: negative off %d.", off) + case buf.nBits < off+bax.Len(): + panicf("OrAt: out of range: off=%d + x.len=%d > len=%d.", off, bax.Len(), buf.nBits) + case bax.IsZero(), bax.b == nil: + // no-op + default: + orBits(buf.b, bax.b, buf.off+off, 0, bax.nBits) + } +} + +// XorAt applies a bitwise XOR operation with x at the offset off. XOR is +// applied only to the range from off to off+x.Len(), and other bits are +// preserved. +func (buf *Buffer) XorAt(off int, x BitArrayer) { + var bax *BitArray + if x != nil { + bax = x.BitArray() + } + switch { + case off < 0: + panicf("XorAt: negative off %d.", off) + case buf.nBits < off+bax.Len(): + panicf("XorAt: out of range: off=%d + x.len=%d > len=%d.", off, bax.Len(), buf.nBits) + case bax.IsZero(), bax.b == nil: + // no-op + default: + xorBits(buf.b, bax.b, buf.off+off, 0, bax.nBits) + } +} + +// LeadingZeros returns the number of leading zero bits in the Buffer. +func (buf *Buffer) LeadingZeros() int { return buf.BitArray().LeadingZeros() } + +// TrailingZeros returns the number of trailing zero bits in the Buffer. +func (buf *Buffer) TrailingZeros() int { return buf.BitArray().TrailingZeros() } + +// OnesCount returns the number of one bits, population count, in the Buffer. +func (buf *Buffer) OnesCount() int { return buf.BitArray().OnesCount() } diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/buffer_copy.go b/uniond/vendor/github.com/tunabay/go-bitarray/buffer_copy.go new file mode 100644 index 0000000000..7728f673d6 --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/buffer_copy.go @@ -0,0 +1,78 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +// CopyBitsFromBytes reads nBits bits from b at the offset bOff, and write them +// into the buffer at the offset off. +func (buf *Buffer) CopyBitsFromBytes(off int, b []byte, bOff, nBits int) { + switch { + case off < 0: + panicf("CopyBitsFromBytes: negative off %d.", off) + case buf.nBits < off+nBits: + panicf("CopyBitsFromBytes: out of range: off=%d + nBits=%d > len=%d.", off, nBits, buf.nBits) + case nBits == 0: + return + } + copyBits(buf.b, b, buf.off+off, bOff, nBits) +} + +// CopyBitsToBytes reads nBits bits of the buffer starting at the offset off, +// and write them into the byte slice b at the offset bOff. +func (buf *Buffer) CopyBitsToBytes(off int, b []byte, bOff, nBits int) { + switch { + case off < 0: + panicf("CopyBitsToBytes: negative off %d.", off) + case buf.nBits < off+nBits: + panicf("CopyBitsToBytes: out of range: off=%d + nBits=%d > len=%d.", off, nBits, buf.nBits) + case nBits == 0: + return + } + copyBits(b, buf.b, bOff, buf.off+off, nBits) +} + +// CopyBits copies bits from src into dst. CopyBits returns the number of bits +// copied, which will be the minimum of src.Len() and dst.Len(). +func CopyBits(dst, src *Buffer) int { + nBits := dst.Len() + if sLen := src.Len(); sLen < nBits { + nBits = sLen + } + if nBits != 0 { + copyBits(dst.b, src.b, dst.off, src.off, nBits) + } + + return nBits +} + +// CopyBitsN is identical to CopyBits except that it copies up to nBits bits. +func CopyBitsN(dst, src *Buffer, nBits int) int { + if dLen := dst.Len(); dLen < nBits { + nBits = dLen + } + if sLen := src.Len(); sLen < nBits { + nBits = sLen + } + if nBits != 0 { + copyBits(dst.b, src.b, dst.off, src.off, nBits) + } + + return nBits +} + +// CopyBitsPartial is identical to CopyBitsN except that it reads and writes +// bits starting at specified offsets rather than the first bits. +func CopyBitsPartial(dst, src *Buffer, dstOff, srcOff, nBits int) int { + if dLen := dst.Len() - dstOff; dLen < nBits { + nBits = dLen + } + if sLen := src.Len() - srcOff; sLen < nBits { + nBits = sLen + } + if nBits != 0 { + copyBits(dst.b, src.b, dst.off+dstOff, src.off+srcOff, nBits) + } + + return nBits +} diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/buffer_integer.go b/uniond/vendor/github.com/tunabay/go-bitarray/buffer_integer.go new file mode 100644 index 0000000000..e97a163209 --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/buffer_integer.go @@ -0,0 +1,148 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "encoding/binary" +) + +// Uint8 returns up to 8 bits from the beginning of the buffer as a uint8 value. +// If buf.Len() is greater than 8, only the first 8 bits are used. If buf.Len() +// is less than 8, it is treated as an integer with that number of bits. For +// example, if buf.Len() == 5, it returns a 5-bit integer, 0 to 31(=0b11111), as +// a uint8 value. +func (buf *Buffer) Uint8() uint8 { + if buf.nBits == 0 { + return 0 + } + n, off := 8, 0 + if buf.nBits < 8 { + n, off = buf.nBits, 8-buf.nBits + } + b := make([]byte, 1) + copyBits(b, buf.b, off, buf.off, n) + + return b[0] +} + +// PutUint8 sets a uint8 value v within up to 8 bits from the beginning of the +// buffer. If buf.Len() is greater than 8, only the first 8 bits are updated. If +// buf.Len() is less than 8, only the LSBs of v are written. +func (buf *Buffer) PutUint8(v uint8) { + if buf.nBits == 0 { + return + } + n, off := 8, 0 + if buf.nBits < 8 { + n, off = buf.nBits, 8-buf.nBits + } + b := []byte{v} + copyBits(buf.b, b, buf.off, off, n) +} + +// Uint16 returns up to 16 bits from the beginning of the buffer as a uint16 +// value. If buf.Len() is greater than 16, only the first 16 bits are used. If +// buf.Len() is less than 16, it is treated as an integer with that number of +// bits. For example, if buf.Len() == 5, it returns a 5-bit integer, 0 to +// 31(=0b11111), as a uint16 value. +func (buf *Buffer) Uint16() uint16 { + if buf.nBits == 0 { + return 0 + } + n, off := 16, 0 + if buf.nBits < 16 { + n, off = buf.nBits, 16-buf.nBits + } + b := make([]byte, 2) + copyBits(b, buf.b, off, buf.off, n) + + return binary.BigEndian.Uint16(b) +} + +// PutUint16 sets a uint16 value v within up to 16 bits from the beginning of +// the buffer. If buf.Len() is greater than 16, only the first 16 bits are +// updated. If buf.Len() is less than 16, only the LSBs of v are written. +func (buf *Buffer) PutUint16(v uint16) { + if buf.nBits == 0 { + return + } + n, off := 16, 0 + if buf.nBits < 16 { + n, off = buf.nBits, 16-buf.nBits + } + b := make([]byte, 2) + binary.BigEndian.PutUint16(b, v) + copyBits(buf.b, b, buf.off, off, n) +} + +// Uint32 returns up to 32 bits from the beginning of the buffer as a uint32 +// value. If buf.Len() is greater than 32, only the first 32 bits are used. If +// buf.Len() is less than 32, it is treated as an integer with that number of +// bits. For example, if buf.Len() == 5, it returns a 5-bit integer, 0 to +// 31(=0b11111), as a uint32 value. +func (buf *Buffer) Uint32() uint32 { + if buf.nBits == 0 { + return 0 + } + n, off := 32, 0 + if buf.nBits < 32 { + n, off = buf.nBits, 32-buf.nBits + } + b := make([]byte, 4) + copyBits(b, buf.b, off, buf.off, n) + + return binary.BigEndian.Uint32(b) +} + +// PutUint32 sets a uint32 value v within up to 32 bits from the beginning of +// the buffer. If buf.Len() is greater than 32, only the first 32 bits are +// updated. If buf.Len() is less than 32, only the LSBs of v are written. +func (buf *Buffer) PutUint32(v uint32) { + if buf.nBits == 0 { + return + } + n, off := 32, 0 + if buf.nBits < 32 { + n, off = buf.nBits, 32-buf.nBits + } + b := make([]byte, 4) + binary.BigEndian.PutUint32(b, v) + copyBits(buf.b, b, buf.off, off, n) +} + +// Uint64 returns up to 64 bits from the beginning of the buffer as a uint64 +// value. If buf.Len() is greater than 64, only the first 64 bits are used. If +// buf.Len() is less than 64, it is treated as an integer with that number of +// bits. For example, if buf.Len() == 5, it returns a 5-bit integer, 0 to +// 31(=0b11111), as a uint64 value. +func (buf *Buffer) Uint64() uint64 { + if buf.nBits == 0 { + return 0 + } + n, off := 64, 0 + if buf.nBits < 64 { + n, off = buf.nBits, 64-buf.nBits + } + b := make([]byte, 8) + copyBits(b, buf.b, off, buf.off, n) + + return binary.BigEndian.Uint64(b) +} + +// PutUint64 sets a uint64 value v within up to 64 bits from the beginning of +// the buffer. If buf.Len() is greater than 64, only the first 64 bits are +// updated. If buf.Len() is less than 64, only the LSBs of v are written. +func (buf *Buffer) PutUint64(v uint64) { + if buf.nBits == 0 { + return + } + n, off := 64, 0 + if buf.nBits < 64 { + n, off = buf.nBits, 64-buf.nBits + } + b := make([]byte, 8) + binary.BigEndian.PutUint64(b, v) + copyBits(buf.b, b, buf.off, off, n) +} diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/buffer_rw.go b/uniond/vendor/github.com/tunabay/go-bitarray/buffer_rw.go new file mode 100644 index 0000000000..98f3c2dca8 --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/buffer_rw.go @@ -0,0 +1,160 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +// BitAt returns a single bit at the specified offset as 0 or 1. It panics if +// the off is out of range. +func (buf *Buffer) BitAt(off int) byte { + switch { + case off < 0: + panicf("BitAt: negative off %d.", off) + case buf.nBits <= off: + panicf("BitAt: out of range: off=%d >= len=%d.", off, buf.nBits) + } + + off += buf.off + return buf.b[off>>3] >> (7 - off&7) & 1 +} + +// PutBitAt writes a single bit at the position specified by off in the buffer. +// The bit should be 0 or 1, otherwise its LSB is silently used. +func (buf *Buffer) PutBitAt(off int, bit byte) { + switch { + case off < 0: + panicf("PutBitAt: negative off %d.", off) + case buf.nBits <= off: + panicf("PutBitAt: out of range: off=%d >= len=%d.", off, buf.nBits) + } + + off += buf.off + buf.b[off>>3] = buf.b[off>>3] & ^(byte(0x80)>>(off&7)) | ((bit & 1) << (7 - off&7)) +} + +// BitArrayAt returns bits within the specified range as a BitArray. +func (buf *Buffer) BitArrayAt(off, nBits int) *BitArray { + switch { + case off < 0: + panicf("BitArrayAt: negative off %d.", off) + case nBits < 0: + panicf("BitArrayAt: negative nBits %d.", nBits) + case buf.nBits < off+nBits: + panicf("BitArrayAt: out of range: off=%d + nBits=%d > len=%d.", off, nBits, buf.nBits) + case nBits == 0: + return zeroBitArray + } + + return NewFromBytes(buf.b, buf.off+off, nBits) +} + +// PutBitArrayAt writes bits from a BitArray onto the specified offset off. +func (buf *Buffer) PutBitArrayAt(off int, ba BitArrayer) { + switch { + case off < 0: + panicf("PutBitArrayAt: negative off %d.", off) + case ba == nil: + return + } + bab := ba.BitArray() + switch { + case buf.nBits < off+bab.nBits: + panicf("PutBitArrayAt: out of range: off=%d + ba.len=%d > len=%d.", off, bab.nBits, buf.nBits) + case bab.IsZero(): + return + case bab.b == nil: + clearBits(buf.b, buf.off+off, bab.nBits) + return + } + _ = copyBits(buf.b, bab.b, buf.off+off, 0, bab.nBits) +} + +// ByteAt reads 8 bits starting at the offset off and returns them as a single +// byte. Note that off is in bits, not bytes. If the off is not a multiple of 8, +// 8 bits across a byte boundary are returned. +func (buf *Buffer) ByteAt(off int) byte { + switch { + case off < 0: + panicf("ByteAt: negative off %d.", off) + case buf.nBits < off+8: + panicf("ByteAt: out of range: off=%d + 8 > len=%d.", off, buf.nBits) + } + off += buf.off + i, f := off>>3, off&7 + if f == 0 { + return buf.b[i] + } + return buf.b[i]<>(8-f) +} + +// PutByteAt writes 8 bits of b to the position specified by off in the buffer. +// Note that off is in bits, not bytes. If the off is not a multiple of 8, it +// writes 8 bits across a byte boundary. +func (buf *Buffer) PutByteAt(off int, b byte) { + switch { + case off < 0: + panicf("PutByteAt: negative off %d.", off) + case buf.nBits < off+8: + panicf("PutByteAt: out of range: off=%d + 8 > len=%d.", off, buf.nBits) + } + copyBits(buf.b, []byte{b}, buf.off+off, 0, 8) +} + +// RawBytes returns all the bits of the buffer as a byte slice. The caller must +// not change the contents of the returned byte slice. The slice returned may or +// may not reference to the internal buffer itself of buf, depending on whether +// bit-shifting is needed of not. Also, if buf.Len() is not a multiple of 8, the +// bits after the last bit in the slice returned are undefined. The main purpose +// of RawBytes is to efficiently pass bit data to other byte-oriented APIs. In +// general, it is recommended to use the safer Bytes() instead. +func (buf *Buffer) RawBytes() []byte { + if buf.off&7 == 0 { + return buf.b[buf.off>>3 : (buf.off+buf.nBits+7)>>3] + } + return buf.Bytes() +} + +// Bytes returns all the bits of the buffer as a byte slice. If buf.Len() is not +// a multiple of 8, it will be padded with 0. +func (buf *Buffer) Bytes() []byte { + b := make([]byte, (buf.nBits+7)>>3) + copyBits(b, buf.b, 0, buf.off, buf.nBits) + return b +} + +// BytesAt reads 8 * nBytes bits starting at the offset off and returns them as +// a byte slice. Note that off is in bits, not bytes. If the off is not a +// multiple of 8, it returns a properly shifted byte slice. +func (buf *Buffer) BytesAt(off, nBytes int) []byte { + nBits := nBytes << 3 + switch { + case off < 0: + panicf("ByteAt: negative off %d.", off) + case nBytes < 0: + panicf("ByteAt: negative nBytes %d.", nBytes) + case buf.nBits < off+nBits: + panicf("BytesAt: out of range: off=%d + 8 * nBytes=%d > len=%d.", off, nBytes, buf.nBits) + case nBytes == 0: + return []byte{} + } + ret := make([]byte, nBytes) + copyBits(ret, buf.b, 0, buf.off+off, nBits) + + return ret +} + +// PutBytesAt writes 8 * len(b) bits of b to the position specified by off in +// the buffer. Note that off is in bits, not bytes. If the off is not a multiple +// of 8, it writes bytes across byte boundaries of the buffer. +func (buf *Buffer) PutBytesAt(off int, b []byte) { + nBits := len(b) << 3 + switch { + case off < 0: + panicf("PutByteAt: negative off %d.", off) + case buf.nBits < off+nBits: + panicf("PutByteAt: out of range: off=%d + 8 * b.len=%d > len=%d.", off, len(b), buf.nBits) + case len(b) == 0: + return + } + copyBits(buf.b, b, buf.off+off, 0, nBits) +} diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/buffer_slice.go b/uniond/vendor/github.com/tunabay/go-bitarray/buffer_slice.go new file mode 100644 index 0000000000..fb73f92a86 --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/buffer_slice.go @@ -0,0 +1,39 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +// Slice extracts a subpart from the buffer and returns it as a new Buffer in +// the same manner as Go's native slices. Note that like Go's native slices, the +// sliced buffers share memory with the original buffer. Changes to the original +// buffer affect slices and vice versa. Slice does not perform bit-shifting, +// even when creating slices that are not aligned to byte boundaries. It just +// records the offset and length for reference. +// +// The two arguments start and end specify the indexes of the bits to select. 0 +// points to the first bit and buf.Len()-1 points to the last bit. The start and +// end select a half-open range which includes the start, but excludes the end. +// If the index is outside the range of the buffer, Slice will panic. +func (buf *Buffer) Slice(start, end int) *Buffer { + switch { + case start < 0, buf.Len() < start: + panicf("Slice: start %d out of range: 0..%d.", start, buf.Len()) + case end < 0, buf.Len() < end: + panicf("Slice: end %d out of range: 0..%d.", end, buf.Len()) + case end < start: + panicf("Slice: invalid range start=%d > end=%d.", start, end) + case start == end: + return &Buffer{} + } + off := buf.off + start + return &Buffer{ + b: buf.b[off>>3 : (buf.off+end+7)>>3], + nBits: end - start, + off: off & 7, + } +} + +// SliceToEnd is shorthand for Slice(start, buf.Len()) and returns the subpart +// from the position specified start to the last bit. +func (buf *Buffer) SliceToEnd(start int) *Buffer { return buf.Slice(start, buf.Len()) } diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/builder.go b/uniond/vendor/github.com/tunabay/go-bitarray/builder.go new file mode 100644 index 0000000000..ee0137b6af --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/builder.go @@ -0,0 +1,229 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "bytes" + "fmt" + "io" +) + +// Builder is used to efficiently build a BitArray using Write methods. It +// minimizes memory copying and bit shifting. +// +// The zero value for Builder is already to use. Do not copy a non-zero Builder. +// It is not safe for concurrent use by multiple goroutines. +type Builder struct { + head, tail *builderChunk + nBits int +} + +// NewBuilder creates a Builder with bit arrays as the initial contents. +func NewBuilder(bas ...BitArrayer) *Builder { + b := &Builder{} + for _, bai := range bas { + if bai == nil { + continue + } + ba := bai.BitArray() + if !ba.IsZero() { + b.append(ba.b, 0, ba.nBits, ba.b == nil) + } + } + + return b +} + +type builderChunk struct { + b []byte // can be nil when zf == true + nBits int // 0 < nBits + off int // off must be canonicalized to 0..7 + zf bool // zero-filled and immutable + next *builderChunk +} + +// BitArray builds an immutable BitArray from accumulated bits. References to +// the accumulated byte slices are copied when this BitArray method is called. +func (b *Builder) BitArray() *BitArray { + if b.nBits == 0 { + return zeroBitArray + } + buf := allocByteSlice((b.nBits + 7) >> 3) + idx, zf := 0, true + for c := b.head; c != nil; c = c.next { + if c.zf { + idx += c.nBits + continue + } + zf2 := copyBits(buf, c.b, idx, c.off, c.nBits) + zf = zf && zf2 + idx += c.nBits + } + if zf { + return &BitArray{nBits: b.nBits} + } + + return &BitArray{b: buf, nBits: b.nBits} +} + +// String returns the string representation of the bit array being built. The +// result is the same as b.BitArray().String(). +func (b *Builder) String() string { + sb := make([]byte, b.nBits) + idx := 0 + for c := b.head; c != nil; c = c.next { + if c.zf { + s := idx + idx += c.nBits + fill30(sb[s:idx]) + continue + } + for i := c.off; i < c.off+c.nBits; i++ { + sb[idx] = '0' + c.b[i>>3]>>(7-i&7)&1 + idx++ + } + } + return string(sb) +} + +func (b *Builder) append(buf []byte, off, nBits int, zf bool) { + if nBits == 0 { + return + } + c := &builderChunk{b: buf, nBits: nBits, off: off, zf: zf} + if b.head == nil { + b.head, b.tail = c, c + } else { + b.tail.next = c + b.tail = c + } + b.nBits += nBits +} + +// Reset resets the builder state to empty. All the bits accumulated by writing +// methods are discarded. +func (b *Builder) Reset() { + b.head, b.tail, b.nBits = nil, nil, 0 +} + +// Len returns the current number of bits accumurated. +func (b *Builder) Len() int { + return b.nBits +} + +// WriteBitsFromBytes adds the number of bits specified by nBits from the byte +// slice p to the Builder. It skips the off bits from the beginning of p and +// reads up to 8 bits from each byte from the MSB to the LSB. +// +// WriteBitsFromBytes only references the slice and offset of p, and does not +// copy the contents of p. Therefore, any changes to the contents of p before +// calling the BitArray() or String() methods are affected. Be especially +// careful when using a same buffer for iterations. +func (b *Builder) WriteBitsFromBytes(p []byte, off, nBits int) { + if len(p) == 0 || nBits == 0 { + return + } + p = p[off>>3:] + off &= 7 + b.append(p[:(off+nBits+7)>>3], off, nBits, false) +} + +// Write implements io.Writer by writing 8 * len(p) bits read from a byte slice +// p. Write copies p once because the io.Writer prohibits the implementation to +// retain p. Use WriteBitsFromBytes to avoid copying. Write always returns +// len(p), nil. +func (b *Builder) Write(p []byte) (int, error) { + buf := make([]byte, len(p)) + copy(buf, p) + b.append(buf, 0, len(p)<<3, false) + + return len(p), nil +} + +// WriteByte implements io.ByteWriter by writing 8 bits read from a byte c. +// WriteByte always returns a nil error. +func (b *Builder) WriteByte(c byte) error { + b.append([]byte{c}, 0, 8, c == 0) + + return nil +} + +// ReadFrom implements io.ReaderFrom. It reads bytes from r until io.EOF or an +// error, and appends the bits read to the builder. Even if an error occurs, the +// bits that could be read before the error are appended to the builder. +func (b *Builder) ReadFrom(r io.Reader) (int64, error) { + var buf bytes.Buffer + n, err := buf.ReadFrom(r) + if 0 < n { + b.append(buf.Bytes(), 0, int(n)<<3, false) + } + if err != nil { + return n, fmt.Errorf("read failure: %w", err) + } + + return n, nil +} + +// WriteBit writes a single bit to the builder. The bit should be 0 or 1, +// otherwise its LSB is silently used. It always returns a nil error. +func (b *Builder) WriteBit(bit byte) error { + b.append([]byte{bit}, 7, 1, bit&1 == 0) + + return nil +} + +// WriteBitArray writes a bit array to the builder. It always returns the length +// of the bit array and a nil error. +func (b *Builder) WriteBitArray(x BitArrayer) (int, error) { + if x == nil { + return 0, nil + } + bax := x.BitArray() + if bax.IsZero() { + return 0, nil + } + + b.append(bax.b, 0, bax.nBits, bax.b == nil) + + return bax.Len(), nil +} + +// WriteByteBits adds to the Builder the bits read from a byte slice where each +// element contains individual bits. Each element of bits should be 0 or 1, +// otherwise only its LSB is used silently. WriteByteBits copies the bits from +// bits, so any future changes to bits will not affect the contents of Builder. +func (b *Builder) WriteByteBits(bits []byte) { + if len(bits) == 0 { + return + } + var zfb byte + buf := make([]byte, (len(bits)+7)>>3) + for i, bit := range bits { + bit &= 1 + zfb |= bit + buf[i>>3] |= bit << (7 - i&7) + } + b.append(buf, 0, len(bits), zfb == 0) +} + +// WriteBits write the bits read from a Buffer p. WriteBits copies p and is +// unaffected by changes to p after the call. It always returns p.Len() and nil +// error. +func (b *Builder) WriteBits(p *Buffer) (int, error) { + if p.IsZero() { + return 0, nil + } + p = p.Clone() + b.append(p.b, p.off, p.nBits, false) + + return p.nBits, nil +} + +/* +// Unwrite discards the last nBits bits of the bits already written. It is +// useful for removing trailing padding bits after writing using a +// byte-oriented method. +func (b *Builder) Unwrite(nBits int) {} +*/ diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/doc.go b/uniond/vendor/github.com/tunabay/go-bitarray/doc.go new file mode 100644 index 0000000000..e68beae45e --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/doc.go @@ -0,0 +1,9 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +/* +Package bitarray provides data types and functions for manipurating bit arrays, +aka bit strings, of arbitrary number of bits. +*/ +package bitarray diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/error.go b/uniond/vendor/github.com/tunabay/go-bitarray/error.go new file mode 100644 index 0000000000..d41b0bb3d3 --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/error.go @@ -0,0 +1,18 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "errors" +) + +// ErrIllegalExpression is an error thrown when a string representation of +// bit array is not a legal format. +var ErrIllegalExpression = errors.New("illegal bit array expression") + +// ErrFractionalBitsBeforeEOF is an error thrown when a byte-oriented reading +// method reaches io.EOF but there are still fractional bits less than 8 bits +// that cannot be read in bytes. +var ErrFractionalBitsBeforeEOF = errors.New("fractional bits before EOF") diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/reader.go b/uniond/vendor/github.com/tunabay/go-bitarray/reader.go new file mode 100644 index 0000000000..8fc8508545 --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/reader.go @@ -0,0 +1,159 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "io" +) + +// Reader implements io.Reader and io.ByteReader interfaces by reading from a +// BitArray. +// +// The standard io.Reader family interfaces define byte-oriented reading +// methods, rather than bit-oriented. And they always read in bytes and cannot +// read fractional bits less than 8 bits. When the number of remaining available +// bits is not a multiple of 8, the io.EOF may be reached with fractional bits +// remaining. In this case, the padding bits are not added automatically and an +// ErrFractionalBitsBeforeEOF is returned. To handle these trailing fractional +// bits, use bit-oriented reads together, or use ToPadded8 etc in advance to +// make sure that the number of bits in the source is a multiple of 8 bits. +type Reader struct { + ba *BitArray + i int +} + +// NewReader returns a new Reader reading from the bit array ba. For mutable +// types of ba, the value at the time NewReader is called is copied and +// subsequent changes will not be reflected in future readings. +func NewReader(ba BitArrayer) *Reader { + if ba == nil { + return &Reader{ba: zeroBitArray} + } + + return &Reader{ba: ba.BitArray()} +} + +// Reset resets the Reader to be reading from ba. +func (r *Reader) Reset(ba BitArrayer) { + if ba == nil { + r.ba = zeroBitArray + } else { + r.ba = ba.BitArray() + } + r.i = 0 +} + +// Read implements the io.Reader interface. It reads up to 8 * len(p) bits from +// the underlying BitArray, writes them to p as bytes, and returns the number of +// bytes read. It always reads in bytes, and if only fractional bits less than 8 +// bits are available, it returns an ErrFractionalBitsBeforeEOF. +func (r *Reader) Read(p []byte) (int, error) { + switch { + case r.ba.IsZero(), r.ba.nBits <= r.i: + return 0, io.EOF + case r.ba.nBits-8 < r.i: + return 0, ErrFractionalBitsBeforeEOF + } + nBytes := len(p) + if n := (r.ba.Len() - r.i) >> 3; n < nBytes { + nBytes = n + } + switch { + case nBytes == 0: + return 0, nil + case r.ba.b == nil: + fill00(p[:nBytes]) + r.i += nBytes << 3 + return nBytes, nil + } + _ = copyBits(p[:nBytes], r.ba.b, 0, r.i, nBytes<<3) + r.i += nBytes << 3 + return nBytes, nil +} + +// ReadByte implements the io.ByteReader interface. It reads 8 bits from the +// underlying BitArray and returns them as a byte. If only fractional bits less +// than 8 bits are available, it returns an ErrFractionalBitsBeforeEOF. +func (r *Reader) ReadByte() (byte, error) { + switch { + case r.ba.IsZero(), r.ba.nBits <= r.i: + return 0, io.EOF + case r.ba.nBits-8 < r.i: + return 0, ErrFractionalBitsBeforeEOF + } + if r.ba.b == nil { + r.i += 8 + return 0, nil + } + b := make([]byte, 1) + _ = copyBits(b, r.ba.b, 0, r.i, 8) + r.i += 8 + return b[0], nil +} + +// ReadBitArray reads up to nBits bits as a BitArray. The returned BitArray may +// be shorter than nBits. The caller should check the length of the returned +// bit array and handle it. +func (r *Reader) ReadBitArray(nBits int) (*BitArray, error) { + switch { + case nBits < 0: + panicf("ReadBitArray: negative nBits %d.", nBits) + case nBits == 0: + return zeroBitArray, nil + case r.ba.IsZero(), r.ba.nBits <= r.i: + return zeroBitArray, io.EOF + } + if n := r.ba.nBits - r.i; n < nBits { + nBits = n + } + ba := r.ba.Slice(r.i, r.i+nBits) + r.i += nBits + + return ba, nil +} + +// ReadBit reads a single bit as 0 or 1. +func (r *Reader) ReadBit() (byte, error) { + if r.ba.IsZero() || r.ba.nBits <= r.i { + return 0, io.EOF + } + if r.ba.b == nil { + r.i++ + return 0, nil + } + b := r.ba.b[r.i>>3] >> (7 - r.i&7) & 1 + r.i++ + return b, nil +} + +// ReadBits reads up to p.Len() bits into p. It returns the number of bits read +// (0 <= n <= p.Len()) and any error encountered. The data in the buffer beyond +// the returned length is undefined. +func (r *Reader) ReadBits(p *Buffer) (int, error) { + nBits := p.Len() + switch { + case nBits == 0: + return 0, nil + case r.ba.IsZero(), r.ba.nBits <= r.i: + return 0, io.EOF + } + if n := r.ba.nBits - r.i; n < nBits { + nBits = n + } + if r.ba.b == nil { + clearBits(p.b, 0, nBits) + } else { + _ = copyBits(p.b, r.ba.b, 0, r.i, nBits) + } + r.i += nBits + + return nBits, nil +} + +/* +// TODO: +// WriteTo implements the io.WriterTo interface. +func (r *Reader) WriteTo(w io.Writer) (int64, error) {} +*/ diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA1LongMsg.rsp.bz2 b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA1LongMsg.rsp.bz2 new file mode 100644 index 0000000000..fbd01a10bd Binary files /dev/null and b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA1LongMsg.rsp.bz2 differ diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA1ShortMsg.rsp.bz2 b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA1ShortMsg.rsp.bz2 new file mode 100644 index 0000000000..f3ad99b954 Binary files /dev/null and b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA1ShortMsg.rsp.bz2 differ diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA224LongMsg.rsp.bz2 b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA224LongMsg.rsp.bz2 new file mode 100644 index 0000000000..9e66bfb664 Binary files /dev/null and b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA224LongMsg.rsp.bz2 differ diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA224ShortMsg.rsp.bz2 b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA224ShortMsg.rsp.bz2 new file mode 100644 index 0000000000..84c4193f72 Binary files /dev/null and b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA224ShortMsg.rsp.bz2 differ diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA256LongMsg.rsp.bz2 b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA256LongMsg.rsp.bz2 new file mode 100644 index 0000000000..a808f68d04 Binary files /dev/null and b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA256LongMsg.rsp.bz2 differ diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA256ShortMsg.rsp.bz2 b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA256ShortMsg.rsp.bz2 new file mode 100644 index 0000000000..ab354d4fad Binary files /dev/null and b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA256ShortMsg.rsp.bz2 differ diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA384LongMsg.rsp.bz2 b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA384LongMsg.rsp.bz2 new file mode 100644 index 0000000000..7c8f6e1ae9 Binary files /dev/null and b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA384LongMsg.rsp.bz2 differ diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA384ShortMsg.rsp.bz2 b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA384ShortMsg.rsp.bz2 new file mode 100644 index 0000000000..e833ca6d4c Binary files /dev/null and b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA384ShortMsg.rsp.bz2 differ diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA512LongMsg.rsp.bz2 b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA512LongMsg.rsp.bz2 new file mode 100644 index 0000000000..f39ea1b9db Binary files /dev/null and b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA512LongMsg.rsp.bz2 differ diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA512ShortMsg.rsp.bz2 b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA512ShortMsg.rsp.bz2 new file mode 100644 index 0000000000..fa9c23e2bf Binary files /dev/null and b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA512ShortMsg.rsp.bz2 differ diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA512_224LongMsg.rsp.bz2 b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA512_224LongMsg.rsp.bz2 new file mode 100644 index 0000000000..1bf4e2d367 Binary files /dev/null and b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA512_224LongMsg.rsp.bz2 differ diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA512_224ShortMsg.rsp.bz2 b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA512_224ShortMsg.rsp.bz2 new file mode 100644 index 0000000000..b8199de241 Binary files /dev/null and b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA512_224ShortMsg.rsp.bz2 differ diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA512_256LongMsg.rsp.bz2 b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA512_256LongMsg.rsp.bz2 new file mode 100644 index 0000000000..a43eb68bbf Binary files /dev/null and b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA512_256LongMsg.rsp.bz2 differ diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA512_256ShortMsg.rsp.bz2 b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA512_256ShortMsg.rsp.bz2 new file mode 100644 index 0000000000..f5bec40cc2 Binary files /dev/null and b/uniond/vendor/github.com/tunabay/go-bitarray/testdata/SHA512_256ShortMsg.rsp.bz2 differ diff --git a/uniond/vendor/github.com/tunabay/go-bitarray/util.go b/uniond/vendor/github.com/tunabay/go-bitarray/util.go new file mode 100644 index 0000000000..85b8d6ada9 --- /dev/null +++ b/uniond/vendor/github.com/tunabay/go-bitarray/util.go @@ -0,0 +1,384 @@ +// Copyright (c) 2021 Hirotsuna Mizuno. All rights reserved. +// Use of this source code is governed by the MIT license that can be found in +// the LICENSE file. + +package bitarray + +import ( + "fmt" + "unsafe" +) + +// dstOff < 8, srcOff < 8, nBits < 8, dstOff + nBits <= 8 +func copyBits7(dst *byte, src []byte, dstOff, srcOff, nBits int) bool { + nBits0, srcBits0 := nBits, 8-srcOff + if srcBits0 < nBits { + nBits0 = srcBits0 + } + mask := byte(0xff) << (8 - nBits0) >> dstOff + *dst &= ^mask + *dst |= mask & (src[0] << srcOff >> dstOff) + + zf := src[0] == 0 + if nBits0 < nBits { + zf2 := copyBits7(dst, src[1:], dstOff+nBits0, 0, nBits-nBits0) + zf = zf && zf2 + } + + return zf +} + +func copyBits(dst, src []byte, dstOff, srcOff, nBits int) bool { + dst, src = dst[dstOff>>3:], src[srcOff>>3:] + dstOff, srcOff = dstOff&7, srcOff&7 + + zf := true + if dstOff != 0 { + nBits0 := 8 - dstOff + if nBits <= nBits0 { + zf2 := copyBits7(&dst[0], src, dstOff, srcOff, nBits) + return zf2 + } + zf2 := copyBits7(&dst[0], src, dstOff, srcOff, nBits0) + zf = zf && zf2 + + nBits -= nBits0 + dst = dst[1:] + srcOff += nBits0 + src = src[srcOff>>3:] + srcOff &= 7 + } + + if nBytes1 := nBits >> 3; 0 < nBytes1 { + if srcOff == 0 { + copy(dst, src[:nBytes1]) + zf = false + } else { + rsh := 8 - srcOff + for i := 0; i < nBytes1; i++ { + dst[i] = src[i]<>rsh + zf = zf && dst[i] == 0 + } + } + nBits &= 7 + if nBits == 0 { + return zf + } + dst = dst[nBytes1:] + src = src[nBytes1:] + } + + zf2 := copyBits7(&dst[0], src, 0, srcOff, nBits) + + return zf && zf2 +} + +func clearBits(b []byte, off, nBits int) { + b = b[off>>3:] + off &= 7 + + if off != 0 { + nBits0 := 8 - off + if nBits <= nBits0 { + b[0] &^= byte(0xff) << (8 - nBits) >> off + return + } + b[0] &= byte(0xff) << nBits0 + nBits -= nBits0 + b = b[1:] + } + + if nBytes1 := nBits >> 3; 0 < nBytes1 { + for i := 0; i < nBits>>3; i++ { + b[i] = 0 + } + nBits &= 7 + b = b[nBytes1:] + } + + if nBits != 0 { + b[0] &= byte(0xff) >> nBits + } +} + +func setBits(b []byte, off, nBits int) { + b = b[off>>3:] + off &= 7 + + if off != 0 { + nBits0 := 8 - off + if nBits <= nBits0 { + b[0] |= byte(0xff) << (8 - nBits) >> off + return + } + b[0] |= byte(0xff) >> off + nBits -= nBits0 + b = b[1:] + } + + if nBytes1 := nBits >> 3; 0 < nBytes1 { + for i := 0; i < nBits>>3; i++ { + b[i] = 0xff + } + nBits &= 7 + b = b[nBytes1:] + } + + if nBits != 0 { + b[0] |= byte(0xff) << (8 - nBits) + } +} + +func toggleBits(b []byte, off, nBits int) { + b = b[off>>3:] + off &= 7 + + if off != 0 { + nBits0 := 8 - off + if nBits <= nBits0 { + b[0] ^= byte(0xff) << (8 - nBits) >> off + return + } + b[0] ^= byte(0xff) >> off + nBits -= nBits0 + b = b[1:] + } + + if nBytes1 := nBits >> 3; 0 < nBytes1 { + for i := 0; i < nBits>>3; i++ { + b[i] ^= 0xff + } + nBits &= 7 + b = b[nBytes1:] + } + + if nBits != 0 { + b[0] ^= byte(0xff) << (8 - nBits) + } +} + +// dstOff < 8, srcOff < 8, nBits < 8, dstOff + nBits <= 8 +func andBits7(dst *byte, src []byte, dstOff, srcOff, nBits int) { + nBits0, srcBits0 := nBits, 8-srcOff + if srcBits0 < nBits { + nBits0 = srcBits0 + } + mask := byte(0xff) << (8 - nBits0) >> dstOff + *dst &= ^mask | (src[0] << srcOff >> dstOff) + + if nBits0 < nBits { + andBits7(dst, src[1:], dstOff+nBits0, 0, nBits-nBits0) + } +} + +func andBits(dst, src []byte, dstOff, srcOff, nBits int) { + dst, src = dst[dstOff>>3:], src[srcOff>>3:] + dstOff, srcOff = dstOff&7, srcOff&7 + + if dstOff != 0 { + nBits0 := 8 - dstOff + if nBits <= nBits0 { + andBits7(&dst[0], src, dstOff, srcOff, nBits) + return + } + andBits7(&dst[0], src, dstOff, srcOff, nBits0) + + nBits -= nBits0 + dst = dst[1:] + srcOff += nBits0 + src = src[srcOff>>3:] + srcOff &= 7 + } + + // TODO: maybe can be optimized using asUint64Slice() + if nBytes1 := nBits >> 3; 0 < nBytes1 { + if srcOff == 0 { + for i := 0; i < nBytes1; i++ { + dst[i] &= src[i] + } + } else { + rsh := 8 - srcOff + for i := 0; i < nBytes1; i++ { + dst[i] &= src[i]<>rsh + } + } + nBits &= 7 + if nBits == 0 { + return + } + dst = dst[nBytes1:] + src = src[nBytes1:] + } + + andBits7(&dst[0], src, 0, srcOff, nBits) +} + +// dstOff < 8, srcOff < 8, nBits < 8, dstOff + nBits <= 8 +func orBits7(dst *byte, src []byte, dstOff, srcOff, nBits int) { + nBits0, srcBits0 := nBits, 8-srcOff + if srcBits0 < nBits { + nBits0 = srcBits0 + } + mask := byte(0xff) << (8 - nBits0) >> dstOff + *dst |= mask & (src[0] << srcOff >> dstOff) + + if nBits0 < nBits { + orBits7(dst, src[1:], dstOff+nBits0, 0, nBits-nBits0) + } +} + +func orBits(dst, src []byte, dstOff, srcOff, nBits int) { + dst, src = dst[dstOff>>3:], src[srcOff>>3:] + dstOff, srcOff = dstOff&7, srcOff&7 + + if dstOff != 0 { + nBits0 := 8 - dstOff + if nBits <= nBits0 { + orBits7(&dst[0], src, dstOff, srcOff, nBits) + return + } + orBits7(&dst[0], src, dstOff, srcOff, nBits0) + + nBits -= nBits0 + dst = dst[1:] + srcOff += nBits0 + src = src[srcOff>>3:] + srcOff &= 7 + } + + // TODO: maybe can be optimized using asUint64Slice() + if nBytes1 := nBits >> 3; 0 < nBytes1 { + if srcOff == 0 { + for i := 0; i < nBytes1; i++ { + dst[i] |= src[i] + } + } else { + rsh := 8 - srcOff + for i := 0; i < nBytes1; i++ { + dst[i] |= src[i]<>rsh + } + } + nBits &= 7 + if nBits == 0 { + return + } + dst = dst[nBytes1:] + src = src[nBytes1:] + } + + orBits7(&dst[0], src, 0, srcOff, nBits) +} + +// dstOff < 8, srcOff < 8, nBits < 8, dstOff + nBits <= 8 +func xorBits7(dst *byte, src []byte, dstOff, srcOff, nBits int) { + nBits0, srcBits0 := nBits, 8-srcOff + if srcBits0 < nBits { + nBits0 = srcBits0 + } + mask := byte(0xff) << (8 - nBits0) >> dstOff + *dst ^= mask & (src[0] << srcOff >> dstOff) + + if nBits0 < nBits { + xorBits7(dst, src[1:], dstOff+nBits0, 0, nBits-nBits0) + } +} + +func xorBits(dst, src []byte, dstOff, srcOff, nBits int) { + dst, src = dst[dstOff>>3:], src[srcOff>>3:] + dstOff, srcOff = dstOff&7, srcOff&7 + + if dstOff != 0 { + nBits0 := 8 - dstOff + if nBits <= nBits0 { + xorBits7(&dst[0], src, dstOff, srcOff, nBits) + return + } + xorBits7(&dst[0], src, dstOff, srcOff, nBits0) + + nBits -= nBits0 + dst = dst[1:] + srcOff += nBits0 + src = src[srcOff>>3:] + srcOff &= 7 + } + + // TODO: maybe can be optimized using asUint64Slice() + if nBytes1 := nBits >> 3; 0 < nBytes1 { + if srcOff == 0 { + for i := 0; i < nBytes1; i++ { + dst[i] ^= src[i] + } + } else { + rsh := 8 - srcOff + for i := 0; i < nBytes1; i++ { + dst[i] ^= src[i]<>rsh + } + } + nBits &= 7 + if nBits == 0 { + return + } + dst = dst[nBytes1:] + src = src[nBytes1:] + } + + xorBits7(&dst[0], src, 0, srcOff, nBits) +} + +func allBytesZero(b []byte) bool { + for _, u64 := range asUint64Slice(b) { + if u64 != 0 { + return false + } + } + return true +} + +func panicf(format string, v ...interface{}) { + panic("bitarray: " + fmt.Sprintf(format, v...)) +} + +func allocByteSlice(nBytes int) []byte { + return make([]byte, nBytes, (nBytes+7) & ^7) +} + +func asUint64Slice(b []byte) []uint64 { + return unsafe.Slice((*uint64)(unsafe.Pointer(&b[0])), (len(b)+7)>>3) +} + +func fill00(b []byte) { + // This seems to get optimized into a memclr. + for i := range b { + b[i] = 0 + } + // copy(b, []byte{0, 0, 0, 0, 0, 0, 0, 0}) + // for n := 8; n < len(b); n <<= 1 { + // copy(b[n:], b[:n]) + // } +} + +func fillFF(b []byte) { + copy(b, []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}) + for n := 8; n < len(b); n <<= 1 { + copy(b[n:], b[:n]) + } +} + +func fill30(b []byte) { + copy(b, []byte{0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}) + for n := 8; n < len(b); n <<= 1 { + copy(b[n:], b[:n]) + } +} + +// ba != nil +func (ba *BitArray) bits8() []byte { + b8 := make([]byte, ba.nBits) + if ba.b == nil { + return b8 + } + for i := 0; i < ba.nBits; i++ { + b8[i] = ba.b[i>>3] >> (7 - i&7) & 1 + } + return b8 +} diff --git a/uniond/vendor/modules.txt b/uniond/vendor/modules.txt index bed443c830..41c77b335f 100644 --- a/uniond/vendor/modules.txt +++ b/uniond/vendor/modules.txt @@ -384,7 +384,7 @@ github.com/cockroachdb/redact/internal/rfmt/fmtsort # github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 ## explicit; go 1.19 github.com/cockroachdb/tokenbucket -# github.com/cometbft/cometbft v0.38.2 => github.com/unionlabs/cometbls v0.0.0-20240111183309-e159e964fa07 +# github.com/cometbft/cometbft v0.38.2 => github.com/unionlabs/cometbls v0.0.0-20240125180347-5b33e3460932 ## explicit; go 1.21 github.com/cometbft/cometbft/abci/client github.com/cometbft/cometbft/abci/example/kvstore @@ -519,7 +519,7 @@ github.com/cosmos/cosmos-db github.com/cosmos/cosmos-proto github.com/cosmos/cosmos-proto/anyutil github.com/cosmos/cosmos-proto/runtime -# github.com/cosmos/cosmos-sdk v0.50.2 => github.com/unionlabs/cosmos-sdk v0.0.0-20240111212621-d8e5bd6e5f86 +# github.com/cosmos/cosmos-sdk v0.50.2 => github.com/unionlabs/cosmos-sdk v0.0.0-20240125200611-e1b8b82c712b ## explicit; go 1.21 github.com/cosmos/cosmos-sdk/baseapp github.com/cosmos/cosmos-sdk/baseapp/internal/protocompat @@ -1431,6 +1431,9 @@ github.com/thomaso-mirodin/intmath/u64 # github.com/tidwall/btree v1.7.0 ## explicit; go 1.19 github.com/tidwall/btree +# github.com/tunabay/go-bitarray v1.3.1 +## explicit; go 1.17 +github.com/tunabay/go-bitarray # github.com/ulikunitz/xz v0.5.11 ## explicit; go 1.12 github.com/ulikunitz/xz @@ -1752,10 +1755,10 @@ rsc.io/tmplfunc/internal/parse ## explicit; go 1.12 sigs.k8s.io/yaml sigs.k8s.io/yaml/goyaml.v2 -# github.com/cometbft/cometbft => github.com/unionlabs/cometbls v0.0.0-20240111183309-e159e964fa07 +# github.com/cometbft/cometbft => github.com/unionlabs/cometbls v0.0.0-20240125180347-5b33e3460932 # github.com/consensys/gnark => github.com/consensys/gnark v0.9.1-0.20231013131835-4ebcccd9c0a8 # github.com/consensys/gnark-crypto => github.com/unionlabs/gnark-crypto v0.0.0-20231016072529-15c0507b6578 -# github.com/cosmos/cosmos-sdk => github.com/unionlabs/cosmos-sdk v0.0.0-20240111212621-d8e5bd6e5f86 +# github.com/cosmos/cosmos-sdk => github.com/unionlabs/cosmos-sdk v0.0.0-20240125200611-e1b8b82c712b # github.com/cosmos/ibc-go/modules/light-clients/08-wasm => github.com/unionlabs/ibc-go/modules/light-clients/08-wasm v0.0.0-20231219091832-0947f2e3d1aa # github.com/cosmos/ibc-go/v8 => github.com/unionlabs/ibc-go/v8 v8.0.0-20231219091832-0947f2e3d1aa # github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 diff --git a/zerg/src/context.rs b/zerg/src/context.rs index 60062f4745..747c45dc00 100644 --- a/zerg/src/context.rs +++ b/zerg/src/context.rs @@ -9,7 +9,7 @@ use std::{ use chain_utils::{cosmos_sdk::CosmosSdkChainExt, EventSource}; use contracts::{ erc20, - ibc_handler::SendPacketFilter, + ibc_packet::SendPacketFilter, ucs01_relay::{self as ucs01relay, LocalToken}, }; use cosmwasm_std::Uint128; @@ -83,7 +83,7 @@ impl Context { "wasm.{}/{}/{}", zerg_config.union_contract, zerg_config.channel, zerg_config.union.fee_denom ); - let denom_address = ucs01_relay.denom_to_address(denom).call().await.unwrap(); + let denom_address = ucs01_relay.get_denom_address(denom).call().await.unwrap(); tracing::debug!("Fetched denom address."); for signer in zerg_config.clone().evm.signers.into_iter() {