Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| 0x61012060 | 18435972 | 860 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x75bDecbb...1547dfDD4 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
TopUpAllowedRecipients
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity Multiple files format)
// SPDX-FileCopyrightText: 2022 Lido <info@lido.fi>
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;
import "TrustedCaller.sol";
import "IAllowedRecipientsRegistry.sol";
import "IAllowedTokensRegistry.sol";
import "IFinance.sol";
import "EVMScriptCreator.sol";
import "IEVMScriptFactory.sol";
import "IEasyTrack.sol";
/// @notice Creates EVMScript to top up allowed recipients addresses within the current spendable balance
contract TopUpAllowedRecipients is TrustedCaller, IEVMScriptFactory {
// -------------
// ERRORS
// -------------
string private constant ERROR_LENGTH_MISMATCH = "LENGTH_MISMATCH";
string private constant ERROR_EMPTY_DATA = "EMPTY_DATA";
string private constant ERROR_ZERO_AMOUNT = "ZERO_AMOUNT";
string private constant ERROR_TOKEN_NOT_ALLOWED = "TOKEN_NOT_ALLOWED";
string private constant ERROR_RECIPIENT_NOT_ALLOWED = "RECIPIENT_NOT_ALLOWED";
string private constant ERROR_ZERO_RECIPIENT = "ZERO_RECIPIENT";
string private constant ERROR_SUM_EXCEEDS_SPENDABLE_BALANCE = "SUM_EXCEEDS_SPENDABLE_BALANCE";
// -------------
// VARIABLES
// -------------
/// @notice Address of EasyTrack contract
IEasyTrack public immutable easyTrack;
/// @notice Address of Aragon's Finance contract
IFinance public immutable finance;
/// @notice Address of AllowedRecipientsRegistry contract
IAllowedRecipientsRegistry public immutable allowedRecipientsRegistry;
/// @notice Address of AllowedTokensRegistry contract
IAllowedTokensRegistry public immutable allowedTokensRegistry;
// -------------
// CONSTRUCTOR
// -------------
/// @param _trustedCaller Address that has access to certain methods.
/// Set once on deployment and can't be changed.
/// @param _allowedRecipientsRegistry Address of AllowedRecipientsRegistry contract
/// @param _allowedTokensRegistry Address of AllowedTokensRegistry contract
/// @param _finance Address of Aragon's Finance contract
/// @param _easyTrack Address of EasyTrack contract
constructor(
address _trustedCaller,
address _allowedRecipientsRegistry,
address _allowedTokensRegistry,
address _finance,
address _easyTrack
) TrustedCaller(_trustedCaller) {
finance = IFinance(_finance);
allowedRecipientsRegistry = IAllowedRecipientsRegistry(_allowedRecipientsRegistry);
allowedTokensRegistry = IAllowedTokensRegistry(_allowedTokensRegistry);
easyTrack = IEasyTrack(_easyTrack);
}
// -------------
// EXTERNAL METHODS
// -------------
/// @notice Creates EVMScript to top up allowed recipients addresses
/// @param _creator Address who creates EVMScript
/// @param _evmScriptCallData Encoded tuple: (address token, address[] recipients, uint256[] amounts) where
/// token - address of token to top up
/// recipients - addresses of recipients to top up
/// amounts - corresponding amounts of token to transfer
/// @dev note that the arrays below has one extra element to store limit enforcement calls
function createEVMScript(address _creator, bytes calldata _evmScriptCallData)
external
view
override
onlyTrustedCaller(_creator)
returns (bytes memory)
{
(address token, address[] memory recipients, uint256[] memory amounts) =
_decodeEVMScriptCallData(_evmScriptCallData);
uint256 normalizedAmount = _validateEVMScriptCallData(token, recipients, amounts);
address[] memory to = new address[](recipients.length + 1);
bytes4[] memory methodIds = new bytes4[](recipients.length + 1);
bytes[] memory evmScriptsCalldata = new bytes[](recipients.length + 1);
to[0] = address(allowedRecipientsRegistry);
methodIds[0] = allowedRecipientsRegistry.updateSpentAmount.selector;
evmScriptsCalldata[0] = abi.encode(normalizedAmount);
for (uint256 i = 0; i < recipients.length; ++i) {
to[i + 1] = address(finance);
methodIds[i + 1] = finance.newImmediatePayment.selector;
evmScriptsCalldata[i + 1] = abi.encode(token, recipients[i], amounts[i], "Easy Track: top up recipient");
}
return EVMScriptCreator.createEVMScript(to, methodIds, evmScriptsCalldata);
}
/// @notice Decodes call data used by createEVMScript method
/// @param _evmScriptCallData Encoded tuple: (address[] recipients, uint256[] amounts) where
/// recipients - addresses of recipients to top up
/// amounts - corresponding amounts of token to transfer
/// @return token Address of payout token
/// @return recipients Addresses of recipients to top up
/// @return amounts Amounts of token to transfer
function decodeEVMScriptCallData(bytes calldata _evmScriptCallData)
external
pure
returns (address token, address[] memory recipients, uint256[] memory amounts)
{
return _decodeEVMScriptCallData(_evmScriptCallData);
}
// ------------------
// PRIVATE METHODS
// ------------------
function _validateEVMScriptCallData(address token, address[] memory _recipients, uint256[] memory _amounts)
private
view
returns (uint256 normalizedAmount)
{
require(_amounts.length == _recipients.length, ERROR_LENGTH_MISMATCH);
require(_recipients.length > 0, ERROR_EMPTY_DATA);
require(allowedTokensRegistry.isTokenAllowed(token), ERROR_TOKEN_NOT_ALLOWED);
uint256 totalAmount;
for (uint256 i = 0; i < _recipients.length; ++i) {
require(_amounts[i] > 0, ERROR_ZERO_AMOUNT);
require(_recipients[i] != address(0), ERROR_ZERO_RECIPIENT);
require(allowedRecipientsRegistry.isRecipientAllowed(_recipients[i]), ERROR_RECIPIENT_NOT_ALLOWED);
totalAmount += _amounts[i];
}
normalizedAmount = allowedTokensRegistry.normalizeAmount(totalAmount, token);
_validateSpendableBalance(normalizedAmount);
}
function _decodeEVMScriptCallData(bytes calldata _evmScriptCallData)
private
pure
returns (address token, address[] memory recipients, uint256[] memory amounts)
{
return abi.decode(_evmScriptCallData, (address, address[], uint256[]));
}
function _validateSpendableBalance(uint256 _amount) private view {
require(
allowedRecipientsRegistry.isUnderSpendableBalance(_amount, easyTrack.motionDuration()),
ERROR_SUM_EXCEEDS_SPENDABLE_BALANCE
);
}
}
// SPDX-FileCopyrightText: 2021 Lido <info@lido.fi>
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;
/// @author psirex
/// @notice Contains methods for convenient creation
/// of EVMScripts in EVMScript factories contracts
library EVMScriptCreator {
// Id of default CallsScript Aragon's executor.
bytes4 private constant SPEC_ID = hex"00000001";
/// @notice Encodes one method call as EVMScript
function createEVMScript(
address _to,
bytes4 _methodId,
bytes memory _evmScriptCallData
) internal pure returns (bytes memory _commands) {
return
abi.encodePacked(
SPEC_ID,
_to,
uint32(_evmScriptCallData.length) + 4,
_methodId,
_evmScriptCallData
);
}
/// @notice Encodes multiple calls of the same method on one contract as EVMScript
function createEVMScript(
address _to,
bytes4 _methodId,
bytes[] memory _evmScriptCallData
) internal pure returns (bytes memory _evmScript) {
for (uint256 i = 0; i < _evmScriptCallData.length; ++i) {
_evmScript = bytes.concat(
_evmScript,
abi.encodePacked(
_to,
uint32(_evmScriptCallData[i].length) + 4,
_methodId,
_evmScriptCallData[i]
)
);
}
_evmScript = bytes.concat(SPEC_ID, _evmScript);
}
/// @notice Encodes multiple calls to different methods within the same contract as EVMScript
function createEVMScript(
address _to,
bytes4[] memory _methodIds,
bytes[] memory _evmScriptCallData
) internal pure returns (bytes memory _evmScript) {
require(_methodIds.length == _evmScriptCallData.length, "LENGTH_MISMATCH");
for (uint256 i = 0; i < _methodIds.length; ++i) {
_evmScript = bytes.concat(
_evmScript,
abi.encodePacked(
_to,
uint32(_evmScriptCallData[i].length) + 4,
_methodIds[i],
_evmScriptCallData[i]
)
);
}
_evmScript = bytes.concat(SPEC_ID, _evmScript);
}
/// @notice Encodes multiple calls to different contracts as EVMScript
function createEVMScript(
address[] memory _to,
bytes4[] memory _methodIds,
bytes[] memory _evmScriptCallData
) internal pure returns (bytes memory _evmScript) {
require(_to.length == _methodIds.length, "LENGTH_MISMATCH");
require(_to.length == _evmScriptCallData.length, "LENGTH_MISMATCH");
for (uint256 i = 0; i < _to.length; ++i) {
_evmScript = bytes.concat(
_evmScript,
abi.encodePacked(
_to[i],
uint32(_evmScriptCallData[i].length) + 4,
_methodIds[i],
_evmScriptCallData[i]
)
);
}
_evmScript = bytes.concat(SPEC_ID, _evmScript);
}
}
// SPDX-FileCopyrightText: 2022 Lido <info@lido.fi>
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;
interface IAllowedRecipientsRegistry {
function addRecipient(address _recipient, string memory _title) external;
function renounceRole(bytes32 role, address account) external;
function isRecipientAllowed(address _recipient) external view returns (bool);
function setLimitParameters(uint256 _limit, uint256 _periodDurationMonths) external;
function getLimitParameters() external view returns (uint256, uint256);
function updateSpentAmount(uint256 _payoutAmount) external;
function spendableBalance() external view returns (uint256);
function hasRole(bytes32 role, address account) external view returns (bool);
function getAllowedRecipients() external view returns (address[] memory);
function bokkyPooBahsDateTimeContract() external view returns (address);
function isUnderSpendableBalance(uint256 _amount, uint256 _motionDuration) external view returns (bool);
}// SPDX-FileCopyrightText: 2022 Lido <info@lido.fi>
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;
interface IAllowedTokensRegistry {
function addToken(address _token) external;
function removeToken(address _token) external;
function renounceRole(bytes32 role, address account) external;
function isTokenAllowed(address _token) external view returns (bool);
function hasRole(bytes32 role, address account) external view returns (bool);
function getAllowedTokens() external view returns (address[] memory);
function decimals() external view returns (uint8);
function normalizeAmount(uint256 _amount, address _token) external view returns (uint256);
}// SPDX-FileCopyrightText: 2022 Lido <info@lido.fi>
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;
interface IEasyTrack {
function motionDuration() external view returns (uint256);
function evmScriptExecutor() external view returns (address);
}// SPDX-FileCopyrightText: 2021 Lido <info@lido.fi>
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;
/// @author psirex
/// @notice Interface which every EVMScript factory used in EasyTrack contract has to implement
interface IEVMScriptFactory {
function createEVMScript(address _creator, bytes memory _evmScriptCallData)
external
returns (bytes memory);
}
// SPDX-FileCopyrightText: 2021 Lido <info@lido.fi>
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;
/// @author psirex
/// @notice Interface of method from Aragon's Finance contract to create a new payment
interface IFinance {
function newImmediatePayment(
address _token,
address _receiver,
uint256 _amount,
string memory _reference
) external;
}
// SPDX-FileCopyrightText: 2021 Lido <info@lido.fi>
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;
/// @author psirex
/// @notice A helper contract contains logic to validate that only a trusted caller has access to certain methods.
/// @dev Trusted caller set once on deployment and can't be changed.
contract TrustedCaller {
string private constant ERROR_TRUSTED_CALLER_IS_ZERO_ADDRESS = "TRUSTED_CALLER_IS_ZERO_ADDRESS";
string private constant ERROR_CALLER_IS_FORBIDDEN = "CALLER_IS_FORBIDDEN";
address public immutable trustedCaller;
constructor(address _trustedCaller) {
require(_trustedCaller != address(0), ERROR_TRUSTED_CALLER_IS_ZERO_ADDRESS);
trustedCaller = _trustedCaller;
}
modifier onlyTrustedCaller(address _caller) {
require(_caller == trustedCaller, ERROR_CALLER_IS_FORBIDDEN);
_;
}
}
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_trustedCaller","type":"address"},{"internalType":"address","name":"_allowedRecipientsRegistry","type":"address"},{"internalType":"address","name":"_allowedTokensRegistry","type":"address"},{"internalType":"address","name":"_finance","type":"address"},{"internalType":"address","name":"_easyTrack","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"allowedRecipientsRegistry","outputs":[{"internalType":"contract IAllowedRecipientsRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowedTokensRegistry","outputs":[{"internalType":"contract IAllowedTokensRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_creator","type":"address"},{"internalType":"bytes","name":"_evmScriptCallData","type":"bytes"}],"name":"createEVMScript","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_evmScriptCallData","type":"bytes"}],"name":"decodeEVMScriptCallData","outputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"easyTrack","outputs":[{"internalType":"contract IEasyTrack","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finance","outputs":[{"internalType":"contract IFinance","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trustedCaller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
0x6101206040523480156200001257600080fd5b5060405162001500380380620015008339810160408190526200003591620000f5565b60408051808201909152601e81527f545255535445445f43414c4c45525f49535f5a45524f5f414444524553530000602082015285906001600160a01b0382166200009e5760405162461bcd60e51b815260040162000095919062000165565b60405180910390fd5b506001600160601b0319606091821b811660805292811b831660c05293841b821660e05291831b811661010052911b1660a05250620001bd565b80516001600160a01b0381168114620000f057600080fd5b919050565b600080600080600060a086880312156200010e57600080fd5b6200011986620000d8565b94506200012960208701620000d8565b93506200013960408701620000d8565b92506200014960608701620000d8565b91506200015960808701620000d8565b90509295509295909350565b600060208083528351808285015260005b81811015620001945785810183015185820160400152820162000176565b81811115620001a7576000604083870101525b50601f01601f1916929092016040019392505050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6112ba62000246600039600081816087015281816106a301526109b8015260008181610162015281816103780152818161084b0152610bcc01526000818160f201526104440152600081816101190152610bfc01526000818160cb01526101c501526112ba6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063c368df7e1161005b578063c368df7e14610114578063ecf7c6901461013b578063fdcceb141461015d578063fea21c9c1461018457600080fd5b80630db94bba14610082578063268f0760146100c6578063313b7b19146100ed575b600080fd5b6100a97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100a97f000000000000000000000000000000000000000000000000000000000000000081565b6100a97f000000000000000000000000000000000000000000000000000000000000000081565b6100a97f000000000000000000000000000000000000000000000000000000000000000081565b61014e610149366004610f6d565b6101a4565b6040516100bd939291906110ac565b6100a97f000000000000000000000000000000000000000000000000000000000000000081565b610197610192366004610eef565b6101c0565b6040516100bd9190611140565b60006060806101b385856105de565b9250925092509250925092565b6060837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316146040518060400160405280601381526020017221a0a62622a92fa4a9afa327a92124a22222a760691b8152509061024b5760405162461bcd60e51b81526004016102429190611140565b60405180910390fd5b50600080600061025b87876105de565b925092509250600061026e8484846105ef565b905060008351600161028091906111a8565b67ffffffffffffffff81111561029857610298611256565b6040519080825280602002602001820160405280156102c1578160200160208202803683370190505b5090506000845160016102d491906111a8565b67ffffffffffffffff8111156102ec576102ec611256565b604051908082528060200260200182016040528015610315578160200160208202803683370190505b50905060008551600161032891906111a8565b67ffffffffffffffff81111561034057610340611256565b60405190808252806020026020018201604052801561037357816020015b606081526020019060019003908161035e5790505b5090507f0000000000000000000000000000000000000000000000000000000000000000836000815181106103aa576103aa611240565b60200260200101906001600160a01b031690816001600160a01b031681525050636667122960e01b826000815181106103e5576103e5611240565b6001600160e01b03199290921660209283029190910182015260408051918201869052016040516020818303038152906040528160008151811061042b5761042b611240565b602002602001018190525060005b86518110156105c0577f00000000000000000000000000000000000000000000000000000000000000008461046f8360016111a8565b8151811061047f5761047f611240565b6001600160a01b0390921660209283029190910190910152637b1b242360e11b836104ab8360016111a8565b815181106104bb576104bb611240565b60200260200101906001600160e01b03191690816001600160e01b03191681525050878782815181106104f0576104f0611240565b602002602001015187838151811061050a5761050a611240565b6020026020010151604051602001610578939291906001600160a01b0393841681529190921660208201526040810191909152608060608201819052601c908201527f4561737920547261636b3a20746f7020757020726563697069656e740000000060a082015260c00190565b60408051601f19818403018152919052826105948360016111a8565b815181106105a4576105a4611240565b6020026020010181905250806105b99061120f565b9050610439565b506105cc838383610a3d565b9850505050505050505b509392505050565b60006060806101b384860186610e12565b600082518251146040518060400160405280600f81526020016e0988a9c8ea890be9a92a69a82a8869608b1b8152509061063c5760405162461bcd60e51b81526004016102429190611140565b5060008351116040518060400160405280600a815260200169454d5054595f4441544160b01b815250906106835760405162461bcd60e51b81526004016102429190611140565b5060405163f9eaee0d60e01b81526001600160a01b0385811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063f9eaee0d9060240160206040518083038186803b1580156106e557600080fd5b505afa1580156106f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071d9190610f44565b604051806040016040528060118152602001701513d2d15397d393d517d0531313d5d151607a1b815250906107655760405162461bcd60e51b81526004016102429190611140565b506000805b845181101561099157600084828151811061078757610787611240565b6020026020010151116040518060400160405280600b81526020016a16915493d7d05353d5539560aa1b815250906107d25760405162461bcd60e51b81526004016102429190611140565b5060006001600160a01b03168582815181106107f0576107f0611240565b60200260200101516001600160a01b031614156040518060400160405280600e81526020016d16915493d7d49150d2541251539560921b815250906108485760405162461bcd60e51b81526004016102429190611140565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638400c30786838151811061088a5761088a611240565b60200260200101516040518263ffffffff1660e01b81526004016108bd91906001600160a01b0391909116815260200190565b60206040518083038186803b1580156108d557600080fd5b505afa1580156108e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090d9190610f44565b60405180604001604052806015815260200174149150d2541251539517d393d517d0531313d5d151605a1b815250906109595760405162461bcd60e51b81526004016102429190611140565b5083818151811061096c5761096c611240565b60200260200101518261097f91906111a8565b915061098a8161120f565b905061076a565b50604051630d03d2a760e11b8152600481018290526001600160a01b0386811660248301527f00000000000000000000000000000000000000000000000000000000000000001690631a07a54e9060440160206040518083038186803b1580156109fa57600080fd5b505afa158015610a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a329190610faf565b91506105d682610bca565b60608251845114610a825760405162461bcd60e51b815260206004820152600f60248201526e0988a9c8ea890be9a92a69a82a8869608b1b6044820152606401610242565b8151845114610ac55760405162461bcd60e51b815260206004820152600f60248201526e0988a9c8ea890be9a92a69a82a8869608b1b6044820152606401610242565b60005b8451811015610b9a5781858281518110610ae457610ae4611240565b6020026020010151848381518110610afe57610afe611240565b6020026020010151516004610b1391906111c0565b868481518110610b2557610b25611240565b6020026020010151868581518110610b3f57610b3f611240565b6020026020010151604051602001610b5a9493929190610ff4565b60408051601f1981840301815290829052610b78929160200161107d565b604051602081830303815290604052915080610b939061120f565b9050610ac8565b50600160e01b81604051602001610bb292919061104c565b60405160208183030381529060405290509392505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ba578ab827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166364993a736040518163ffffffff1660e01b815260040160206040518083038186803b158015610c5357600080fd5b505afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8b9190610faf565b6040516001600160e01b031960e085901b1681526004810192909252602482015260440160206040518083038186803b158015610cc757600080fd5b505afa158015610cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cff9190610f44565b6040518060400160405280601d81526020017f53554d5f455843454544535f5350454e4441424c455f42414c414e434500000081525090610d535760405162461bcd60e51b81526004016102429190611140565b5050565b600082601f830112610d6857600080fd5b81356020610d7d610d7883611184565b611153565b80838252828201915082860187848660051b8901011115610d9d57600080fd5b60005b85811015610dbc57813584529284019290840190600101610da0565b5090979650505050505050565b60008083601f840112610ddb57600080fd5b50813567ffffffffffffffff811115610df357600080fd5b602083019150836020828501011115610e0b57600080fd5b9250929050565b600080600060608486031215610e2757600080fd5b8335610e328161126c565b925060208481013567ffffffffffffffff80821115610e5057600080fd5b818701915087601f830112610e6457600080fd5b8135610e72610d7882611184565b8082825285820191508585018b878560051b8801011115610e9257600080fd5b600095505b83861015610ebe578035610eaa8161126c565b835260019590950194918601918601610e97565b50965050506040870135925080831115610ed757600080fd5b5050610ee586828701610d57565b9150509250925092565b600080600060408486031215610f0457600080fd5b8335610f0f8161126c565b9250602084013567ffffffffffffffff811115610f2b57600080fd5b610f3786828701610dc9565b9497909650939450505050565b600060208284031215610f5657600080fd5b81518015158114610f6657600080fd5b9392505050565b60008060208385031215610f8057600080fd5b823567ffffffffffffffff811115610f9757600080fd5b610fa385828601610dc9565b90969095509350505050565b600060208284031215610fc157600080fd5b5051919050565b60008151808452610fe08160208601602086016111df565b601f01601f19169290920160200192915050565b6bffffffffffffffffffffffff19606086901b1681526001600160e01b031960e085901b8116601483015283166018820152815160009061103c81601c8501602087016111df565b91909101601c0195945050505050565b6001600160e01b031983168152815160009061106f8160048501602087016111df565b919091016004019392505050565b6000835161108f8184602088016111df565b8351908301906110a38183602088016111df565b01949350505050565b6001600160a01b038481168252606060208084018290528551918401829052600092868201929091906080860190855b818110156110fa5785518516835294830194918301916001016110dc565b5050858103604087015286518082529082019350915080860160005b8381101561113257815185529382019390820190600101611116565b509298975050505050505050565b602081526000610f666020830184610fc8565b604051601f8201601f1916810167ffffffffffffffff8111828210171561117c5761117c611256565b604052919050565b600067ffffffffffffffff82111561119e5761119e611256565b5060051b60200190565b600082198211156111bb576111bb61122a565b500190565b600063ffffffff8083168185168083038211156110a3576110a361122a565b60005b838110156111fa5781810151838201526020016111e2565b83811115611209576000848401525b50505050565b60006000198214156112235761122361122a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461128157600080fd5b5056fea2646970667358221220dc7c1789f4d68a3117744d9b666c30aed4662d0626395f66b8e95c67f46d3e8c64736f6c6343000806003300000000000000000000000017f6b2c738a63a8d3a113a228cfd0b373244633d000000000000000000000000dffcd3bf14796a62a804c1b16f877cf7120379db0000000000000000000000004ac40c34f8992bb1e5e856a448792158022551ca000000000000000000000000b9e5cbb9ca5b0d659238807e84d0176930753d86000000000000000000000000f0211b7660680b49de1a7e9f25c65660f0a13fea
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063c368df7e1161005b578063c368df7e14610114578063ecf7c6901461013b578063fdcceb141461015d578063fea21c9c1461018457600080fd5b80630db94bba14610082578063268f0760146100c6578063313b7b19146100ed575b600080fd5b6100a97f0000000000000000000000004ac40c34f8992bb1e5e856a448792158022551ca81565b6040516001600160a01b0390911681526020015b60405180910390f35b6100a97f00000000000000000000000017f6b2c738a63a8d3a113a228cfd0b373244633d81565b6100a97f000000000000000000000000b9e5cbb9ca5b0d659238807e84d0176930753d8681565b6100a97f000000000000000000000000f0211b7660680b49de1a7e9f25c65660f0a13fea81565b61014e610149366004610f6d565b6101a4565b6040516100bd939291906110ac565b6100a97f000000000000000000000000dffcd3bf14796a62a804c1b16f877cf7120379db81565b610197610192366004610eef565b6101c0565b6040516100bd9190611140565b60006060806101b385856105de565b9250925092509250925092565b6060837f00000000000000000000000017f6b2c738a63a8d3a113a228cfd0b373244633d6001600160a01b0316816001600160a01b0316146040518060400160405280601381526020017221a0a62622a92fa4a9afa327a92124a22222a760691b8152509061024b5760405162461bcd60e51b81526004016102429190611140565b60405180910390fd5b50600080600061025b87876105de565b925092509250600061026e8484846105ef565b905060008351600161028091906111a8565b67ffffffffffffffff81111561029857610298611256565b6040519080825280602002602001820160405280156102c1578160200160208202803683370190505b5090506000845160016102d491906111a8565b67ffffffffffffffff8111156102ec576102ec611256565b604051908082528060200260200182016040528015610315578160200160208202803683370190505b50905060008551600161032891906111a8565b67ffffffffffffffff81111561034057610340611256565b60405190808252806020026020018201604052801561037357816020015b606081526020019060019003908161035e5790505b5090507f000000000000000000000000dffcd3bf14796a62a804c1b16f877cf7120379db836000815181106103aa576103aa611240565b60200260200101906001600160a01b031690816001600160a01b031681525050636667122960e01b826000815181106103e5576103e5611240565b6001600160e01b03199290921660209283029190910182015260408051918201869052016040516020818303038152906040528160008151811061042b5761042b611240565b602002602001018190525060005b86518110156105c0577f000000000000000000000000b9e5cbb9ca5b0d659238807e84d0176930753d868461046f8360016111a8565b8151811061047f5761047f611240565b6001600160a01b0390921660209283029190910190910152637b1b242360e11b836104ab8360016111a8565b815181106104bb576104bb611240565b60200260200101906001600160e01b03191690816001600160e01b03191681525050878782815181106104f0576104f0611240565b602002602001015187838151811061050a5761050a611240565b6020026020010151604051602001610578939291906001600160a01b0393841681529190921660208201526040810191909152608060608201819052601c908201527f4561737920547261636b3a20746f7020757020726563697069656e740000000060a082015260c00190565b60408051601f19818403018152919052826105948360016111a8565b815181106105a4576105a4611240565b6020026020010181905250806105b99061120f565b9050610439565b506105cc838383610a3d565b9850505050505050505b509392505050565b60006060806101b384860186610e12565b600082518251146040518060400160405280600f81526020016e0988a9c8ea890be9a92a69a82a8869608b1b8152509061063c5760405162461bcd60e51b81526004016102429190611140565b5060008351116040518060400160405280600a815260200169454d5054595f4441544160b01b815250906106835760405162461bcd60e51b81526004016102429190611140565b5060405163f9eaee0d60e01b81526001600160a01b0385811660048301527f0000000000000000000000004ac40c34f8992bb1e5e856a448792158022551ca169063f9eaee0d9060240160206040518083038186803b1580156106e557600080fd5b505afa1580156106f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071d9190610f44565b604051806040016040528060118152602001701513d2d15397d393d517d0531313d5d151607a1b815250906107655760405162461bcd60e51b81526004016102429190611140565b506000805b845181101561099157600084828151811061078757610787611240565b6020026020010151116040518060400160405280600b81526020016a16915493d7d05353d5539560aa1b815250906107d25760405162461bcd60e51b81526004016102429190611140565b5060006001600160a01b03168582815181106107f0576107f0611240565b60200260200101516001600160a01b031614156040518060400160405280600e81526020016d16915493d7d49150d2541251539560921b815250906108485760405162461bcd60e51b81526004016102429190611140565b507f000000000000000000000000dffcd3bf14796a62a804c1b16f877cf7120379db6001600160a01b0316638400c30786838151811061088a5761088a611240565b60200260200101516040518263ffffffff1660e01b81526004016108bd91906001600160a01b0391909116815260200190565b60206040518083038186803b1580156108d557600080fd5b505afa1580156108e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090d9190610f44565b60405180604001604052806015815260200174149150d2541251539517d393d517d0531313d5d151605a1b815250906109595760405162461bcd60e51b81526004016102429190611140565b5083818151811061096c5761096c611240565b60200260200101518261097f91906111a8565b915061098a8161120f565b905061076a565b50604051630d03d2a760e11b8152600481018290526001600160a01b0386811660248301527f0000000000000000000000004ac40c34f8992bb1e5e856a448792158022551ca1690631a07a54e9060440160206040518083038186803b1580156109fa57600080fd5b505afa158015610a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a329190610faf565b91506105d682610bca565b60608251845114610a825760405162461bcd60e51b815260206004820152600f60248201526e0988a9c8ea890be9a92a69a82a8869608b1b6044820152606401610242565b8151845114610ac55760405162461bcd60e51b815260206004820152600f60248201526e0988a9c8ea890be9a92a69a82a8869608b1b6044820152606401610242565b60005b8451811015610b9a5781858281518110610ae457610ae4611240565b6020026020010151848381518110610afe57610afe611240565b6020026020010151516004610b1391906111c0565b868481518110610b2557610b25611240565b6020026020010151868581518110610b3f57610b3f611240565b6020026020010151604051602001610b5a9493929190610ff4565b60408051601f1981840301815290829052610b78929160200161107d565b604051602081830303815290604052915080610b939061120f565b9050610ac8565b50600160e01b81604051602001610bb292919061104c565b60405160208183030381529060405290509392505050565b7f000000000000000000000000dffcd3bf14796a62a804c1b16f877cf7120379db6001600160a01b0316634ba578ab827f000000000000000000000000f0211b7660680b49de1a7e9f25c65660f0a13fea6001600160a01b03166364993a736040518163ffffffff1660e01b815260040160206040518083038186803b158015610c5357600080fd5b505afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8b9190610faf565b6040516001600160e01b031960e085901b1681526004810192909252602482015260440160206040518083038186803b158015610cc757600080fd5b505afa158015610cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cff9190610f44565b6040518060400160405280601d81526020017f53554d5f455843454544535f5350454e4441424c455f42414c414e434500000081525090610d535760405162461bcd60e51b81526004016102429190611140565b5050565b600082601f830112610d6857600080fd5b81356020610d7d610d7883611184565b611153565b80838252828201915082860187848660051b8901011115610d9d57600080fd5b60005b85811015610dbc57813584529284019290840190600101610da0565b5090979650505050505050565b60008083601f840112610ddb57600080fd5b50813567ffffffffffffffff811115610df357600080fd5b602083019150836020828501011115610e0b57600080fd5b9250929050565b600080600060608486031215610e2757600080fd5b8335610e328161126c565b925060208481013567ffffffffffffffff80821115610e5057600080fd5b818701915087601f830112610e6457600080fd5b8135610e72610d7882611184565b8082825285820191508585018b878560051b8801011115610e9257600080fd5b600095505b83861015610ebe578035610eaa8161126c565b835260019590950194918601918601610e97565b50965050506040870135925080831115610ed757600080fd5b5050610ee586828701610d57565b9150509250925092565b600080600060408486031215610f0457600080fd5b8335610f0f8161126c565b9250602084013567ffffffffffffffff811115610f2b57600080fd5b610f3786828701610dc9565b9497909650939450505050565b600060208284031215610f5657600080fd5b81518015158114610f6657600080fd5b9392505050565b60008060208385031215610f8057600080fd5b823567ffffffffffffffff811115610f9757600080fd5b610fa385828601610dc9565b90969095509350505050565b600060208284031215610fc157600080fd5b5051919050565b60008151808452610fe08160208601602086016111df565b601f01601f19169290920160200192915050565b6bffffffffffffffffffffffff19606086901b1681526001600160e01b031960e085901b8116601483015283166018820152815160009061103c81601c8501602087016111df565b91909101601c0195945050505050565b6001600160e01b031983168152815160009061106f8160048501602087016111df565b919091016004019392505050565b6000835161108f8184602088016111df565b8351908301906110a38183602088016111df565b01949350505050565b6001600160a01b038481168252606060208084018290528551918401829052600092868201929091906080860190855b818110156110fa5785518516835294830194918301916001016110dc565b5050858103604087015286518082529082019350915080860160005b8381101561113257815185529382019390820190600101611116565b509298975050505050505050565b602081526000610f666020830184610fc8565b604051601f8201601f1916810167ffffffffffffffff8111828210171561117c5761117c611256565b604052919050565b600067ffffffffffffffff82111561119e5761119e611256565b5060051b60200190565b600082198211156111bb576111bb61122a565b500190565b600063ffffffff8083168185168083038211156110a3576110a361122a565b60005b838110156111fa5781810151838201526020016111e2565b83811115611209576000848401525b50505050565b60006000198214156112235761122361122a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461128157600080fd5b5056fea2646970667358221220dc7c1789f4d68a3117744d9b666c30aed4662d0626395f66b8e95c67f46d3e8c64736f6c63430008060033
Deployed Bytecode Sourcemap
438:6172:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1529:61;;;;;;;;-1:-1:-1;;;;;5722:32:8;;;5704:51;;5692:2;5677:18;1529:61:6;;;;;;;;527:38:7;;;;;1293:33:6;;;;;1196:37;;;;;4794:257;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;1395:69::-;;;;;3120:1230;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4794:257::-;4909:13;4924:27;4953:24;5000:44;5025:18;;5000:24;:44::i;:::-;4993:51;;;;;;4794:257;;;;;:::o;3120:1230::-;3298:12;3271:8;819:13:7;-1:-1:-1;;;;;808:24:7;:7;-1:-1:-1;;;;;808:24:7;;834:25;;;;;;;;;;;;;-1:-1:-1;;;834:25:7;;;800:60;;;;;-1:-1:-1;;;800:60:7;;;;;;;;:::i;:::-;;;;;;;;;;3327:13:6::1;3342:27:::0;3371:24:::1;3411:44;3436:18;;3411:24;:44::i;:::-;3326:129;;;;;;3465:24;3492:54;3519:5;3526:10;3538:7;3492:26;:54::i;:::-;3465:81;;3557:19;3593:10;:17;3613:1;3593:21;;;;:::i;:::-;3579:36;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;3579:36:6::1;;3557:58;;3625:25;3666:10;:17;3686:1;3666:21;;;;:::i;:::-;3653:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;3653:35:6::1;;3625:63;;3698:33;3746:10;:17;3766:1;3746:21;;;;:::i;:::-;3734:34;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3698:70;;3795:25;3779:2;3782:1;3779:5;;;;;;;;:::i;:::-;;;;;;:42;-1:-1:-1::0;;;;;3779:42:6::1;;;-1:-1:-1::0;;;;;3779:42:6::1;;;::::0;::::1;3846:52;;;3831:9;3841:1;3831:12;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;3831:67:6;;;::::1;:12;::::0;;::::1;::::0;;;;;;:67;3932:28:::1;::::0;;;;::::1;9545:25:8::0;;;9518:18;3932:28:6::1;;;;;;;;;;;;3908:18;3927:1;3908:21;;;;;;;;:::i;:::-;;;;;;:52;;;;3976:9;3971:288;3995:10;:17;3991:1;:21;3971:288;;;4053:7;4033:2:::0;4036:5:::1;:1:::0;4040::::1;4036:5;:::i;:::-;4033:9;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;4033:28:6;;::::1;:9;::::0;;::::1;::::0;;;;;;;:28;-1:-1:-1;;;4075:9:6;4085:5:::1;:1:::0;4089::::1;4085:5;:::i;:::-;4075:16;;;;;;;;:::i;:::-;;;;;;:55;-1:-1:-1::0;;;;;4075:55:6::1;;;;-1:-1:-1::0;;;;;4075:55:6::1;;;;::::0;::::1;4183:5;4190:10;4201:1;4190:13;;;;;;;;:::i;:::-;;;;;;;4205:7;4213:1;4205:10;;;;;;;;:::i;:::-;;;;;;;4172:76;;;;;;;;;-1:-1:-1::0;;;;;6090:15:8;;;6072:34;;6142:15;;;;6137:2;6122:18;;6115:43;6189:2;6174:18;;6167:34;;;;6237:3;6232:2;6217:18;;6210:31;;;6278:2;6257:19;;;6250:31;6318:30;6052:3;6297:19;;6290:59;6381:3;6366:19;;6024:367;4172:76:6::1;;::::0;;-1:-1:-1;;4172:76:6;;::::1;::::0;;;;;;4144:18;4163:5:::1;:1:::0;4167::::1;4163:5;:::i;:::-;4144:25;;;;;;;;:::i;:::-;;;;;;:104;;;;4014:3;;;;:::i;:::-;;;3971:288;;;;4276:67;4309:2;4313:9;4324:18;4276:32;:67::i;:::-;4269:74;;;;;;;;;870:1:7;3120:1230:6::0;;;;;;:::o;6078:276::-;6193:13;6208:27;;6284:63;;;;6295:18;6284:63;:::i;5133:939::-;5287:24;5354:11;:18;5335:8;:15;:37;5374:21;;;;;;;;;;;;;-1:-1:-1;;;5374:21:6;;;5327:69;;;;;-1:-1:-1;;;5327:69:6;;;;;;;;:::i;:::-;;5435:1;5414:11;:18;:22;5438:16;;;;;;;;;;;;;-1:-1:-1;;;5438:16:6;;;5406:49;;;;;-1:-1:-1;;;5406:49:6;;;;;;;;:::i;:::-;-1:-1:-1;5473:43:6;;-1:-1:-1;;;5473:43:6;;-1:-1:-1;;;;;5722:32:8;;;5473:43:6;;;5704:51:8;5473:21:6;:36;;;;5677:18:8;;5473:43:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5518:23;;;;;;;;;;;;;-1:-1:-1;;;5518:23:6;;;5465:77;;;;;-1:-1:-1;;;5465:77:6;;;;;;;;:::i;:::-;-1:-1:-1;5553:19:6;;5583:342;5607:11;:18;5603:1;:22;5583:342;;;5668:1;5654:8;5663:1;5654:11;;;;;;;;:::i;:::-;;;;;;;:15;5671:17;;;;;;;;;;;;;-1:-1:-1;;;5671:17:6;;;5646:43;;;;;-1:-1:-1;;;5646:43:6;;;;;;;;:::i;:::-;;5737:1;-1:-1:-1;;;;;5711:28:6;:11;5723:1;5711:14;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;5711:28:6;;;5741:20;;;;;;;;;;;;;-1:-1:-1;;;5741:20:6;;;5703:59;;;;;-1:-1:-1;;;5703:59:6;;;;;;;;:::i;:::-;;5784:25;-1:-1:-1;;;;;5784:44:6;;5829:11;5841:1;5829:14;;;;;;;;:::i;:::-;;;;;;;5784:60;;;;;;;;;;;;;;-1:-1:-1;;;;;5722:32:8;;;;5704:51;;5692:2;5677:18;;5659:102;5784:60:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5846:27;;;;;;;;;;;;;-1:-1:-1;;;5846:27:6;;;5776:98;;;;;-1:-1:-1;;;5776:98:6;;;;;;;;:::i;:::-;;5903:8;5912:1;5903:11;;;;;;;;:::i;:::-;;;;;;;5888:26;;;;;:::i;:::-;;-1:-1:-1;5627:3:6;;;:::i;:::-;;;5583:342;;;-1:-1:-1;5954:57:6;;-1:-1:-1;;;5954:57:6;;;;;9755:25:8;;;-1:-1:-1;;;;;9816:32:8;;;9796:18;;;9789:60;5954:21:6;:37;;;;9728:18:8;;5954:57:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5935:76;;6022:43;6048:16;6022:25;:43::i;2396:760:0:-;2559:23;2616:10;:17;2602:3;:10;:31;2594:59;;;;-1:-1:-1;;;2594:59:0;;9257:2:8;2594:59:0;;;9239:21:8;9296:2;9276:18;;;9269:30;-1:-1:-1;;;9315:18:8;;;9308:45;9370:18;;2594:59:0;9229:165:8;2594:59:0;2685:18;:25;2671:3;:10;:39;2663:67;;;;-1:-1:-1;;;2663:67:0;;9257:2:8;2663:67:0;;;9239:21:8;9296:2;9276:18;;;9269:30;-1:-1:-1;;;9315:18:8;;;9308:45;9370:18;;2663:67:0;9229:165:8;2663:67:0;2746:9;2741:353;2765:3;:10;2761:1;:14;2741:353;;;2839:10;2905:3;2909:1;2905:6;;;;;;;;:::i;:::-;;;;;;;2940:18;2959:1;2940:21;;;;;;;;:::i;:::-;;;;;;;:28;2972:1;2933:40;;;;:::i;:::-;2995:10;3006:1;2995:13;;;;;;;;:::i;:::-;;;;;;;3030:18;3049:1;3030:21;;;;;;;;:::i;:::-;;;;;;;2867:202;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2867:202:0;;;;;;;;;;2809:274;;;2867:202;2809:274;;:::i;:::-;;;;;;;;;;;;;2796:287;;2777:3;;;;:::i;:::-;;;2741:353;;;;-1:-1:-1;;;3138:10:0;3116:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3103:46;;2396:760;;;;;:::o;6360:248:6:-;6456:25;-1:-1:-1;;;;;6456:49:6;;6506:7;6515:9;-1:-1:-1;;;;;6515:24:6;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6456:86;;-1:-1:-1;;;;;;6456:86:6;;;;;;;;;;10034:25:8;;;;10075:18;;;10068:34;10007:18;;6456:86:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6556:35;;;;;;;;;;;;;;;;;6435:166;;;;;-1:-1:-1;;;6435:166:6;;;;;;;;:::i;:::-;;6360:248;:::o;14:673:8:-;68:5;121:3;114:4;106:6;102:17;98:27;88:2;;139:1;136;129:12;88:2;175:6;162:20;201:4;225:60;241:43;281:2;241:43;:::i;:::-;225:60;:::i;:::-;307:3;331:2;326:3;319:15;359:2;354:3;350:12;343:19;;394:2;386:6;382:15;446:3;441:2;435;432:1;428:10;420:6;416:23;412:32;409:41;406:2;;;463:1;460;453:12;406:2;485:1;495:163;509:2;506:1;503:9;495:163;;;566:17;;554:30;;604:12;;;;636;;;;527:1;520:9;495:163;;;-1:-1:-1;676:5:8;;78:609;-1:-1:-1;;;;;;;78:609:8:o;692:347::-;743:8;753:6;807:3;800:4;792:6;788:17;784:27;774:2;;825:1;822;815:12;774:2;-1:-1:-1;848:20:8;;891:18;880:30;;877:2;;;923:1;920;913:12;877:2;960:4;952:6;948:17;936:29;;1012:3;1005:4;996:6;988;984:19;980:30;977:39;974:2;;;1029:1;1026;1019:12;974:2;764:275;;;;;:::o;1044:1373::-;1179:6;1187;1195;1248:2;1236:9;1227:7;1223:23;1219:32;1216:2;;;1264:1;1261;1254:12;1216:2;1303:9;1290:23;1322:31;1347:5;1322:31;:::i;:::-;1372:5;-1:-1:-1;1396:2:8;1434:18;;;1421:32;1472:18;1502:14;;;1499:2;;;1529:1;1526;1519:12;1499:2;1567:6;1556:9;1552:22;1542:32;;1612:7;1605:4;1601:2;1597:13;1593:27;1583:2;;1634:1;1631;1624:12;1583:2;1670;1657:16;1693:60;1709:43;1749:2;1709:43;:::i;1693:60::-;1775:3;1799:2;1794:3;1787:15;1827:2;1822:3;1818:12;1811:19;;1858:2;1854;1850:11;1906:7;1901:2;1895;1892:1;1888:10;1884:2;1880:19;1876:28;1873:41;1870:2;;;1927:1;1924;1917:12;1870:2;1949:1;1940:10;;1959:244;1973:2;1970:1;1967:9;1959:244;;;2046:3;2033:17;2063:33;2088:7;2063:33;:::i;:::-;2109:20;;1991:1;1984:9;;;;;2149:12;;;;2181;;1959:244;;;-1:-1:-1;2222:5:8;-1:-1:-1;;;2280:2:8;2265:18;;2252:32;;-1:-1:-1;2296:16:8;;;2293:2;;;2325:1;2322;2315:12;2293:2;;;2348:63;2403:7;2392:8;2381:9;2377:24;2348:63;:::i;:::-;2338:73;;;1206:1211;;;;;:::o;2422:544::-;2501:6;2509;2517;2570:2;2558:9;2549:7;2545:23;2541:32;2538:2;;;2586:1;2583;2576:12;2538:2;2625:9;2612:23;2644:31;2669:5;2644:31;:::i;:::-;2694:5;-1:-1:-1;2750:2:8;2735:18;;2722:32;2777:18;2766:30;;2763:2;;;2809:1;2806;2799:12;2763:2;2848:58;2898:7;2889:6;2878:9;2874:22;2848:58;:::i;:::-;2528:438;;2925:8;;-1:-1:-1;2822:84:8;;-1:-1:-1;;;;2528:438:8:o;2971:277::-;3038:6;3091:2;3079:9;3070:7;3066:23;3062:32;3059:2;;;3107:1;3104;3097:12;3059:2;3139:9;3133:16;3192:5;3185:13;3178:21;3171:5;3168:32;3158:2;;3214:1;3211;3204:12;3158:2;3237:5;3049:199;-1:-1:-1;;;3049:199:8:o;3253:409::-;3323:6;3331;3384:2;3372:9;3363:7;3359:23;3355:32;3352:2;;;3400:1;3397;3390:12;3352:2;3440:9;3427:23;3473:18;3465:6;3462:30;3459:2;;;3505:1;3502;3495:12;3459:2;3544:58;3594:7;3585:6;3574:9;3570:22;3544:58;:::i;:::-;3621:8;;3518:84;;-1:-1:-1;3342:320:8;-1:-1:-1;;;;3342:320:8:o;3667:184::-;3737:6;3790:2;3778:9;3769:7;3765:23;3761:32;3758:2;;;3806:1;3803;3796:12;3758:2;-1:-1:-1;3829:16:8;;3748:103;-1:-1:-1;3748:103:8:o;3856:257::-;3897:3;3935:5;3929:12;3962:6;3957:3;3950:19;3978:63;4034:6;4027:4;4022:3;4018:14;4011:4;4004:5;4000:16;3978:63;:::i;:::-;4095:2;4074:15;-1:-1:-1;;4070:29:8;4061:39;;;;4102:4;4057:50;;3905:208;-1:-1:-1;;3905:208:8:o;4118:588::-;-1:-1:-1;;4365:2:8;4361:15;;;4357:53;4345:66;;-1:-1:-1;;;;;;4434:3:8;4484:16;;;4480:25;;4475:2;4466:12;;4459:47;4536:15;;4531:2;4522:12;;4515:37;4575:13;;-1:-1:-1;;4597:62:8;4575:13;4647:2;4638:12;;4631:4;4619:17;;4597:62;:::i;:::-;4679:16;;;;4697:2;4675:25;;4335:371;-1:-1:-1;;;;;4335:371:8:o;4711:::-;-1:-1:-1;;;;;;4896:33:8;;4884:46;;4953:13;;4866:3;;4975:61;4953:13;5025:1;5016:11;;5009:4;4997:17;;4975:61;:::i;:::-;5056:16;;;;5074:1;5052:24;;4874:208;-1:-1:-1;;;4874:208:8:o;5087:466::-;5262:3;5300:6;5294:13;5316:53;5362:6;5357:3;5350:4;5342:6;5338:17;5316:53;:::i;:::-;5432:13;;5391:16;;;;5454:57;5432:13;5391:16;5488:4;5476:17;;5454:57;:::i;:::-;5527:20;;5270:283;-1:-1:-1;;;;5270:283:8:o;6396:1278::-;-1:-1:-1;;;;;6760:15:8;;;6742:34;;6692:2;6795;6813:18;;;6806:30;;;6885:13;;6677:18;;;6907:22;;;6644:4;;6987:15;;;;6714:19;;6795:2;6960:3;6945:19;;;6644:4;7030:178;7044:6;7041:1;7038:13;7030:178;;;7109:13;;7105:22;;7093:35;;7183:15;;;;7148:12;;;;7066:1;7059:9;7030:178;;;-1:-1:-1;;7244:19:8;;;7239:2;7224:18;;7217:47;7314:13;;7336:21;;;7375:12;;;;-1:-1:-1;7314:13:8;-1:-1:-1;7412:15:8;;;7447:1;7457:189;7473:8;7468:3;7465:17;7457:189;;;7542:15;;7528:30;;7580:14;;;;7619:17;;;;7501:1;7492:11;7457:189;;;-1:-1:-1;7663:5:8;;6653:1021;-1:-1:-1;;;;;;;;6653:1021:8:o;7679:217::-;7826:2;7815:9;7808:21;7789:4;7846:44;7886:2;7875:9;7871:18;7863:6;7846:44;:::i;10113:275::-;10184:2;10178:9;10249:2;10230:13;;-1:-1:-1;;10226:27:8;10214:40;;10284:18;10269:34;;10305:22;;;10266:62;10263:2;;;10331:18;;:::i;:::-;10367:2;10360:22;10158:230;;-1:-1:-1;10158:230:8:o;10393:183::-;10453:4;10486:18;10478:6;10475:30;10472:2;;;10508:18;;:::i;:::-;-1:-1:-1;10553:1:8;10549:14;10565:4;10545:25;;10462:114::o;10581:128::-;10621:3;10652:1;10648:6;10645:1;10642:13;10639:2;;;10658:18;;:::i;:::-;-1:-1:-1;10694:9:8;;10629:80::o;10714:228::-;10753:3;10781:10;10818:2;10815:1;10811:10;10848:2;10845:1;10841:10;10879:3;10875:2;10871:12;10866:3;10863:21;10860:2;;;10887:18;;:::i;10947:258::-;11019:1;11029:113;11043:6;11040:1;11037:13;11029:113;;;11119:11;;;11113:18;11100:11;;;11093:39;11065:2;11058:10;11029:113;;;11160:6;11157:1;11154:13;11151:2;;;11195:1;11186:6;11181:3;11177:16;11170:27;11151:2;;11000:205;;;:::o;11210:135::-;11249:3;-1:-1:-1;;11270:17:8;;11267:2;;;11290:18;;:::i;:::-;-1:-1:-1;11337:1:8;11326:13;;11257:88::o;11350:127::-;11411:10;11406:3;11402:20;11399:1;11392:31;11442:4;11439:1;11432:15;11466:4;11463:1;11456:15;11482:127;11543:10;11538:3;11534:20;11531:1;11524:31;11574:4;11571:1;11564:15;11598:4;11595:1;11588:15;11614:127;11675:10;11670:3;11666:20;11663:1;11656:31;11706:4;11703:1;11696:15;11730:4;11727:1;11720:15;11746:131;-1:-1:-1;;;;;11821:31:8;;11811:42;;11801:2;;11867:1;11864;11857:12;11801:2;11791:86;:::o
Swarm Source
ipfs://dc7c1789f4d68a3117744d9b666c30aed4662d0626395f66b8e95c67f46d3e8c
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.