Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Name:
TimelineVesting
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-12-01 */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, 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/[email protected] pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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"); (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"); (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"); (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"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/token/ERC20/utils/[email protected] 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' 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 { unchecked { 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 require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File @openzeppelin/contracts/utils/[email protected] 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) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] 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() { _transferOwnership(_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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/security/[email protected] pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File contracts/IVesting.sol interface IVesting { function claimed(address _beneficiary) external view returns (uint256); function getAvailAmt(address _beneficiary) external view returns (uint256); function claim() external; function getTotalAllocated(address _beneficiary) external view returns (uint256); function isRefundRequested(address _beneficiary) external view returns (bool); event RefundRequested(address user); } // File contracts/TimelineVesting.sol pragma solidity ^0.8.0; contract TimelineVesting is Ownable, ReentrancyGuard, IVesting { using SafeERC20 for IERC20; IERC20 public token; uint256[] public policies; uint256 public denom; uint256[] public timelines; mapping(address => uint256) allocatedBalance; mapping(address => uint256) public override claimed; mapping(address => bool) public refundRequested; event Released( address indexed beneficiary, uint256 currentTime, uint256 amount ); modifier zeroAddr(address _addr) { require(_addr != address(0), "Set zero address"); _; } constructor(address _token) Ownable() { require(_token != address(0), "Set zero address"); token = IERC20(_token); } /** @notice Set policy and vesting timeline @param _timelines list of time to return corresponding to `_policy` `_timeline` length must be `_policy` length + 1 as last vesting time will return remaining of allocated amount @param _policies list of vesting return in `_denom` of total allocated amount @param _denom denominator of `_policy` */ function setPolicy( uint256[] calldata _timelines, uint256[] calldata _policies, uint256 _denom ) external onlyOwner { require( _policies.length > 0 && _timelines.length == _policies.length + 1, "Policy and timeline length mismatch" ); for (uint256 i = 1; i < timelines.length; i++) { require( timelines[i] > timelines[i - 1], "Timeline must be increasing" ); } uint256 policiesSum = 0; for (uint256 i = 0; i < _policies.length; i++) { policiesSum += _policies[i]; } require(policiesSum < _denom, "Policies must not exceeed denominator"); policies = _policies; timelines = _timelines; denom = _denom; } function getTotalAllocated( address _beneficiary ) external view override returns (uint256) { return allocatedBalance[_beneficiary]; } /** @notice add beneficiary @dev Caller must be Owner Not allow Owner to alter the vesting policy @param _beneficiary `_beneficiary` address @param _beneficiary Amount that `_beneficiary` can claim in total */ function addBeneficiary( address _beneficiary, uint256 _totalAmt ) external onlyOwner zeroAddr(_beneficiary) { require(allocatedBalance[_beneficiary] == 0, "Already added"); allocatedBalance[_beneficiary] = _totalAmt; } /** @notice add multiple beneficiaries @dev Caller must be Owner Not allow Owner to alter the vesting policy @param _beneficiaries all `_beneficiaries` address @param _totalAmt Amount that corresponding `_beneficiary` can claim in total */ function addBeneficiaries( address[] calldata _beneficiaries, uint256[] calldata _totalAmt ) external onlyOwner { require( _beneficiaries.length == _totalAmt.length, "Invalid array length" ); for (uint256 i = 0; i < _beneficiaries.length; i++) { require( _beneficiaries[i] != address(0), "beneficiary must not be address zero" ); require(allocatedBalance[_beneficiaries[i]] == 0, "Already added"); allocatedBalance[_beneficiaries[i]] = _totalAmt[i]; } } /** @notice Query available amount that `_beneficiary` is able to claim at the moment @dev Caller can be ANY */ function getAvailAmt( address _beneficiary ) public view override returns (uint256 _amount) { for (uint256 i = 0; i < timelines.length; i++) { if (timelines[i] > block.timestamp) { break; } if (i == timelines.length - 1) { _amount = allocatedBalance[_beneficiary]; } else { _amount += (allocatedBalance[_beneficiary] * policies[i]) / denom; } } _amount -= claimed[_beneficiary]; } /** @notice Beneficiaries use this method to claim vesting tokens @dev Caller can be ANY Note: - Only Beneficiaries, who were added into the list, are able to claim tokens - If `_policy`, that binds to msg.sender, is not found -> revert - Previously unclaimed amounts will be accumulated */ function claim() external override nonReentrant { address _beneficiary = _msgSender(); require(allocatedBalance[_beneficiary] != 0, "Beneficiary not existed"); require(!refundRequested[_beneficiary], "Already refunded"); uint256 _amount = getAvailAmt(_beneficiary); require( _amount != 0, "Zero vesting amount. Please check your policy again" ); claimed[_beneficiary] += _amount; _releaseTokenTo(_beneficiary, block.timestamp, _amount); } /** @notice Owner uses this method to transfer remaining tokens @dev Caller must be Owner Note: - This method should be used ONLY in the case that tokens are distributed wrongly by mistaken settings */ function collect() external onlyOwner { uint256 _balance = token.balanceOf(address(this)); require(_balance != 0, "Allocations completely vested"); _releaseTokenTo(_msgSender(), block.timestamp, _balance); } function _releaseTokenTo( address _beneficiary, uint256 _now, uint256 _amount ) private { token.safeTransfer(_beneficiary, _amount); emit Released(_beneficiary, _now, _amount); } /** @notice Request a refunds @dev Caller should be a beneficiary Note: - If this method is call, beneficiary can no longer claim token - Beneficiary must not call after already claim */ function refundRequest() external { refundRequested[_msgSender()] = true; emit RefundRequested(_msgSender()); } /** @notice Cancel refund request @dev Caller should be a owner */ function cancelRefund(address _beneficiary) external onlyOwner { require(refundRequested[_beneficiary], "No refund requested"); delete refundRequested[_beneficiary]; } /** @notice remove a beneficiary @dev Caller should be a owner Note: - If this method is call, beneficiary can no longer claim token */ function removeBeneficiary(address _beneficiary) external onlyOwner { allocatedBalance[_beneficiary] = 0; } function isRefundRequested( address _beneficiary ) external view override returns (bool) { return refundRequested[_beneficiary]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"address","name":"user","type":"address"}],"name":"RefundRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"currentTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Released","type":"event"},{"inputs":[{"internalType":"address[]","name":"_beneficiaries","type":"address[]"},{"internalType":"uint256[]","name":"_totalAmt","type":"uint256[]"}],"name":"addBeneficiaries","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"uint256","name":"_totalAmt","type":"uint256"}],"name":"addBeneficiary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"}],"name":"cancelRefund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"denom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"}],"name":"getAvailAmt","outputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"}],"name":"getTotalAllocated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"}],"name":"isRefundRequested","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"policies","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refundRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"refundRequested","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"}],"name":"removeBeneficiary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_timelines","type":"uint256[]"},{"internalType":"uint256[]","name":"_policies","type":"uint256[]"},{"internalType":"uint256","name":"_denom","type":"uint256"}],"name":"setPolicy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"timelines","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"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162002def38038062002def83398181016040528101906200003791906200024e565b620000576200004b6200011860201b60201c565b6200012060201b60201c565b60018081905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000d0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000c790620002e1565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000303565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200021682620001e9565b9050919050565b620002288162000209565b81146200023457600080fd5b50565b60008151905062000248816200021d565b92915050565b600060208284031215620002675762000266620001e4565b5b6000620002778482850162000237565b91505092915050565b600082825260208201905092915050565b7f536574207a65726f206164647265737300000000000000000000000000000000600082015250565b6000620002c960108362000280565b9150620002d68262000291565b602082019050919050565b60006020820190508181036000830152620002fc81620002ba565b9050919050565b612adc80620003136000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c806396074e70116100ad578063cd03423411610071578063cd0342341461032d578063d3e8948314610337578063e522538114610367578063f2fde38b14610371578063fc0c546a1461038d5761012c565b806396074e7014610277578063a961065514610293578063b4d6abbf146102af578063c370b042146102df578063c884ef83146102fd5761012c565b806359633a1c116100f457806359633a1c146101d357806363a3b8e1146101ef578063715018a61461021f5780638da5cb5b14610229578063954f6254146102475761012c565b806335f345c81461013157806342099b72146101615780634ab894001461017d5780634e71d92d14610199578063534b01c6146101a3575b600080fd5b61014b60048036038101906101469190611a6f565b6103ab565b6040516101589190611ab7565b60405180910390f35b61017b60048036038101906101769190611b6d565b610401565b005b61019760048036038101906101929190611a6f565b610651565b005b6101a16107ab565b005b6101bd60048036038101906101b89190611a6f565b6109cf565b6040516101ca9190611c11565b60405180910390f35b6101ed60048036038101906101e89190611a6f565b610a18565b005b61020960048036038101906102049190611a6f565b610adc565b6040516102169190611ab7565b60405180910390f35b610227610afc565b005b610231610b84565b60405161023e9190611c3b565b60405180910390f35b610261600480360381019061025c9190611c56565b610bad565b60405161026e9190611c11565b60405180910390f35b610291600480360381019061028c9190611c83565b610bd1565b005b6102ad60048036038101906102a89190611d19565b610d88565b005b6102c960048036038101906102c49190611a6f565b611037565b6040516102d69190611c11565b60405180910390f35b6102e76111ba565b6040516102f49190611c11565b60405180910390f35b61031760048036038101906103129190611a6f565b6111c0565b6040516103249190611c11565b60405180910390f35b6103356111d8565b005b610351600480360381019061034c9190611c56565b611277565b60405161035e9190611c11565b60405180910390f35b61036f61129b565b005b61038b60048036038101906103869190611a6f565b61140f565b005b610395611506565b6040516103a29190611df9565b60405180910390f35b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61040961152c565b73ffffffffffffffffffffffffffffffffffffffff16610427610b84565b73ffffffffffffffffffffffffffffffffffffffff161461047d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047490611e71565b60405180910390fd5b6000838390501180156104a1575060018383905061049b9190611ec0565b85859050145b6104e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d790611f88565b60405180910390fd5b6000600190505b6005805490508110156105915760056001826105039190611fa8565b8154811061051457610513611fdc565b5b90600052602060002001546005828154811061053357610532611fdc565b5b90600052602060002001541161057e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057590612057565b60405180910390fd5b808061058990612077565b9150506104e7565b506000805b848490508110156105db578484828181106105b4576105b3611fdc565b5b90506020020135826105c69190611ec0565b915080806105d390612077565b915050610596565b5081811061061e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061590612131565b60405180910390fd5b83836003919061062f92919061199d565b5085856005919061064192919061199d565b5081600481905550505050505050565b61065961152c565b73ffffffffffffffffffffffffffffffffffffffff16610677610b84565b73ffffffffffffffffffffffffffffffffffffffff16146106cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c490611e71565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610759576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107509061219d565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b6002600154036107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e790612209565b60405180910390fd5b6002600181905550600061080261152c565b90506000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087d90612275565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a906122e1565b60405180910390fd5b600061091e82611037565b905060008103610963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095a90612373565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109b29190611ec0565b925050819055506109c4824283611534565b505060018081905550565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a2061152c565b73ffffffffffffffffffffffffffffffffffffffff16610a3e610b84565b73ffffffffffffffffffffffffffffffffffffffff1614610a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8b90611e71565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b60086020528060005260406000206000915054906101000a900460ff1681565b610b0461152c565b73ffffffffffffffffffffffffffffffffffffffff16610b22610b84565b73ffffffffffffffffffffffffffffffffffffffff1614610b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6f90611e71565b60405180910390fd5b610b8260006115d6565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058181548110610bbd57600080fd5b906000526020600020016000915090505481565b610bd961152c565b73ffffffffffffffffffffffffffffffffffffffff16610bf7610b84565b73ffffffffffffffffffffffffffffffffffffffff1614610c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4490611e71565b60405180910390fd5b81600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb4906123df565b60405180910390fd5b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d369061244b565b60405180910390fd5b81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b610d9061152c565b73ffffffffffffffffffffffffffffffffffffffff16610dae610b84565b73ffffffffffffffffffffffffffffffffffffffff1614610e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfb90611e71565b60405180910390fd5b818190508484905014610e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e43906124b7565b60405180910390fd5b60005b8484905081101561103057600073ffffffffffffffffffffffffffffffffffffffff16858583818110610e8557610e84611fdc565b5b9050602002016020810190610e9a9190611a6f565b73ffffffffffffffffffffffffffffffffffffffff1603610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee790612549565b60405180910390fd5b600060066000878785818110610f0957610f08611fdc565b5b9050602002016020810190610f1e9190611a6f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f909061244b565b60405180910390fd5b828282818110610fac57610fab611fdc565b5b9050602002013560066000878785818110610fca57610fc9611fdc565b5b9050602002016020810190610fdf9190611a6f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061102890612077565b915050610e4f565b5050505050565b600080600090505b60058054905081101561116757426005828154811061106157611060611fdc565b5b9060005260206000200154116111675760016005805490506110839190611fa8565b81036110d057600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150611154565b600454600382815481106110e7576110e6611fdc565b5b9060005260206000200154600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461113c9190612569565b61114691906125f2565b826111519190611ec0565b91505b808061115f90612077565b91505061103f565b50600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054816111b39190611fa8565b9050919050565b60045481565b60076020528060005260406000206000915090505481565b6001600860006111e661152c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f7fcea13fa52052e10e2a2ae5f7edf34eb7a59dd5778244bca78f8f0c6866bfbe61126061152c565b60405161126d9190611c3b565b60405180910390a1565b6003818154811061128757600080fd5b906000526020600020016000915090505481565b6112a361152c565b73ffffffffffffffffffffffffffffffffffffffff166112c1610b84565b73ffffffffffffffffffffffffffffffffffffffff1614611317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130e90611e71565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113749190611c3b565b602060405180830381865afa158015611391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b59190612638565b9050600081036113fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f1906126b1565b60405180910390fd5b61140c61140561152c565b4283611534565b50565b61141761152c565b73ffffffffffffffffffffffffffffffffffffffff16611435610b84565b73ffffffffffffffffffffffffffffffffffffffff161461148b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148290611e71565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f190612743565b60405180910390fd5b611503816115d6565b50565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b6115818382600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661169a9092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167f82e416ba72d10e709b5de7ac16f5f49ff1d94f22d55bf582d353d3c313a1e8dd83836040516115c9929190612763565b60405180910390a2505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61171b8363a9059cbb60e01b84846040516024016116b992919061278c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611720565b505050565b6000611782826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117e79092919063ffffffff16565b90506000815111156117e257808060200190518101906117a291906127e1565b6117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d890612880565b60405180910390fd5b5b505050565b60606117f684846000856117ff565b90509392505050565b606082471015611844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183b90612912565b60405180910390fd5b61184d85611913565b61188c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118839061297e565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516118b59190612a18565b60006040518083038185875af1925050503d80600081146118f2576040519150601f19603f3d011682016040523d82523d6000602084013e6118f7565b606091505b5091509150611907828286611936565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060831561194657829050611996565b6000835111156119595782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d9190612a84565b60405180910390fd5b9392505050565b8280548282559060005260206000209081019282156119d9579160200282015b828111156119d85782358255916020019190600101906119bd565b5b5090506119e691906119ea565b5090565b5b80821115611a035760008160009055506001016119eb565b5090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a3c82611a11565b9050919050565b611a4c81611a31565b8114611a5757600080fd5b50565b600081359050611a6981611a43565b92915050565b600060208284031215611a8557611a84611a07565b5b6000611a9384828501611a5a565b91505092915050565b60008115159050919050565b611ab181611a9c565b82525050565b6000602082019050611acc6000830184611aa8565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611af757611af6611ad2565b5b8235905067ffffffffffffffff811115611b1457611b13611ad7565b5b602083019150836020820283011115611b3057611b2f611adc565b5b9250929050565b6000819050919050565b611b4a81611b37565b8114611b5557600080fd5b50565b600081359050611b6781611b41565b92915050565b600080600080600060608688031215611b8957611b88611a07565b5b600086013567ffffffffffffffff811115611ba757611ba6611a0c565b5b611bb388828901611ae1565b9550955050602086013567ffffffffffffffff811115611bd657611bd5611a0c565b5b611be288828901611ae1565b93509350506040611bf588828901611b58565b9150509295509295909350565b611c0b81611b37565b82525050565b6000602082019050611c266000830184611c02565b92915050565b611c3581611a31565b82525050565b6000602082019050611c506000830184611c2c565b92915050565b600060208284031215611c6c57611c6b611a07565b5b6000611c7a84828501611b58565b91505092915050565b60008060408385031215611c9a57611c99611a07565b5b6000611ca885828601611a5a565b9250506020611cb985828601611b58565b9150509250929050565b60008083601f840112611cd957611cd8611ad2565b5b8235905067ffffffffffffffff811115611cf657611cf5611ad7565b5b602083019150836020820283011115611d1257611d11611adc565b5b9250929050565b60008060008060408587031215611d3357611d32611a07565b5b600085013567ffffffffffffffff811115611d5157611d50611a0c565b5b611d5d87828801611cc3565b9450945050602085013567ffffffffffffffff811115611d8057611d7f611a0c565b5b611d8c87828801611ae1565b925092505092959194509250565b6000819050919050565b6000611dbf611dba611db584611a11565b611d9a565b611a11565b9050919050565b6000611dd182611da4565b9050919050565b6000611de382611dc6565b9050919050565b611df381611dd8565b82525050565b6000602082019050611e0e6000830184611dea565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611e5b602083611e14565b9150611e6682611e25565b602082019050919050565b60006020820190508181036000830152611e8a81611e4e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611ecb82611b37565b9150611ed683611b37565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611f0b57611f0a611e91565b5b828201905092915050565b7f506f6c69637920616e642074696d656c696e65206c656e677468206d69736d6160008201527f7463680000000000000000000000000000000000000000000000000000000000602082015250565b6000611f72602383611e14565b9150611f7d82611f16565b604082019050919050565b60006020820190508181036000830152611fa181611f65565b9050919050565b6000611fb382611b37565b9150611fbe83611b37565b925082821015611fd157611fd0611e91565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f54696d656c696e65206d75737420626520696e6372656173696e670000000000600082015250565b6000612041601b83611e14565b915061204c8261200b565b602082019050919050565b6000602082019050818103600083015261207081612034565b9050919050565b600061208282611b37565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036120b4576120b3611e91565b5b600182019050919050565b7f506f6c6963696573206d757374206e6f7420657863656565642064656e6f6d6960008201527f6e61746f72000000000000000000000000000000000000000000000000000000602082015250565b600061211b602583611e14565b9150612126826120bf565b604082019050919050565b6000602082019050818103600083015261214a8161210e565b9050919050565b7f4e6f20726566756e642072657175657374656400000000000000000000000000600082015250565b6000612187601383611e14565b915061219282612151565b602082019050919050565b600060208201905081810360008301526121b68161217a565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006121f3601f83611e14565b91506121fe826121bd565b602082019050919050565b60006020820190508181036000830152612222816121e6565b9050919050565b7f42656e6566696369617279206e6f742065786973746564000000000000000000600082015250565b600061225f601783611e14565b915061226a82612229565b602082019050919050565b6000602082019050818103600083015261228e81612252565b9050919050565b7f416c726561647920726566756e64656400000000000000000000000000000000600082015250565b60006122cb601083611e14565b91506122d682612295565b602082019050919050565b600060208201905081810360008301526122fa816122be565b9050919050565b7f5a65726f2076657374696e6720616d6f756e742e20506c65617365206368656360008201527f6b20796f757220706f6c69637920616761696e00000000000000000000000000602082015250565b600061235d603383611e14565b915061236882612301565b604082019050919050565b6000602082019050818103600083015261238c81612350565b9050919050565b7f536574207a65726f206164647265737300000000000000000000000000000000600082015250565b60006123c9601083611e14565b91506123d482612393565b602082019050919050565b600060208201905081810360008301526123f8816123bc565b9050919050565b7f416c726561647920616464656400000000000000000000000000000000000000600082015250565b6000612435600d83611e14565b9150612440826123ff565b602082019050919050565b6000602082019050818103600083015261246481612428565b9050919050565b7f496e76616c6964206172726179206c656e677468000000000000000000000000600082015250565b60006124a1601483611e14565b91506124ac8261246b565b602082019050919050565b600060208201905081810360008301526124d081612494565b9050919050565b7f62656e6566696369617279206d757374206e6f7420626520616464726573732060008201527f7a65726f00000000000000000000000000000000000000000000000000000000602082015250565b6000612533602483611e14565b915061253e826124d7565b604082019050919050565b6000602082019050818103600083015261256281612526565b9050919050565b600061257482611b37565b915061257f83611b37565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156125b8576125b7611e91565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006125fd82611b37565b915061260883611b37565b925082612618576126176125c3565b5b828204905092915050565b60008151905061263281611b41565b92915050565b60006020828403121561264e5761264d611a07565b5b600061265c84828501612623565b91505092915050565b7f416c6c6f636174696f6e7320636f6d706c6574656c7920766573746564000000600082015250565b600061269b601d83611e14565b91506126a682612665565b602082019050919050565b600060208201905081810360008301526126ca8161268e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061272d602683611e14565b9150612738826126d1565b604082019050919050565b6000602082019050818103600083015261275c81612720565b9050919050565b60006040820190506127786000830185611c02565b6127856020830184611c02565b9392505050565b60006040820190506127a16000830185611c2c565b6127ae6020830184611c02565b9392505050565b6127be81611a9c565b81146127c957600080fd5b50565b6000815190506127db816127b5565b92915050565b6000602082840312156127f7576127f6611a07565b5b6000612805848285016127cc565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b600061286a602a83611e14565b91506128758261280e565b604082019050919050565b600060208201905081810360008301526128998161285d565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b60006128fc602683611e14565b9150612907826128a0565b604082019050919050565b6000602082019050818103600083015261292b816128ef565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000612968601d83611e14565b915061297382612932565b602082019050919050565b600060208201905081810360008301526129978161295b565b9050919050565b600081519050919050565b600081905092915050565b60005b838110156129d25780820151818401526020810190506129b7565b838111156129e1576000848401525b50505050565b60006129f28261299e565b6129fc81856129a9565b9350612a0c8185602086016129b4565b80840191505092915050565b6000612a2482846129e7565b915081905092915050565b600081519050919050565b6000601f19601f8301169050919050565b6000612a5682612a2f565b612a608185611e14565b9350612a708185602086016129b4565b612a7981612a3a565b840191505092915050565b60006020820190508181036000830152612a9e8184612a4b565b90509291505056fea2646970667358221220346b107b71a6bb603c0a50ff0dfa24d7c19832296f70d300f6161c6d8c7dcc9e64736f6c634300080d003300000000000000000000000012ed0641242e4c6c220e3ca8f616e9d5470ac99a
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061012c5760003560e01c806396074e70116100ad578063cd03423411610071578063cd0342341461032d578063d3e8948314610337578063e522538114610367578063f2fde38b14610371578063fc0c546a1461038d5761012c565b806396074e7014610277578063a961065514610293578063b4d6abbf146102af578063c370b042146102df578063c884ef83146102fd5761012c565b806359633a1c116100f457806359633a1c146101d357806363a3b8e1146101ef578063715018a61461021f5780638da5cb5b14610229578063954f6254146102475761012c565b806335f345c81461013157806342099b72146101615780634ab894001461017d5780634e71d92d14610199578063534b01c6146101a3575b600080fd5b61014b60048036038101906101469190611a6f565b6103ab565b6040516101589190611ab7565b60405180910390f35b61017b60048036038101906101769190611b6d565b610401565b005b61019760048036038101906101929190611a6f565b610651565b005b6101a16107ab565b005b6101bd60048036038101906101b89190611a6f565b6109cf565b6040516101ca9190611c11565b60405180910390f35b6101ed60048036038101906101e89190611a6f565b610a18565b005b61020960048036038101906102049190611a6f565b610adc565b6040516102169190611ab7565b60405180910390f35b610227610afc565b005b610231610b84565b60405161023e9190611c3b565b60405180910390f35b610261600480360381019061025c9190611c56565b610bad565b60405161026e9190611c11565b60405180910390f35b610291600480360381019061028c9190611c83565b610bd1565b005b6102ad60048036038101906102a89190611d19565b610d88565b005b6102c960048036038101906102c49190611a6f565b611037565b6040516102d69190611c11565b60405180910390f35b6102e76111ba565b6040516102f49190611c11565b60405180910390f35b61031760048036038101906103129190611a6f565b6111c0565b6040516103249190611c11565b60405180910390f35b6103356111d8565b005b610351600480360381019061034c9190611c56565b611277565b60405161035e9190611c11565b60405180910390f35b61036f61129b565b005b61038b60048036038101906103869190611a6f565b61140f565b005b610395611506565b6040516103a29190611df9565b60405180910390f35b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61040961152c565b73ffffffffffffffffffffffffffffffffffffffff16610427610b84565b73ffffffffffffffffffffffffffffffffffffffff161461047d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047490611e71565b60405180910390fd5b6000838390501180156104a1575060018383905061049b9190611ec0565b85859050145b6104e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d790611f88565b60405180910390fd5b6000600190505b6005805490508110156105915760056001826105039190611fa8565b8154811061051457610513611fdc565b5b90600052602060002001546005828154811061053357610532611fdc565b5b90600052602060002001541161057e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057590612057565b60405180910390fd5b808061058990612077565b9150506104e7565b506000805b848490508110156105db578484828181106105b4576105b3611fdc565b5b90506020020135826105c69190611ec0565b915080806105d390612077565b915050610596565b5081811061061e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061590612131565b60405180910390fd5b83836003919061062f92919061199d565b5085856005919061064192919061199d565b5081600481905550505050505050565b61065961152c565b73ffffffffffffffffffffffffffffffffffffffff16610677610b84565b73ffffffffffffffffffffffffffffffffffffffff16146106cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c490611e71565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610759576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107509061219d565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b6002600154036107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e790612209565b60405180910390fd5b6002600181905550600061080261152c565b90506000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087d90612275565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a906122e1565b60405180910390fd5b600061091e82611037565b905060008103610963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095a90612373565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109b29190611ec0565b925050819055506109c4824283611534565b505060018081905550565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a2061152c565b73ffffffffffffffffffffffffffffffffffffffff16610a3e610b84565b73ffffffffffffffffffffffffffffffffffffffff1614610a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8b90611e71565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b60086020528060005260406000206000915054906101000a900460ff1681565b610b0461152c565b73ffffffffffffffffffffffffffffffffffffffff16610b22610b84565b73ffffffffffffffffffffffffffffffffffffffff1614610b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6f90611e71565b60405180910390fd5b610b8260006115d6565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058181548110610bbd57600080fd5b906000526020600020016000915090505481565b610bd961152c565b73ffffffffffffffffffffffffffffffffffffffff16610bf7610b84565b73ffffffffffffffffffffffffffffffffffffffff1614610c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4490611e71565b60405180910390fd5b81600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb4906123df565b60405180910390fd5b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d369061244b565b60405180910390fd5b81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b610d9061152c565b73ffffffffffffffffffffffffffffffffffffffff16610dae610b84565b73ffffffffffffffffffffffffffffffffffffffff1614610e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfb90611e71565b60405180910390fd5b818190508484905014610e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e43906124b7565b60405180910390fd5b60005b8484905081101561103057600073ffffffffffffffffffffffffffffffffffffffff16858583818110610e8557610e84611fdc565b5b9050602002016020810190610e9a9190611a6f565b73ffffffffffffffffffffffffffffffffffffffff1603610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee790612549565b60405180910390fd5b600060066000878785818110610f0957610f08611fdc565b5b9050602002016020810190610f1e9190611a6f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f909061244b565b60405180910390fd5b828282818110610fac57610fab611fdc565b5b9050602002013560066000878785818110610fca57610fc9611fdc565b5b9050602002016020810190610fdf9190611a6f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061102890612077565b915050610e4f565b5050505050565b600080600090505b60058054905081101561116757426005828154811061106157611060611fdc565b5b9060005260206000200154116111675760016005805490506110839190611fa8565b81036110d057600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150611154565b600454600382815481106110e7576110e6611fdc565b5b9060005260206000200154600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461113c9190612569565b61114691906125f2565b826111519190611ec0565b91505b808061115f90612077565b91505061103f565b50600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054816111b39190611fa8565b9050919050565b60045481565b60076020528060005260406000206000915090505481565b6001600860006111e661152c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f7fcea13fa52052e10e2a2ae5f7edf34eb7a59dd5778244bca78f8f0c6866bfbe61126061152c565b60405161126d9190611c3b565b60405180910390a1565b6003818154811061128757600080fd5b906000526020600020016000915090505481565b6112a361152c565b73ffffffffffffffffffffffffffffffffffffffff166112c1610b84565b73ffffffffffffffffffffffffffffffffffffffff1614611317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130e90611e71565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113749190611c3b565b602060405180830381865afa158015611391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b59190612638565b9050600081036113fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f1906126b1565b60405180910390fd5b61140c61140561152c565b4283611534565b50565b61141761152c565b73ffffffffffffffffffffffffffffffffffffffff16611435610b84565b73ffffffffffffffffffffffffffffffffffffffff161461148b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148290611e71565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f190612743565b60405180910390fd5b611503816115d6565b50565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b6115818382600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661169a9092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167f82e416ba72d10e709b5de7ac16f5f49ff1d94f22d55bf582d353d3c313a1e8dd83836040516115c9929190612763565b60405180910390a2505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61171b8363a9059cbb60e01b84846040516024016116b992919061278c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611720565b505050565b6000611782826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117e79092919063ffffffff16565b90506000815111156117e257808060200190518101906117a291906127e1565b6117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d890612880565b60405180910390fd5b5b505050565b60606117f684846000856117ff565b90509392505050565b606082471015611844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183b90612912565b60405180910390fd5b61184d85611913565b61188c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118839061297e565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516118b59190612a18565b60006040518083038185875af1925050503d80600081146118f2576040519150601f19603f3d011682016040523d82523d6000602084013e6118f7565b606091505b5091509150611907828286611936565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060831561194657829050611996565b6000835111156119595782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d9190612a84565b60405180910390fd5b9392505050565b8280548282559060005260206000209081019282156119d9579160200282015b828111156119d85782358255916020019190600101906119bd565b5b5090506119e691906119ea565b5090565b5b80821115611a035760008160009055506001016119eb565b5090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a3c82611a11565b9050919050565b611a4c81611a31565b8114611a5757600080fd5b50565b600081359050611a6981611a43565b92915050565b600060208284031215611a8557611a84611a07565b5b6000611a9384828501611a5a565b91505092915050565b60008115159050919050565b611ab181611a9c565b82525050565b6000602082019050611acc6000830184611aa8565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611af757611af6611ad2565b5b8235905067ffffffffffffffff811115611b1457611b13611ad7565b5b602083019150836020820283011115611b3057611b2f611adc565b5b9250929050565b6000819050919050565b611b4a81611b37565b8114611b5557600080fd5b50565b600081359050611b6781611b41565b92915050565b600080600080600060608688031215611b8957611b88611a07565b5b600086013567ffffffffffffffff811115611ba757611ba6611a0c565b5b611bb388828901611ae1565b9550955050602086013567ffffffffffffffff811115611bd657611bd5611a0c565b5b611be288828901611ae1565b93509350506040611bf588828901611b58565b9150509295509295909350565b611c0b81611b37565b82525050565b6000602082019050611c266000830184611c02565b92915050565b611c3581611a31565b82525050565b6000602082019050611c506000830184611c2c565b92915050565b600060208284031215611c6c57611c6b611a07565b5b6000611c7a84828501611b58565b91505092915050565b60008060408385031215611c9a57611c99611a07565b5b6000611ca885828601611a5a565b9250506020611cb985828601611b58565b9150509250929050565b60008083601f840112611cd957611cd8611ad2565b5b8235905067ffffffffffffffff811115611cf657611cf5611ad7565b5b602083019150836020820283011115611d1257611d11611adc565b5b9250929050565b60008060008060408587031215611d3357611d32611a07565b5b600085013567ffffffffffffffff811115611d5157611d50611a0c565b5b611d5d87828801611cc3565b9450945050602085013567ffffffffffffffff811115611d8057611d7f611a0c565b5b611d8c87828801611ae1565b925092505092959194509250565b6000819050919050565b6000611dbf611dba611db584611a11565b611d9a565b611a11565b9050919050565b6000611dd182611da4565b9050919050565b6000611de382611dc6565b9050919050565b611df381611dd8565b82525050565b6000602082019050611e0e6000830184611dea565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611e5b602083611e14565b9150611e6682611e25565b602082019050919050565b60006020820190508181036000830152611e8a81611e4e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611ecb82611b37565b9150611ed683611b37565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611f0b57611f0a611e91565b5b828201905092915050565b7f506f6c69637920616e642074696d656c696e65206c656e677468206d69736d6160008201527f7463680000000000000000000000000000000000000000000000000000000000602082015250565b6000611f72602383611e14565b9150611f7d82611f16565b604082019050919050565b60006020820190508181036000830152611fa181611f65565b9050919050565b6000611fb382611b37565b9150611fbe83611b37565b925082821015611fd157611fd0611e91565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f54696d656c696e65206d75737420626520696e6372656173696e670000000000600082015250565b6000612041601b83611e14565b915061204c8261200b565b602082019050919050565b6000602082019050818103600083015261207081612034565b9050919050565b600061208282611b37565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036120b4576120b3611e91565b5b600182019050919050565b7f506f6c6963696573206d757374206e6f7420657863656565642064656e6f6d6960008201527f6e61746f72000000000000000000000000000000000000000000000000000000602082015250565b600061211b602583611e14565b9150612126826120bf565b604082019050919050565b6000602082019050818103600083015261214a8161210e565b9050919050565b7f4e6f20726566756e642072657175657374656400000000000000000000000000600082015250565b6000612187601383611e14565b915061219282612151565b602082019050919050565b600060208201905081810360008301526121b68161217a565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006121f3601f83611e14565b91506121fe826121bd565b602082019050919050565b60006020820190508181036000830152612222816121e6565b9050919050565b7f42656e6566696369617279206e6f742065786973746564000000000000000000600082015250565b600061225f601783611e14565b915061226a82612229565b602082019050919050565b6000602082019050818103600083015261228e81612252565b9050919050565b7f416c726561647920726566756e64656400000000000000000000000000000000600082015250565b60006122cb601083611e14565b91506122d682612295565b602082019050919050565b600060208201905081810360008301526122fa816122be565b9050919050565b7f5a65726f2076657374696e6720616d6f756e742e20506c65617365206368656360008201527f6b20796f757220706f6c69637920616761696e00000000000000000000000000602082015250565b600061235d603383611e14565b915061236882612301565b604082019050919050565b6000602082019050818103600083015261238c81612350565b9050919050565b7f536574207a65726f206164647265737300000000000000000000000000000000600082015250565b60006123c9601083611e14565b91506123d482612393565b602082019050919050565b600060208201905081810360008301526123f8816123bc565b9050919050565b7f416c726561647920616464656400000000000000000000000000000000000000600082015250565b6000612435600d83611e14565b9150612440826123ff565b602082019050919050565b6000602082019050818103600083015261246481612428565b9050919050565b7f496e76616c6964206172726179206c656e677468000000000000000000000000600082015250565b60006124a1601483611e14565b91506124ac8261246b565b602082019050919050565b600060208201905081810360008301526124d081612494565b9050919050565b7f62656e6566696369617279206d757374206e6f7420626520616464726573732060008201527f7a65726f00000000000000000000000000000000000000000000000000000000602082015250565b6000612533602483611e14565b915061253e826124d7565b604082019050919050565b6000602082019050818103600083015261256281612526565b9050919050565b600061257482611b37565b915061257f83611b37565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156125b8576125b7611e91565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006125fd82611b37565b915061260883611b37565b925082612618576126176125c3565b5b828204905092915050565b60008151905061263281611b41565b92915050565b60006020828403121561264e5761264d611a07565b5b600061265c84828501612623565b91505092915050565b7f416c6c6f636174696f6e7320636f6d706c6574656c7920766573746564000000600082015250565b600061269b601d83611e14565b91506126a682612665565b602082019050919050565b600060208201905081810360008301526126ca8161268e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061272d602683611e14565b9150612738826126d1565b604082019050919050565b6000602082019050818103600083015261275c81612720565b9050919050565b60006040820190506127786000830185611c02565b6127856020830184611c02565b9392505050565b60006040820190506127a16000830185611c2c565b6127ae6020830184611c02565b9392505050565b6127be81611a9c565b81146127c957600080fd5b50565b6000815190506127db816127b5565b92915050565b6000602082840312156127f7576127f6611a07565b5b6000612805848285016127cc565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b600061286a602a83611e14565b91506128758261280e565b604082019050919050565b600060208201905081810360008301526128998161285d565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b60006128fc602683611e14565b9150612907826128a0565b604082019050919050565b6000602082019050818103600083015261292b816128ef565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000612968601d83611e14565b915061297382612932565b602082019050919050565b600060208201905081810360008301526129978161295b565b9050919050565b600081519050919050565b600081905092915050565b60005b838110156129d25780820151818401526020810190506129b7565b838111156129e1576000848401525b50505050565b60006129f28261299e565b6129fc81856129a9565b9350612a0c8185602086016129b4565b80840191505092915050565b6000612a2482846129e7565b915081905092915050565b600081519050919050565b6000601f19601f8301169050919050565b6000612a5682612a2f565b612a608185611e14565b9350612a708185602086016129b4565b612a7981612a3a565b840191505092915050565b60006020820190508181036000830152612a9e8184612a4b565b90509291505056fea2646970667358221220346b107b71a6bb603c0a50ff0dfa24d7c19832296f70d300f6161c6d8c7dcc9e64736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000012ed0641242e4c6c220e3ca8f616e9d5470ac99a
-----Decoded View---------------
Arg [0] : _token (address): 0x12Ed0641242e4C6c220e3ca8F616E9d5470AC99a
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000012ed0641242e4c6c220e3ca8f616e9d5470ac99a
Deployed Bytecode Sourcemap
21809:7242:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28890:158;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23006:843;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28372:190;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26586:545;;;:::i;:::-;;23857:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28761:121;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22143:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17717:103;;;:::i;:::-;;17066:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21999:26;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24292:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24861:629;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25638:584;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21972:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22085:51;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28133:136;;;:::i;:::-;;21940:25;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27385:241;;;:::i;:::-;;17975:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21914:19;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28890:158;28987:4;29011:15;:29;29027:12;29011:29;;;;;;;;;;;;;;;;;;;;;;;;;29004:36;;28890:158;;;:::o;23006:843::-;17297:12;:10;:12::i;:::-;17286:23;;:7;:5;:7::i;:::-;:23;;;17278:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23207:1:::1;23188:9;;:16;;:20;:65;;;;;23252:1;23233:9;;:16;;:20;;;;:::i;:::-;23212:10;;:17;;:41;23188:65;23166:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;23334:9;23346:1;23334:13;;23329:194;23353:9;:16;;;;23349:1;:20;23329:194;;;23432:9;23446:1;23442;:5;;;;:::i;:::-;23432:16;;;;;;;;:::i;:::-;;;;;;;;;;23417:9;23427:1;23417:12;;;;;;;;:::i;:::-;;;;;;;;;;:31;23391:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;23371:3;;;;;:::i;:::-;;;;23329:194;;;;23535:19;23574:9:::0;23569:101:::1;23593:9;;:16;;23589:1;:20;23569:101;;;23646:9;;23656:1;23646:12;;;;;;;:::i;:::-;;;;;;;;23631:27;;;;;:::i;:::-;;;23611:3;;;;;:::i;:::-;;;;23569:101;;;;23702:6;23688:11;:20;23680:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;23774:9;;23763:8;:20;;;;;;;:::i;:::-;;23806:10;;23794:9;:22;;;;;;;:::i;:::-;;23835:6;23827:5;:14;;;;23155:694;23006:843:::0;;;;;:::o;28372:190::-;17297:12;:10;:12::i;:::-;17286:23;;:7;:5;:7::i;:::-;:23;;;17278:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28454:15:::1;:29;28470:12;28454:29;;;;;;;;;;;;;;;;;;;;;;;;;28446:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28525:15;:29;28541:12;28525:29;;;;;;;;;;;;;;;;28518:36;;;;;;;;;;;28372:190:::0;:::o;26586:545::-;20285:1;20883:7;;:19;20875:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;20285:1;21016:7;:18;;;;26645:20:::1;26668:12;:10;:12::i;:::-;26645:35;;26733:1;26699:16;:30;26716:12;26699:30;;;;;;;;;;;;;;;;:35:::0;26691:71:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26782:15;:29;26798:12;26782:29;;;;;;;;;;;;;;;;;;;;;;;;;26781:30;26773:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;26845:15;26863:25;26875:12;26863:11;:25::i;:::-;26845:43;;26932:1;26921:7;:12:::0;26899:113:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27050:7;27025;:21;27033:12;27025:21;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;27068:55;27084:12;27098:15;27115:7;27068:15;:55::i;:::-;26634:497;;20241:1:::0;21195:7;:22;;;;26586:545::o;23857:162::-;23954:7;23981:16;:30;23998:12;23981:30;;;;;;;;;;;;;;;;23974:37;;23857:162;;;:::o;28761:121::-;17297:12;:10;:12::i;:::-;17286:23;;:7;:5;:7::i;:::-;:23;;;17278:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28873:1:::1;28840:16;:30;28857:12;28840:30;;;;;;;;;;;;;;;:34;;;;28761:121:::0;:::o;22143:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;17717:103::-;17297:12;:10;:12::i;:::-;17286:23;;:7;:5;:7::i;:::-;:23;;;17278:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17782:30:::1;17809:1;17782:18;:30::i;:::-;17717:103::o:0;17066:87::-;17112:7;17139:6;;;;;;;;;;;17132:13;;17066:87;:::o;21999:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24292:265::-;17297:12;:10;:12::i;:::-;17286:23;;:7;:5;:7::i;:::-;:23;;;17278:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24410:12:::1;22391:1;22374:19;;:5;:19;;::::0;22366:48:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24477:1:::2;24443:16;:30;24460:12;24443:30;;;;;;;;;;;;;;;;:35;24435:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;24540:9;24507:16;:30;24524:12;24507:30;;;;;;;;;;;;;;;:42;;;;17357:1:::1;24292:265:::0;;:::o;24861:629::-;17297:12;:10;:12::i;:::-;17286:23;;:7;:5;:7::i;:::-;:23;;;17278:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25054:9:::1;;:16;;25029:14;;:21;;:41;25007:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25134:9;25129:354;25153:14;;:21;;25149:1;:25;25129:354;;;25251:1;25222:31;;:14;;25237:1;25222:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:31;;::::0;25196:129:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25387:1;25348:16;:35;25365:14;;25380:1;25365:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;25348:35;;;;;;;;;;;;;;;;:40;25340:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25459:9;;25469:1;25459:12;;;;;;;:::i;:::-;;;;;;;;25421:16;:35;25438:14;;25453:1;25438:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;25421:35;;;;;;;;;;;;;;;:50;;;;25176:3;;;;;:::i;:::-;;;;25129:354;;;;24861:629:::0;;;;:::o;25638:584::-;25727:15;25760:9;25772:1;25760:13;;25755:417;25779:9;:16;;;;25775:1;:20;25755:417;;;25836:15;25821:9;25831:1;25821:12;;;;;;;;:::i;:::-;;;;;;;;;;:30;25872:5;25817:76;25935:1;25916:9;:16;;;;:20;;;;:::i;:::-;25911:1;:25;25907:254;;25967:16;:30;25984:12;25967:30;;;;;;;;;;;;;;;;25957:40;;25907:254;;;26140:5;;26104:8;26113:1;26104:11;;;;;;;;:::i;:::-;;;;;;;;;;26071:16;:30;26088:12;26071:30;;;;;;;;;;;;;;;;:44;;;;:::i;:::-;26070:75;;;;:::i;:::-;26038:107;;;;;:::i;:::-;;;25907:254;25797:3;;;;;:::i;:::-;;;;25755:417;;;;26193:7;:21;26201:12;26193:21;;;;;;;;;;;;;;;;26182:32;;;;;:::i;:::-;;;25638:584;;;:::o;21972:20::-;;;;:::o;22085:51::-;;;;;;;;;;;;;;;;;:::o;28133:136::-;28210:4;28178:15;:29;28194:12;:10;:12::i;:::-;28178:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;28232:29;28248:12;:10;:12::i;:::-;28232:29;;;;;;:::i;:::-;;;;;;;;28133:136::o;21940:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27385:241::-;17297:12;:10;:12::i;:::-;17286:23;;:7;:5;:7::i;:::-;:23;;;17278:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27434:16:::1;27453:5;;;;;;;;;;;:15;;;27477:4;27453:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27434:49;;27514:1;27502:8;:13:::0;27494:55:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27562:56;27578:12;:10;:12::i;:::-;27592:15;27609:8;27562:15;:56::i;:::-;27423:203;27385:241::o:0;17975:201::-;17297:12;:10;:12::i;:::-;17286:23;;:7;:5;:7::i;:::-;:23;;;17278:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18084:1:::1;18064:22;;:8;:22;;::::0;18056:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18140:28;18159:8;18140:18;:28::i;:::-;17975:201:::0;:::o;21914:19::-;;;;;;;;;;;;;:::o;15843:98::-;15896:7;15923:10;15916:17;;15843:98;:::o;27634:235::-;27765:41;27784:12;27798:7;27765:5;;;;;;;;;;;:18;;;;:41;;;;;:::i;:::-;27833:12;27824:37;;;27847:4;27853:7;27824:37;;;;;;;:::i;:::-;;;;;;;;27634:235;;;:::o;18336:191::-;18410:16;18429:6;;;;;;;;;;;18410:25;;18455:8;18446:6;;:17;;;;;;;;;;;;;;;;;;18510:8;18479:40;;18500:8;18479:40;;;;;;;;;;;;18399:128;18336:191;:::o;11918:211::-;12035:86;12055:5;12085:23;;;12110:2;12114:5;12062:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12035:19;:86::i;:::-;11918:211;;;:::o;14491:716::-;14915:23;14941:69;14969:4;14941:69;;;;;;;;;;;;;;;;;14949:5;14941:27;;;;:69;;;;;:::i;:::-;14915:95;;15045:1;15025:10;:17;:21;15021:179;;;15122:10;15111:30;;;;;;;;;;;;:::i;:::-;15103:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;15021:179;14561:646;14491:716;;:::o;6762:229::-;6899:12;6931:52;6953:6;6961:4;6967:1;6970:12;6931:21;:52::i;:::-;6924:59;;6762:229;;;;;:::o;7882:510::-;8052:12;8110:5;8085:21;:30;;8077:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;8177:18;8188:6;8177:10;:18::i;:::-;8169:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;8243:12;8257:23;8284:6;:11;;8303:5;8310:4;8284:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8242:73;;;;8333:51;8350:7;8359:10;8371:12;8333:16;:51::i;:::-;8326:58;;;;7882:510;;;;;;:::o;4017:326::-;4077:4;4334:1;4312:7;:19;;;:23;4305:30;;4017:326;;;:::o;10568:712::-;10718:12;10747:7;10743:530;;;10778:10;10771:17;;;;10743:530;10912:1;10892:10;:17;:21;10888:374;;;11090:10;11084:17;11151:15;11138:10;11134:2;11130:19;11123:44;10888:374;11233:12;11226:20;;;;;;;;;;;:::i;:::-;;;;;;;;10568:712;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:90::-;1210:7;1253:5;1246:13;1239:21;1228:32;;1176:90;;;:::o;1272:109::-;1353:21;1368:5;1353:21;:::i;:::-;1348:3;1341:34;1272:109;;:::o;1387:210::-;1474:4;1512:2;1501:9;1497:18;1489:26;;1525:65;1587:1;1576:9;1572:17;1563:6;1525:65;:::i;:::-;1387:210;;;;:::o;1603:117::-;1712:1;1709;1702:12;1726:117;1835:1;1832;1825:12;1849:117;1958:1;1955;1948:12;1989:568;2062:8;2072:6;2122:3;2115:4;2107:6;2103:17;2099:27;2089:122;;2130:79;;:::i;:::-;2089:122;2243:6;2230:20;2220:30;;2273:18;2265:6;2262:30;2259:117;;;2295:79;;:::i;:::-;2259:117;2409:4;2401:6;2397:17;2385:29;;2463:3;2455:4;2447:6;2443:17;2433:8;2429:32;2426:41;2423:128;;;2470:79;;:::i;:::-;2423:128;1989:568;;;;;:::o;2563:77::-;2600:7;2629:5;2618:16;;2563:77;;;:::o;2646:122::-;2719:24;2737:5;2719:24;:::i;:::-;2712:5;2709:35;2699:63;;2758:1;2755;2748:12;2699:63;2646:122;:::o;2774:139::-;2820:5;2858:6;2845:20;2836:29;;2874:33;2901:5;2874:33;:::i;:::-;2774:139;;;;:::o;2919:1079::-;3050:6;3058;3066;3074;3082;3131:2;3119:9;3110:7;3106:23;3102:32;3099:119;;;3137:79;;:::i;:::-;3099:119;3285:1;3274:9;3270:17;3257:31;3315:18;3307:6;3304:30;3301:117;;;3337:79;;:::i;:::-;3301:117;3450:80;3522:7;3513:6;3502:9;3498:22;3450:80;:::i;:::-;3432:98;;;;3228:312;3607:2;3596:9;3592:18;3579:32;3638:18;3630:6;3627:30;3624:117;;;3660:79;;:::i;:::-;3624:117;3773:80;3845:7;3836:6;3825:9;3821:22;3773:80;:::i;:::-;3755:98;;;;3550:313;3902:2;3928:53;3973:7;3964:6;3953:9;3949:22;3928:53;:::i;:::-;3918:63;;3873:118;2919:1079;;;;;;;;:::o;4004:118::-;4091:24;4109:5;4091:24;:::i;:::-;4086:3;4079:37;4004:118;;:::o;4128:222::-;4221:4;4259:2;4248:9;4244:18;4236:26;;4272:71;4340:1;4329:9;4325:17;4316:6;4272:71;:::i;:::-;4128:222;;;;:::o;4356:118::-;4443:24;4461:5;4443:24;:::i;:::-;4438:3;4431:37;4356:118;;:::o;4480:222::-;4573:4;4611:2;4600:9;4596:18;4588:26;;4624:71;4692:1;4681:9;4677:17;4668:6;4624:71;:::i;:::-;4480:222;;;;:::o;4708:329::-;4767:6;4816:2;4804:9;4795:7;4791:23;4787:32;4784:119;;;4822:79;;:::i;:::-;4784:119;4942:1;4967:53;5012:7;5003:6;4992:9;4988:22;4967:53;:::i;:::-;4957:63;;4913:117;4708:329;;;;:::o;5043:474::-;5111:6;5119;5168:2;5156:9;5147:7;5143:23;5139:32;5136:119;;;5174:79;;:::i;:::-;5136:119;5294:1;5319:53;5364:7;5355:6;5344:9;5340:22;5319:53;:::i;:::-;5309:63;;5265:117;5421:2;5447:53;5492:7;5483:6;5472:9;5468:22;5447:53;:::i;:::-;5437:63;;5392:118;5043:474;;;;;:::o;5540:568::-;5613:8;5623:6;5673:3;5666:4;5658:6;5654:17;5650:27;5640:122;;5681:79;;:::i;:::-;5640:122;5794:6;5781:20;5771:30;;5824:18;5816:6;5813:30;5810:117;;;5846:79;;:::i;:::-;5810:117;5960:4;5952:6;5948:17;5936:29;;6014:3;6006:4;5998:6;5994:17;5984:8;5980:32;5977:41;5974:128;;;6021:79;;:::i;:::-;5974:128;5540:568;;;;;:::o;6114:934::-;6236:6;6244;6252;6260;6309:2;6297:9;6288:7;6284:23;6280:32;6277:119;;;6315:79;;:::i;:::-;6277:119;6463:1;6452:9;6448:17;6435:31;6493:18;6485:6;6482:30;6479:117;;;6515:79;;:::i;:::-;6479:117;6628:80;6700:7;6691:6;6680:9;6676:22;6628:80;:::i;:::-;6610:98;;;;6406:312;6785:2;6774:9;6770:18;6757:32;6816:18;6808:6;6805:30;6802:117;;;6838:79;;:::i;:::-;6802:117;6951:80;7023:7;7014:6;7003:9;6999:22;6951:80;:::i;:::-;6933:98;;;;6728:313;6114:934;;;;;;;:::o;7054:60::-;7082:3;7103:5;7096:12;;7054:60;;;:::o;7120:142::-;7170:9;7203:53;7221:34;7230:24;7248:5;7230:24;:::i;:::-;7221:34;:::i;:::-;7203:53;:::i;:::-;7190:66;;7120:142;;;:::o;7268:126::-;7318:9;7351:37;7382:5;7351:37;:::i;:::-;7338:50;;7268:126;;;:::o;7400:139::-;7463:9;7496:37;7527:5;7496:37;:::i;:::-;7483:50;;7400:139;;;:::o;7545:157::-;7645:50;7689:5;7645:50;:::i;:::-;7640:3;7633:63;7545:157;;:::o;7708:248::-;7814:4;7852:2;7841:9;7837:18;7829:26;;7865:84;7946:1;7935:9;7931:17;7922:6;7865:84;:::i;:::-;7708:248;;;;:::o;7962:169::-;8046:11;8080:6;8075:3;8068:19;8120:4;8115:3;8111:14;8096:29;;7962:169;;;;:::o;8137:182::-;8277:34;8273:1;8265:6;8261:14;8254:58;8137:182;:::o;8325:366::-;8467:3;8488:67;8552:2;8547:3;8488:67;:::i;:::-;8481:74;;8564:93;8653:3;8564:93;:::i;:::-;8682:2;8677:3;8673:12;8666:19;;8325:366;;;:::o;8697:419::-;8863:4;8901:2;8890:9;8886:18;8878:26;;8950:9;8944:4;8940:20;8936:1;8925:9;8921:17;8914:47;8978:131;9104:4;8978:131;:::i;:::-;8970:139;;8697:419;;;:::o;9122:180::-;9170:77;9167:1;9160:88;9267:4;9264:1;9257:15;9291:4;9288:1;9281:15;9308:305;9348:3;9367:20;9385:1;9367:20;:::i;:::-;9362:25;;9401:20;9419:1;9401:20;:::i;:::-;9396:25;;9555:1;9487:66;9483:74;9480:1;9477:81;9474:107;;;9561:18;;:::i;:::-;9474:107;9605:1;9602;9598:9;9591:16;;9308:305;;;;:::o;9619:222::-;9759:34;9755:1;9747:6;9743:14;9736:58;9828:5;9823:2;9815:6;9811:15;9804:30;9619:222;:::o;9847:366::-;9989:3;10010:67;10074:2;10069:3;10010:67;:::i;:::-;10003:74;;10086:93;10175:3;10086:93;:::i;:::-;10204:2;10199:3;10195:12;10188:19;;9847:366;;;:::o;10219:419::-;10385:4;10423:2;10412:9;10408:18;10400:26;;10472:9;10466:4;10462:20;10458:1;10447:9;10443:17;10436:47;10500:131;10626:4;10500:131;:::i;:::-;10492:139;;10219:419;;;:::o;10644:191::-;10684:4;10704:20;10722:1;10704:20;:::i;:::-;10699:25;;10738:20;10756:1;10738:20;:::i;:::-;10733:25;;10777:1;10774;10771:8;10768:34;;;10782:18;;:::i;:::-;10768:34;10827:1;10824;10820:9;10812:17;;10644:191;;;;:::o;10841:180::-;10889:77;10886:1;10879:88;10986:4;10983:1;10976:15;11010:4;11007:1;11000:15;11027:177;11167:29;11163:1;11155:6;11151:14;11144:53;11027:177;:::o;11210:366::-;11352:3;11373:67;11437:2;11432:3;11373:67;:::i;:::-;11366:74;;11449:93;11538:3;11449:93;:::i;:::-;11567:2;11562:3;11558:12;11551:19;;11210:366;;;:::o;11582:419::-;11748:4;11786:2;11775:9;11771:18;11763:26;;11835:9;11829:4;11825:20;11821:1;11810:9;11806:17;11799:47;11863:131;11989:4;11863:131;:::i;:::-;11855:139;;11582:419;;;:::o;12007:233::-;12046:3;12069:24;12087:5;12069:24;:::i;:::-;12060:33;;12115:66;12108:5;12105:77;12102:103;;12185:18;;:::i;:::-;12102:103;12232:1;12225:5;12221:13;12214:20;;12007:233;;;:::o;12246:224::-;12386:34;12382:1;12374:6;12370:14;12363:58;12455:7;12450:2;12442:6;12438:15;12431:32;12246:224;:::o;12476:366::-;12618:3;12639:67;12703:2;12698:3;12639:67;:::i;:::-;12632:74;;12715:93;12804:3;12715:93;:::i;:::-;12833:2;12828:3;12824:12;12817:19;;12476:366;;;:::o;12848:419::-;13014:4;13052:2;13041:9;13037:18;13029:26;;13101:9;13095:4;13091:20;13087:1;13076:9;13072:17;13065:47;13129:131;13255:4;13129:131;:::i;:::-;13121:139;;12848:419;;;:::o;13273:169::-;13413:21;13409:1;13401:6;13397:14;13390:45;13273:169;:::o;13448:366::-;13590:3;13611:67;13675:2;13670:3;13611:67;:::i;:::-;13604:74;;13687:93;13776:3;13687:93;:::i;:::-;13805:2;13800:3;13796:12;13789:19;;13448:366;;;:::o;13820:419::-;13986:4;14024:2;14013:9;14009:18;14001:26;;14073:9;14067:4;14063:20;14059:1;14048:9;14044:17;14037:47;14101:131;14227:4;14101:131;:::i;:::-;14093:139;;13820:419;;;:::o;14245:181::-;14385:33;14381:1;14373:6;14369:14;14362:57;14245:181;:::o;14432:366::-;14574:3;14595:67;14659:2;14654:3;14595:67;:::i;:::-;14588:74;;14671:93;14760:3;14671:93;:::i;:::-;14789:2;14784:3;14780:12;14773:19;;14432:366;;;:::o;14804:419::-;14970:4;15008:2;14997:9;14993:18;14985:26;;15057:9;15051:4;15047:20;15043:1;15032:9;15028:17;15021:47;15085:131;15211:4;15085:131;:::i;:::-;15077:139;;14804:419;;;:::o;15229:173::-;15369:25;15365:1;15357:6;15353:14;15346:49;15229:173;:::o;15408:366::-;15550:3;15571:67;15635:2;15630:3;15571:67;:::i;:::-;15564:74;;15647:93;15736:3;15647:93;:::i;:::-;15765:2;15760:3;15756:12;15749:19;;15408:366;;;:::o;15780:419::-;15946:4;15984:2;15973:9;15969:18;15961:26;;16033:9;16027:4;16023:20;16019:1;16008:9;16004:17;15997:47;16061:131;16187:4;16061:131;:::i;:::-;16053:139;;15780:419;;;:::o;16205:166::-;16345:18;16341:1;16333:6;16329:14;16322:42;16205:166;:::o;16377:366::-;16519:3;16540:67;16604:2;16599:3;16540:67;:::i;:::-;16533:74;;16616:93;16705:3;16616:93;:::i;:::-;16734:2;16729:3;16725:12;16718:19;;16377:366;;;:::o;16749:419::-;16915:4;16953:2;16942:9;16938:18;16930:26;;17002:9;16996:4;16992:20;16988:1;16977:9;16973:17;16966:47;17030:131;17156:4;17030:131;:::i;:::-;17022:139;;16749:419;;;:::o;17174:238::-;17314:34;17310:1;17302:6;17298:14;17291:58;17383:21;17378:2;17370:6;17366:15;17359:46;17174:238;:::o;17418:366::-;17560:3;17581:67;17645:2;17640:3;17581:67;:::i;:::-;17574:74;;17657:93;17746:3;17657:93;:::i;:::-;17775:2;17770:3;17766:12;17759:19;;17418:366;;;:::o;17790:419::-;17956:4;17994:2;17983:9;17979:18;17971:26;;18043:9;18037:4;18033:20;18029:1;18018:9;18014:17;18007:47;18071:131;18197:4;18071:131;:::i;:::-;18063:139;;17790:419;;;:::o;18215:166::-;18355:18;18351:1;18343:6;18339:14;18332:42;18215:166;:::o;18387:366::-;18529:3;18550:67;18614:2;18609:3;18550:67;:::i;:::-;18543:74;;18626:93;18715:3;18626:93;:::i;:::-;18744:2;18739:3;18735:12;18728:19;;18387:366;;;:::o;18759:419::-;18925:4;18963:2;18952:9;18948:18;18940:26;;19012:9;19006:4;19002:20;18998:1;18987:9;18983:17;18976:47;19040:131;19166:4;19040:131;:::i;:::-;19032:139;;18759:419;;;:::o;19184:163::-;19324:15;19320:1;19312:6;19308:14;19301:39;19184:163;:::o;19353:366::-;19495:3;19516:67;19580:2;19575:3;19516:67;:::i;:::-;19509:74;;19592:93;19681:3;19592:93;:::i;:::-;19710:2;19705:3;19701:12;19694:19;;19353:366;;;:::o;19725:419::-;19891:4;19929:2;19918:9;19914:18;19906:26;;19978:9;19972:4;19968:20;19964:1;19953:9;19949:17;19942:47;20006:131;20132:4;20006:131;:::i;:::-;19998:139;;19725:419;;;:::o;20150:170::-;20290:22;20286:1;20278:6;20274:14;20267:46;20150:170;:::o;20326:366::-;20468:3;20489:67;20553:2;20548:3;20489:67;:::i;:::-;20482:74;;20565:93;20654:3;20565:93;:::i;:::-;20683:2;20678:3;20674:12;20667:19;;20326:366;;;:::o;20698:419::-;20864:4;20902:2;20891:9;20887:18;20879:26;;20951:9;20945:4;20941:20;20937:1;20926:9;20922:17;20915:47;20979:131;21105:4;20979:131;:::i;:::-;20971:139;;20698:419;;;:::o;21123:223::-;21263:34;21259:1;21251:6;21247:14;21240:58;21332:6;21327:2;21319:6;21315:15;21308:31;21123:223;:::o;21352:366::-;21494:3;21515:67;21579:2;21574:3;21515:67;:::i;:::-;21508:74;;21591:93;21680:3;21591:93;:::i;:::-;21709:2;21704:3;21700:12;21693:19;;21352:366;;;:::o;21724:419::-;21890:4;21928:2;21917:9;21913:18;21905:26;;21977:9;21971:4;21967:20;21963:1;21952:9;21948:17;21941:47;22005:131;22131:4;22005:131;:::i;:::-;21997:139;;21724:419;;;:::o;22149:348::-;22189:7;22212:20;22230:1;22212:20;:::i;:::-;22207:25;;22246:20;22264:1;22246:20;:::i;:::-;22241:25;;22434:1;22366:66;22362:74;22359:1;22356:81;22351:1;22344:9;22337:17;22333:105;22330:131;;;22441:18;;:::i;:::-;22330:131;22489:1;22486;22482:9;22471:20;;22149:348;;;;:::o;22503:180::-;22551:77;22548:1;22541:88;22648:4;22645:1;22638:15;22672:4;22669:1;22662:15;22689:185;22729:1;22746:20;22764:1;22746:20;:::i;:::-;22741:25;;22780:20;22798:1;22780:20;:::i;:::-;22775:25;;22819:1;22809:35;;22824:18;;:::i;:::-;22809:35;22866:1;22863;22859:9;22854:14;;22689:185;;;;:::o;22880:143::-;22937:5;22968:6;22962:13;22953:22;;22984:33;23011:5;22984:33;:::i;:::-;22880:143;;;;:::o;23029:351::-;23099:6;23148:2;23136:9;23127:7;23123:23;23119:32;23116:119;;;23154:79;;:::i;:::-;23116:119;23274:1;23299:64;23355:7;23346:6;23335:9;23331:22;23299:64;:::i;:::-;23289:74;;23245:128;23029:351;;;;:::o;23386:179::-;23526:31;23522:1;23514:6;23510:14;23503:55;23386:179;:::o;23571:366::-;23713:3;23734:67;23798:2;23793:3;23734:67;:::i;:::-;23727:74;;23810:93;23899:3;23810:93;:::i;:::-;23928:2;23923:3;23919:12;23912:19;;23571:366;;;:::o;23943:419::-;24109:4;24147:2;24136:9;24132:18;24124:26;;24196:9;24190:4;24186:20;24182:1;24171:9;24167:17;24160:47;24224:131;24350:4;24224:131;:::i;:::-;24216:139;;23943:419;;;:::o;24368:225::-;24508:34;24504:1;24496:6;24492:14;24485:58;24577:8;24572:2;24564:6;24560:15;24553:33;24368:225;:::o;24599:366::-;24741:3;24762:67;24826:2;24821:3;24762:67;:::i;:::-;24755:74;;24838:93;24927:3;24838:93;:::i;:::-;24956:2;24951:3;24947:12;24940:19;;24599:366;;;:::o;24971:419::-;25137:4;25175:2;25164:9;25160:18;25152:26;;25224:9;25218:4;25214:20;25210:1;25199:9;25195:17;25188:47;25252:131;25378:4;25252:131;:::i;:::-;25244:139;;24971:419;;;:::o;25396:332::-;25517:4;25555:2;25544:9;25540:18;25532:26;;25568:71;25636:1;25625:9;25621:17;25612:6;25568:71;:::i;:::-;25649:72;25717:2;25706:9;25702:18;25693:6;25649:72;:::i;:::-;25396:332;;;;;:::o;25734:::-;25855:4;25893:2;25882:9;25878:18;25870:26;;25906:71;25974:1;25963:9;25959:17;25950:6;25906:71;:::i;:::-;25987:72;26055:2;26044:9;26040:18;26031:6;25987:72;:::i;:::-;25734:332;;;;;:::o;26072:116::-;26142:21;26157:5;26142:21;:::i;:::-;26135:5;26132:32;26122:60;;26178:1;26175;26168:12;26122:60;26072:116;:::o;26194:137::-;26248:5;26279:6;26273:13;26264:22;;26295:30;26319:5;26295:30;:::i;:::-;26194:137;;;;:::o;26337:345::-;26404:6;26453:2;26441:9;26432:7;26428:23;26424:32;26421:119;;;26459:79;;:::i;:::-;26421:119;26579:1;26604:61;26657:7;26648:6;26637:9;26633:22;26604:61;:::i;:::-;26594:71;;26550:125;26337:345;;;;:::o;26688:229::-;26828:34;26824:1;26816:6;26812:14;26805:58;26897:12;26892:2;26884:6;26880:15;26873:37;26688:229;:::o;26923:366::-;27065:3;27086:67;27150:2;27145:3;27086:67;:::i;:::-;27079:74;;27162:93;27251:3;27162:93;:::i;:::-;27280:2;27275:3;27271:12;27264:19;;26923:366;;;:::o;27295:419::-;27461:4;27499:2;27488:9;27484:18;27476:26;;27548:9;27542:4;27538:20;27534:1;27523:9;27519:17;27512:47;27576:131;27702:4;27576:131;:::i;:::-;27568:139;;27295:419;;;:::o;27720:225::-;27860:34;27856:1;27848:6;27844:14;27837:58;27929:8;27924:2;27916:6;27912:15;27905:33;27720:225;:::o;27951:366::-;28093:3;28114:67;28178:2;28173:3;28114:67;:::i;:::-;28107:74;;28190:93;28279:3;28190:93;:::i;:::-;28308:2;28303:3;28299:12;28292:19;;27951:366;;;:::o;28323:419::-;28489:4;28527:2;28516:9;28512:18;28504:26;;28576:9;28570:4;28566:20;28562:1;28551:9;28547:17;28540:47;28604:131;28730:4;28604:131;:::i;:::-;28596:139;;28323:419;;;:::o;28748:179::-;28888:31;28884:1;28876:6;28872:14;28865:55;28748:179;:::o;28933:366::-;29075:3;29096:67;29160:2;29155:3;29096:67;:::i;:::-;29089:74;;29172:93;29261:3;29172:93;:::i;:::-;29290:2;29285:3;29281:12;29274:19;;28933:366;;;:::o;29305:419::-;29471:4;29509:2;29498:9;29494:18;29486:26;;29558:9;29552:4;29548:20;29544:1;29533:9;29529:17;29522:47;29586:131;29712:4;29586:131;:::i;:::-;29578:139;;29305:419;;;:::o;29730:98::-;29781:6;29815:5;29809:12;29799:22;;29730:98;;;:::o;29834:147::-;29935:11;29972:3;29957:18;;29834:147;;;;:::o;29987:307::-;30055:1;30065:113;30079:6;30076:1;30073:13;30065:113;;;30164:1;30159:3;30155:11;30149:18;30145:1;30140:3;30136:11;30129:39;30101:2;30098:1;30094:10;30089:15;;30065:113;;;30196:6;30193:1;30190:13;30187:101;;;30276:1;30267:6;30262:3;30258:16;30251:27;30187:101;30036:258;29987:307;;;:::o;30300:373::-;30404:3;30432:38;30464:5;30432:38;:::i;:::-;30486:88;30567:6;30562:3;30486:88;:::i;:::-;30479:95;;30583:52;30628:6;30623:3;30616:4;30609:5;30605:16;30583:52;:::i;:::-;30660:6;30655:3;30651:16;30644:23;;30408:265;30300:373;;;;:::o;30679:271::-;30809:3;30831:93;30920:3;30911:6;30831:93;:::i;:::-;30824:100;;30941:3;30934:10;;30679:271;;;;:::o;30956:99::-;31008:6;31042:5;31036:12;31026:22;;30956:99;;;:::o;31061:102::-;31102:6;31153:2;31149:7;31144:2;31137:5;31133:14;31129:28;31119:38;;31061:102;;;:::o;31169:364::-;31257:3;31285:39;31318:5;31285:39;:::i;:::-;31340:71;31404:6;31399:3;31340:71;:::i;:::-;31333:78;;31420:52;31465:6;31460:3;31453:4;31446:5;31442:16;31420:52;:::i;:::-;31497:29;31519:6;31497:29;:::i;:::-;31492:3;31488:39;31481:46;;31261:272;31169:364;;;;:::o;31539:313::-;31652:4;31690:2;31679:9;31675:18;31667:26;;31739:9;31733:4;31729:20;31725:1;31714:9;31710:17;31703:47;31767:78;31840:4;31831:6;31767:78;:::i;:::-;31759:86;;31539:313;;;;:::o
Swarm Source
ipfs://346b107b71a6bb603c0a50ff0dfa24d7c19832296f70d300f6161c6d8c7dcc9e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.