Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 213 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim To | 20416251 | 48 days ago | IN | 0 ETH | 0.00032793 | ||||
Claim To | 19791800 | 135 days ago | IN | 0 ETH | 0.00012567 | ||||
Claim To | 19791765 | 135 days ago | IN | 0 ETH | 0.00040096 | ||||
Claim To | 19791739 | 135 days ago | IN | 0 ETH | 0.00012124 | ||||
Claim To | 19791702 | 135 days ago | IN | 0 ETH | 0.00010695 | ||||
Claim To | 19511100 | 175 days ago | IN | 0 ETH | 0.00247959 | ||||
Claim To | 19217712 | 216 days ago | IN | 0 ETH | 0.00184794 | ||||
Claim To | 19154130 | 225 days ago | IN | 0 ETH | 0.00039676 | ||||
Claim To | 19153913 | 225 days ago | IN | 0 ETH | 0.00036914 | ||||
Claim To | 19153871 | 225 days ago | IN | 0 ETH | 0.00037559 | ||||
Claim To | 19152610 | 225 days ago | IN | 0 ETH | 0.00030326 | ||||
Claim To | 19152426 | 225 days ago | IN | 0 ETH | 0.00029396 | ||||
Claim To | 19152234 | 225 days ago | IN | 0 ETH | 0.0003085 | ||||
Claim To | 19119815 | 230 days ago | IN | 0 ETH | 0.00073512 | ||||
Claim To | 19117946 | 230 days ago | IN | 0 ETH | 0.00069259 | ||||
Claim To | 19029256 | 242 days ago | IN | 0 ETH | 0.00355907 | ||||
Claim To | 19012810 | 245 days ago | IN | 0 ETH | 0.00074631 | ||||
Claim To | 18752713 | 281 days ago | IN | 0 ETH | 0.00240261 | ||||
Claim To | 18734612 | 284 days ago | IN | 0 ETH | 0.0027752 | ||||
Claim To | 18734491 | 284 days ago | IN | 0 ETH | 0.00273227 | ||||
Claim To | 18618757 | 300 days ago | IN | 0 ETH | 0.00228074 | ||||
Claim To | 18618741 | 300 days ago | IN | 0 ETH | 0.00228087 | ||||
Claim To | 18531115 | 312 days ago | IN | 0 ETH | 0.00287778 | ||||
Claim To | 17900299 | 401 days ago | IN | 0 ETH | 0.00164978 | ||||
Claim To | 17265405 | 490 days ago | IN | 0 ETH | 0.0054274 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
VestingController
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-06-29 */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/utils/math/Math.sol pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: contracts/stakedBalance/StakingContractI.sol pragma solidity 0.8.4; interface StakingContractI { function stakedBalance(address who, address token) external view returns (uint); } // File: contracts/stakedBalance/StakedBalanceFetcher.sol pragma solidity 0.8.4; // We'll have a low number of staking contracts (less than 10) so O(n) insertions and deletions should be ok. contract StakedBalanceFetcher is Ownable { event StakingContractAdded(address indexed stakingContract); event StakingContractRemoved(address indexed stakingContract); StakingContractI[] public stakingContracts; function addStakingContract(address _stakingContract) external onlyOwner { (bool exists,) = getStakingContractIndex(_stakingContract); require(!exists, "StakedBalanceFetcher: Staking contract already added"); stakingContracts.push(StakingContractI(_stakingContract)); emit StakingContractAdded(_stakingContract); } // We don't need to preserve ordering in the stakingContracts array function removeStakingContract(address _stakingContract) external onlyOwner { (bool exists, uint index) = getStakingContractIndex(_stakingContract); require(exists, "StakedBalanceFetcher: Staking contract not added"); if(index != stakingContracts.length - 1){ StakingContractI lastItem = stakingContracts[stakingContracts.length - 1]; stakingContracts.pop(); stakingContracts[index] = lastItem; }else{ stakingContracts.pop(); } emit StakingContractRemoved(_stakingContract); } function getStakingContractIndex(address _stakingContract) private view returns (bool found, uint index){ uint stakingContractsCount = stakingContracts.length; for(uint i = 0; i < stakingContractsCount; i++){ if(address(stakingContracts[i]) == _stakingContract){ return (true, i); } } return (false, 0); } function getStakedBalance(address _holder, address token) public view returns(uint) { uint stakedAmount = 0; uint stakingContractsCount = stakingContracts.length; for(uint i = 0; i < stakingContractsCount; i++){ stakedAmount += stakingContracts[i].stakedBalance(_holder, address(token)); } return stakedAmount; } } // File: contracts/VestingStorage.sol pragma solidity 0.8.4; contract VestingStorage is Ownable { struct VestingCategory{ uint cliff; uint vestingDuration; } struct Vesting { string category; uint startingAmount; } event VestingCategoryAdded(string name); event VestingSet(address indexed vester, string categoryName, uint startingAmount); event VestingRemoved(address indexed vester, string categoryName, uint startingAmount); mapping(string => VestingCategory) private vestingCategoriesByName; string[] public vestingCategoryNames; mapping(address => Vesting) private vesters; modifier onlyVester(address who){ require(doVestingExist(vesters[who]), "VestingStorage: Only accessible by vesters"); _; } function doVestingCategoryExist(VestingCategory storage _category) internal view returns (bool) { return _category.vestingDuration > 0; } function addVestingCategory(string calldata _name, VestingCategory calldata _category) external onlyOwner{ require(!doVestingCategoryExist(vestingCategoriesByName[_name]), "VestingStorage: Vesting category already exists"); require(_category.vestingDuration > 0, "VestingStorage: Vesting duration has to be greater than zero"); vestingCategoryNames.push(_name); vestingCategoriesByName[_name] = _category; emit VestingCategoryAdded(_name); } function getVestingCategory(string memory _name) public view returns(VestingCategory memory) { VestingCategory storage category = vestingCategoriesByName[_name]; require(doVestingCategoryExist(category), "VestingStorage: Vesting category does not exist"); return category; } function doVestingExist(Vesting storage _vesting) internal view returns (bool) { return _vesting.startingAmount > 0; } function setVestings(address[] calldata _vesters, Vesting[] calldata _vestings) external onlyOwner{ require(_vesters.length == _vestings.length, "VestingStorage: Vester and vestings amounts don't match up"); for(uint i = 0; i < _vesters.length; i++){ address vester = _vesters[i]; Vesting calldata vesting = _vestings[i]; require(vesting.startingAmount > 0, "VestingStorage: Vesting should have greater than zero starting amount"); require(doVestingCategoryExist(vestingCategoriesByName[vesting.category]), "VestingStorage: Vesting category does not exist"); vesters[vester] = vesting; emit VestingSet(vester, vesting.category, vesting.startingAmount); } } function getVesting(address _vester) public view onlyVester(_vester) returns(Vesting memory){ return vesters[_vester]; } function removeVesting(address[] calldata _vesters) external onlyOwner{ for(uint i = 0; i < _vesters.length; i++){ address vester = _vesters[i]; require(doVestingExist(vesters[vester]), "VestingStorage: Address is not vesting"); Vesting memory vesting = vesters[vester]; delete vesters[vester]; emit VestingRemoved(vester, vesting.category, vesting.startingAmount); } } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: contracts/RecoverTokens.sol pragma solidity 0.8.4; contract RecoverTokens is Ownable { using SafeERC20 for IERC20; event TokensRecovered(address indexed token, uint amount); function recoverTokens(address _tokenAddress) external onlyOwner { IERC20 token = IERC20(_tokenAddress); uint balance = token.balanceOf(address(this)); require(balance != 0, "RecoverTokens: no balance to recover"); token.safeTransfer(owner(), balance); emit TokensRecovered(_tokenAddress, balance); } } // File: contracts/VestingController.sol pragma solidity 0.8.4; contract VestingController is StakedBalanceFetcher, VestingStorage, RecoverTokens { event AmountClaimed(address indexed vester, address indexed recipient, uint amount); uint immutable public startDate; IERC20 immutable public token; constructor(uint _vestingStart, address _tokenAddress){ startDate = _vestingStart; token = IERC20(_tokenAddress); } function claimTo(address _recipient) external onlyVester(msg.sender) { uint currentBalance = token.balanceOf(msg.sender); require(currentBalance > 0, "VestingController: Not enough balance for claim"); uint lockedBalance = currentBalance + getStakedBalance(msg.sender, address(token)); Vesting memory vesting = getVesting(msg.sender); uint amountNotVestedYet = vesting.startingAmount - calculateAmountVested(msg.sender); require(lockedBalance > amountNotVestedYet, "VestingController: No claimable amount"); uint claimableAmount = lockedBalance - amountNotVestedYet; uint transferableAmount = Math.min(claimableAmount, currentBalance); // Two step operation since msg.sender has no permission to move tokens other than through address(this) require(token.transferFrom(msg.sender, address(this), transferableAmount)); require(token.transfer(_recipient, transferableAmount)); emit AmountClaimed(msg.sender, _recipient, transferableAmount); } function calculateAmountVested(address _vester) public view onlyVester(_vester) returns(uint) { Vesting memory vesting = getVesting(_vester); VestingCategory memory category = getVestingCategory(vesting.category); uint vestingStart = startDate + category.cliff; if(block.timestamp <= vestingStart){ return 0; } else { uint timePassed = block.timestamp - vestingStart; if(timePassed >= category.vestingDuration){ return vesting.startingAmount; } else { return (vesting.startingAmount * timePassed) / category.vestingDuration; } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_vestingStart","type":"uint256"},{"internalType":"address","name":"_tokenAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vester","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AmountClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"stakingContract","type":"address"}],"name":"StakingContractAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"stakingContract","type":"address"}],"name":"StakingContractRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensRecovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"name","type":"string"}],"name":"VestingCategoryAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vester","type":"address"},{"indexed":false,"internalType":"string","name":"categoryName","type":"string"},{"indexed":false,"internalType":"uint256","name":"startingAmount","type":"uint256"}],"name":"VestingRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vester","type":"address"},{"indexed":false,"internalType":"string","name":"categoryName","type":"string"},{"indexed":false,"internalType":"uint256","name":"startingAmount","type":"uint256"}],"name":"VestingSet","type":"event"},{"inputs":[{"internalType":"address","name":"_stakingContract","type":"address"}],"name":"addStakingContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"components":[{"internalType":"uint256","name":"cliff","type":"uint256"},{"internalType":"uint256","name":"vestingDuration","type":"uint256"}],"internalType":"struct VestingStorage.VestingCategory","name":"_category","type":"tuple"}],"name":"addVestingCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vester","type":"address"}],"name":"calculateAmountVested","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"claimTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"},{"internalType":"address","name":"token","type":"address"}],"name":"getStakedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vester","type":"address"}],"name":"getVesting","outputs":[{"components":[{"internalType":"string","name":"category","type":"string"},{"internalType":"uint256","name":"startingAmount","type":"uint256"}],"internalType":"struct VestingStorage.Vesting","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"}],"name":"getVestingCategory","outputs":[{"components":[{"internalType":"uint256","name":"cliff","type":"uint256"},{"internalType":"uint256","name":"vestingDuration","type":"uint256"}],"internalType":"struct VestingStorage.VestingCategory","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"recoverTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakingContract","type":"address"}],"name":"removeStakingContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_vesters","type":"address[]"}],"name":"removeVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_vesters","type":"address[]"},{"components":[{"internalType":"string","name":"category","type":"string"},{"internalType":"uint256","name":"startingAmount","type":"uint256"}],"internalType":"struct VestingStorage.Vesting[]","name":"_vestings","type":"tuple[]"}],"name":"setVestings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakingContracts","outputs":[{"internalType":"contract StakingContractI","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"vestingCategoryNames","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c060405234801561001057600080fd5b5060405162002452380380620024528339810160408190526100319161008d565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060809190915260601b6001600160601b03191660a0526100c8565b6000806040838503121561009f578182fd5b825160208401519092506001600160a01b03811681146100bd578182fd5b809150509250929050565b60805160a05160601c61233e62000114600039600081816102cc01528181610cb901528181610dad01528181610ea30152610f56015260008181610135015261119e015261233e6000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063a262f5f8116100a2578063ec83bdd811610071578063ec83bdd814610253578063ed32920814610281578063f0dc2c20146102a1578063f2fde38b146102b4578063fc0c546a146102c757600080fd5b8063a262f5f8146101fa578063cc49ede71461020d578063e16e88821461022d578063e35c9b441461024057600080fd5b8063232c72c4116100e9578063232c72c4146101a85780636c23d4b9146101bb578063715018a6146101ce5780638da5cb5b146101d657806393caa865146101e757600080fd5b80630325621c1461011b5780630b97bc86146101305780631109b19a1461016a57806316114acd14610195575b600080fd5b61012e610129366004611cf3565b6102ee565b005b6101577f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61017d610178366004611e26565b6104db565b6040516001600160a01b039091168152602001610161565b61012e6101a3366004611bde565b610505565b61012e6101b6366004611c6a565b610674565b6101576101c9366004611bf8565b6108e0565b61012e6109c9565b6000546001600160a01b031661017d565b61012e6101f5366004611c2a565b610a3d565b61012e610208366004611bde565b610c72565b61022061021b366004611bde565b611025565b6040516101619190612012565b61015761023b366004611bde565b61113a565b61012e61024e366004611bde565b611228565b610266610261366004611d7c565b61143c565b60408051825181526020928301519281019290925201610161565b61029461028f366004611e26565b6114ba565b6040516101619190611f0f565b61012e6102af366004611bde565b611566565b61012e6102c2366004611bde565b611681565b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031633146103215760405162461bcd60e51b815260040161031890611f93565b60405180910390fd5b61034d60028484604051610336929190611ec7565b908152602001604051809103902060010154151590565b156103b25760405162461bcd60e51b815260206004820152602f60248201527f56657374696e6753746f726167653a2056657374696e672063617465676f727960448201526e20616c72656164792065786973747360881b6064820152608401610318565b600081602001351161042c5760405162461bcd60e51b815260206004820152603c60248201527f56657374696e6753746f726167653a2056657374696e67206475726174696f6e60448201527f2068617320746f2062652067726561746572207468616e207a65726f000000006064820152608401610318565b60038054600181018255600091909152610469907fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b018484611aa2565b50806002848460405161047d929190611ec7565b90815260405160209181900382019020823581559082013560018201559050507f0fb2043e5b60e864bf6f554be7df4b880b087b2dedff1c12ddf4c5ec4e3646a683836040516104ce929190611ed7565b60405180910390a1505050565b600181815481106104eb57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b0316331461052f5760405162461bcd60e51b815260040161031890611f93565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a082319060240160206040518083038186803b15801561057357600080fd5b505afa158015610587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ab9190611e3e565b9050806106065760405162461bcd60e51b8152602060048201526024808201527f5265636f766572546f6b656e733a206e6f2062616c616e636520746f2072656360448201526337bb32b960e11b6064820152608401610318565b61062c61061b6000546001600160a01b031690565b6001600160a01b038416908361176b565b826001600160a01b03167f46d2e6e71fc567877b817ff3d940571f989d4ee4d40f2b70806d36e738feef6f8260405161066791815260200190565b60405180910390a2505050565b6000546001600160a01b0316331461069e5760405162461bcd60e51b815260040161031890611f93565b8281146107135760405162461bcd60e51b815260206004820152603a60248201527f56657374696e6753746f726167653a2056657374657220616e6420766573746960448201527f6e677320616d6f756e747320646f6e2774206d617463682075700000000000006064820152608401610318565b60005b838110156108d957600085858381811061074057634e487b7160e01b600052603260045260246000fd5b90506020020160208101906107559190611bde565b90503684848481811061077857634e487b7160e01b600052603260045260246000fd5b905060200281019061078a9190612089565b905060008160200135116108145760405162461bcd60e51b815260206004820152604560248201527f56657374696e6753746f726167653a2056657374696e672073686f756c64206860448201527f6176652067726561746572207468616e207a65726f207374617274696e6720616064820152641b5bdd5b9d60da1b608482015260a401610318565b61083160026108238380612044565b604051610336929190611ec7565b61084d5760405162461bcd60e51b815260040161031890611f44565b6001600160a01b0382166000908152600460205260409020819061087182826121d1565b50506001600160a01b0382167f8a4f866e6184a00425a0f09feb0190819822070806f66aa9595022bac82c0eb46108a88380612044565b84602001356040516108bc93929190611eeb565b60405180910390a2505080806108d19061218a565b915050610716565b5050505050565b6001546000908190815b818110156109bf576001818154811061091357634e487b7160e01b600052603260045260246000fd5b600091825260209091200154604051638229084b60e01b81526001600160a01b038881166004830152878116602483015290911690638229084b9060440160206040518083038186803b15801561096957600080fd5b505afa15801561097d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a19190611e3e565b6109ab908461209e565b9250806109b78161218a565b9150506108ea565b5090949350505050565b6000546001600160a01b031633146109f35760405162461bcd60e51b815260040161031890611f93565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610a675760405162461bcd60e51b815260040161031890611f93565b60005b81811015610c6d576000838383818110610a9457634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610aa99190611bde565b6001600160a01b038116600090815260046020526040902060010154909150610b235760405162461bcd60e51b815260206004820152602660248201527f56657374696e6753746f726167653a2041646472657373206973206e6f742076604482015265657374696e6760d01b6064820152608401610318565b6001600160a01b0381166000908152600460205260408082208151808301909252805482908290610b5390612155565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7f90612155565b8015610bcc5780601f10610ba157610100808354040283529160200191610bcc565b820191906000526020600020905b815481529060010190602001808311610baf57829003601f168201915b5050509183525050600191909101546020918201526001600160a01b0384166000908152600490915260408120919250610c068282611b26565b50600060019190910155805160208201516040516001600160a01b038516927f265cae5d32643fbe297359ba8e9dbe58fa35269e7c989c7268f6499faed8534792610c5092611f22565b60405180910390a250508080610c659061218a565b915050610a6a565b505050565b33600081815260046020526040902060010154610ca15760405162461bcd60e51b815260040161031890611fc8565b6040516370a0823160e01b81523360048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015610d0357600080fd5b505afa158015610d17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3b9190611e3e565b905060008111610da55760405162461bcd60e51b815260206004820152602f60248201527f56657374696e67436f6e74726f6c6c65723a204e6f7420656e6f75676820626160448201526e6c616e636520666f7220636c61696d60881b6064820152608401610318565b6000610dd1337f00000000000000000000000000000000000000000000000000000000000000006108e0565b610ddb908361209e565b90506000610de833611025565b90506000610df53361113a565b8260200151610e0491906120f5565b9050808311610e645760405162461bcd60e51b815260206004820152602660248201527f56657374696e67436f6e74726f6c6c65723a204e6f20636c61696d61626c6520604482015265185b5bdd5b9d60d21b6064820152608401610318565b6000610e7082856120f5565b90506000610e7e82876117bd565b6040516323b872dd60e01b8152336004820152306024820152604481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd90606401602060405180830381600087803b158015610eef57600080fd5b505af1158015610f03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f279190611cd3565b610f3057600080fd5b60405163a9059cbb60e01b81526001600160a01b038981166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb90604401602060405180830381600087803b158015610f9a57600080fd5b505af1158015610fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd29190611cd3565b610fdb57600080fd5b6040518181526001600160a01b0389169033907f0fecc737414520ad55c4afdacfea05d14624bd8c02d23ddf056eadcc06af59809060200160405180910390a35050505050505050565b6040805180820190915260608152600060208201526001600160a01b03821660009081526004602052604090206001015482906110745760405162461bcd60e51b815260040161031890611fc8565b6001600160a01b0383166000908152600460205260409081902081518083019092528054829082906110a590612155565b80601f01602080910402602001604051908101604052809291908181526020018280546110d190612155565b801561111e5780601f106110f35761010080835404028352916020019161111e565b820191906000526020600020905b81548152906001019060200180831161110157829003601f168201915b5050505050815260200160018201548152505091505b50919050565b6001600160a01b03811660009081526004602052604081206001015482906111745760405162461bcd60e51b815260040161031890611fc8565b600061117f84611025565b90506000611190826000015161143c565b80519091506000906111c2907f000000000000000000000000000000000000000000000000000000000000000061209e565b90508042116111d75760009450505050611134565b60006111e382426120f5565b9050826020015181106111fe57505050602001519150611134565b826020015181856020015161121391906120d6565b61121d91906120b6565b955050505050611134565b6000546001600160a01b031633146112525760405162461bcd60e51b815260040161031890611f93565b60008061125e836117d5565b91509150816112c85760405162461bcd60e51b815260206004820152603060248201527f5374616b656442616c616e6365466574636865723a205374616b696e6720636f60448201526f1b9d1c9858dd081b9bdd08185919195960821b6064820152608401610318565b600180546112d691906120f5565b81146113c15760018054600091906112ef9082906120f5565b8154811061130d57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600180546001600160a01b039092169250908061134657634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055600180548291908490811061138d57634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555050611403565b60018054806113e057634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555b6040516001600160a01b038416907f3618ac64c6e90ad85e26af62479abc6a808c0450e6d5be395e99ac30b0e7540690600090a2505050565b604080518082019091526000808252602082015260006002836040516114629190611eab565b9081526020016040518091039020905061147f8160010154151590565b61149b5760405162461bcd60e51b815260040161031890611f44565b6040805180820190915281548152600190910154602082015292915050565b600381815481106114ca57600080fd5b9060005260206000200160009150905080546114e590612155565b80601f016020809104026020016040519081016040528092919081815260200182805461151190612155565b801561155e5780601f106115335761010080835404028352916020019161155e565b820191906000526020600020905b81548152906001019060200180831161154157829003601f168201915b505050505081565b6000546001600160a01b031633146115905760405162461bcd60e51b815260040161031890611f93565b600061159b826117d5565b50905080156116095760405162461bcd60e51b815260206004820152603460248201527f5374616b656442616c616e6365466574636865723a205374616b696e6720636f6044820152731b9d1c9858dd08185b1c9958591e48185919195960621b6064820152608401610318565b60018054808201825560009182527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b03851690811790915560405190917f7204d0791c0bc612966128d74559420de3c20b856f39e9078995a718290624d891a25050565b6000546001600160a01b031633146116ab5760405162461bcd60e51b815260040161031890611f93565b6001600160a01b0381166117105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610318565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610c6d908490611858565b60008183106117cc57816117ce565b825b9392505050565b6001546000908190815b8181101561184b57846001600160a01b03166001828154811061181257634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156118395760019590945092505050565b806118438161218a565b9150506117df565b5060009485945092505050565b60006118ad826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661192a9092919063ffffffff16565b805190915015610c6d57808060200190518101906118cb9190611cd3565b610c6d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610318565b60606119398484600085611941565b949350505050565b6060824710156119a25760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610318565b843b6119f05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610318565b600080866001600160a01b03168587604051611a0c9190611eab565b60006040518083038185875af1925050503d8060008114611a49576040519150601f19603f3d011682016040523d82523d6000602084013e611a4e565b606091505b5091509150611a5e828286611a69565b979650505050505050565b60608315611a785750816117ce565b825115611a885782518084602001fd5b8160405162461bcd60e51b81526004016103189190611f0f565b828054611aae90612155565b90600052602060002090601f016020900481019282611ad05760008555611b16565b82601f10611ae95782800160ff19823516178555611b16565b82800160010185558215611b16579182015b82811115611b16578235825591602001919060010190611afb565b50611b22929150611b63565b5090565b508054611b3290612155565b6000825580601f10611b42575050565b601f016020900490600052602060002090810190611b609190611b63565b50565b5b80821115611b225760008155600101611b64565b80356001600160a01b0381168114611b8f57600080fd5b919050565b60008083601f840112611ba5578081fd5b50813567ffffffffffffffff811115611bbc578182fd5b6020830191508360208260051b8501011115611bd757600080fd5b9250929050565b600060208284031215611bef578081fd5b6117ce82611b78565b60008060408385031215611c0a578081fd5b611c1383611b78565b9150611c2160208401611b78565b90509250929050565b60008060208385031215611c3c578182fd5b823567ffffffffffffffff811115611c52578283fd5b611c5e85828601611b94565b90969095509350505050565b60008060008060408587031215611c7f578182fd5b843567ffffffffffffffff80821115611c96578384fd5b611ca288838901611b94565b90965094506020870135915080821115611cba578384fd5b50611cc787828801611b94565b95989497509550505050565b600060208284031215611ce4578081fd5b815180151581146117ce578182fd5b60008060008385036060811215611d08578384fd5b843567ffffffffffffffff80821115611d1f578586fd5b818701915087601f830112611d32578586fd5b813581811115611d40578687fd5b886020828501011115611d51578687fd5b6020929092019550909350506040601f1982011215611d6e578182fd5b506020840190509250925092565b600060208284031215611d8d578081fd5b813567ffffffffffffffff80821115611da4578283fd5b818401915084601f830112611db7578283fd5b813581811115611dc957611dc96121bb565b604051601f8201601f19908116603f01168101908382118183101715611df157611df16121bb565b81604052828152876020848701011115611e09578586fd5b826020860160208301379182016020019490945295945050505050565b600060208284031215611e37578081fd5b5035919050565b600060208284031215611e4f578081fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008151808452611e97816020860160208601612125565b601f01601f19169290920160200192915050565b60008251611ebd818460208701612125565b9190910192915050565b8183823760009101908152919050565b602081526000611939602083018486611e56565b604081526000611eff604083018587611e56565b9050826020830152949350505050565b6020815260006117ce6020830184611e7f565b604081526000611f356040830185611e7f565b90508260208301529392505050565b6020808252602f908201527f56657374696e6753746f726167653a2056657374696e672063617465676f727960408201526e08191bd95cc81b9bdd08195e1a5cdd608a1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602a908201527f56657374696e6753746f726167653a204f6e6c792061636365737369626c65206040820152696279207665737465727360b01b606082015260800190565b60208152600082516040602084015261202e6060840182611e7f565b9050602084015160408401528091505092915050565b6000808335601e1984360301811261205a578283fd5b83018035915067ffffffffffffffff821115612074578283fd5b602001915036819003821315611bd757600080fd5b60008235603e19833603018112611ebd578182fd5b600082198211156120b1576120b16121a5565b500190565b6000826120d157634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156120f0576120f06121a5565b500290565b600082821015612107576121076121a5565b500390565b5b81811015612121576000815560010161210d565b5050565b60005b83811015612140578181015183820152602001612128565b8381111561214f576000848401525b50505050565b600181811c9082168061216957607f821691505b6020821081141561113457634e487b7160e01b600052602260045260246000fd5b600060001982141561219e5761219e6121a5565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b8135601e198336030181126121e557600080fd5b8201803567ffffffffffffffff8111156121fe57600080fd5b6020813603818401131561221157600080fd5b61221b8454612155565b600080601f8511601f84118181171561223a5760008981526020902092505b801561226857601f870160051c8301868810156122545750825b612266601f870160051c85018261210c565b505b50806001811461229e576000945086156122855785848901013594505b600187901b600019600389901b1c1986161789556122f3565b601f198716945082845b868110156122c95789860188013582559487019460019091019087016122a8565b50878610156122e85760001960f88960031b161c1987868b0101351681555b5060018760011b0189555b5050505050808501356001850155505050505056fea2646970667358221220f2454b6dc6227aba24fcb3ef6db4d02cacee91ec75c40620fe2f6f5523d841ed64736f6c634300080400330000000000000000000000000000000000000000000000000000000060b105700000000000000000000000005eeaa2dcb23056f4e8654a349e57ebe5e76b5e6e
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101165760003560e01c8063a262f5f8116100a2578063ec83bdd811610071578063ec83bdd814610253578063ed32920814610281578063f0dc2c20146102a1578063f2fde38b146102b4578063fc0c546a146102c757600080fd5b8063a262f5f8146101fa578063cc49ede71461020d578063e16e88821461022d578063e35c9b441461024057600080fd5b8063232c72c4116100e9578063232c72c4146101a85780636c23d4b9146101bb578063715018a6146101ce5780638da5cb5b146101d657806393caa865146101e757600080fd5b80630325621c1461011b5780630b97bc86146101305780631109b19a1461016a57806316114acd14610195575b600080fd5b61012e610129366004611cf3565b6102ee565b005b6101577f0000000000000000000000000000000000000000000000000000000060b1057081565b6040519081526020015b60405180910390f35b61017d610178366004611e26565b6104db565b6040516001600160a01b039091168152602001610161565b61012e6101a3366004611bde565b610505565b61012e6101b6366004611c6a565b610674565b6101576101c9366004611bf8565b6108e0565b61012e6109c9565b6000546001600160a01b031661017d565b61012e6101f5366004611c2a565b610a3d565b61012e610208366004611bde565b610c72565b61022061021b366004611bde565b611025565b6040516101619190612012565b61015761023b366004611bde565b61113a565b61012e61024e366004611bde565b611228565b610266610261366004611d7c565b61143c565b60408051825181526020928301519281019290925201610161565b61029461028f366004611e26565b6114ba565b6040516101619190611f0f565b61012e6102af366004611bde565b611566565b61012e6102c2366004611bde565b611681565b61017d7f0000000000000000000000005eeaa2dcb23056f4e8654a349e57ebe5e76b5e6e81565b6000546001600160a01b031633146103215760405162461bcd60e51b815260040161031890611f93565b60405180910390fd5b61034d60028484604051610336929190611ec7565b908152602001604051809103902060010154151590565b156103b25760405162461bcd60e51b815260206004820152602f60248201527f56657374696e6753746f726167653a2056657374696e672063617465676f727960448201526e20616c72656164792065786973747360881b6064820152608401610318565b600081602001351161042c5760405162461bcd60e51b815260206004820152603c60248201527f56657374696e6753746f726167653a2056657374696e67206475726174696f6e60448201527f2068617320746f2062652067726561746572207468616e207a65726f000000006064820152608401610318565b60038054600181018255600091909152610469907fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b018484611aa2565b50806002848460405161047d929190611ec7565b90815260405160209181900382019020823581559082013560018201559050507f0fb2043e5b60e864bf6f554be7df4b880b087b2dedff1c12ddf4c5ec4e3646a683836040516104ce929190611ed7565b60405180910390a1505050565b600181815481106104eb57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b0316331461052f5760405162461bcd60e51b815260040161031890611f93565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a082319060240160206040518083038186803b15801561057357600080fd5b505afa158015610587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ab9190611e3e565b9050806106065760405162461bcd60e51b8152602060048201526024808201527f5265636f766572546f6b656e733a206e6f2062616c616e636520746f2072656360448201526337bb32b960e11b6064820152608401610318565b61062c61061b6000546001600160a01b031690565b6001600160a01b038416908361176b565b826001600160a01b03167f46d2e6e71fc567877b817ff3d940571f989d4ee4d40f2b70806d36e738feef6f8260405161066791815260200190565b60405180910390a2505050565b6000546001600160a01b0316331461069e5760405162461bcd60e51b815260040161031890611f93565b8281146107135760405162461bcd60e51b815260206004820152603a60248201527f56657374696e6753746f726167653a2056657374657220616e6420766573746960448201527f6e677320616d6f756e747320646f6e2774206d617463682075700000000000006064820152608401610318565b60005b838110156108d957600085858381811061074057634e487b7160e01b600052603260045260246000fd5b90506020020160208101906107559190611bde565b90503684848481811061077857634e487b7160e01b600052603260045260246000fd5b905060200281019061078a9190612089565b905060008160200135116108145760405162461bcd60e51b815260206004820152604560248201527f56657374696e6753746f726167653a2056657374696e672073686f756c64206860448201527f6176652067726561746572207468616e207a65726f207374617274696e6720616064820152641b5bdd5b9d60da1b608482015260a401610318565b61083160026108238380612044565b604051610336929190611ec7565b61084d5760405162461bcd60e51b815260040161031890611f44565b6001600160a01b0382166000908152600460205260409020819061087182826121d1565b50506001600160a01b0382167f8a4f866e6184a00425a0f09feb0190819822070806f66aa9595022bac82c0eb46108a88380612044565b84602001356040516108bc93929190611eeb565b60405180910390a2505080806108d19061218a565b915050610716565b5050505050565b6001546000908190815b818110156109bf576001818154811061091357634e487b7160e01b600052603260045260246000fd5b600091825260209091200154604051638229084b60e01b81526001600160a01b038881166004830152878116602483015290911690638229084b9060440160206040518083038186803b15801561096957600080fd5b505afa15801561097d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a19190611e3e565b6109ab908461209e565b9250806109b78161218a565b9150506108ea565b5090949350505050565b6000546001600160a01b031633146109f35760405162461bcd60e51b815260040161031890611f93565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610a675760405162461bcd60e51b815260040161031890611f93565b60005b81811015610c6d576000838383818110610a9457634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610aa99190611bde565b6001600160a01b038116600090815260046020526040902060010154909150610b235760405162461bcd60e51b815260206004820152602660248201527f56657374696e6753746f726167653a2041646472657373206973206e6f742076604482015265657374696e6760d01b6064820152608401610318565b6001600160a01b0381166000908152600460205260408082208151808301909252805482908290610b5390612155565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7f90612155565b8015610bcc5780601f10610ba157610100808354040283529160200191610bcc565b820191906000526020600020905b815481529060010190602001808311610baf57829003601f168201915b5050509183525050600191909101546020918201526001600160a01b0384166000908152600490915260408120919250610c068282611b26565b50600060019190910155805160208201516040516001600160a01b038516927f265cae5d32643fbe297359ba8e9dbe58fa35269e7c989c7268f6499faed8534792610c5092611f22565b60405180910390a250508080610c659061218a565b915050610a6a565b505050565b33600081815260046020526040902060010154610ca15760405162461bcd60e51b815260040161031890611fc8565b6040516370a0823160e01b81523360048201526000907f0000000000000000000000005eeaa2dcb23056f4e8654a349e57ebe5e76b5e6e6001600160a01b0316906370a082319060240160206040518083038186803b158015610d0357600080fd5b505afa158015610d17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3b9190611e3e565b905060008111610da55760405162461bcd60e51b815260206004820152602f60248201527f56657374696e67436f6e74726f6c6c65723a204e6f7420656e6f75676820626160448201526e6c616e636520666f7220636c61696d60881b6064820152608401610318565b6000610dd1337f0000000000000000000000005eeaa2dcb23056f4e8654a349e57ebe5e76b5e6e6108e0565b610ddb908361209e565b90506000610de833611025565b90506000610df53361113a565b8260200151610e0491906120f5565b9050808311610e645760405162461bcd60e51b815260206004820152602660248201527f56657374696e67436f6e74726f6c6c65723a204e6f20636c61696d61626c6520604482015265185b5bdd5b9d60d21b6064820152608401610318565b6000610e7082856120f5565b90506000610e7e82876117bd565b6040516323b872dd60e01b8152336004820152306024820152604481018290529091507f0000000000000000000000005eeaa2dcb23056f4e8654a349e57ebe5e76b5e6e6001600160a01b0316906323b872dd90606401602060405180830381600087803b158015610eef57600080fd5b505af1158015610f03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f279190611cd3565b610f3057600080fd5b60405163a9059cbb60e01b81526001600160a01b038981166004830152602482018390527f0000000000000000000000005eeaa2dcb23056f4e8654a349e57ebe5e76b5e6e169063a9059cbb90604401602060405180830381600087803b158015610f9a57600080fd5b505af1158015610fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd29190611cd3565b610fdb57600080fd5b6040518181526001600160a01b0389169033907f0fecc737414520ad55c4afdacfea05d14624bd8c02d23ddf056eadcc06af59809060200160405180910390a35050505050505050565b6040805180820190915260608152600060208201526001600160a01b03821660009081526004602052604090206001015482906110745760405162461bcd60e51b815260040161031890611fc8565b6001600160a01b0383166000908152600460205260409081902081518083019092528054829082906110a590612155565b80601f01602080910402602001604051908101604052809291908181526020018280546110d190612155565b801561111e5780601f106110f35761010080835404028352916020019161111e565b820191906000526020600020905b81548152906001019060200180831161110157829003601f168201915b5050505050815260200160018201548152505091505b50919050565b6001600160a01b03811660009081526004602052604081206001015482906111745760405162461bcd60e51b815260040161031890611fc8565b600061117f84611025565b90506000611190826000015161143c565b80519091506000906111c2907f0000000000000000000000000000000000000000000000000000000060b1057061209e565b90508042116111d75760009450505050611134565b60006111e382426120f5565b9050826020015181106111fe57505050602001519150611134565b826020015181856020015161121391906120d6565b61121d91906120b6565b955050505050611134565b6000546001600160a01b031633146112525760405162461bcd60e51b815260040161031890611f93565b60008061125e836117d5565b91509150816112c85760405162461bcd60e51b815260206004820152603060248201527f5374616b656442616c616e6365466574636865723a205374616b696e6720636f60448201526f1b9d1c9858dd081b9bdd08185919195960821b6064820152608401610318565b600180546112d691906120f5565b81146113c15760018054600091906112ef9082906120f5565b8154811061130d57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600180546001600160a01b039092169250908061134657634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055600180548291908490811061138d57634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555050611403565b60018054806113e057634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555b6040516001600160a01b038416907f3618ac64c6e90ad85e26af62479abc6a808c0450e6d5be395e99ac30b0e7540690600090a2505050565b604080518082019091526000808252602082015260006002836040516114629190611eab565b9081526020016040518091039020905061147f8160010154151590565b61149b5760405162461bcd60e51b815260040161031890611f44565b6040805180820190915281548152600190910154602082015292915050565b600381815481106114ca57600080fd5b9060005260206000200160009150905080546114e590612155565b80601f016020809104026020016040519081016040528092919081815260200182805461151190612155565b801561155e5780601f106115335761010080835404028352916020019161155e565b820191906000526020600020905b81548152906001019060200180831161154157829003601f168201915b505050505081565b6000546001600160a01b031633146115905760405162461bcd60e51b815260040161031890611f93565b600061159b826117d5565b50905080156116095760405162461bcd60e51b815260206004820152603460248201527f5374616b656442616c616e6365466574636865723a205374616b696e6720636f6044820152731b9d1c9858dd08185b1c9958591e48185919195960621b6064820152608401610318565b60018054808201825560009182527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b03851690811790915560405190917f7204d0791c0bc612966128d74559420de3c20b856f39e9078995a718290624d891a25050565b6000546001600160a01b031633146116ab5760405162461bcd60e51b815260040161031890611f93565b6001600160a01b0381166117105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610318565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610c6d908490611858565b60008183106117cc57816117ce565b825b9392505050565b6001546000908190815b8181101561184b57846001600160a01b03166001828154811061181257634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156118395760019590945092505050565b806118438161218a565b9150506117df565b5060009485945092505050565b60006118ad826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661192a9092919063ffffffff16565b805190915015610c6d57808060200190518101906118cb9190611cd3565b610c6d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610318565b60606119398484600085611941565b949350505050565b6060824710156119a25760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610318565b843b6119f05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610318565b600080866001600160a01b03168587604051611a0c9190611eab565b60006040518083038185875af1925050503d8060008114611a49576040519150601f19603f3d011682016040523d82523d6000602084013e611a4e565b606091505b5091509150611a5e828286611a69565b979650505050505050565b60608315611a785750816117ce565b825115611a885782518084602001fd5b8160405162461bcd60e51b81526004016103189190611f0f565b828054611aae90612155565b90600052602060002090601f016020900481019282611ad05760008555611b16565b82601f10611ae95782800160ff19823516178555611b16565b82800160010185558215611b16579182015b82811115611b16578235825591602001919060010190611afb565b50611b22929150611b63565b5090565b508054611b3290612155565b6000825580601f10611b42575050565b601f016020900490600052602060002090810190611b609190611b63565b50565b5b80821115611b225760008155600101611b64565b80356001600160a01b0381168114611b8f57600080fd5b919050565b60008083601f840112611ba5578081fd5b50813567ffffffffffffffff811115611bbc578182fd5b6020830191508360208260051b8501011115611bd757600080fd5b9250929050565b600060208284031215611bef578081fd5b6117ce82611b78565b60008060408385031215611c0a578081fd5b611c1383611b78565b9150611c2160208401611b78565b90509250929050565b60008060208385031215611c3c578182fd5b823567ffffffffffffffff811115611c52578283fd5b611c5e85828601611b94565b90969095509350505050565b60008060008060408587031215611c7f578182fd5b843567ffffffffffffffff80821115611c96578384fd5b611ca288838901611b94565b90965094506020870135915080821115611cba578384fd5b50611cc787828801611b94565b95989497509550505050565b600060208284031215611ce4578081fd5b815180151581146117ce578182fd5b60008060008385036060811215611d08578384fd5b843567ffffffffffffffff80821115611d1f578586fd5b818701915087601f830112611d32578586fd5b813581811115611d40578687fd5b886020828501011115611d51578687fd5b6020929092019550909350506040601f1982011215611d6e578182fd5b506020840190509250925092565b600060208284031215611d8d578081fd5b813567ffffffffffffffff80821115611da4578283fd5b818401915084601f830112611db7578283fd5b813581811115611dc957611dc96121bb565b604051601f8201601f19908116603f01168101908382118183101715611df157611df16121bb565b81604052828152876020848701011115611e09578586fd5b826020860160208301379182016020019490945295945050505050565b600060208284031215611e37578081fd5b5035919050565b600060208284031215611e4f578081fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008151808452611e97816020860160208601612125565b601f01601f19169290920160200192915050565b60008251611ebd818460208701612125565b9190910192915050565b8183823760009101908152919050565b602081526000611939602083018486611e56565b604081526000611eff604083018587611e56565b9050826020830152949350505050565b6020815260006117ce6020830184611e7f565b604081526000611f356040830185611e7f565b90508260208301529392505050565b6020808252602f908201527f56657374696e6753746f726167653a2056657374696e672063617465676f727960408201526e08191bd95cc81b9bdd08195e1a5cdd608a1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602a908201527f56657374696e6753746f726167653a204f6e6c792061636365737369626c65206040820152696279207665737465727360b01b606082015260800190565b60208152600082516040602084015261202e6060840182611e7f565b9050602084015160408401528091505092915050565b6000808335601e1984360301811261205a578283fd5b83018035915067ffffffffffffffff821115612074578283fd5b602001915036819003821315611bd757600080fd5b60008235603e19833603018112611ebd578182fd5b600082198211156120b1576120b16121a5565b500190565b6000826120d157634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156120f0576120f06121a5565b500290565b600082821015612107576121076121a5565b500390565b5b81811015612121576000815560010161210d565b5050565b60005b83811015612140578181015183820152602001612128565b8381111561214f576000848401525b50505050565b600181811c9082168061216957607f821691505b6020821081141561113457634e487b7160e01b600052602260045260246000fd5b600060001982141561219e5761219e6121a5565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b8135601e198336030181126121e557600080fd5b8201803567ffffffffffffffff8111156121fe57600080fd5b6020813603818401131561221157600080fd5b61221b8454612155565b600080601f8511601f84118181171561223a5760008981526020902092505b801561226857601f870160051c8301868810156122545750825b612266601f870160051c85018261210c565b505b50806001811461229e576000945086156122855785848901013594505b600187901b600019600389901b1c1986161789556122f3565b601f198716945082845b868110156122c95789860188013582559487019460019091019087016122a8565b50878610156122e85760001960f88960031b161c1987868b0101351681555b5060018760011b0189555b5050505050808501356001850155505050505056fea2646970667358221220f2454b6dc6227aba24fcb3ef6db4d02cacee91ec75c40620fe2f6f5523d841ed64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000060b105700000000000000000000000005eeaa2dcb23056f4e8654a349e57ebe5e76b5e6e
-----Decoded View---------------
Arg [0] : _vestingStart (uint256): 1622214000
Arg [1] : _tokenAddress (address): 0x5EeAA2DCb23056F4E8654a349E57eBE5e76b5e6e
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000060b10570
Arg [1] : 0000000000000000000000005eeaa2dcb23056f4e8654a349e57ebe5e76b5e6e
Deployed Bytecode Sourcemap
25280:2184:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10413:495;;;;;;:::i;:::-;;:::i;:::-;;25463:31;;;;;;;;16844:25:1;;;16832:2;16817:18;25463:31:0;;;;;;;;7529:42;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6395:32:1;;;6377:51;;6365:2;6350:18;7529:42:0;6332:102:1;24837:354:0;;;;;;:::i;:::-;;:::i;11372:770::-;;;;;;:::i;:::-;;:::i;9016:379::-;;;;;;:::i;:::-;;:::i;6379:148::-;;;:::i;5728:87::-;5774:7;5801:6;-1:-1:-1;;;;;5801:6:0;5728:87;;12292:475;;;;;;:::i;:::-;;:::i;25685:1072::-;;;;;;:::i;:::-;;:::i;12150:134::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;26765:694::-;;;;;;:::i;:::-;;:::i;8020:591::-;;;;;;:::i;:::-;;:::i;10916:306::-;;;;;;:::i;:::-;;:::i;:::-;;;;16178:13:1;;16160:32;;16248:4;16236:17;;;16230:24;16208:20;;;16201:54;;;;16133:18;10916:306:0;16115:146:1;9999:36:0;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7580:359::-;;;;;;:::i;:::-;;:::i;6682:244::-;;;;;;:::i;:::-;;:::i;25501:29::-;;;;;10413:495;5774:7;5801:6;-1:-1:-1;;;;;5801:6:0;4366:10;5948:23;5940:68;;;;-1:-1:-1;;;5940:68:0;;;;;;;:::i;:::-;;;;;;;;;10538:54:::1;10561:23;10585:5;;10561:30;;;;;;;:::i;:::-;;;;;;;;;;;;;10368:25:::0;;;:29;;;10254:151;10538:54:::1;10537:55;10529:115;;;::::0;-1:-1:-1;;;10529:115:0;;11229:2:1;10529:115:0::1;::::0;::::1;11211:21:1::0;11268:2;11248:18;;;11241:30;11307:34;11287:18;;;11280:62;-1:-1:-1;;;11358:18:1;;;11351:45;11413:19;;10529:115:0::1;11201:237:1::0;10529:115:0::1;10691:1;10663:9;:25;;;:29;10655:102;;;::::0;-1:-1:-1;;;10655:102:0;;14065:2:1;10655:102:0::1;::::0;::::1;14047:21:1::0;14104:2;14084:18;;;14077:30;14143:34;14123:18;;;14116:62;14214:30;14194:18;;;14187:58;14262:19;;10655:102:0::1;14037:250:1::0;10655:102:0::1;10770:20;:32:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;10770:32:0;;;;::::1;::::0;;::::1;10796:5:::0;;10770:32:::1;:::i;:::-;;10846:9;10813:23;10837:5;;10813:30;;;;;;;:::i;:::-;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;20081:19:1;;20068:33;;20144:14;;;20131:28;20127:1;20117:12;;20110:50;10813:42:0::1;;;10873:27;10894:5;;10873:27;;;;;;;:::i;:::-;;;;;;;;10413:495:::0;;;:::o;7529:42::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7529:42:0;;-1:-1:-1;7529:42:0;:::o;24837:354::-;5774:7;5801:6;-1:-1:-1;;;;;5801:6:0;4366:10;5948:23;5940:68;;;;-1:-1:-1;;;5940:68:0;;;;;;;:::i;:::-;24975:30:::1;::::0;-1:-1:-1;;;24975:30:0;;24999:4:::1;24975:30;::::0;::::1;6377:51:1::0;24935:13:0;;24913:12:::1;::::0;-1:-1:-1;;;;;24975:15:0;::::1;::::0;::::1;::::0;6350:18:1;;24975:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24960:45:::0;-1:-1:-1;25024:12:0;25016:61:::1;;;::::0;-1:-1:-1;;;25016:61:0;;9158:2:1;25016:61:0::1;::::0;::::1;9140:21:1::0;9197:2;9177:18;;;9170:30;9236:34;9216:18;;;9209:62;-1:-1:-1;;;9287:18:1;;;9280:34;9331:19;;25016:61:0::1;9130:226:1::0;25016:61:0::1;25090:36;25109:7;5774::::0;5801:6;-1:-1:-1;;;;;5801:6:0;;5728:87;25109:7:::1;-1:-1:-1::0;;;;;25090:18:0;::::1;::::0;25118:7;25090:18:::1;:36::i;:::-;25160:13;-1:-1:-1::0;;;;;25144:39:0::1;;25175:7;25144:39;;;;16844:25:1::0;;16832:2;16817:18;;16799:76;25144:39:0::1;;;;;;;;6019:1;;24837:354:::0;:::o;11372:770::-;5774:7;5801:6;-1:-1:-1;;;;;5801:6:0;4366:10;5948:23;5940:68;;;;-1:-1:-1;;;5940:68:0;;;;;;;:::i;:::-;11489:35;;::::1;11481:106;;;::::0;-1:-1:-1;;;11481:106:0;;9563:2:1;11481:106:0::1;::::0;::::1;9545:21:1::0;9602:2;9582:18;;;9575:30;9641:34;9621:18;;;9614:62;9712:28;9692:18;;;9685:56;9758:19;;11481:106:0::1;9535:248:1::0;11481:106:0::1;11602:6;11598:537;11614:19:::0;;::::1;11598:537;;;11654:14;11671:8;;11680:1;11671:11;;;;;-1:-1:-1::0;;;11671:11:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11654:28;;11697:24;11724:9;;11734:1;11724:12;;;;;-1:-1:-1::0;;;11724:12:0::1;;;;;;;;;;;;;;;;;;;;:::i;:::-;11697:39;;11784:1;11759:7;:22;;;:26;11751:108;;;::::0;-1:-1:-1;;;11751:108:0;;15674:2:1;11751:108:0::1;::::0;::::1;15656:21:1::0;15713:2;15693:18;;;15686:30;15752:34;15732:18;;;15725:62;15823:34;15803:18;;;15796:62;-1:-1:-1;;;15874:19:1;;;15867:36;15920:19;;11751:108:0::1;15646:299:1::0;11751:108:0::1;11882:65;11905:23;11929:16;:7:::0;;:16:::1;:::i;:::-;11905:41;;;;;;;:::i;11882:65::-;11874:125;;;;-1:-1:-1::0;;;11874:125:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12016:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;12034:7;;12016:25:::1;12034:7:::0;12016:15;:25:::1;:::i;:::-;-1:-1:-1::0;;;;;;;12063:60:0;::::1;;12082:16;:7:::0;;:16:::1;:::i;:::-;12100:7;:22;;;12063:60;;;;;;;;:::i;:::-;;;;;;;;11598:537;;11635:3;;;;;:::i;:::-;;;;11598:537;;;;11372:770:::0;;;;:::o;9016:379::-;9174:16;:23;9094:4;;;;;9208:148;9228:21;9224:1;:25;9208:148;;;9286:16;9303:1;9286:19;;;;;;-1:-1:-1;;;9286:19:0;;;;;;;;;;;;;;;;;;;:58;;-1:-1:-1;;;9286:58:0;;-1:-1:-1;;;;;6669:15:1;;;9286:58:0;;;6651:34:1;6721:15;;;6701:18;;;6694:43;9286:19:0;;;;:33;;6586:18:1;;9286:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9270:74;;;;:::i;:::-;;-1:-1:-1;9251:3:0;;;;:::i;:::-;;;;9208:148;;;-1:-1:-1;9375:12:0;;9016:379;-1:-1:-1;;;;9016:379:0:o;6379:148::-;5774:7;5801:6;-1:-1:-1;;;;;5801:6:0;4366:10;5948:23;5940:68;;;;-1:-1:-1;;;5940:68:0;;;;;;;:::i;:::-;6486:1:::1;6470:6:::0;;6449:40:::1;::::0;-1:-1:-1;;;;;6470:6:0;;::::1;::::0;6449:40:::1;::::0;6486:1;;6449:40:::1;6517:1;6500:19:::0;;-1:-1:-1;;;;;;6500:19:0::1;::::0;;6379:148::o;12292:475::-;5774:7;5801:6;-1:-1:-1;;;;;5801:6:0;4366:10;5948:23;5940:68;;;;-1:-1:-1;;;5940:68:0;;;;;;;:::i;:::-;12377:6:::1;12373:387;12389:19:::0;;::::1;12373:387;;;12429:14;12446:8;;12455:1;12446:11;;;;;-1:-1:-1::0;;;12446:11:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12495:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;10368:25;;;12495:15;;-1:-1:-1;12472:82:0::1;;;::::0;-1:-1:-1;;;12472:82:0;;12890:2:1;12472:82:0::1;::::0;::::1;12872:21:1::0;12929:2;12909:18;;;12902:30;12968:34;12948:18;;;12941:62;-1:-1:-1;;;13019:18:1;;;13012:36;13065:19;;12472:82:0::1;12862:228:1::0;12472:82:0::1;-1:-1:-1::0;;;;;12596:15:0;::::1;12571:22;12596:15:::0;;;:7:::1;:15;::::0;;;;;12571:40;;;;::::1;::::0;;;;;;;12596:15;;12571:40:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;12571:40:0;;;-1:-1:-1;;12571:40:0::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;-1:-1:-1;;;;;12647:15:0;::::1;-1:-1:-1::0;12647:15:0;;;:7:::1;:15:::0;;;;;;12571:40;;-1:-1:-1;12640:22:0::1;12647:15:::0;-1:-1:-1;12640:22:0::1;:::i;:::-;-1:-1:-1::0;12640:22:0::1;;::::0;;;::::1;::::0;12707:16;;12725:22:::1;::::0;::::1;::::0;12684:64:::1;::::0;-1:-1:-1;;;;;12684:64:0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;12373:387;;12410:3;;;;;:::i;:::-;;;;12373:387;;;;12292:475:::0;;:::o;25685:1072::-;25742:10;10164:12;;;;:7;:12;;;;;10368:25;;;10141:83;;;;-1:-1:-1;;;10141:83:0;;;;;;;:::i;:::-;25787:27:::1;::::0;-1:-1:-1;;;25787:27:0;;25803:10:::1;25787:27;::::0;::::1;6377:51:1::0;25765:19:0::1;::::0;25787:5:::1;-1:-1:-1::0;;;;;25787:15:0::1;::::0;::::1;::::0;6350:18:1;;25787:27:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25765:49;;25850:1;25833:14;:18;25825:78;;;::::0;-1:-1:-1;;;25825:78:0;;10397:2:1;25825:78:0::1;::::0;::::1;10379:21:1::0;10436:2;10416:18;;;10409:30;10475:34;10455:18;;;10448:62;-1:-1:-1;;;10526:18:1;;;10519:45;10581:19;;25825:78:0::1;10369:237:1::0;25825:78:0::1;25916:18;25954:44;25971:10;25991:5;25954:16;:44::i;:::-;25937:61;::::0;:14;:61:::1;:::i;:::-;25916:82;;26011:22;26036;26047:10;26036;:22::i;:::-;26011:47;;26069:23;26120:33;26142:10;26120:21;:33::i;:::-;26095:7;:22;;;:58;;;;:::i;:::-;26069:84;;26190:18;26174:13;:34;26166:85;;;::::0;-1:-1:-1;;;26166:85:0;;13658:2:1;26166:85:0::1;::::0;::::1;13640:21:1::0;13697:2;13677:18;;;13670:30;13736:34;13716:18;;;13709:62;-1:-1:-1;;;13787:18:1;;;13780:36;13833:19;;26166:85:0::1;13630:228:1::0;26166:85:0::1;26264:20;26287:34;26303:18:::0;26287:13;:34:::1;:::i;:::-;26264:57;;26332:23;26358:41;26367:15;26384:14;26358:8;:41::i;:::-;26542:65;::::0;-1:-1:-1;;;26542:65:0;;26561:10:::1;26542:65;::::0;::::1;6988:34:1::0;26581:4:0::1;7038:18:1::0;;;7031:43;7090:18;;;7083:34;;;26332:67:0;;-1:-1:-1;26542:5:0::1;-1:-1:-1::0;;;;;26542:18:0::1;::::0;::::1;::::0;6923::1;;26542:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26534:74;;;::::0;::::1;;26627:46;::::0;-1:-1:-1;;;26627:46:0;;-1:-1:-1;;;;;7320:32:1;;;26627:46:0::1;::::0;::::1;7302:51:1::0;7369:18;;;7362:34;;;26627:5:0::1;:14;::::0;::::1;::::0;7275:18:1;;26627:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26619:55;;;::::0;::::1;;26692:57;::::0;16844:25:1;;;-1:-1:-1;;;;;26692:57:0;::::1;::::0;26706:10:::1;::::0;26692:57:::1;::::0;16832:2:1;16817:18;26692:57:0::1;;;;;;;10235:1;;;;;;25685:1072:::0;;:::o;12150:134::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;10164:12:0;;;;;;:7;:12;;;;;10368:25;;;10164:12;;10141:83;;;;-1:-1:-1;;;10141:83:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12260:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;12253:23;;;;::::1;::::0;;;;;;;12260:16;;12253:23:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;10235:1;12150:134:::0;;;;:::o;26765:694::-;-1:-1:-1;;;;;10164:12:0;;26853:4;10164:12;;;:7;:12;;;;;10368:25;;;10164:12;;10141:83;;;;-1:-1:-1;;;10141:83:0;;;;;;;:::i;:::-;26870:22:::1;26895:19;26906:7;26895:10;:19::i;:::-;26870:44;;26925:31;26959:36;26978:7;:16;;;26959:18;:36::i;:::-;27040:14:::0;;26925:70;;-1:-1:-1;27008:17:0::1;::::0;27028:26:::1;::::0;:9:::1;:26;:::i;:::-;27008:46;;27089:12;27070:15;:31;27067:385;;27124:1;27117:8;;;;;;;27067:385;27158:15;27176:30;27194:12:::0;27176:15:::1;:30;:::i;:::-;27158:48;;27240:8;:24;;;27226:10;:38;27223:218;;-1:-1:-1::0;;;27291:22:0::1;;::::0;;-1:-1:-1;27284:29:0::1;;27223:218;27401:8;:24;;;27387:10;27362:7;:22;;;:35;;;;:::i;:::-;27361:64;;;;:::i;:::-;27354:71;;;;;;;;8020:591:::0;5774:7;5801:6;-1:-1:-1;;;;;5801:6:0;4366:10;5948:23;5940:68;;;;-1:-1:-1;;;5940:68:0;;;;;;;:::i;:::-;8108:11:::1;8121:10:::0;8135:41:::1;8159:16;8135:23;:41::i;:::-;8107:69;;;;8195:6;8187:67;;;::::0;-1:-1:-1;;;8187:67:0;;12052:2:1;8187:67:0::1;::::0;::::1;12034:21:1::0;12091:2;12071:18;;;12064:30;12130:34;12110:18;;;12103:62;-1:-1:-1;;;12181:18:1;;;12174:46;12237:19;;8187:67:0::1;12024:238:1::0;8187:67:0::1;8305:1;8279:23:::0;;:27:::1;::::0;8305:1;8279:27:::1;:::i;:::-;8270:5;:36;8267:279;;8350:16;8367:23:::0;;8322:25:::1;::::0;8350:16;8367:27:::1;::::0;8350:16;;8367:27:::1;:::i;:::-;8350:45;;;;;;-1:-1:-1::0;;;8350:45:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;8410:22;;-1:-1:-1;;;;;8350:45:0;;::::1;::::0;-1:-1:-1;8350:45:0;8410:22;::::1;;-1:-1:-1::0;;;8410:22:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;8410:22:0;;;;;-1:-1:-1;;;;;;8410:22:0::1;::::0;;;;;::::1;8447:23:::0;;8473:8;;8410:22;8464:5;;8447:23;::::1;;;-1:-1:-1::0;;;8447:23:0::1;;;;;;;;;;;;;;;;;:34;;;;;-1:-1:-1::0;;;;;8447:34:0::1;;;;;-1:-1:-1::0;;;;;8447:34:0::1;;;;;;8267:279;;;;8512:16;:22;;;;;-1:-1:-1::0;;;8512:22:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;8512:22:0;;;;;-1:-1:-1;;;;;;8512:22:0::1;::::0;;;;;8267:279:::1;8563:40;::::0;-1:-1:-1;;;;;8563:40:0;::::1;::::0;::::1;::::0;;;::::1;6019:1;;8020:591:::0;:::o;10916:306::-;-1:-1:-1;;;;;;;;;;;;;;;;;11020:32:0;11055:23;11079:5;11055:30;;;;;;:::i;:::-;;;;;;;;;;;;;11020:65;;11104:32;11127:8;10368:25;;;:29;;;10254:151;11104:32;11096:92;;;;-1:-1:-1;;;11096:92:0;;;;;;;:::i;:::-;11199:15;;;;;;;;;;;;;;;;;;;;;;;10916:306;-1:-1:-1;;10916:306:0:o;9999:36::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7580:359::-;5774:7;5801:6;-1:-1:-1;;;;;5801:6:0;4366:10;5948:23;5940:68;;;;-1:-1:-1;;;5940:68:0;;;;;;;:::i;:::-;7665:11:::1;7681:41;7705:16;7681:23;:41::i;:::-;7664:58;;;7742:6;7741:7;7733:72;;;::::0;-1:-1:-1;;;7733:72:0;;12469:2:1;7733:72:0::1;::::0;::::1;12451:21:1::0;12508:2;12488:18;;;12481:30;12547:34;12527:18;;;12520:62;-1:-1:-1;;;12598:18:1;;;12591:50;12658:19;;7733:72:0::1;12441:242:1::0;7733:72:0::1;7818:16;:57:::0;;;;::::1;::::0;;-1:-1:-1;7818:57:0;;;;::::1;::::0;;-1:-1:-1;;;;;;7818:57:0::1;-1:-1:-1::0;;;;;7818:57:0;::::1;::::0;;::::1;::::0;;;7893:38:::1;::::0;7818:57;;7893:38:::1;::::0;::::1;6019:1;7580:359:::0;:::o;6682:244::-;5774:7;5801:6;-1:-1:-1;;;;;5801:6:0;4366:10;5948:23;5940:68;;;;-1:-1:-1;;;5940:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6771:22:0;::::1;6763:73;;;::::0;-1:-1:-1;;;6763:73:0;;9990:2:1;6763:73:0::1;::::0;::::1;9972:21:1::0;10029:2;10009:18;;;10002:30;10068:34;10048:18;;;10041:62;-1:-1:-1;;;10119:18:1;;;10112:36;10165:19;;6763:73:0::1;9962:228:1::0;6763:73:0::1;6873:6;::::0;;6852:38:::1;::::0;-1:-1:-1;;;;;6852:38:0;;::::1;::::0;6873:6;::::1;::::0;6852:38:::1;::::0;::::1;6901:6;:17:::0;;-1:-1:-1;;;;;;6901:17:0::1;-1:-1:-1::0;;;;;6901:17:0;;;::::1;::::0;;;::::1;::::0;;6682:244::o;21430:177::-;21540:58;;;-1:-1:-1;;;;;7320:32:1;;21540:58:0;;;7302:51:1;7369:18;;;;7362:34;;;21540:58:0;;;;;;;;;;7275:18:1;;;;21540:58:0;;;;;;;;-1:-1:-1;;;;;21540:58:0;-1:-1:-1;;;21540:58:0;;;21513:86;;21533:5;;21513:19;:86::i;3237:106::-;3295:7;3326:1;3322;:5;:13;;3334:1;3322:13;;;3330:1;3322:13;3315:20;3237:106;-1:-1:-1;;;3237:106:0:o;8619:389::-;8763:16;:23;8700:10;;;;;8797:176;8817:21;8813:1;:25;8797:176;;;8894:16;-1:-1:-1;;;;;8862:48:0;8870:16;8887:1;8870:19;;;;;;-1:-1:-1;;;8870:19:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8870:19:0;8862:48;8859:103;;;8938:4;;8944:1;;-1:-1:-1;8619:389:0;-1:-1:-1;;;8619:389:0:o;8859:103::-;8840:3;;;;:::i;:::-;;;;8797:176;;;-1:-1:-1;8991:5:0;;;;-1:-1:-1;8619:389:0;-1:-1:-1;;;8619:389:0:o;23855:761::-;24279:23;24305:69;24333:4;24305:69;;;;;;;;;;;;;;;;;24313:5;-1:-1:-1;;;;;24305:27:0;;;:69;;;;;:::i;:::-;24389:17;;24279:95;;-1:-1:-1;24389:21:0;24385:224;;24531:10;24520:30;;;;;;;;;;;;:::i;:::-;24512:85;;;;-1:-1:-1;;;24512:85:0;;15263:2:1;24512:85:0;;;15245:21:1;15302:2;15282:18;;;15275:30;15341:34;15321:18;;;15314:62;-1:-1:-1;;;15392:18:1;;;15385:40;15442:19;;24512:85:0;15235:232:1;16460:195:0;16563:12;16595:52;16617:6;16625:4;16631:1;16634:12;16595:21;:52::i;:::-;16588:59;16460:195;-1:-1:-1;;;;16460:195:0:o;17512:530::-;17639:12;17697:5;17672:21;:30;;17664:81;;;;-1:-1:-1;;;17664:81:0;;11645:2:1;17664:81:0;;;11627:21:1;11684:2;11664:18;;;11657:30;11723:34;11703:18;;;11696:62;-1:-1:-1;;;11774:18:1;;;11767:36;11820:19;;17664:81:0;11617:228:1;17664:81:0;13909:20;;17756:60;;;;-1:-1:-1;;;17756:60:0;;14494:2:1;17756:60:0;;;14476:21:1;14533:2;14513:18;;;14506:30;14572:31;14552:18;;;14545:59;14621:18;;17756:60:0;14466:179:1;17756:60:0;17890:12;17904:23;17931:6;-1:-1:-1;;;;;17931:11:0;17951:5;17959:4;17931:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17889:75;;;;17982:52;18000:7;18009:10;18021:12;17982:17;:52::i;:::-;17975:59;17512:530;-1:-1:-1;;;;;;;17512:530:0:o;20052:742::-;20167:12;20196:7;20192:595;;;-1:-1:-1;20227:10:0;20220:17;;20192:595;20341:17;;:21;20337:439;;20604:10;20598:17;20665:15;20652:10;20648:2;20644:19;20637:44;20552:148;20747:12;20740:20;;-1:-1:-1;;;20740:20:0;;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:391::-;255:8;265:6;319:3;312:4;304:6;300:17;296:27;286:2;;342:6;334;327:22;286:2;-1:-1:-1;370:20:1;;413:18;402:30;;399:2;;;452:8;442;435:26;399:2;496:4;488:6;484:17;472:29;;556:3;549:4;539:6;536:1;532:14;524:6;520:27;516:38;513:47;510:2;;;573:1;570;563:12;510:2;276:307;;;;;:::o;588:196::-;647:6;700:2;688:9;679:7;675:23;671:32;668:2;;;721:6;713;706:22;668:2;749:29;768:9;749:29;:::i;789:270::-;857:6;865;918:2;906:9;897:7;893:23;889:32;886:2;;;939:6;931;924:22;886:2;967:29;986:9;967:29;:::i;:::-;957:39;;1015:38;1049:2;1038:9;1034:18;1015:38;:::i;:::-;1005:48;;876:183;;;;;:::o;1064:457::-;1150:6;1158;1211:2;1199:9;1190:7;1186:23;1182:32;1179:2;;;1232:6;1224;1217:22;1179:2;1277:9;1264:23;1310:18;1302:6;1299:30;1296:2;;;1347:6;1339;1332:22;1296:2;1391:70;1453:7;1444:6;1433:9;1429:22;1391:70;:::i;:::-;1480:8;;1365:96;;-1:-1:-1;1169:352:1;-1:-1:-1;;;;1169:352:1:o;1526:829::-;1674:6;1682;1690;1698;1751:2;1739:9;1730:7;1726:23;1722:32;1719:2;;;1772:6;1764;1757:22;1719:2;1817:9;1804:23;1846:18;1887:2;1879:6;1876:14;1873:2;;;1908:6;1900;1893:22;1873:2;1952:70;2014:7;2005:6;1994:9;1990:22;1952:70;:::i;:::-;2041:8;;-1:-1:-1;1926:96:1;-1:-1:-1;2129:2:1;2114:18;;2101:32;;-1:-1:-1;2145:16:1;;;2142:2;;;2179:6;2171;2164:22;2142:2;;2223:72;2287:7;2276:8;2265:9;2261:24;2223:72;:::i;:::-;1709:646;;;;-1:-1:-1;2314:8:1;-1:-1:-1;;;;1709:646:1:o;2360:297::-;2427:6;2480:2;2468:9;2459:7;2455:23;2451:32;2448:2;;;2501:6;2493;2486:22;2448:2;2538:9;2532:16;2591:5;2584:13;2577:21;2570:5;2567:32;2557:2;;2618:6;2610;2603:22;2662:821;2776:6;2784;2792;2836:9;2827:7;2823:23;2866:2;2862;2858:11;2855:2;;;2887:6;2879;2872:22;2855:2;2932:9;2919:23;2961:18;3002:2;2994:6;2991:14;2988:2;;;3023:6;3015;3008:22;2988:2;3066:6;3055:9;3051:22;3041:32;;3111:7;3104:4;3100:2;3096:13;3092:27;3082:2;;3138:6;3130;3123:22;3082:2;3183;3170:16;3209:2;3201:6;3198:14;3195:2;;;3230:6;3222;3215:22;3195:2;3282:7;3275:4;3266:6;3262:2;3258:15;3254:26;3251:39;3248:2;;;3308:6;3300;3293:22;3248:2;3344:4;3336:13;;;;;-1:-1:-1;3368:6:1;;-1:-1:-1;;3408:2:1;-1:-1:-1;;3390:16:1;;3386:25;3383:2;;;3429:6;3421;3414:22;3383:2;;3472:4;3461:9;3457:20;3447:30;;2803:680;;;;;:::o;3488:967::-;3557:6;3610:2;3598:9;3589:7;3585:23;3581:32;3578:2;;;3631:6;3623;3616:22;3578:2;3676:9;3663:23;3705:18;3746:2;3738:6;3735:14;3732:2;;;3767:6;3759;3752:22;3732:2;3810:6;3799:9;3795:22;3785:32;;3855:7;3848:4;3844:2;3840:13;3836:27;3826:2;;3882:6;3874;3867:22;3826:2;3923;3910:16;3945:2;3941;3938:10;3935:2;;;3951:18;;:::i;:::-;4026:2;4020:9;3994:2;4080:13;;-1:-1:-1;;4076:22:1;;;4100:2;4072:31;4068:40;4056:53;;;4124:18;;;4144:22;;;4121:46;4118:2;;;4170:18;;:::i;:::-;4210:10;4206:2;4199:22;4245:2;4237:6;4230:18;4285:7;4280:2;4275;4271;4267:11;4263:20;4260:33;4257:2;;;4311:6;4303;4296:22;4257:2;4372;4367;4363;4359:11;4354:2;4346:6;4342:15;4329:46;4395:15;;;4412:2;4391:24;4384:40;;;;4399:6;3568:887;-1:-1:-1;;;;;3568:887:1:o;4460:190::-;4519:6;4572:2;4560:9;4551:7;4547:23;4543:32;4540:2;;;4593:6;4585;4578:22;4540:2;-1:-1:-1;4621:23:1;;4530:120;-1:-1:-1;4530:120:1:o;4655:194::-;4725:6;4778:2;4766:9;4757:7;4753:23;4749:32;4746:2;;;4799:6;4791;4784:22;4746:2;-1:-1:-1;4827:16:1;;4736:113;-1:-1:-1;4736:113:1:o;4854:269::-;4943:6;4938:3;4931:19;4995:6;4988:5;4981:4;4976:3;4972:14;4959:43;-1:-1:-1;4913:3:1;5022:16;;;5040:4;5018:27;;;5011:40;;;;5105:2;5084:15;;;-1:-1:-1;;5080:29:1;5071:39;;;5067:50;;4921:202::o;5128:258::-;5170:3;5208:5;5202:12;5235:6;5230:3;5223:19;5251:63;5307:6;5300:4;5295:3;5291:14;5284:4;5277:5;5273:16;5251:63;:::i;:::-;5368:2;5347:15;-1:-1:-1;;5343:29:1;5334:39;;;;5375:4;5330:50;;5178:208;-1:-1:-1;;5178:208:1:o;5391:274::-;5520:3;5558:6;5552:13;5574:53;5620:6;5615:3;5608:4;5600:6;5596:17;5574:53;:::i;:::-;5643:16;;;;;5528:137;-1:-1:-1;;5528:137:1:o;5670:275::-;5855:6;5847;5842:3;5829:33;5811:3;5881:16;;5906:15;;;5881:16;5819:126;-1:-1:-1;5819:126:1:o;7860:247::-;8019:2;8008:9;8001:21;7982:4;8039:62;8097:2;8086:9;8082:18;8074:6;8066;8039:62;:::i;8112:318::-;8299:2;8288:9;8281:21;8262:4;8319:62;8377:2;8366:9;8362:18;8354:6;8346;8319:62;:::i;:::-;8311:70;;8417:6;8412:2;8401:9;8397:18;8390:34;8271:159;;;;;;:::o;8435:220::-;8584:2;8573:9;8566:21;8547:4;8604:45;8645:2;8634:9;8630:18;8622:6;8604:45;:::i;8660:291::-;8837:2;8826:9;8819:21;8800:4;8857:45;8898:2;8887:9;8883:18;8875:6;8857:45;:::i;:::-;8849:53;;8938:6;8933:2;8922:9;8918:18;8911:34;8809:142;;;;;:::o;10611:411::-;10813:2;10795:21;;;10852:2;10832:18;;;10825:30;10891:34;10886:2;10871:18;;10864:62;-1:-1:-1;;;10957:2:1;10942:18;;10935:45;11012:3;10997:19;;10785:237::o;13095:356::-;13297:2;13279:21;;;13316:18;;;13309:30;13375:34;13370:2;13355:18;;13348:62;13442:2;13427:18;;13269:182::o;14650:406::-;14852:2;14834:21;;;14891:2;14871:18;;;14864:30;14930:34;14925:2;14910:18;;14903:62;-1:-1:-1;;;14996:2:1;14981:18;;14974:40;15046:3;15031:19;;14824:232::o;16266:427::-;16443:2;16432:9;16425:21;16406:4;16481:6;16475:13;16524:4;16519:2;16508:9;16504:18;16497:32;16552:51;16599:2;16588:9;16584:18;16570:12;16552:51;:::i;:::-;16538:65;;16659:2;16651:6;16647:15;16641:22;16634:4;16623:9;16619:20;16612:52;16681:6;16673:14;;;16415:278;;;;:::o;16880:534::-;16958:4;16964:6;17024:11;17011:25;17118:2;17114:7;17103:8;17087:14;17083:29;17079:43;17059:18;17055:68;17045:2;;17140:4;17134;17127:18;17045:2;17170:33;;17222:20;;;-1:-1:-1;17265:18:1;17254:30;;17251:2;;;17300:4;17294;17287:18;17251:2;17336:4;17324:17;;-1:-1:-1;17367:14:1;17363:27;;;17353:38;;17350:2;;;17404:1;17401;17394:12;17419:329;17511:4;17569:11;17556:25;17663:2;17659:7;17648:8;17632:14;17628:29;17624:43;17604:18;17600:68;17590:2;;17685:4;17679;17672:18;17885:128;17925:3;17956:1;17952:6;17949:1;17946:13;17943:2;;;17962:18;;:::i;:::-;-1:-1:-1;17998:9:1;;17933:80::o;18018:217::-;18058:1;18084;18074:2;;-1:-1:-1;;;18109:31:1;;18163:4;18160:1;18153:15;18191:4;18116:1;18181:15;18074:2;-1:-1:-1;18220:9:1;;18064:171::o;18240:168::-;18280:7;18346:1;18342;18338:6;18334:14;18331:1;18328:21;18323:1;18316:9;18309:17;18305:45;18302:2;;;18353:18;;:::i;:::-;-1:-1:-1;18393:9:1;;18292:116::o;18413:125::-;18453:4;18481:1;18478;18475:8;18472:2;;;18486:18;;:::i;:::-;-1:-1:-1;18523:9:1;;18462:76::o;18543:146::-;18605:78;18623:3;18616:5;18613:14;18605:78;;;18679:1;18665:16;;18650:1;18639:13;18605:78;;;18595:94;;:::o;18694:258::-;18766:1;18776:113;18790:6;18787:1;18784:13;18776:113;;;18866:11;;;18860:18;18847:11;;;18840:39;18812:2;18805:10;18776:113;;;18907:6;18904:1;18901:13;18898:2;;;18942:1;18933:6;18928:3;18924:16;18917:27;18898:2;;18747:205;;;:::o;18957:380::-;19036:1;19032:12;;;;19079;;;19100:2;;19154:4;19146:6;19142:17;19132:27;;19100:2;19207;19199:6;19196:14;19176:18;19173:38;19170:2;;;19253:10;19248:3;19244:20;19241:1;19234:31;19288:4;19285:1;19278:15;19316:4;19313:1;19306:15;19513:135;19552:3;-1:-1:-1;;19573:17:1;;19570:2;;;19593:18;;:::i;:::-;-1:-1:-1;19640:1:1;19629:13;;19560:88::o;19653:127::-;19714:10;19709:3;19705:20;19702:1;19695:31;19745:4;19742:1;19735:15;19769:4;19766:1;19759:15;19785:127;19846:10;19841:3;19837:20;19834:1;19827:31;19877:4;19874:1;19867:15;19901:4;19898:1;19891:15;20171:2077;20345:5;20332:19;20430:2;20426:7;20418:5;20402:14;20398:26;20394:40;20374:18;20370:65;20360:2;;20449:1;20446;20439:12;20360:2;20474:30;;20527:18;;20568;20557:30;;20554:2;;;20600:1;20597;20590:12;20554:2;20623:4;20678:6;20662:14;20658:27;20653:2;20647:4;20643:13;20639:47;20636:2;;;20699:1;20696;20689:12;20636:2;20726:38;20758:4;20752:11;20726:38;:::i;:::-;20790:1;20819:9;20858:2;20850:6;20847:14;20891:2;20883:6;20880:14;20913:2;20909;20906:10;20903:2;;;17800:4;17819:17;;;17869:4;17853:21;;20939:50;;20903:2;21011;21008;;;21091;21083:6;21079:15;21076:1;21072:23;21059:11;21055:41;21123:2;21115:6;21112:14;21109:2;;;-1:-1:-1;21144:11:1;21109:2;21170:82;21246:2;21238:6;21234:15;21231:1;21227:23;21214:11;21210:41;21197:11;21170:82;:::i;:::-;;21008:2;;21278;21294:1;21289:620;;;;21955:1;21940:16;;21972:6;21969:2;;;22059;22047:9;22041:4;22037:20;22033:29;22020:43;22009:54;;21969:2;19494:1;19490:11;;;-1:-1:-1;;19470:1:1;19466:11;;;19462:24;19458:29;19448:40;;19445:57;22097:4;22090:83;21271:912;;21289:620;-1:-1:-1;;21325:20:1;;;-1:-1:-1;21372:11:1;21405:9;21427:235;21441:7;21438:1;21435:14;21427:235;;;21532:20;;;21528:29;;21515:43;21500:59;;21630:18;;;;21598:1;21586:14;;;;21457:10;;21427:235;;;21431:3;21690:6;21681:7;21678:19;21675:2;;;21830:1;21826:6;21820:3;21811:6;21808:1;21804:14;21800:24;21796:37;21792:42;21786:2;21774:9;21768:4;21764:20;21760:29;21747:43;21743:92;21735:6;21728:108;21675:2;;21896:1;21887:6;21884:1;21880:14;21876:22;21870:4;21863:36;21271:912;;;;;;22237:2;22230:5;22226:14;22213:28;22209:1;22203:4;22199:12;22192:50;;;;20296:1952;;:::o
Swarm Source
ipfs://f2454b6dc6227aba24fcb3ef6db4d02cacee91ec75c40620fe2f6f5523d841ed
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.