ERC-20
Fashion
Overview
Max Total Supply
1,000,000,000 FAMEG
Holders
10 (0.00%)
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
FAMEG
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-23 */ // SPDX-License-Identifier: MIT 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; } } /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @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 Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } /** * @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 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); } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (a supervisor) that can be granted exclusive access to * specific functions. * * By default, the supervisor account will be the one that deploys the contract. This * can later be changed with {transferSupervisorOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlySupervisor`, which can be applied to your functions to restrict their use to * the supervisor. */ abstract contract Supervisable is Context { address private _supervisor; event SupervisorOwnershipTransferred(address indexed previouSupervisor, address indexed newSupervisor); /** * @dev Initializes the contract setting the deployer as the initial supervisor. */ constructor() { _transferSupervisorOwnership(_msgSender()); } /** * @dev Returns the address of the current supervisor. */ function supervisor() public view virtual returns (address) { return _supervisor; } /** * @dev Throws if called by any account other than the supervisor. */ modifier onlySupervisor() { require(supervisor() == _msgSender(), "Supervisable: caller is not the supervisor"); _; } /** * @dev Transfers supervisor ownership of the contract to a new account (`newSupervisor`). * Internal function without access restriction. */ function _transferSupervisorOwnership(address newSupervisor) internal virtual { address oldSupervisor = _supervisor; _supervisor = newSupervisor; emit SupervisorOwnershipTransferred(oldSupervisor, newSupervisor); } } /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract Burnable is Context { mapping(address => bool) private _burners; event BurnerAdded(address indexed account); event BurnerRemoved(address indexed account); /** * @dev Returns whether the address is burner. */ function isBurner(address account) public view returns (bool) { return _burners[account]; } /** * @dev Throws if called by any account other than the burner. */ modifier onlyBurner() { require(_burners[_msgSender()], "Burnable: caller is not the burner"); _; } /** * @dev Add burner, only owner can add burner. */ function _addBurner(address account) internal { _burners[account] = true; emit BurnerAdded(account); } /** * @dev Remove operator, only owner can remove operator */ function _removeBurner(address account) internal { _burners[account] = false; emit BurnerRemoved(account); } } /** * @dev Contract for freezing mechanism. * Owner can add freezed account. * Supervisor can remove freezed account. */ contract Freezable is Context { mapping(address => bool) private _freezes; event Freezed(address indexed account); event Unfreezed(address indexed account); /** * @dev Freeze account, only owner can freeze */ function _freeze(address account) internal { _freezes[account] = true; emit Freezed(account); } /** * @dev Unfreeze account, only supervisor can unfreeze */ function _unfreeze(address account) internal { _freezes[account] = false; emit Unfreezed(account); } /** * @dev Returns whether the address is freezed. */ function isFreezed(address account) public view returns (bool) { return _freezes[account]; } } /** * @dev Contract for locking mechanism. * Locker can add locked account. * Supervisor can remove locked account. */ contract Lockable is Context { struct TimeLock { uint256 amount; uint256 expiresAt; } struct VestingLock { uint256 amount; uint256 startsAt; uint256 period; uint256 count; } mapping(address => bool) private _lockers; mapping(address => TimeLock[]) private _timeLocks; mapping(address => VestingLock) private _vestingLocks; event LockerAdded(address indexed account); event LockerRemoved(address indexed account); event TimeLocked(address indexed account); event TimeUnlocked(address indexed account); event VestingLocked(address indexed account); event VestingUnlocked(address indexed account); /** * @dev Throws if called by any account other than the locker. */ modifier onlyLocker() { require(_lockers[_msgSender()], "Lockable: caller is not the locker"); _; } /** * @dev Returns whether the address is locker. */ function isLocker(address account) public view returns (bool) { return _lockers[account]; } /** * @dev Add locker, only owner can add locker */ function _addLocker(address account) internal { _lockers[account] = true; emit LockerAdded(account); } /** * @dev Remove locker, only owner can remove locker */ function _removeLocker(address account) internal { _lockers[account] = false; emit LockerRemoved(account); } /** * @dev Add time lock, only locker can add */ function _addTimeLock( address account, uint256 amount, uint256 expiresAt ) internal { require(amount > 0, "TimeLock: lock amount is 0"); require(expiresAt > block.timestamp, "TimeLock: invalid expire date"); _timeLocks[account].push(TimeLock(amount, expiresAt)); emit TimeLocked(account); } /** * @dev Remove time lock, only supervisor can remove * @param account The address want to remove time lock * @param index Time lock index */ function _removeTimeLock(address account, uint8 index) internal { require(_timeLocks[account].length > index && index >= 0, "TimeLock: invalid index"); uint256 len = _timeLocks[account].length; if (len - 1 != index) { // if it is not last item, swap it _timeLocks[account][index] = _timeLocks[account][len - 1]; } _timeLocks[account].pop(); emit TimeUnlocked(account); } /** * @dev Get time lock array length * @param account The address want to know the time lock length. * @return time lock length */ function getTimeLockLength(address account) public view returns (uint256) { return _timeLocks[account].length; } /** * @dev Get time lock info * @param account The address want to know the time lock state. * @param index Time lock index * @return time lock info */ function getTimeLock(address account, uint8 index) public view returns (uint256, uint256) { require(_timeLocks[account].length > index && index >= 0, "TimeLock: invalid index"); return (_timeLocks[account][index].amount, _timeLocks[account][index].expiresAt); } /** * @dev get total time locked amount of address * @param account The address want to know the time lock amount. * @return time locked amount */ function getTimeLockedAmount(address account) public view returns (uint256) { uint256 timeLockedAmount = 0; uint256 len = _timeLocks[account].length; for (uint256 i = 0; i < len; i++) { if (block.timestamp < _timeLocks[account][i].expiresAt) { timeLockedAmount = timeLockedAmount + _timeLocks[account][i].amount; } } return timeLockedAmount; } /** * @dev Add vesting lock, only locker can add * @param account vesting lock account. * @param amount vesting lock amount. * @param startsAt vesting lock release start date. * @param period vesting lock period. End date is startsAt + (period - 1) * count * @param count vesting lock count. If count is 1, it works like a time lock */ function _addVestingLock( address account, uint256 amount, uint256 startsAt, uint256 period, uint256 count ) internal { require(account != address(0), "VestingLock: lock from the zero address"); require(startsAt > block.timestamp, "VestingLock: must set after now"); require(amount > 0, "VestingLock: amount is 0"); require(period > 0, "VestingLock: period is 0"); require(count > 0, "VestingLock: count is 0"); _vestingLocks[account] = VestingLock(amount, startsAt, period, count); emit VestingLocked(account); } /** * @dev Remove vesting lock, only supervisor can remove * @param account The address want to remove the vesting lock */ function _removeVestingLock(address account) internal { _vestingLocks[account] = VestingLock(0, 0, 0, 0); emit VestingUnlocked(account); } /** * @dev Get vesting lock info * @param account The address want to know the vesting lock state. * @return vesting lock info */ function getVestingLock(address account) public view returns ( uint256, uint256, uint256, uint256 ) { return (_vestingLocks[account].amount, _vestingLocks[account].startsAt, _vestingLocks[account].period, _vestingLocks[account].count); } /** * @dev Get total vesting locked amount of address, locked amount will be released by 100%/months * If months is 5, locked amount released 20% per 1 month. * @param account The address want to know the vesting lock amount. * @return vesting locked amount */ function getVestingLockedAmount(address account) public view returns (uint256) { uint256 vestingLockedAmount = 0; uint256 amount = _vestingLocks[account].amount; if (amount > 0) { uint256 startsAt = _vestingLocks[account].startsAt; uint256 period = _vestingLocks[account].period; uint256 count = _vestingLocks[account].count; uint256 expiresAt = startsAt + period * (count - 1); uint256 timestamp = block.timestamp; if (timestamp < startsAt) { vestingLockedAmount = amount; } else if (timestamp < expiresAt) { vestingLockedAmount = (amount * ((expiresAt - timestamp) / period + 1)) / count; } } return vestingLockedAmount; } /** * @dev Get all locked amount * @param account The address want to know the all locked amount * @return all locked amount */ function getAllLockedAmount(address account) public view returns (uint256) { return getTimeLockedAmount(account) + getVestingLockedAmount(account); } } /** * @dev Contract for Fame Global Coin */ contract FAMEG is Pausable, Ownable, Supervisable, Burnable, Freezable, Lockable, ERC20 { uint256 private constant _initialSupply = 1_000_000_000e18; constructor() ERC20("Fame Global", "FAMEG") { _mint(_msgSender(), _initialSupply); } /** * @dev Recover ERC20 coin in contract address. * @param tokenAddress The token contract address * @param tokenAmount Number of tokens to be sent */ function recoverERC20(address tokenAddress, uint256 tokenAmount) public onlyOwner { IERC20(tokenAddress).transfer(owner(), tokenAmount); } /** * @dev lock and pause before transfer token */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal override(ERC20) { super._beforeTokenTransfer(from, to, amount); require(!isFreezed(from), "Freezable: token transfer from freezed account"); require(!isFreezed(to), "Freezable: token transfer to freezed account"); require(!isFreezed(_msgSender()), "Freezable: token transfer called from freezed account"); require(!paused(), "Pausable: token transfer while paused"); require(balanceOf(from) - getAllLockedAmount(from) >= amount, "Lockable: insufficient transfer amount"); } /** * @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 onlyOwner whenNotPaused { _transferOwnership(address(0)); } /** * @dev only supervisor can renounce supervisor ownership */ function renounceSupervisorOwnership() public onlySupervisor whenNotPaused { _transferSupervisorOwnership(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 onlyOwner whenNotPaused { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev only supervisor can transfer supervisor ownership */ function transferSupervisorOwnership(address newSupervisor) public onlySupervisor whenNotPaused { require(newSupervisor != address(0), "Supervisable: new supervisor is the zero address"); _transferSupervisorOwnership(newSupervisor); } /** * @dev pause all coin transfer */ function pause() public onlyOwner whenNotPaused { _pause(); } /** * @dev unpause all coin transfer */ function unpause() public onlyOwner whenPaused { _unpause(); } /** * @dev only owner can lock account */ function freeze(address account) public onlyOwner whenNotPaused { _freeze(account); } /** * @dev only supervisor can unfreeze account */ function unfreeze(address account) public onlySupervisor whenNotPaused { _unfreeze(account); } /** * @dev only owner can add burner */ function addBurner(address account) public onlyOwner whenNotPaused { _addBurner(account); } /** * @dev only owner can remove burner */ function removeBurner(address account) public onlyOwner whenNotPaused { _removeBurner(account); } /** * @dev burn burner's coin */ function burn(uint256 amount) public onlyBurner whenNotPaused { _burn(_msgSender(), amount); } /** * @dev only owner can add locker */ function addLocker(address account) public onlyOwner whenNotPaused { _addLocker(account); } /** * @dev only owner can remove locker */ function removeLocker(address account) public onlyOwner whenNotPaused { _removeLocker(account); } /** * @dev only locker can add time lock */ function addTimeLock( address account, uint256 amount, uint256 expiresAt ) public onlyLocker whenNotPaused { _addTimeLock(account, amount, expiresAt); } /** * @dev only supervisor can remove time lock */ function removeTimeLock(address account, uint8 index) public onlySupervisor whenNotPaused { _removeTimeLock(account, index); } /** * @dev only locker can add vesting lock */ function addVestingLock( address account, uint256 startsAt, uint256 period, uint256 count ) public onlyLocker whenNotPaused { _addVestingLock(account, balanceOf(account), startsAt, period, count); } /** * @dev only supervisor can remove vesting lock */ function removeVestingLock(address account) public onlySupervisor whenNotPaused { _removeVestingLock(account); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"BurnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"BurnerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"Freezed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"LockerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"LockerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previouSupervisor","type":"address"},{"indexed":true,"internalType":"address","name":"newSupervisor","type":"address"}],"name":"SupervisorOwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"TimeLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"TimeUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"Unfreezed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"VestingLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"VestingUnlocked","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addLocker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"expiresAt","type":"uint256"}],"name":"addTimeLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"startsAt","type":"uint256"},{"internalType":"uint256","name":"period","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"addVestingLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"freeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAllLockedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint8","name":"index","type":"uint8"}],"name":"getTimeLock","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getTimeLockLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getTimeLockedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getVestingLock","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getVestingLockedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBurner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isFreezed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isLocker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeLocker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint8","name":"index","type":"uint8"}],"name":"removeTimeLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeVestingLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceSupervisorOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supervisor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newSupervisor","type":"address"}],"name":"transferSupervisorOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unfreeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604080518082018252600b81526a11985b594811db1bd8985b60aa1b6020808301919091528251808401909352600583526446414d454760d81b908301526000805460ff19169055906200006633620000c2565b62000071336200011b565b600a6200007f8382620002da565b50600b6200008e8282620002da565b505050620000b8620000a5620000be60201b60201c565b6b033b2e3c9fd0803ce80000006200016d565b620003ce565b3390565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907facf6a327286171e5ce7f9bf15425ff49aab0fd07752fec84b2bd232c9f480c1790600090a35050565b6001600160a01b038216620001c85760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060096000828254620001dc9190620003a6565b90915550506001600160a01b0382166000818152600760209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200026057607f821691505b6020821081036200028157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002d557600081815260208120601f850160051c81016020861015620002b05750805b601f850160051c820191505b81811015620002d157828155600101620002bc565b5050505b505050565b81516001600160401b03811115620002f657620002f662000235565b6200030e816200030784546200024b565b8462000287565b602080601f8311600181146200034657600084156200032d5750858301515b600019600386901b1c1916600185901b178555620002d1565b600085815260208120601f198616915b82811015620003775788860151825594840194600190910190840162000356565b5085821015620003965787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115620003c857634e487b7160e01b600052601160045260246000fd5b92915050565b61268a80620003de6000396000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c806370a0823111610146578063a9059cbb116100c3578063c47a784c11610087578063c47a784c146105b7578063ce62cd4a146105ca578063dd62ed3e146105dd578063f2fde38b146105f0578063f44637ba14610603578063f99a2ca01461061657600080fd5b8063a9059cbb1461054d578063ab0de0fe14610560578063b0a087c514610573578063ba40c71a1461057b578063be4329f4146105a457600080fd5b80638980f11f1161010a5780638980f11f146104f65780638d1fdf2f146105095780638da5cb5b1461051c57806395d89b4114610532578063a457c2d71461053a57600080fd5b806370a082311461047e578063715018a6146104a75780638111f24e146104af5780638456cb59146104db578063854d9ffe146104e357600080fd5b806339509351116101d457806345cc58901161019857806345cc5890146104005780634ca47ad11461041357806356e4b68b1461043b5780635c975abb146104605780636f395c831461046b57600080fd5b806339509351146103935780633f4ba83a146103a657806342966c68146103ae5780634334614a146103c157806345c8b1a6146103ed57600080fd5b806319651dbf1161021b57806319651dbf146102d357806323b872dd146103325780632ec63d7c14610345578063313ce56714610371578063363b3c151461038057600080fd5b8063028468581461025857806306fdde031461026d578063095ea7b31461028b5780630d605482146102ae57806318160ddd146102c1575b600080fd5b61026b610266366004612280565b610629565b005b610275610691565b60405161028291906122a2565b60405180910390f35b61029e6102993660046122f0565b610723565b6040519015158152602001610282565b61026b6102bc36600461231a565b61073d565b6009545b604051908152602001610282565b6103126102e1366004612280565b6001600160a01b03166000908152600660205260409020805460018201546002830154600390930154919390929190565b604080519485526020850193909352918301526060820152608001610282565b61029e61034036600461234d565b61079f565b61029e610353366004612280565b6001600160a01b031660009081526004602052604090205460ff1690565b60405160128152602001610282565b61026b61038e366004612280565b6107c3565b61029e6103a13660046122f0565b610888565b61026b6108aa565b61026b6103bc366004612389565b61092d565b61029e6103cf366004612280565b6001600160a01b031660009081526002602052604090205460ff1690565b61026b6103fb366004612280565b6109c4565b61026b61040e366004612280565b610a1a565b6104266104213660046123a2565b610a76565b60408051928352602083019190915201610282565b6001546001600160a01b03165b6040516001600160a01b039091168152602001610282565b60005460ff1661029e565b61026b6104793660046123a2565b610b6e565b6102c561048c366004612280565b6001600160a01b031660009081526007602052604090205490565b61026b610bc9565b61029e6104bd366004612280565b6001600160a01b031660009081526003602052604090205460ff1690565b61026b610c26565b6102c56104f1366004612280565b610c81565b61026b6105043660046122f0565b610c9f565b61026b610517366004612280565b610d67565b60005461010090046001600160a01b0316610448565b610275610dc3565b61029e6105483660046122f0565b610dd2565b61029e61055b3660046122f0565b610e4d565b6102c561056e366004612280565b610e5b565b61026b610f27565b6102c5610589366004612280565b6001600160a01b031660009081526005602052604090205490565b6102c56105b2366004612280565b610f7e565b61026b6105c53660046123df565b61104b565b61026b6105d8366004612280565b6110ce565b6102c56105eb366004612418565b61112a565b61026b6105fe366004612280565b611155565b61026b610611366004612280565b611216565b61026b610624366004612280565b611272565b6000546001600160a01b036101009091041633146106625760405162461bcd60e51b81526004016106599061244b565b60405180910390fd5b60005460ff16156106855760405162461bcd60e51b815260040161065990612480565b61068e816112c8565b50565b6060600a80546106a0906124aa565b80601f01602080910402602001604051908101604052809291908181526020018280546106cc906124aa565b80156107195780601f106106ee57610100808354040283529160200191610719565b820191906000526020600020905b8154815290600101906020018083116106fc57829003601f168201915b5050505050905090565b600033610731818585611311565b60019150505b92915050565b3360009081526004602052604090205460ff1661076c5760405162461bcd60e51b8152600401610659906124e4565b60005460ff161561078f5760405162461bcd60e51b815260040161065990612480565b61079a838383611436565b505050565b6000336107ad85828561154d565b6107b88585856115c1565b506001949350505050565b6001546001600160a01b031633146107ed5760405162461bcd60e51b815260040161065990612526565b60005460ff16156108105760405162461bcd60e51b815260040161065990612480565b6001600160a01b03811661087f5760405162461bcd60e51b815260206004820152603060248201527f537570657276697361626c653a206e65772073757065727669736f722069732060448201526f746865207a65726f206164647265737360801b6064820152608401610659565b61068e81611778565b60003361073181858561089b838361112a565b6108a59190612586565b611311565b6000546001600160a01b036101009091041633146108da5760405162461bcd60e51b81526004016106599061244b565b60005460ff166109235760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610659565b61092b6117ca565b565b3360009081526002602052604090205460ff166109975760405162461bcd60e51b815260206004820152602260248201527f4275726e61626c653a2063616c6c6572206973206e6f7420746865206275726e60448201526132b960f11b6064820152608401610659565b60005460ff16156109ba5760405162461bcd60e51b815260040161065990612480565b61068e338261185d565b6001546001600160a01b031633146109ee5760405162461bcd60e51b815260040161065990612526565b60005460ff1615610a115760405162461bcd60e51b815260040161065990612480565b61068e81611989565b6000546001600160a01b03610100909104163314610a4a5760405162461bcd60e51b81526004016106599061244b565b60005460ff1615610a6d5760405162461bcd60e51b815260040161065990612480565b61068e816119d2565b6001600160a01b038216600090815260056020526040812054819060ff8416108015610aa0575060015b610ae65760405162461bcd60e51b81526020600482015260176024820152760a8d2daca98dec6d67440d2dcecc2d8d2c840d2dcc8caf604b1b6044820152606401610659565b6001600160a01b0384166000908152600560205260409020805460ff8516908110610b1357610b13612599565b600091825260208083206002909202909101546001600160a01b038716835260059091526040909120805460ff8616908110610b5157610b51612599565b906000526020600020906002020160010154915091509250929050565b6001546001600160a01b03163314610b985760405162461bcd60e51b815260040161065990612526565b60005460ff1615610bbb5760405162461bcd60e51b815260040161065990612480565b610bc58282611a1e565b5050565b6000546001600160a01b03610100909104163314610bf95760405162461bcd60e51b81526004016106599061244b565b60005460ff1615610c1c5760405162461bcd60e51b815260040161065990612480565b61092b6000611bcf565b6000546001600160a01b03610100909104163314610c565760405162461bcd60e51b81526004016106599061244b565b60005460ff1615610c795760405162461bcd60e51b815260040161065990612480565b61092b611c28565b6000610c8c82610e5b565b610c9583610f7e565b6107379190612586565b6000546001600160a01b03610100909104163314610ccf5760405162461bcd60e51b81526004016106599061244b565b816001600160a01b031663a9059cbb610cf66000546001600160a01b036101009091041690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015610d43573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079a91906125af565b6000546001600160a01b03610100909104163314610d975760405162461bcd60e51b81526004016106599061244b565b60005460ff1615610dba5760405162461bcd60e51b815260040161065990612480565b61068e81611c80565b6060600b80546106a0906124aa565b60003381610de0828661112a565b905083811015610e405760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610659565b6107b88286868403611311565b6000336107318185856115c1565b6001600160a01b03811660009081526006602052604081205481908015610f20576001600160a01b0384166000908152600660205260408120600180820154600283015460039093015490939091610eb390836125d1565b610ebd90846125e4565b610ec79085612586565b90504284811015610eda57859650610f1a565b81811015610f1a578284610eee83856125d1565b610ef89190612603565b610f03906001612586565b610f0d90886125e4565b610f179190612603565b96505b50505050505b5092915050565b6001546001600160a01b03163314610f515760405162461bcd60e51b815260040161065990612526565b60005460ff1615610f745760405162461bcd60e51b815260040161065990612480565b61092b6000611778565b6001600160a01b0381166000908152600560205260408120548190815b81811015611042576001600160a01b0385166000908152600560205260409020805482908110610fcd57610fcd612599565b906000526020600020906002020160010154421015611030576001600160a01b038516600090815260056020526040902080548290811061101057611010612599565b9060005260206000209060020201600001548361102d9190612586565b92505b8061103a81612625565b915050610f9b565b50909392505050565b3360009081526004602052604090205460ff1661107a5760405162461bcd60e51b8152600401610659906124e4565b60005460ff161561109d5760405162461bcd60e51b815260040161065990612480565b6110c8846110c0866001600160a01b031660009081526007602052604090205490565b858585611ccc565b50505050565b6000546001600160a01b036101009091041633146110fe5760405162461bcd60e51b81526004016106599061244b565b60005460ff16156111215760405162461bcd60e51b815260040161065990612480565b61068e81611ef4565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b6000546001600160a01b036101009091041633146111855760405162461bcd60e51b81526004016106599061244b565b60005460ff16156111a85760405162461bcd60e51b815260040161065990612480565b6001600160a01b03811661120d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610659565b61068e81611bcf565b6000546001600160a01b036101009091041633146112465760405162461bcd60e51b81526004016106599061244b565b60005460ff16156112695760405162461bcd60e51b815260040161065990612480565b61068e81611f3d565b6001546001600160a01b0316331461129c5760405162461bcd60e51b815260040161065990612526565b60005460ff16156112bf5760405162461bcd60e51b815260040161065990612480565b61068e81611f89565b6001600160a01b038116600081815260026020526040808220805460ff19169055517f90eabbc0c667db2a5029ed6bc0f5fe9f356d11684a4ca9fcfaec0e53f12b9c8e9190a250565b6001600160a01b0383166113735760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610659565b6001600160a01b0382166113d45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610659565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600082116114865760405162461bcd60e51b815260206004820152601a60248201527f54696d654c6f636b3a206c6f636b20616d6f756e7420697320300000000000006044820152606401610659565b4281116114d55760405162461bcd60e51b815260206004820152601d60248201527f54696d654c6f636b3a20696e76616c69642065787069726520646174650000006044820152606401610659565b6001600160a01b0383166000818152600560209081526040808320815180830183528781528084018781528254600181810185559387529486209151600290950290910193845551920191909155517fc80fbc3452298019908587d820303825af4187ac57ed90d7328886fd00b225579190a2505050565b6000611559848461112a565b905060001981146110c857818110156115b45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610659565b6110c88484848403611311565b6001600160a01b0383166116255760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610659565b6001600160a01b0382166116875760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610659565b611692838383612007565b6001600160a01b0383166000908152600760205260409020548181101561170a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610659565b6001600160a01b0380851660008181526007602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061176a9086815260200190565b60405180910390a350505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907facf6a327286171e5ce7f9bf15425ff49aab0fd07752fec84b2bd232c9f480c1790600090a35050565b60005460ff166118135760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610659565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0382166118bd5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610659565b6001600160a01b038216600090815260076020526040902054818110156119315760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610659565b6001600160a01b03831660008181526007602090815260408083208686039055600980548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611429565b6001600160a01b038116600081815260036020526040808220805460ff19169055517f4d1fe3cc0f516ce2cfc5e83d52ee28af7f55376b18f58e7081c5fd25d8eeb1df9190a250565b6001600160a01b038116600081815260046020526040808220805460ff19166001179055517f7c5af8d36d8be103bc583da8e01d3e98f15216cc7ef38832c7550b34e8feb43a9190a250565b6001600160a01b03821660009081526005602052604090205460ff8216108015611a46575060015b611a8c5760405162461bcd60e51b81526020600482015260176024820152760a8d2daca98dec6d67440d2dcecc2d8d2c840d2dcc8caf604b1b6044820152606401610659565b6001600160a01b03821660009081526005602052604090205460ff8216611ab46001836125d1565b14611b52576001600160a01b0383166000908152600560205260409020611adc6001836125d1565b81548110611aec57611aec612599565b906000526020600020906002020160056000856001600160a01b03166001600160a01b031681526020019081526020016000208360ff1681548110611b3357611b33612599565b6000918252602090912082546002909202019081556001918201549101555b6001600160a01b0383166000908152600560205260409020805480611b7957611b7961263e565b60008281526020812060026000199093019283020181815560010181905591556040516001600160a01b038516917fb34baa9e1ce392292123bbdca3018904b21991f7411e14d99a10aaf88ec8ea0d91a2505050565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b60005460ff1615611c4b5760405162461bcd60e51b815260040161065990612480565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586118403390565b6001600160a01b038116600081815260036020526040808220805460ff19166001179055517f0de8364a528e5ca2869160b20c375fe85b4e98d24a9cb48b4dc49c5f76d05b249190a250565b6001600160a01b038516611d325760405162461bcd60e51b815260206004820152602760248201527f56657374696e674c6f636b3a206c6f636b2066726f6d20746865207a65726f206044820152666164647265737360c81b6064820152608401610659565b428311611d815760405162461bcd60e51b815260206004820152601f60248201527f56657374696e674c6f636b3a206d75737420736574206166746572206e6f77006044820152606401610659565b60008411611dd15760405162461bcd60e51b815260206004820152601860248201527f56657374696e674c6f636b3a20616d6f756e74206973203000000000000000006044820152606401610659565b60008211611e215760405162461bcd60e51b815260206004820152601860248201527f56657374696e674c6f636b3a20706572696f64206973203000000000000000006044820152606401610659565b60008111611e715760405162461bcd60e51b815260206004820152601760248201527f56657374696e674c6f636b3a20636f756e7420697320300000000000000000006044820152606401610659565b604080516080810182528581526020808201868152828401868152606084018681526001600160a01b038b166000818152600690955286852095518655925160018601559051600285015551600390930192909255915190917f04a72c810da52db1f0e22421438d411667cd0c1559e9ae7c638f1aed4bfa066d91a25050505050565b6001600160a01b038116600081815260046020526040808220805460ff19169055517f95266445d018e5b30f957c915e91b04bb4a19bf0f8f21020a08dad9be7931df49190a250565b6001600160a01b038116600081815260026020526040808220805460ff19166001179055517f86e57fd2b90329052917118de7c3f521f400d439b9650deaa906a25b08b945609190a250565b6040805160808101825260008082526020808301828152838501838152606085018481526001600160a01b0388168086526006909452868520955186559151600186015551600285015551600390930192909255915190917ff71e9d23ff58e708ca92807894c580d899e97ab5bacc17df3543475e0e439f8491a250565b6001600160a01b03831660009081526003602052604090205460ff16156120875760405162461bcd60e51b815260206004820152602e60248201527f467265657a61626c653a20746f6b656e207472616e736665722066726f6d206660448201526d1c99595e9959081858d8dbdd5b9d60921b6064820152608401610659565b6001600160a01b03821660009081526003602052604090205460ff16156121055760405162461bcd60e51b815260206004820152602c60248201527f467265657a61626c653a20746f6b656e207472616e7366657220746f2066726560448201526b195e9959081858d8dbdd5b9d60a21b6064820152608401610659565b61210e336104bd565b156121795760405162461bcd60e51b815260206004820152603560248201527f467265657a61626c653a20746f6b656e207472616e736665722063616c6c656460448201527408199c9bdb48199c99595e9959081858d8dbdd5b9d605a1b6064820152608401610659565b60005460ff16156121da5760405162461bcd60e51b815260206004820152602560248201527f5061757361626c653a20746f6b656e207472616e73666572207768696c652070604482015264185d5cd95960da1b6064820152608401610659565b806121e484610c81565b6001600160a01b03851660009081526007602052604090205461220791906125d1565b101561079a5760405162461bcd60e51b815260206004820152602660248201527f4c6f636b61626c653a20696e73756666696369656e74207472616e7366657220604482015265185b5bdd5b9d60d21b6064820152608401610659565b80356001600160a01b038116811461227b57600080fd5b919050565b60006020828403121561229257600080fd5b61229b82612264565b9392505050565b600060208083528351808285015260005b818110156122cf578581018301518582016040015282016122b3565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561230357600080fd5b61230c83612264565b946020939093013593505050565b60008060006060848603121561232f57600080fd5b61233884612264565b95602085013595506040909401359392505050565b60008060006060848603121561236257600080fd5b61236b84612264565b925061237960208501612264565b9150604084013590509250925092565b60006020828403121561239b57600080fd5b5035919050565b600080604083850312156123b557600080fd5b6123be83612264565b9150602083013560ff811681146123d457600080fd5b809150509250929050565b600080600080608085870312156123f557600080fd5b6123fe85612264565b966020860135965060408601359560600135945092505050565b6000806040838503121561242b57600080fd5b61243483612264565b915061244260208401612264565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b600181811c908216806124be57607f821691505b6020821081036124de57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526022908201527f4c6f636b61626c653a2063616c6c6572206973206e6f7420746865206c6f636b60408201526132b960f11b606082015260800190565b6020808252602a908201527f537570657276697361626c653a2063616c6c6572206973206e6f74207468652060408201526939bab832b93b34b9b7b960b11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561073757610737612570565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156125c157600080fd5b8151801515811461229b57600080fd5b8181038181111561073757610737612570565b60008160001904831182151516156125fe576125fe612570565b500290565b60008261262057634e487b7160e01b600052601260045260246000fd5b500490565b60006001820161263757612637612570565b5060010190565b634e487b7160e01b600052603160045260246000fdfea26469706673582212209e745cf95f09633579440fa010ef6515d49379fa51b9fd9c0548a60b2c2b818964736f6c63430008100033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102535760003560e01c806370a0823111610146578063a9059cbb116100c3578063c47a784c11610087578063c47a784c146105b7578063ce62cd4a146105ca578063dd62ed3e146105dd578063f2fde38b146105f0578063f44637ba14610603578063f99a2ca01461061657600080fd5b8063a9059cbb1461054d578063ab0de0fe14610560578063b0a087c514610573578063ba40c71a1461057b578063be4329f4146105a457600080fd5b80638980f11f1161010a5780638980f11f146104f65780638d1fdf2f146105095780638da5cb5b1461051c57806395d89b4114610532578063a457c2d71461053a57600080fd5b806370a082311461047e578063715018a6146104a75780638111f24e146104af5780638456cb59146104db578063854d9ffe146104e357600080fd5b806339509351116101d457806345cc58901161019857806345cc5890146104005780634ca47ad11461041357806356e4b68b1461043b5780635c975abb146104605780636f395c831461046b57600080fd5b806339509351146103935780633f4ba83a146103a657806342966c68146103ae5780634334614a146103c157806345c8b1a6146103ed57600080fd5b806319651dbf1161021b57806319651dbf146102d357806323b872dd146103325780632ec63d7c14610345578063313ce56714610371578063363b3c151461038057600080fd5b8063028468581461025857806306fdde031461026d578063095ea7b31461028b5780630d605482146102ae57806318160ddd146102c1575b600080fd5b61026b610266366004612280565b610629565b005b610275610691565b60405161028291906122a2565b60405180910390f35b61029e6102993660046122f0565b610723565b6040519015158152602001610282565b61026b6102bc36600461231a565b61073d565b6009545b604051908152602001610282565b6103126102e1366004612280565b6001600160a01b03166000908152600660205260409020805460018201546002830154600390930154919390929190565b604080519485526020850193909352918301526060820152608001610282565b61029e61034036600461234d565b61079f565b61029e610353366004612280565b6001600160a01b031660009081526004602052604090205460ff1690565b60405160128152602001610282565b61026b61038e366004612280565b6107c3565b61029e6103a13660046122f0565b610888565b61026b6108aa565b61026b6103bc366004612389565b61092d565b61029e6103cf366004612280565b6001600160a01b031660009081526002602052604090205460ff1690565b61026b6103fb366004612280565b6109c4565b61026b61040e366004612280565b610a1a565b6104266104213660046123a2565b610a76565b60408051928352602083019190915201610282565b6001546001600160a01b03165b6040516001600160a01b039091168152602001610282565b60005460ff1661029e565b61026b6104793660046123a2565b610b6e565b6102c561048c366004612280565b6001600160a01b031660009081526007602052604090205490565b61026b610bc9565b61029e6104bd366004612280565b6001600160a01b031660009081526003602052604090205460ff1690565b61026b610c26565b6102c56104f1366004612280565b610c81565b61026b6105043660046122f0565b610c9f565b61026b610517366004612280565b610d67565b60005461010090046001600160a01b0316610448565b610275610dc3565b61029e6105483660046122f0565b610dd2565b61029e61055b3660046122f0565b610e4d565b6102c561056e366004612280565b610e5b565b61026b610f27565b6102c5610589366004612280565b6001600160a01b031660009081526005602052604090205490565b6102c56105b2366004612280565b610f7e565b61026b6105c53660046123df565b61104b565b61026b6105d8366004612280565b6110ce565b6102c56105eb366004612418565b61112a565b61026b6105fe366004612280565b611155565b61026b610611366004612280565b611216565b61026b610624366004612280565b611272565b6000546001600160a01b036101009091041633146106625760405162461bcd60e51b81526004016106599061244b565b60405180910390fd5b60005460ff16156106855760405162461bcd60e51b815260040161065990612480565b61068e816112c8565b50565b6060600a80546106a0906124aa565b80601f01602080910402602001604051908101604052809291908181526020018280546106cc906124aa565b80156107195780601f106106ee57610100808354040283529160200191610719565b820191906000526020600020905b8154815290600101906020018083116106fc57829003601f168201915b5050505050905090565b600033610731818585611311565b60019150505b92915050565b3360009081526004602052604090205460ff1661076c5760405162461bcd60e51b8152600401610659906124e4565b60005460ff161561078f5760405162461bcd60e51b815260040161065990612480565b61079a838383611436565b505050565b6000336107ad85828561154d565b6107b88585856115c1565b506001949350505050565b6001546001600160a01b031633146107ed5760405162461bcd60e51b815260040161065990612526565b60005460ff16156108105760405162461bcd60e51b815260040161065990612480565b6001600160a01b03811661087f5760405162461bcd60e51b815260206004820152603060248201527f537570657276697361626c653a206e65772073757065727669736f722069732060448201526f746865207a65726f206164647265737360801b6064820152608401610659565b61068e81611778565b60003361073181858561089b838361112a565b6108a59190612586565b611311565b6000546001600160a01b036101009091041633146108da5760405162461bcd60e51b81526004016106599061244b565b60005460ff166109235760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610659565b61092b6117ca565b565b3360009081526002602052604090205460ff166109975760405162461bcd60e51b815260206004820152602260248201527f4275726e61626c653a2063616c6c6572206973206e6f7420746865206275726e60448201526132b960f11b6064820152608401610659565b60005460ff16156109ba5760405162461bcd60e51b815260040161065990612480565b61068e338261185d565b6001546001600160a01b031633146109ee5760405162461bcd60e51b815260040161065990612526565b60005460ff1615610a115760405162461bcd60e51b815260040161065990612480565b61068e81611989565b6000546001600160a01b03610100909104163314610a4a5760405162461bcd60e51b81526004016106599061244b565b60005460ff1615610a6d5760405162461bcd60e51b815260040161065990612480565b61068e816119d2565b6001600160a01b038216600090815260056020526040812054819060ff8416108015610aa0575060015b610ae65760405162461bcd60e51b81526020600482015260176024820152760a8d2daca98dec6d67440d2dcecc2d8d2c840d2dcc8caf604b1b6044820152606401610659565b6001600160a01b0384166000908152600560205260409020805460ff8516908110610b1357610b13612599565b600091825260208083206002909202909101546001600160a01b038716835260059091526040909120805460ff8616908110610b5157610b51612599565b906000526020600020906002020160010154915091509250929050565b6001546001600160a01b03163314610b985760405162461bcd60e51b815260040161065990612526565b60005460ff1615610bbb5760405162461bcd60e51b815260040161065990612480565b610bc58282611a1e565b5050565b6000546001600160a01b03610100909104163314610bf95760405162461bcd60e51b81526004016106599061244b565b60005460ff1615610c1c5760405162461bcd60e51b815260040161065990612480565b61092b6000611bcf565b6000546001600160a01b03610100909104163314610c565760405162461bcd60e51b81526004016106599061244b565b60005460ff1615610c795760405162461bcd60e51b815260040161065990612480565b61092b611c28565b6000610c8c82610e5b565b610c9583610f7e565b6107379190612586565b6000546001600160a01b03610100909104163314610ccf5760405162461bcd60e51b81526004016106599061244b565b816001600160a01b031663a9059cbb610cf66000546001600160a01b036101009091041690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015610d43573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079a91906125af565b6000546001600160a01b03610100909104163314610d975760405162461bcd60e51b81526004016106599061244b565b60005460ff1615610dba5760405162461bcd60e51b815260040161065990612480565b61068e81611c80565b6060600b80546106a0906124aa565b60003381610de0828661112a565b905083811015610e405760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610659565b6107b88286868403611311565b6000336107318185856115c1565b6001600160a01b03811660009081526006602052604081205481908015610f20576001600160a01b0384166000908152600660205260408120600180820154600283015460039093015490939091610eb390836125d1565b610ebd90846125e4565b610ec79085612586565b90504284811015610eda57859650610f1a565b81811015610f1a578284610eee83856125d1565b610ef89190612603565b610f03906001612586565b610f0d90886125e4565b610f179190612603565b96505b50505050505b5092915050565b6001546001600160a01b03163314610f515760405162461bcd60e51b815260040161065990612526565b60005460ff1615610f745760405162461bcd60e51b815260040161065990612480565b61092b6000611778565b6001600160a01b0381166000908152600560205260408120548190815b81811015611042576001600160a01b0385166000908152600560205260409020805482908110610fcd57610fcd612599565b906000526020600020906002020160010154421015611030576001600160a01b038516600090815260056020526040902080548290811061101057611010612599565b9060005260206000209060020201600001548361102d9190612586565b92505b8061103a81612625565b915050610f9b565b50909392505050565b3360009081526004602052604090205460ff1661107a5760405162461bcd60e51b8152600401610659906124e4565b60005460ff161561109d5760405162461bcd60e51b815260040161065990612480565b6110c8846110c0866001600160a01b031660009081526007602052604090205490565b858585611ccc565b50505050565b6000546001600160a01b036101009091041633146110fe5760405162461bcd60e51b81526004016106599061244b565b60005460ff16156111215760405162461bcd60e51b815260040161065990612480565b61068e81611ef4565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b6000546001600160a01b036101009091041633146111855760405162461bcd60e51b81526004016106599061244b565b60005460ff16156111a85760405162461bcd60e51b815260040161065990612480565b6001600160a01b03811661120d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610659565b61068e81611bcf565b6000546001600160a01b036101009091041633146112465760405162461bcd60e51b81526004016106599061244b565b60005460ff16156112695760405162461bcd60e51b815260040161065990612480565b61068e81611f3d565b6001546001600160a01b0316331461129c5760405162461bcd60e51b815260040161065990612526565b60005460ff16156112bf5760405162461bcd60e51b815260040161065990612480565b61068e81611f89565b6001600160a01b038116600081815260026020526040808220805460ff19169055517f90eabbc0c667db2a5029ed6bc0f5fe9f356d11684a4ca9fcfaec0e53f12b9c8e9190a250565b6001600160a01b0383166113735760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610659565b6001600160a01b0382166113d45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610659565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600082116114865760405162461bcd60e51b815260206004820152601a60248201527f54696d654c6f636b3a206c6f636b20616d6f756e7420697320300000000000006044820152606401610659565b4281116114d55760405162461bcd60e51b815260206004820152601d60248201527f54696d654c6f636b3a20696e76616c69642065787069726520646174650000006044820152606401610659565b6001600160a01b0383166000818152600560209081526040808320815180830183528781528084018781528254600181810185559387529486209151600290950290910193845551920191909155517fc80fbc3452298019908587d820303825af4187ac57ed90d7328886fd00b225579190a2505050565b6000611559848461112a565b905060001981146110c857818110156115b45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610659565b6110c88484848403611311565b6001600160a01b0383166116255760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610659565b6001600160a01b0382166116875760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610659565b611692838383612007565b6001600160a01b0383166000908152600760205260409020548181101561170a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610659565b6001600160a01b0380851660008181526007602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061176a9086815260200190565b60405180910390a350505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907facf6a327286171e5ce7f9bf15425ff49aab0fd07752fec84b2bd232c9f480c1790600090a35050565b60005460ff166118135760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610659565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0382166118bd5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610659565b6001600160a01b038216600090815260076020526040902054818110156119315760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610659565b6001600160a01b03831660008181526007602090815260408083208686039055600980548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611429565b6001600160a01b038116600081815260036020526040808220805460ff19169055517f4d1fe3cc0f516ce2cfc5e83d52ee28af7f55376b18f58e7081c5fd25d8eeb1df9190a250565b6001600160a01b038116600081815260046020526040808220805460ff19166001179055517f7c5af8d36d8be103bc583da8e01d3e98f15216cc7ef38832c7550b34e8feb43a9190a250565b6001600160a01b03821660009081526005602052604090205460ff8216108015611a46575060015b611a8c5760405162461bcd60e51b81526020600482015260176024820152760a8d2daca98dec6d67440d2dcecc2d8d2c840d2dcc8caf604b1b6044820152606401610659565b6001600160a01b03821660009081526005602052604090205460ff8216611ab46001836125d1565b14611b52576001600160a01b0383166000908152600560205260409020611adc6001836125d1565b81548110611aec57611aec612599565b906000526020600020906002020160056000856001600160a01b03166001600160a01b031681526020019081526020016000208360ff1681548110611b3357611b33612599565b6000918252602090912082546002909202019081556001918201549101555b6001600160a01b0383166000908152600560205260409020805480611b7957611b7961263e565b60008281526020812060026000199093019283020181815560010181905591556040516001600160a01b038516917fb34baa9e1ce392292123bbdca3018904b21991f7411e14d99a10aaf88ec8ea0d91a2505050565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b60005460ff1615611c4b5760405162461bcd60e51b815260040161065990612480565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586118403390565b6001600160a01b038116600081815260036020526040808220805460ff19166001179055517f0de8364a528e5ca2869160b20c375fe85b4e98d24a9cb48b4dc49c5f76d05b249190a250565b6001600160a01b038516611d325760405162461bcd60e51b815260206004820152602760248201527f56657374696e674c6f636b3a206c6f636b2066726f6d20746865207a65726f206044820152666164647265737360c81b6064820152608401610659565b428311611d815760405162461bcd60e51b815260206004820152601f60248201527f56657374696e674c6f636b3a206d75737420736574206166746572206e6f77006044820152606401610659565b60008411611dd15760405162461bcd60e51b815260206004820152601860248201527f56657374696e674c6f636b3a20616d6f756e74206973203000000000000000006044820152606401610659565b60008211611e215760405162461bcd60e51b815260206004820152601860248201527f56657374696e674c6f636b3a20706572696f64206973203000000000000000006044820152606401610659565b60008111611e715760405162461bcd60e51b815260206004820152601760248201527f56657374696e674c6f636b3a20636f756e7420697320300000000000000000006044820152606401610659565b604080516080810182528581526020808201868152828401868152606084018681526001600160a01b038b166000818152600690955286852095518655925160018601559051600285015551600390930192909255915190917f04a72c810da52db1f0e22421438d411667cd0c1559e9ae7c638f1aed4bfa066d91a25050505050565b6001600160a01b038116600081815260046020526040808220805460ff19169055517f95266445d018e5b30f957c915e91b04bb4a19bf0f8f21020a08dad9be7931df49190a250565b6001600160a01b038116600081815260026020526040808220805460ff19166001179055517f86e57fd2b90329052917118de7c3f521f400d439b9650deaa906a25b08b945609190a250565b6040805160808101825260008082526020808301828152838501838152606085018481526001600160a01b0388168086526006909452868520955186559151600186015551600285015551600390930192909255915190917ff71e9d23ff58e708ca92807894c580d899e97ab5bacc17df3543475e0e439f8491a250565b6001600160a01b03831660009081526003602052604090205460ff16156120875760405162461bcd60e51b815260206004820152602e60248201527f467265657a61626c653a20746f6b656e207472616e736665722066726f6d206660448201526d1c99595e9959081858d8dbdd5b9d60921b6064820152608401610659565b6001600160a01b03821660009081526003602052604090205460ff16156121055760405162461bcd60e51b815260206004820152602c60248201527f467265657a61626c653a20746f6b656e207472616e7366657220746f2066726560448201526b195e9959081858d8dbdd5b9d60a21b6064820152608401610659565b61210e336104bd565b156121795760405162461bcd60e51b815260206004820152603560248201527f467265657a61626c653a20746f6b656e207472616e736665722063616c6c656460448201527408199c9bdb48199c99595e9959081858d8dbdd5b9d605a1b6064820152608401610659565b60005460ff16156121da5760405162461bcd60e51b815260206004820152602560248201527f5061757361626c653a20746f6b656e207472616e73666572207768696c652070604482015264185d5cd95960da1b6064820152608401610659565b806121e484610c81565b6001600160a01b03851660009081526007602052604090205461220791906125d1565b101561079a5760405162461bcd60e51b815260206004820152602660248201527f4c6f636b61626c653a20696e73756666696369656e74207472616e7366657220604482015265185b5bdd5b9d60d21b6064820152608401610659565b80356001600160a01b038116811461227b57600080fd5b919050565b60006020828403121561229257600080fd5b61229b82612264565b9392505050565b600060208083528351808285015260005b818110156122cf578581018301518582016040015282016122b3565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561230357600080fd5b61230c83612264565b946020939093013593505050565b60008060006060848603121561232f57600080fd5b61233884612264565b95602085013595506040909401359392505050565b60008060006060848603121561236257600080fd5b61236b84612264565b925061237960208501612264565b9150604084013590509250925092565b60006020828403121561239b57600080fd5b5035919050565b600080604083850312156123b557600080fd5b6123be83612264565b9150602083013560ff811681146123d457600080fd5b809150509250929050565b600080600080608085870312156123f557600080fd5b6123fe85612264565b966020860135965060408601359560600135945092505050565b6000806040838503121561242b57600080fd5b61243483612264565b915061244260208401612264565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b600181811c908216806124be57607f821691505b6020821081036124de57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526022908201527f4c6f636b61626c653a2063616c6c6572206973206e6f7420746865206c6f636b60408201526132b960f11b606082015260800190565b6020808252602a908201527f537570657276697361626c653a2063616c6c6572206973206e6f74207468652060408201526939bab832b93b34b9b7b960b11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561073757610737612570565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156125c157600080fd5b8151801515811461229b57600080fd5b8181038181111561073757610737612570565b60008160001904831182151516156125fe576125fe612570565b500290565b60008261262057634e487b7160e01b600052601260045260246000fd5b500490565b60006001820161263757612637612570565b5060010190565b634e487b7160e01b600052603160045260246000fdfea26469706673582212209e745cf95f09633579440fa010ef6515d49379fa51b9fd9c0548a60b2c2b818964736f6c63430008100033
Deployed Bytecode Sourcemap
31226:5226:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34810:111;;;;;;:::i;:::-;;:::i;:::-;;8113:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10464:201;;;;;;:::i;:::-;;:::i;:::-;;;1360:14:1;;1353:22;1335:41;;1323:2;1308:18;10464:201:0;1195:187:1;35505:198:0;;;;;;:::i;:::-;;:::i;9233:108::-;9321:12;;9233:108;;;1860:25:1;;;1848:2;1833:18;9233:108:0;1714:177:1;29382:344:0;;;;;;:::i;:::-;-1:-1:-1;;;;;29594:22:0;29485:7;29594:22;;;:13;:22;;;;;:29;;29625:31;;;;29658:29;;;;29689:28;;;;;29594:29;;29625:31;;29658:29;29689:28;29382:344;;;;;2127:25:1;;;2183:2;2168:18;;2161:34;;;;2211:18;;;2204:34;2269:2;2254:18;;2247:34;2114:3;2099:19;29382:344:0;1896:391:1;11245:295:0;;;;;;:::i;:::-;;:::i;24885:105::-;;;;;;:::i;:::-;-1:-1:-1;;;;;24965:17:0;24941:4;24965:17;;;:8;:17;;;;;;;;;24885:105;9075:93;;;9158:2;2767:36:1;;2755:2;2740:18;9075:93:0;2625:184:1;33686:257:0;;;;;;:::i;:::-;;:::i;11949:238::-;;;;;;:::i;:::-;;:::i;34146:76::-;;;:::i;34979:108::-;;;;;;:::i;:::-;;:::i;22096:105::-;;;;;;:::i;:::-;-1:-1:-1;;;;;22176:17:0;22152:4;22176:17;;;:8;:17;;;;;;;;;22096:105;34464:108;;;;;;:::i;:::-;;:::i;35152:105::-;;;;;;:::i;:::-;;:::i;26972:284::-;;;;;;:::i;:::-;;:::i;:::-;;;;3521:25:1;;;3577:2;3562:18;;3555:34;;;;3494:18;26972:284:0;3347:248:1;20851:97:0;20929:11;;-1:-1:-1;;;;;20929:11:0;20851:97;;;-1:-1:-1;;;;;3764:32:1;;;3746:51;;3734:2;3719:18;20851:97:0;3600:203:1;1690:86:0;1737:4;1761:7;;;1690:86;;35779:140;;;;;;:::i;:::-;;:::i;9404:127::-;;;;;;:::i;:::-;-1:-1:-1;;;;;9505:18:0;9478:7;9505:18;;;:9;:18;;;;;;;9404:127;32903:109;;;:::i;23631:106::-;;;;;;:::i;:::-;-1:-1:-1;;;;;23712:17:0;23688:4;23712:17;;;:8;:17;;;;;;;;;23631:106;34006:75;;;:::i;31007:163::-;;;;;;:::i;:::-;;:::i;31675:152::-;;;;;;:::i;:::-;;:::i;34289:99::-;;;;;;:::i;:::-;;:::i;19196:87::-;19242:7;19269:6;;;;-1:-1:-1;;;;;19269:6:0;19196:87;;8332:104;;;:::i;12690:436::-;;;;;;:::i;:::-;;:::i;9737:193::-;;;;;;:::i;:::-;;:::i;30030:812::-;;;;;;:::i;:::-;;:::i;33101:134::-;;;:::i;26651:126::-;;;;;;:::i;:::-;-1:-1:-1;;;;;26743:19:0;26716:7;26743:19;;;:10;:19;;;;;:26;;26651:126;27440:438;;;;;;:::i;:::-;;:::i;35991:253::-;;;;;;:::i;:::-;;:::i;35325:111::-;;;;;;:::i;:::-;;:::i;9993:151::-;;;;;;:::i;:::-;;:::i;33390:207::-;;;;;;:::i;:::-;;:::i;34637:105::-;;;;;;:::i;:::-;;:::i;36323:126::-;;;;;;:::i;:::-;;:::i;34810:111::-;19242:7;19269:6;-1:-1:-1;;;;;19269:6:0;;;;;682:10;19416:23;19408:68;;;;-1:-1:-1;;;19408:68:0;;;;;;;:::i;:::-;;;;;;;;;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;34891:22:::2;34905:7;34891:13;:22::i;:::-;34810:111:::0;:::o;8113:100::-;8167:13;8200:5;8193:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8113:100;:::o;10464:201::-;10547:4;682:10;10603:32;682:10;10619:7;10628:6;10603:8;:32::i;:::-;10653:4;10646:11;;;10464:201;;;;;:::o;35505:198::-;682:10;24726:22;;;;:8;:22;;;;;;;;24718:69;;;;-1:-1:-1;;;24718:69:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;35655:40:::2;35668:7;35677:6;35685:9;35655:12;:40::i;:::-;35505:198:::0;;;:::o;11245:295::-;11376:4;682:10;11434:38;11450:4;682:10;11465:6;11434:15;:38::i;:::-;11483:27;11493:4;11499:2;11503:6;11483:9;:27::i;:::-;-1:-1:-1;11528:4:0;;11245:295;-1:-1:-1;;;;11245:295:0:o;33686:257::-;20929:11;;-1:-1:-1;;;;;20929:11:0;682:10;21091:28;21083:83;;;;-1:-1:-1;;;21083:83:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33801:27:0;::::2;33793:88;;;::::0;-1:-1:-1;;;33793:88:0;;6576:2:1;33793:88:0::2;::::0;::::2;6558:21:1::0;6615:2;6595:18;;;6588:30;6654:34;6634:18;;;6627:62;-1:-1:-1;;;6705:18:1;;;6698:46;6761:19;;33793:88:0::2;6374:412:1::0;33793:88:0::2;33892:43;33921:13;33892:28;:43::i;11949:238::-:0;12037:4;682:10;12093:64;682:10;12109:7;12146:10;12118:25;682:10;12109:7;12118:9;:25::i;:::-;:38;;;;:::i;:::-;12093:8;:64::i;34146:76::-;19242:7;19269:6;-1:-1:-1;;;;;19269:6:0;;;;;682:10;19416:23;19408:68;;;;-1:-1:-1;;;19408:68:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2285:41:::1;;;::::0;-1:-1:-1;;;2285:41:0;;7255:2:1;2285:41:0::1;::::0;::::1;7237:21:1::0;7294:2;7274:18;;;7267:30;-1:-1:-1;;;7313:18:1;;;7306:50;7373:18;;2285:41:0::1;7053:344:1::0;2285:41:0::1;34204:10:::2;:8;:10::i;:::-;34146:76::o:0;34979:108::-;682:10;22336:22;;;;:8;:22;;;;;;;;22328:69;;;;-1:-1:-1;;;22328:69:0;;7604:2:1;22328:69:0;;;7586:21:1;7643:2;7623:18;;;7616:30;7682:34;7662:18;;;7655:62;-1:-1:-1;;;7733:18:1;;;7726:32;7775:19;;22328:69:0;7402:398:1;22328:69:0;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;35052:27:::2;682:10:::0;35072:6:::2;35052:5;:27::i;34464:108::-:0;20929:11;;-1:-1:-1;;;;;20929:11:0;682:10;21091:28;21083:83;;;;-1:-1:-1;;;21083:83:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;34546:18:::2;34556:7;34546:9;:18::i;35152:105::-:0;19242:7;19269:6;-1:-1:-1;;;;;19269:6:0;;;;;682:10;19416:23;19408:68;;;;-1:-1:-1;;;19408:68:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;35230:19:::2;35241:7;35230:10;:19::i;26972:284::-:0;-1:-1:-1;;;;;27081:19:0;;27044:7;27081:19;;;:10;:19;;;;;:26;27044:7;;27081:34;;;-1:-1:-1;27081:48:0;;;;-1:-1:-1;27119:10:0;27081:48;27073:84;;;;-1:-1:-1;;;27073:84:0;;8007:2:1;27073:84:0;;;7989:21:1;8046:2;8026:18;;;8019:30;-1:-1:-1;;;8065:18:1;;;8058:53;8128:18;;27073:84:0;7805:347:1;27073:84:0;-1:-1:-1;;;;;27176:19:0;;;;;;:10;:19;;;;;:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:33;-1:-1:-1;;;;;27211:19:0;;;;:10;:19;;;;;;;:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:36;;;27168:80;;;;26972:284;;;;;:::o;35779:140::-;20929:11;;-1:-1:-1;;;;;20929:11:0;682:10;21091:28;21083:83;;;;-1:-1:-1;;;21083:83:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;35880:31:::2;35896:7;35905:5;35880:15;:31::i;:::-;35779:140:::0;;:::o;32903:109::-;19242:7;19269:6;-1:-1:-1;;;;;19269:6:0;;;;;682:10;19416:23;19408:68;;;;-1:-1:-1;;;19408:68:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;32974:30:::2;33001:1;32974:18;:30::i;34006:75::-:0;19242:7;19269:6;-1:-1:-1;;;;;19269:6:0;;;;;682:10;19416:23;19408:68;;;;-1:-1:-1;;;19408:68:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;34065:8:::2;:6;:8::i;31007:163::-:0;31073:7;31131:31;31154:7;31131:22;:31::i;:::-;31100:28;31120:7;31100:19;:28::i;:::-;:62;;;;:::i;31675:152::-;19242:7;19269:6;-1:-1:-1;;;;;19269:6:0;;;;;682:10;19416:23;19408:68;;;;-1:-1:-1;;;19408:68:0;;;;;;;:::i;:::-;31775:12:::1;-1:-1:-1::0;;;;;31768:29:0::1;;31798:7;19242::::0;19269:6;-1:-1:-1;;;;;19269:6:0;;;;;;19196:87;31798:7:::1;31768:51;::::0;-1:-1:-1;;;;;;31768:51:0::1;::::0;;;;;;-1:-1:-1;;;;;8481:32:1;;;31768:51:0::1;::::0;::::1;8463::1::0;8530:18;;;8523:34;;;8436:18;;31768:51:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34289:99::-:0;19242:7;19269:6;-1:-1:-1;;;;;19269:6:0;;;;;682:10;19416:23;19408:68;;;;-1:-1:-1;;;19408:68:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;34364:16:::2;34372:7;34364;:16::i;8332:104::-:0;8388:13;8421:7;8414:14;;;;;:::i;12690:436::-;12783:4;682:10;12783:4;12866:25;682:10;12883:7;12866:9;:25::i;:::-;12839:52;;12930:15;12910:16;:35;;12902:85;;;;-1:-1:-1;;;12902:85:0;;9052:2:1;12902:85:0;;;9034:21:1;9091:2;9071:18;;;9064:30;9130:34;9110:18;;;9103:62;-1:-1:-1;;;9181:18:1;;;9174:35;9226:19;;12902:85:0;8850:401:1;12902:85:0;13023:60;13032:5;13039:7;13067:15;13048:16;:34;13023:8;:60::i;9737:193::-;9816:4;682:10;9872:28;682:10;9889:2;9893:6;9872:9;:28::i;30030:812::-;-1:-1:-1;;;;;30179:22:0;;30100:7;30179:22;;;:13;:22;;;;;:29;30100:7;;30223:10;;30219:579;;-1:-1:-1;;;;;30269:22:0;;30250:16;30269:22;;;:13;:22;;;;;:31;;;;;30332:29;;;;30392:28;;;;;30269:31;;30392:28;;30476:9;;30392:28;30476:9;:::i;:::-;30466:20;;:6;:20;:::i;:::-;30455:31;;:8;:31;:::i;:::-;30435:51;-1:-1:-1;30521:15:0;30555:20;;;30551:236;;;30618:6;30596:28;;30551:236;;;30662:9;30650;:21;30646:141;;;30766:5;30751:6;30726:21;30738:9;30726;:21;:::i;:::-;30725:32;;;;:::i;:::-;:36;;30760:1;30725:36;:::i;:::-;30715:47;;:6;:47;:::i;:::-;30714:57;;;;:::i;:::-;30692:79;;30646:141;30235:563;;;;;30219:579;-1:-1:-1;30815:19:0;30030:812;-1:-1:-1;;30030:812:0:o;33101:134::-;20929:11;;-1:-1:-1;;;;;20929:11:0;682:10;21091:28;21083:83;;;;-1:-1:-1;;;21083:83:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;33187:40:::2;33224:1;33187:28;:40::i;27440:438::-:0;-1:-1:-1;;;;;27582:19:0;;27507:7;27582:19;;;:10;:19;;;;;:26;27507:7;;;27619:218;27643:3;27639:1;:7;27619:218;;;-1:-1:-1;;;;;27690:19:0;;;;;;:10;:19;;;;;:22;;27710:1;;27690:22;;;;;;:::i;:::-;;;;;;;;;;;:32;;;27672:15;:50;27668:158;;;-1:-1:-1;;;;;27781:19:0;;;;;;:10;:19;;;;;:22;;27801:1;;27781:22;;;;;;:::i;:::-;;;;;;;;;;;:29;;;27762:16;:48;;;;:::i;:::-;27743:67;;27668:158;27648:3;;;;:::i;:::-;;;;27619:218;;;-1:-1:-1;27854:16:0;;27440:438;-1:-1:-1;;;27440:438:0:o;35991:253::-;682:10;24726:22;;;;:8;:22;;;;;;;;24718:69;;;;-1:-1:-1;;;24718:69:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;36167:69:::2;36183:7;36192:18;36202:7;-1:-1:-1::0;;;;;9505:18:0;9478:7;9505:18;;;:9;:18;;;;;;;9404:127;36192:18:::2;36212:8;36222:6;36230:5;36167:15;:69::i;:::-;35991:253:::0;;;;:::o;35325:111::-;19242:7;19269:6;-1:-1:-1;;;;;19269:6:0;;;;;682:10;19416:23;19408:68;;;;-1:-1:-1;;;19408:68:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;35406:22:::2;35420:7;35406:13;:22::i;9993:151::-:0;-1:-1:-1;;;;;10109:18:0;;;10082:7;10109:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9993:151::o;33390:207::-;19242:7;19269:6;-1:-1:-1;;;;;19269:6:0;;;;;682:10;19416:23;19408:68;;;;-1:-1:-1;;;19408:68:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33485:22:0;::::2;33477:73;;;::::0;-1:-1:-1;;;33477:73:0;;10126:2:1;33477:73:0::2;::::0;::::2;10108:21:1::0;10165:2;10145:18;;;10138:30;10204:34;10184:18;;;10177:62;-1:-1:-1;;;10255:18:1;;;10248:36;10301:19;;33477:73:0::2;9924:402:1::0;33477:73:0::2;33561:28;33580:8;33561:18;:28::i;34637:105::-:0;19242:7;19269:6;-1:-1:-1;;;;;19269:6:0;;;;;682:10;19416:23;19408:68;;;;-1:-1:-1;;;19408:68:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;34715:19:::2;34726:7;34715:10;:19::i;36323:126::-:0;20929:11;;-1:-1:-1;;;;;20929:11:0;682:10;21091:28;21083:83;;;;-1:-1:-1;;;21083:83:0;;;;;;;:::i;:::-;1737:4;1761:7;;;2015:9:::1;2007:38;;;;-1:-1:-1::0;;;2007:38:0::1;;;;;;;:::i;:::-;36414:27:::2;36433:7;36414:18;:27::i;22707:131::-:0;-1:-1:-1;;;;;22767:17:0;;22787:5;22767:17;;;:8;:17;;;;;;:25;;-1:-1:-1;;22767:25:0;;;22808:22;;;22787:5;22808:22;22707:131;:::o;16421:380::-;-1:-1:-1;;;;;16557:19:0;;16549:68;;;;-1:-1:-1;;;16549:68:0;;10533:2:1;16549:68:0;;;10515:21:1;10572:2;10552:18;;;10545:30;10611:34;10591:18;;;10584:62;-1:-1:-1;;;10662:18:1;;;10655:34;10706:19;;16549:68:0;10331:400:1;16549:68:0;-1:-1:-1;;;;;16636:21:0;;16628:68;;;;-1:-1:-1;;;16628:68:0;;10938:2:1;16628:68:0;;;10920:21:1;10977:2;10957:18;;;10950:30;11016:34;10996:18;;;10989:62;-1:-1:-1;;;11067:18:1;;;11060:32;11109:19;;16628:68:0;10736:398:1;16628:68:0;-1:-1:-1;;;;;16709:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16761:32;;1860:25:1;;;16761:32:0;;1833:18:1;16761:32:0;;;;;;;;16421:380;;;:::o;25480:364::-;25625:1;25616:6;:10;25608:49;;;;-1:-1:-1;;;25608:49:0;;11341:2:1;25608:49:0;;;11323:21:1;11380:2;11360:18;;;11353:30;11419:28;11399:18;;;11392:56;11465:18;;25608:49:0;11139:350:1;25608:49:0;25688:15;25676:9;:27;25668:69;;;;-1:-1:-1;;;25668:69:0;;11696:2:1;25668:69:0;;;11678:21:1;11735:2;11715:18;;;11708:30;11774:31;11754:18;;;11747:59;11823:18;;25668:69:0;11494:353:1;25668:69:0;-1:-1:-1;;;;;25748:19:0;;;;;;:10;:19;;;;;;;;25773:27;;;;;;;;;;;;;;;;25748:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25817:19;;;25748;25817;25480:364;;;:::o;17092:453::-;17227:24;17254:25;17264:5;17271:7;17254:9;:25::i;:::-;17227:52;;-1:-1:-1;;17294:16:0;:37;17290:248;;17376:6;17356:16;:26;;17348:68;;;;-1:-1:-1;;;17348:68:0;;12054:2:1;17348:68:0;;;12036:21:1;12093:2;12073:18;;;12066:30;12132:31;12112:18;;;12105:59;12181:18;;17348:68:0;11852:353:1;17348:68:0;17460:51;17469:5;17476:7;17504:6;17485:16;:25;17460:8;:51::i;13596:790::-;-1:-1:-1;;;;;13727:18:0;;13719:68;;;;-1:-1:-1;;;13719:68:0;;12412:2:1;13719:68:0;;;12394:21:1;12451:2;12431:18;;;12424:30;12490:34;12470:18;;;12463:62;-1:-1:-1;;;12541:18:1;;;12534:35;12586:19;;13719:68:0;12210:401:1;13719:68:0;-1:-1:-1;;;;;13806:16:0;;13798:64;;;;-1:-1:-1;;;13798:64:0;;12818:2:1;13798:64:0;;;12800:21:1;12857:2;12837:18;;;12830:30;12896:34;12876:18;;;12869:62;-1:-1:-1;;;12947:18:1;;;12940:33;12990:19;;13798:64:0;12616:399:1;13798:64:0;13875:38;13896:4;13902:2;13906:6;13875:20;:38::i;:::-;-1:-1:-1;;;;;13948:15:0;;13926:19;13948:15;;;:9;:15;;;;;;13982:21;;;;13974:72;;;;-1:-1:-1;;;13974:72:0;;13222:2:1;13974:72:0;;;13204:21:1;13261:2;13241:18;;;13234:30;13300:34;13280:18;;;13273:62;-1:-1:-1;;;13351:18:1;;;13344:36;13397:19;;13974:72:0;13020:402:1;13974:72:0;-1:-1:-1;;;;;14082:15:0;;;;;;;:9;:15;;;;;;14100:20;;;14082:38;;14300:13;;;;;;;;;;:23;;;;;;14352:26;;;;;;14114:6;1860:25:1;;1848:2;1833:18;;1714:177;14352:26:0;;;;;;;;13708:678;13596:790;;;:::o;21362:246::-;21475:11;;;-1:-1:-1;;;;;21497:27:0;;;-1:-1:-1;;;;;;21497:27:0;;;;;;;21540:60;;21475:11;;;21497:27;21475:11;;21540:60;;21451:21;;21540:60;21440:168;21362:246;:::o;2749:120::-;1737:4;1761:7;;;2285:41;;;;-1:-1:-1;;;2285:41:0;;7255:2:1;2285:41:0;;;7237:21:1;7294:2;7274:18;;;7267:30;-1:-1:-1;;;7313:18:1;;;7306:50;7373:18;;2285:41:0;7053:344:1;2285:41:0;2818:5:::1;2808:15:::0;;-1:-1:-1;;2808:15:0::1;::::0;;2839:22:::1;682:10:::0;2848:12:::1;2839:22;::::0;-1:-1:-1;;;;;3764:32:1;;;3746:51;;3734:2;3719:18;2839:22:0::1;;;;;;;2749:120::o:0;15431:552::-;-1:-1:-1;;;;;15515:21:0;;15507:67;;;;-1:-1:-1;;;15507:67:0;;13629:2:1;15507:67:0;;;13611:21:1;13668:2;13648:18;;;13641:30;13707:34;13687:18;;;13680:62;-1:-1:-1;;;13758:18:1;;;13751:31;13799:19;;15507:67:0;13427:397:1;15507:67:0;-1:-1:-1;;;;;15612:18:0;;15587:22;15612:18;;;:9;:18;;;;;;15649:24;;;;15641:71;;;;-1:-1:-1;;;15641:71:0;;14031:2:1;15641:71:0;;;14013:21:1;14070:2;14050:18;;;14043:30;14109:34;14089:18;;;14082:62;-1:-1:-1;;;14160:18:1;;;14153:32;14202:19;;15641:71:0;13829:398:1;15641:71:0;-1:-1:-1;;;;;15748:18:0;;;;;;:9;:18;;;;;;;;15769:23;;;15748:44;;15887:12;:22;;;;;;;15938:37;1860:25:1;;;15748:18:0;;;15938:37;;1833:18:1;15938:37:0;1714:177:1;23429:123:0;-1:-1:-1;;;;;23485:17:0;;23505:5;23485:17;;;:8;:17;;;;;;:25;;-1:-1:-1;;23485:25:0;;;23526:18;;;23505:5;23526:18;23429:123;:::o;25067:125::-;-1:-1:-1;;;;;25124:17:0;;;;;;:8;:17;;;;;;:24;;-1:-1:-1;;25124:24:0;25144:4;25124:24;;;25164:20;;;25124:17;25164:20;25067:125;:::o;26025:457::-;-1:-1:-1;;;;;26108:19:0;;;;;;:10;:19;;;;;:26;:34;;;-1:-1:-1;26108:48:0;;;;-1:-1:-1;26146:10:0;26108:48;26100:84;;;;-1:-1:-1;;;26100:84:0;;8007:2:1;26100:84:0;;;7989:21:1;8046:2;8026:18;;;8019:30;-1:-1:-1;;;8065:18:1;;;8058:53;8128:18;;26100:84:0;7805:347:1;26100:84:0;-1:-1:-1;;;;;26211:19:0;;26197:11;26211:19;;;:10;:19;;;;;:26;26252:16;;;:7;26258:1;26211:26;26252:7;:::i;:::-;:16;26248:154;;-1:-1:-1;;;;;26362:19:0;;;;;;:10;:19;;;;;26382:7;26388:1;26382:3;:7;:::i;:::-;26362:28;;;;;;;;:::i;:::-;;;;;;;;;;;26333:10;:19;26344:7;-1:-1:-1;;;;;26333:19:0;-1:-1:-1;;;;;26333:19:0;;;;;;;;;;;;26353:5;26333:26;;;;;;;;;;:::i;:::-;;;;;;;;;:57;;:26;;;;;:57;;;;;;;;;;;26248:154;-1:-1:-1;;;;;26412:19:0;;;;;;:10;:19;;;;;:25;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;26412:25:0;;;;;;;;;;;;;;;;;26453:21;;-1:-1:-1;;;;;26453:21:0;;;;;;26089:393;26025:457;;:::o;19656:191::-;19730:16;19749:6;;-1:-1:-1;;;;;19766:17:0;;;19749:6;19766:17;;;-1:-1:-1;;;;;;19766:17:0;;;;;19799:40;;19749:6;;;;;;;19766:17;;19749:6;;19799:40;;;19719:128;19656:191;:::o;2490:118::-;1737:4;1761:7;;;2015:9;2007:38;;;;-1:-1:-1;;;2007:38:0;;;;;;;:::i;:::-;2550:7:::1;:14:::0;;-1:-1:-1;;2550:14:0::1;2560:4;2550:14;::::0;;2580:20:::1;2587:12;682:10:::0;;602:98;23225:118;-1:-1:-1;;;;;23279:17:0;;;;;;:8;:17;;;;;;:24;;-1:-1:-1;;23279:24:0;23299:4;23279:24;;;23319:16;;;23279:17;23319:16;23225:118;:::o;28269:631::-;-1:-1:-1;;;;;28456:21:0;;28448:73;;;;-1:-1:-1;;;28448:73:0;;14566:2:1;28448:73:0;;;14548:21:1;14605:2;14585:18;;;14578:30;14644:34;14624:18;;;14617:62;-1:-1:-1;;;14695:18:1;;;14688:37;14742:19;;28448:73:0;14364:403:1;28448:73:0;28551:15;28540:8;:26;28532:70;;;;-1:-1:-1;;;28532:70:0;;14974:2:1;28532:70:0;;;14956:21:1;15013:2;14993:18;;;14986:30;15052:33;15032:18;;;15025:61;15103:18;;28532:70:0;14772:355:1;28532:70:0;28630:1;28621:6;:10;28613:47;;;;-1:-1:-1;;;28613:47:0;;15334:2:1;28613:47:0;;;15316:21:1;15373:2;15353:18;;;15346:30;15412:26;15392:18;;;15385:54;15456:18;;28613:47:0;15132:348:1;28613:47:0;28688:1;28679:6;:10;28671:47;;;;-1:-1:-1;;;28671:47:0;;15687:2:1;28671:47:0;;;15669:21:1;15726:2;15706:18;;;15699:30;15765:26;15745:18;;;15738:54;15809:18;;28671:47:0;15485:348:1;28671:47:0;28745:1;28737:5;:9;28729:45;;;;-1:-1:-1;;;28729:45:0;;16040:2:1;28729:45:0;;;16022:21:1;16079:2;16059:18;;;16052:30;16118:25;16098:18;;;16091:53;16161:18;;28729:45:0;15838:347:1;28729:45:0;28810:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28785:22:0;;-1:-1:-1;28785:22:0;;;:13;:22;;;;;;:69;;;;;;;;;;;;;;;;;;;;;;;;;28870:22;;28785;;28870;;;28269:631;;;;;:::o;25275:131::-;-1:-1:-1;;;;;25335:17:0;;25355:5;25335:17;;;:8;:17;;;;;;:25;;-1:-1:-1;;25335:25:0;;;25376:22;;;25355:5;25376:22;25275:131;:::o;22495:125::-;-1:-1:-1;;;;;22552:17:0;;;;;;:8;:17;;;;;;:24;;-1:-1:-1;;22552:24:0;22572:4;22552:24;;;22592:20;;;22552:17;22592:20;22495:125;:::o;29054:161::-;29144:23;;;;;;;;-1:-1:-1;29144:23:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29119:22:0;;;;;:13;:22;;;;;;:48;;;;;;;;;;;;;;;;;;;;;;;;29183:24;;29119:22;;29183:24;;;29054:161;:::o;31903:649::-;-1:-1:-1;;;;;23712:17:0;;23688:4;23712:17;;;:8;:17;;;;;;;;32110:16;32102:75;;;;-1:-1:-1;;;32102:75:0;;16392:2:1;32102:75:0;;;16374:21:1;16431:2;16411:18;;;16404:30;16470:34;16450:18;;;16443:62;-1:-1:-1;;;16521:18:1;;;16514:44;16575:19;;32102:75:0;16190:410:1;32102:75:0;-1:-1:-1;;;;;23712:17:0;;23688:4;23712:17;;;:8;:17;;;;;;;;32196:14;32188:71;;;;-1:-1:-1;;;32188:71:0;;16807:2:1;32188:71:0;;;16789:21:1;16846:2;16826:18;;;16819:30;16885:34;16865:18;;;16858:62;-1:-1:-1;;;16936:18:1;;;16929:42;16988:19;;32188:71:0;16605:408:1;32188:71:0;32279:23;682:10;32289:12;602:98;32279:23;32278:24;32270:90;;;;-1:-1:-1;;;32270:90:0;;17220:2:1;32270:90:0;;;17202:21:1;17259:2;17239:18;;;17232:30;17298:34;17278:18;;;17271:62;-1:-1:-1;;;17349:18:1;;;17342:51;17410:19;;32270:90:0;17018:417:1;32270:90:0;1737:4;1761:7;;;32379:9;32371:59;;;;-1:-1:-1;;;32371:59:0;;17642:2:1;32371:59:0;;;17624:21:1;17681:2;17661:18;;;17654:30;17720:34;17700:18;;;17693:62;-1:-1:-1;;;17771:18:1;;;17764:35;17816:19;;32371:59:0;17440:401:1;32371:59:0;32495:6;32467:24;32486:4;32467:18;:24::i;:::-;-1:-1:-1;;;;;9505:18:0;;9478:7;9505:18;;;:9;:18;;;;;;32449:42;;;;:::i;:::-;:52;;32441:103;;;;-1:-1:-1;;;32441:103:0;;18048:2:1;32441:103:0;;;18030:21:1;18087:2;18067:18;;;18060:30;18126:34;18106:18;;;18099:62;-1:-1:-1;;;18177:18:1;;;18170:36;18223:19;;32441:103:0;17846:402:1;14:173;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;:::-;333:39;192:186;-1:-1:-1;;;192:186:1:o;383:548::-;495:4;524:2;553;542:9;535:21;585:6;579:13;628:6;623:2;612:9;608:18;601:34;653:1;663:140;677:6;674:1;671:13;663:140;;;772:14;;;768:23;;762:30;738:17;;;757:2;734:26;727:66;692:10;;663:140;;;667:3;852:1;847:2;838:6;827:9;823:22;819:31;812:42;922:2;915;911:7;906:2;898:6;894:15;890:29;879:9;875:45;871:54;863:62;;;;383:548;;;;:::o;936:254::-;1004:6;1012;1065:2;1053:9;1044:7;1040:23;1036:32;1033:52;;;1081:1;1078;1071:12;1033:52;1104:29;1123:9;1104:29;:::i;:::-;1094:39;1180:2;1165:18;;;;1152:32;;-1:-1:-1;;;936:254:1:o;1387:322::-;1464:6;1472;1480;1533:2;1521:9;1512:7;1508:23;1504:32;1501:52;;;1549:1;1546;1539:12;1501:52;1572:29;1591:9;1572:29;:::i;:::-;1562:39;1648:2;1633:18;;1620:32;;-1:-1:-1;1699:2:1;1684:18;;;1671:32;;1387:322;-1:-1:-1;;;1387:322:1:o;2292:328::-;2369:6;2377;2385;2438:2;2426:9;2417:7;2413:23;2409:32;2406:52;;;2454:1;2451;2444:12;2406:52;2477:29;2496:9;2477:29;:::i;:::-;2467:39;;2525:38;2559:2;2548:9;2544:18;2525:38;:::i;:::-;2515:48;;2610:2;2599:9;2595:18;2582:32;2572:42;;2292:328;;;;;:::o;2814:180::-;2873:6;2926:2;2914:9;2905:7;2901:23;2897:32;2894:52;;;2942:1;2939;2932:12;2894:52;-1:-1:-1;2965:23:1;;2814:180;-1:-1:-1;2814:180:1:o;2999:343::-;3065:6;3073;3126:2;3114:9;3105:7;3101:23;3097:32;3094:52;;;3142:1;3139;3132:12;3094:52;3165:29;3184:9;3165:29;:::i;:::-;3155:39;;3244:2;3233:9;3229:18;3216:32;3288:4;3281:5;3277:16;3270:5;3267:27;3257:55;;3308:1;3305;3298:12;3257:55;3331:5;3321:15;;;2999:343;;;;;:::o;3808:391::-;3894:6;3902;3910;3918;3971:3;3959:9;3950:7;3946:23;3942:33;3939:53;;;3988:1;3985;3978:12;3939:53;4011:29;4030:9;4011:29;:::i;:::-;4001:39;4087:2;4072:18;;4059:32;;-1:-1:-1;4138:2:1;4123:18;;4110:32;;4189:2;4174:18;4161:32;;-1:-1:-1;3808:391:1;-1:-1:-1;;;3808:391:1:o;4204:260::-;4272:6;4280;4333:2;4321:9;4312:7;4308:23;4304:32;4301:52;;;4349:1;4346;4339:12;4301:52;4372:29;4391:9;4372:29;:::i;:::-;4362:39;;4420:38;4454:2;4443:9;4439:18;4420:38;:::i;:::-;4410:48;;4204:260;;;;;:::o;4469:356::-;4671:2;4653:21;;;4690:18;;;4683:30;4749:34;4744:2;4729:18;;4722:62;4816:2;4801:18;;4469:356::o;4830:340::-;5032:2;5014:21;;;5071:2;5051:18;;;5044:30;-1:-1:-1;;;5105:2:1;5090:18;;5083:46;5161:2;5146:18;;4830:340::o;5175:380::-;5254:1;5250:12;;;;5297;;;5318:61;;5372:4;5364:6;5360:17;5350:27;;5318:61;5425:2;5417:6;5414:14;5394:18;5391:38;5388:161;;5471:10;5466:3;5462:20;5459:1;5452:31;5506:4;5503:1;5496:15;5534:4;5531:1;5524:15;5388:161;;5175:380;;;:::o;5560:398::-;5762:2;5744:21;;;5801:2;5781:18;;;5774:30;5840:34;5835:2;5820:18;;5813:62;-1:-1:-1;;;5906:2:1;5891:18;;5884:32;5948:3;5933:19;;5560:398::o;5963:406::-;6165:2;6147:21;;;6204:2;6184:18;;;6177:30;6243:34;6238:2;6223:18;;6216:62;-1:-1:-1;;;6309:2:1;6294:18;;6287:40;6359:3;6344:19;;5963:406::o;6791:127::-;6852:10;6847:3;6843:20;6840:1;6833:31;6883:4;6880:1;6873:15;6907:4;6904:1;6897:15;6923:125;6988:9;;;7009:10;;;7006:36;;;7022:18;;:::i;8157:127::-;8218:10;8213:3;8209:20;8206:1;8199:31;8249:4;8246:1;8239:15;8273:4;8270:1;8263:15;8568:277;8635:6;8688:2;8676:9;8667:7;8663:23;8659:32;8656:52;;;8704:1;8701;8694:12;8656:52;8736:9;8730:16;8789:5;8782:13;8775:21;8768:5;8765:32;8755:60;;8811:1;8808;8801:12;9256:128;9323:9;;;9344:11;;;9341:37;;;9358:18;;:::i;9389:168::-;9429:7;9495:1;9491;9487:6;9483:14;9480:1;9477:21;9472:1;9465:9;9458:17;9454:45;9451:71;;;9502:18;;:::i;:::-;-1:-1:-1;9542:9:1;;9389:168::o;9562:217::-;9602:1;9628;9618:132;;9672:10;9667:3;9663:20;9660:1;9653:31;9707:4;9704:1;9697:15;9735:4;9732:1;9725:15;9618:132;-1:-1:-1;9764:9:1;;9562:217::o;9784:135::-;9823:3;9844:17;;;9841:43;;9864:18;;:::i;:::-;-1:-1:-1;9911:1:1;9900:13;;9784:135::o;14232:127::-;14293:10;14288:3;14284:20;14281:1;14274:31;14324:4;14321:1;14314:15;14348:4;14345:1;14338:15
Swarm Source
ipfs://9e745cf95f09633579440fa010ef6515d49379fa51b9fd9c0548a60b2c2b8189
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.