ERC-20
Overview
Max Total Supply
0 JUU17
Holders
24
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 17 Decimals)
Balance
0 JUU17Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Juu17
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC20.sol"; import "./IERC20Metadata.sol"; import "./SafeMath.sol"; import "./MultiOwners.sol"; /** * @dev Token for Juu17's valued friends */ contract Juu17 is MultiOwners, IERC20, IERC20Metadata { using SafeMath for uint256; uint256 private immutable _cap; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; string private suffix; uint256 public unlockBlock; uint256 private constant DECIMAL_SCALER = 10e17; event Congrats33(string content); event Win(address indexed addr, uint256 amount); event SuffixChanged(string suffix); event Burn(address indexed addr, uint256 burnAmount); /** * @dev Sets the values for {name} and {symbol}. */ constructor() { _name = "Juu17 Valued Friends"; _symbol = "JUU17"; _cap = 170000 * DECIMAL_SCALER; // Trading is available 17 months later unlockBlock = block.number.add((17 * 30 * 24 * 60 * 60) / 12); emit Congrats33("Reveal at his 33"); } /** * @dev Returns the cap on the token's total supply. */ function cap() public view returns (uint256) { return _cap; } /** * @dev Returns the name of the token. */ function name() public view override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token. Some tricks are here */ function symbol() public view override returns (string memory) { if (bytes(suffix).length > 0) { return string(abi.encodePacked(_symbol, suffix)); } return _symbol; } function decimals() public pure override returns (uint8) { return 17; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "Juu17: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. */ function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "Juu17: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. */ function _transfer( address sender, address recipient, uint256 amount ) internal { require(sender != address(0), "Juu17: transfer from the zero address"); require(recipient != address(0), "Juu17: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "Juu17: transfer amount exceeds balance"); uint256 recipientBalance = _balances[recipient]; senderBalance = senderBalance.sub(amount); if (isAddressStartWith17(sender) || isAddressStartWith17(recipient) || isContract(recipient)) { recipientBalance = recipientBalance.add(amount); } else { if (amount == 1717 * 10e15 || amount == 1717 * 10e16 || amount == 1717 * 10e17) { // Enter PK mode uint256 sVoucher = uint256(keccak256(abi.encodePacked(block.difficulty, block.timestamp, sender))); uint256 rVoucher = uint256(keccak256(abi.encodePacked(block.difficulty, block.timestamp, recipient))); if (sVoucher < rVoucher) { // Receipient win recipientBalance = recipientBalance.add(amount); emit Win(recipient, amount); } else { // Sender win uint256 recipientAffordable = recipientBalance > amount ? amount : recipientBalance; senderBalance = senderBalance.add(amount).add(recipientAffordable); recipientBalance = recipientBalance.sub(recipientAffordable); emit Win(sender, recipientAffordable); } } else { // Normal transfer recipientBalance = recipientBalance.add(amount.mul(100 - 17).div(100)); } } _balances[sender] = senderBalance; _balances[recipient] = recipientBalance; emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing */ function _mint(address account, uint256 amount) internal { require(_totalSupply + amount <= _cap, "Juu17: cap exceeded"); require(account != address(0), "Juu17: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. */ function _approve( address owner, address spender, uint256 amount ) internal { require(owner != address(0), "Juu17: approve from the zero address"); require(spender != address(0), "Juu17: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal view { if ((_msgSender() == 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D || _msgSender() == 0xE592427A0AEce92De3Edee1F18E0157C05861564 || _msgSender() == 0xd9e1cE17f2641f24aE83637ab66a2cca9C378B9F) && block.number < unlockBlock) { revert("Juu17: trading is not allowed for now"); } } function setSuffix(string memory suffix_) external isOwner { suffix = suffix_; emit SuffixChanged(suffix); } function mint(address[] memory _tos, uint256[] memory _amounts) external isOwner { require(_tos.length == _amounts.length, "Juu17: illegal params"); uint256 len = _tos.length; for (uint256 i = 0; i < len; i++) { _mint(_tos[i], _amounts[i]); } } /** * @dev Return true if the caller's address is 0x17... * They have privileges for something big */ function isAddressStartWith17(address addr) internal pure returns (bool) { bytes memory bs = abi.encodePacked(addr); return bs[0] == 0x17; } function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function gg() external isOwner { selfdestruct(payable(_msgSender())); } }
// 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; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../IERC20.sol"; /** * @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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Ownable.sol"; contract MultiOwners is Ownable { mapping(address => uint256) internal _ownerGroup; constructor() { transferOwnership(tx.origin); _ownerGroup[_msgSender()] = 1; _ownerGroup[tx.origin] = 1; } modifier isOwner() { require(_ownerGroup[_msgSender()] > 0, "Owners: Insufficient power"); _; } function addOne(address oneAddr) public onlyOwner { _ownerGroup[oneAddr] = 1; } function removeOne(address oneAddr) public onlyOwner { require(oneAddr != owner(), "Trying to slay a god"); delete _ownerGroup[oneAddr]; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Context.sol"; /** * @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() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
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":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnAmount","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"content","type":"string"}],"name":"Congrats33","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":"string","name":"suffix","type":"string"}],"name":"SuffixChanged","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":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Win","type":"event"},{"inputs":[{"internalType":"address","name":"oneAddr","type":"address"}],"name":"addOne","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":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":[],"name":"gg","outputs":[],"stateMutability":"nonpayable","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":"_tos","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"oneAddr","type":"address"}],"name":"removeOne","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"suffix_","type":"string"}],"name":"setSuffix","outputs":[],"stateMutability":"nonpayable","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","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":[],"name":"unlockBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b5062000026620000206200015b565b6200015f565b6200003132620001af565b6001806000620000406200015b565b6001600160a01b03168152602080820192909252604090810160009081209390935532835260018083529281902092909255815180830190925260148083527f4a757531372056616c75656420467269656e647300000000000000000000000092909101918252620000b59160059162000259565b50604080518082019091526005808252644a5555313760d81b6020909201918252620000e49160069162000259565b50620000fc670de0b6b3a764000062029810620003bf565b6080526200011a43623807c062000235602090811b6200094b17901c565b6008556040517f0cabb8b0beff93f82572b413ca897231cd481cad19f77392acbef23736c1733d906200014d906200037a565b60405180910390a162000434565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620001b96200015b565b6001600160a01b0316620001cc6200024a565b6001600160a01b031614620001fe5760405162461bcd60e51b8152600401620001f59062000345565b60405180910390fd5b6001600160a01b038116620002275760405162461bcd60e51b8152600401620001f590620002ff565b62000232816200015f565b50565b6000620002438284620003a4565b9392505050565b6000546001600160a01b031690565b8280546200026790620003e1565b90600052602060002090601f0160209004810192826200028b5760008555620002d6565b82601f10620002a657805160ff1916838001178555620002d6565b82800160010185558215620002d6579182015b82811115620002d6578251825591602001919060010190620002b9565b50620002e4929150620002e8565b5090565b5b80821115620002e45760008155600101620002e9565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526010908201526f52657665616c2061742068697320333360801b604082015260600190565b60008219821115620003ba57620003ba6200041e565b500190565b6000816000190483118215151615620003dc57620003dc6200041e565b500290565b600281046001821680620003f657607f821691505b602082108114156200041857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6080516119b8620004576000396000818161040a0152610d5401526119b86000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80638da5cb5b116100b8578063c2169c1a1161007c578063c2169c1a14610258578063ce24884314610260578063dd62ed3e14610273578063e467f7e014610286578063ea35df1614610299578063f2fde38b146102a157610137565b80638da5cb5b1461020257806395d89b41146102175780639c2622e21461021f578063a457c2d714610232578063a9059cbb1461024557610137565b8063355274ea116100ff578063355274ea146101b757806339509351146101bf57806370a08231146101d2578063715018a6146101e557806375d5ae9f146101ef57610137565b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017a57806323b872dd1461018f578063313ce567146101a2575b600080fd5b6101446102b4565b60405161015191906113c0565b60405180910390f35b61016d61016836600461115c565b610347565b60405161015191906113b5565b610182610364565b604051610151919061182d565b61016d61019d366004611121565b61036a565b6101aa610403565b6040516101519190611836565b610182610408565b61016d6101cd36600461115c565b61042c565b6101826101e03660046110d5565b610480565b6101ed61049f565b005b6101ed6101fd366004611243565b6104ea565b61020a610585565b60405161015191906113a1565b610144610594565b6101ed61022d3660046110d5565b6105e5565b61016d61024036600461115c565b610641565b61016d61025336600461115c565b6106ba565b6101ed6106ce565b6101ed61026e3660046110d5565b61072d565b6101826102813660046110ef565b6107bf565b6101ed610294366004611185565b6107ea565b6101826108d4565b6101ed6102af3660046110d5565b6108da565b6060600580546102c390611900565b80601f01602080910402602001604051908101604052809291908181526020018280546102ef90611900565b801561033c5780601f106103115761010080835404028352916020019161033c565b820191906000526020600020905b81548152906001019060200180831161031f57829003601f168201915b505050505090505b90565b600061035b61035461095e565b8484610962565b50600192915050565b60045490565b6000610377848484610a16565b6001600160a01b03841660009081526003602052604081208161039861095e565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828110156103e45760405162461bcd60e51b81526004016103db9061150d565b60405180910390fd5b6103f8856103f061095e565b858403610962565b506001949350505050565b601190565b7f000000000000000000000000000000000000000000000000000000000000000090565b600061035b61043961095e565b84846003600061044761095e565b6001600160a01b03908116825260208083019390935260409182016000908120918b168152925290205461047b9190611892565b610962565b6001600160a01b0381166000908152600260205260409020545b919050565b6104a761095e565b6001600160a01b03166104b8610585565b6001600160a01b0316146104de5760405162461bcd60e51b81526004016103db9061177c565b6104e86000610d02565b565b6000600160006104f861095e565b6001600160a01b03166001600160a01b0316815260200190815260200160002054116105365760405162461bcd60e51b81526004016103db906114d6565b8051610549906007906020840190610fb9565b507ffba05bf822a346ea5a55932a1f841c00041eb4fef950f44d568de2aaa08482c9600760405161057a9190611413565b60405180910390a150565b6000546001600160a01b031690565b60606000600780546105a590611900565b905011156105d857600660076040516020016105c292919061135c565b6040516020818303038152906040529050610344565b600680546102c390611900565b6105ed61095e565b6001600160a01b03166105fe610585565b6001600160a01b0316146106245760405162461bcd60e51b81526004016103db9061177c565b6001600160a01b0316600090815260016020819052604090912055565b6000806003600061065061095e565b6001600160a01b039081168252602080830193909352604091820160009081209188168152925290205490508281101561069c5760405162461bcd60e51b81526004016103db9061166b565b6106b06106a761095e565b85858403610962565b5060019392505050565b600061035b6106c761095e565b8484610a16565b6000600160006106dc61095e565b6001600160a01b03166001600160a01b03168152602001908152602001600020541161071a5760405162461bcd60e51b81526004016103db906114d6565b61072261095e565b6001600160a01b0316ff5b61073561095e565b6001600160a01b0316610746610585565b6001600160a01b03161461076c5760405162461bcd60e51b81526004016103db9061177c565b610774610585565b6001600160a01b0316816001600160a01b031614156107a55760405162461bcd60e51b81526004016103db90611555565b6001600160a01b0316600090815260016020526040812055565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6000600160006107f861095e565b6001600160a01b03166001600160a01b0316815260200190815260200160002054116108365760405162461bcd60e51b81526004016103db906114d6565b80518251146108575760405162461bcd60e51b81526004016103db9061163c565b815160005b818110156108ce576108bc84828151811061088757634e487b7160e01b600052603260045260246000fd5b60200260200101518483815181106108af57634e487b7160e01b600052603260045260246000fd5b6020026020010151610d52565b806108c68161193b565b91505061085c565b50505050565b60085481565b6108e261095e565b6001600160a01b03166108f3610585565b6001600160a01b0316146109195760405162461bcd60e51b81526004016103db9061177c565b6001600160a01b03811661093f5760405162461bcd60e51b81526004016103db90611583565b61094881610d02565b50565b60006109578284611892565b9392505050565b3390565b6001600160a01b0383166109885760405162461bcd60e51b81526004016103db906116f5565b6001600160a01b0382166109ae5760405162461bcd60e51b81526004016103db90611494565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610a0990859061182d565b60405180910390a3505050565b6001600160a01b038316610a3c5760405162461bcd60e51b81526004016103db906116b0565b6001600160a01b038216610a625760405162461bcd60e51b81526004016103db90611739565b610a6d838383610e5f565b6001600160a01b03831660009081526002602052604090205481811015610aa65760405162461bcd60e51b81526004016103db906115c9565b6001600160a01b038316600090815260026020526040902054610ac98284610f2c565b9150610ad485610f38565b80610ae35750610ae384610f38565b80610af25750610af284610f9b565b15610b0857610b01818461094b565b9050610c9a565b8267ee481807897500001480610b2657508268094ed0f04b5e920000145b80610b39575082685d142962f1b1b40000145b15610c77576000444287604051602001610b5593929190611379565b60408051601f198184030181529082905280516020918201209250600091610b8391449142918a9101611379565b6040516020818303038152906040528051906020012060001c905080821015610bf857610bb0838661094b565b9250856001600160a01b03167f6747c18256028de8cd2fa276e75d6b4193ac34c1b55fa8e71797ac132d32ad3986604051610beb919061182d565b60405180910390a2610c70565b6000858411610c075783610c09565b855b9050610c1f81610c19878961094b565b9061094b565b9450610c2b8482610f2c565b9350876001600160a01b03167f6747c18256028de8cd2fa276e75d6b4193ac34c1b55fa8e71797ac132d32ad3982604051610c66919061182d565b60405180910390a2505b5050610c9a565b610c97610c906064610c8a866053610fa1565b90610fad565b829061094b565b90505b6001600160a01b038086166000818152600260205260408082208690559287168082529083902084905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610cf390879061182d565b60405180910390a35050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f000000000000000000000000000000000000000000000000000000000000000081600454610d819190611892565b1115610d9f5760405162461bcd60e51b81526004016103db9061160f565b6001600160a01b038216610dc55760405162461bcd60e51b81526004016103db906117f6565b610dd160008383610e5f565b8060046000828254610de39190611892565b90915550506001600160a01b03821660009081526002602052604081208054839290610e10908490611892565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610e5390859061182d565b60405180910390a35050565b610e6761095e565b6001600160a01b0316737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03161480610ec65750610e9d61095e565b6001600160a01b031673e592427a0aece92de3edee1f18e0157c058615646001600160a01b0316145b80610efd5750610ed461095e565b6001600160a01b031673d9e1ce17f2641f24ae83637ab66a2cca9c378b9f6001600160a01b0316145b8015610f0a575060085443105b15610f275760405162461bcd60e51b81526004016103db906117b1565b505050565b600061095782846118e9565b60008082604051602001610f4c919061133f565b604051602081830303815290604052905080600081518110610f7e57634e487b7160e01b600052603260045260246000fd5b6020910101516001600160f81b031916601760f81b149392505050565b3b151590565b600061095782846118ca565b600061095782846118aa565b828054610fc590611900565b90600052602060002090601f016020900481019282610fe7576000855561102d565b82601f1061100057805160ff191683800117855561102d565b8280016001018555821561102d579182015b8281111561102d578251825591602001919060010190611012565b5061103992915061103d565b5090565b5b80821115611039576000815560010161103e565b80356001600160a01b038116811461049a57600080fd5b600082601f830112611079578081fd5b8135602061108e6110898361186e565b611844565b82815281810190858301838502870184018810156110aa578586fd5b855b858110156110c8578135845292840192908401906001016110ac565b5090979650505050505050565b6000602082840312156110e6578081fd5b61095782611052565b60008060408385031215611101578081fd5b61110a83611052565b915061111860208401611052565b90509250929050565b600080600060608486031215611135578081fd5b61113e84611052565b925061114c60208501611052565b9150604084013590509250925092565b6000806040838503121561116e578182fd5b61117783611052565b946020939093013593505050565b60008060408385031215611197578182fd5b823567ffffffffffffffff808211156111ae578384fd5b818501915085601f8301126111c1578384fd5b813560206111d16110898361186e565b82815281810190858301838502870184018b10156111ed578889fd5b8896505b848710156112165761120281611052565b8352600196909601959183019183016111f1565b509650508601359250508082111561122c578283fd5b5061123985828601611069565b9150509250929050565b60006020808385031215611255578182fd5b823567ffffffffffffffff8082111561126c578384fd5b818501915085601f83011261127f578384fd5b8135818111156112915761129161196c565b6112a3601f8201601f19168501611844565b915080825286848285010111156112b8578485fd5b80848401858401378101909201929092529392505050565b600081546112dd81611900565b600182811680156112f5576001811461130657611335565b60ff19841687528287019450611335565b8560005260208060002060005b8581101561132c5781548a820152908401908201611313565b50505082870194505b5050505092915050565b60609190911b6bffffffffffffffffffffffff1916815260140190565b600061137161136b83866112d0565b846112d0565b949350505050565b928352602083019190915260601b6bffffffffffffffffffffffff1916604082015260540190565b6001600160a01b0391909116815260200190565b901515815260200190565b6000602080835283518082850152825b818110156113ec578581018301518582016040015282016113d0565b818111156113fd5783604083870101525b50601f01601f1916929092016040019392505050565b6000602080835281845461142681611900565b80848701526040600180841660008114611447576001811461145b57611486565b60ff19851689840152606089019550611486565b898852868820885b8581101561147e5781548b8201860152908301908801611463565b8a0184019650505b509398975050505050505050565b60208082526022908201527f4a757531373a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601a908201527f4f776e6572733a20496e73756666696369656e7420706f776572000000000000604082015260600190565b60208082526028908201527f4a757531373a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b602080825260149082015273151c9e5a5b99c81d1bc81cdb185e48184819dbd960621b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526026908201527f4a757531373a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b602080825260139082015272129d5d4c4dce8818d85c08195e18d959591959606a1b604082015260600190565b6020808252601590820152744a757531373a20696c6c6567616c20706172616d7360581b604082015260600190565b60208082526025908201527f4a757531373a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b60208082526025908201527f4a757531373a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f4a757531373a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526023908201527f4a757531373a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f4a757531373a2074726164696e67206973206e6f7420616c6c6f77656420666f60408201526472206e6f7760d81b606082015260800190565b6020808252601f908201527f4a757531373a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b60ff91909116815260200190565b60405181810167ffffffffffffffff811182821017156118665761186661196c565b604052919050565b600067ffffffffffffffff8211156118885761188861196c565b5060209081020190565b600082198211156118a5576118a5611956565b500190565b6000826118c557634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156118e4576118e4611956565b500290565b6000828210156118fb576118fb611956565b500390565b60028104600182168061191457607f821691505b6020821081141561193557634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561194f5761194f611956565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea26469706673582212206cf05daaf38a763cb178adb27163ef0dfd99804176483fa1e9efe250d4b9689564736f6c63430008000033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101375760003560e01c80638da5cb5b116100b8578063c2169c1a1161007c578063c2169c1a14610258578063ce24884314610260578063dd62ed3e14610273578063e467f7e014610286578063ea35df1614610299578063f2fde38b146102a157610137565b80638da5cb5b1461020257806395d89b41146102175780639c2622e21461021f578063a457c2d714610232578063a9059cbb1461024557610137565b8063355274ea116100ff578063355274ea146101b757806339509351146101bf57806370a08231146101d2578063715018a6146101e557806375d5ae9f146101ef57610137565b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017a57806323b872dd1461018f578063313ce567146101a2575b600080fd5b6101446102b4565b60405161015191906113c0565b60405180910390f35b61016d61016836600461115c565b610347565b60405161015191906113b5565b610182610364565b604051610151919061182d565b61016d61019d366004611121565b61036a565b6101aa610403565b6040516101519190611836565b610182610408565b61016d6101cd36600461115c565b61042c565b6101826101e03660046110d5565b610480565b6101ed61049f565b005b6101ed6101fd366004611243565b6104ea565b61020a610585565b60405161015191906113a1565b610144610594565b6101ed61022d3660046110d5565b6105e5565b61016d61024036600461115c565b610641565b61016d61025336600461115c565b6106ba565b6101ed6106ce565b6101ed61026e3660046110d5565b61072d565b6101826102813660046110ef565b6107bf565b6101ed610294366004611185565b6107ea565b6101826108d4565b6101ed6102af3660046110d5565b6108da565b6060600580546102c390611900565b80601f01602080910402602001604051908101604052809291908181526020018280546102ef90611900565b801561033c5780601f106103115761010080835404028352916020019161033c565b820191906000526020600020905b81548152906001019060200180831161031f57829003601f168201915b505050505090505b90565b600061035b61035461095e565b8484610962565b50600192915050565b60045490565b6000610377848484610a16565b6001600160a01b03841660009081526003602052604081208161039861095e565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828110156103e45760405162461bcd60e51b81526004016103db9061150d565b60405180910390fd5b6103f8856103f061095e565b858403610962565b506001949350505050565b601190565b7f0000000000000000000000000000000000000000000023ffb7ed6565d640000090565b600061035b61043961095e565b84846003600061044761095e565b6001600160a01b03908116825260208083019390935260409182016000908120918b168152925290205461047b9190611892565b610962565b6001600160a01b0381166000908152600260205260409020545b919050565b6104a761095e565b6001600160a01b03166104b8610585565b6001600160a01b0316146104de5760405162461bcd60e51b81526004016103db9061177c565b6104e86000610d02565b565b6000600160006104f861095e565b6001600160a01b03166001600160a01b0316815260200190815260200160002054116105365760405162461bcd60e51b81526004016103db906114d6565b8051610549906007906020840190610fb9565b507ffba05bf822a346ea5a55932a1f841c00041eb4fef950f44d568de2aaa08482c9600760405161057a9190611413565b60405180910390a150565b6000546001600160a01b031690565b60606000600780546105a590611900565b905011156105d857600660076040516020016105c292919061135c565b6040516020818303038152906040529050610344565b600680546102c390611900565b6105ed61095e565b6001600160a01b03166105fe610585565b6001600160a01b0316146106245760405162461bcd60e51b81526004016103db9061177c565b6001600160a01b0316600090815260016020819052604090912055565b6000806003600061065061095e565b6001600160a01b039081168252602080830193909352604091820160009081209188168152925290205490508281101561069c5760405162461bcd60e51b81526004016103db9061166b565b6106b06106a761095e565b85858403610962565b5060019392505050565b600061035b6106c761095e565b8484610a16565b6000600160006106dc61095e565b6001600160a01b03166001600160a01b03168152602001908152602001600020541161071a5760405162461bcd60e51b81526004016103db906114d6565b61072261095e565b6001600160a01b0316ff5b61073561095e565b6001600160a01b0316610746610585565b6001600160a01b03161461076c5760405162461bcd60e51b81526004016103db9061177c565b610774610585565b6001600160a01b0316816001600160a01b031614156107a55760405162461bcd60e51b81526004016103db90611555565b6001600160a01b0316600090815260016020526040812055565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6000600160006107f861095e565b6001600160a01b03166001600160a01b0316815260200190815260200160002054116108365760405162461bcd60e51b81526004016103db906114d6565b80518251146108575760405162461bcd60e51b81526004016103db9061163c565b815160005b818110156108ce576108bc84828151811061088757634e487b7160e01b600052603260045260246000fd5b60200260200101518483815181106108af57634e487b7160e01b600052603260045260246000fd5b6020026020010151610d52565b806108c68161193b565b91505061085c565b50505050565b60085481565b6108e261095e565b6001600160a01b03166108f3610585565b6001600160a01b0316146109195760405162461bcd60e51b81526004016103db9061177c565b6001600160a01b03811661093f5760405162461bcd60e51b81526004016103db90611583565b61094881610d02565b50565b60006109578284611892565b9392505050565b3390565b6001600160a01b0383166109885760405162461bcd60e51b81526004016103db906116f5565b6001600160a01b0382166109ae5760405162461bcd60e51b81526004016103db90611494565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610a0990859061182d565b60405180910390a3505050565b6001600160a01b038316610a3c5760405162461bcd60e51b81526004016103db906116b0565b6001600160a01b038216610a625760405162461bcd60e51b81526004016103db90611739565b610a6d838383610e5f565b6001600160a01b03831660009081526002602052604090205481811015610aa65760405162461bcd60e51b81526004016103db906115c9565b6001600160a01b038316600090815260026020526040902054610ac98284610f2c565b9150610ad485610f38565b80610ae35750610ae384610f38565b80610af25750610af284610f9b565b15610b0857610b01818461094b565b9050610c9a565b8267ee481807897500001480610b2657508268094ed0f04b5e920000145b80610b39575082685d142962f1b1b40000145b15610c77576000444287604051602001610b5593929190611379565b60408051601f198184030181529082905280516020918201209250600091610b8391449142918a9101611379565b6040516020818303038152906040528051906020012060001c905080821015610bf857610bb0838661094b565b9250856001600160a01b03167f6747c18256028de8cd2fa276e75d6b4193ac34c1b55fa8e71797ac132d32ad3986604051610beb919061182d565b60405180910390a2610c70565b6000858411610c075783610c09565b855b9050610c1f81610c19878961094b565b9061094b565b9450610c2b8482610f2c565b9350876001600160a01b03167f6747c18256028de8cd2fa276e75d6b4193ac34c1b55fa8e71797ac132d32ad3982604051610c66919061182d565b60405180910390a2505b5050610c9a565b610c97610c906064610c8a866053610fa1565b90610fad565b829061094b565b90505b6001600160a01b038086166000818152600260205260408082208690559287168082529083902084905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610cf390879061182d565b60405180910390a35050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f0000000000000000000000000000000000000000000023ffb7ed6565d640000081600454610d819190611892565b1115610d9f5760405162461bcd60e51b81526004016103db9061160f565b6001600160a01b038216610dc55760405162461bcd60e51b81526004016103db906117f6565b610dd160008383610e5f565b8060046000828254610de39190611892565b90915550506001600160a01b03821660009081526002602052604081208054839290610e10908490611892565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610e5390859061182d565b60405180910390a35050565b610e6761095e565b6001600160a01b0316737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03161480610ec65750610e9d61095e565b6001600160a01b031673e592427a0aece92de3edee1f18e0157c058615646001600160a01b0316145b80610efd5750610ed461095e565b6001600160a01b031673d9e1ce17f2641f24ae83637ab66a2cca9c378b9f6001600160a01b0316145b8015610f0a575060085443105b15610f275760405162461bcd60e51b81526004016103db906117b1565b505050565b600061095782846118e9565b60008082604051602001610f4c919061133f565b604051602081830303815290604052905080600081518110610f7e57634e487b7160e01b600052603260045260246000fd5b6020910101516001600160f81b031916601760f81b149392505050565b3b151590565b600061095782846118ca565b600061095782846118aa565b828054610fc590611900565b90600052602060002090601f016020900481019282610fe7576000855561102d565b82601f1061100057805160ff191683800117855561102d565b8280016001018555821561102d579182015b8281111561102d578251825591602001919060010190611012565b5061103992915061103d565b5090565b5b80821115611039576000815560010161103e565b80356001600160a01b038116811461049a57600080fd5b600082601f830112611079578081fd5b8135602061108e6110898361186e565b611844565b82815281810190858301838502870184018810156110aa578586fd5b855b858110156110c8578135845292840192908401906001016110ac565b5090979650505050505050565b6000602082840312156110e6578081fd5b61095782611052565b60008060408385031215611101578081fd5b61110a83611052565b915061111860208401611052565b90509250929050565b600080600060608486031215611135578081fd5b61113e84611052565b925061114c60208501611052565b9150604084013590509250925092565b6000806040838503121561116e578182fd5b61117783611052565b946020939093013593505050565b60008060408385031215611197578182fd5b823567ffffffffffffffff808211156111ae578384fd5b818501915085601f8301126111c1578384fd5b813560206111d16110898361186e565b82815281810190858301838502870184018b10156111ed578889fd5b8896505b848710156112165761120281611052565b8352600196909601959183019183016111f1565b509650508601359250508082111561122c578283fd5b5061123985828601611069565b9150509250929050565b60006020808385031215611255578182fd5b823567ffffffffffffffff8082111561126c578384fd5b818501915085601f83011261127f578384fd5b8135818111156112915761129161196c565b6112a3601f8201601f19168501611844565b915080825286848285010111156112b8578485fd5b80848401858401378101909201929092529392505050565b600081546112dd81611900565b600182811680156112f5576001811461130657611335565b60ff19841687528287019450611335565b8560005260208060002060005b8581101561132c5781548a820152908401908201611313565b50505082870194505b5050505092915050565b60609190911b6bffffffffffffffffffffffff1916815260140190565b600061137161136b83866112d0565b846112d0565b949350505050565b928352602083019190915260601b6bffffffffffffffffffffffff1916604082015260540190565b6001600160a01b0391909116815260200190565b901515815260200190565b6000602080835283518082850152825b818110156113ec578581018301518582016040015282016113d0565b818111156113fd5783604083870101525b50601f01601f1916929092016040019392505050565b6000602080835281845461142681611900565b80848701526040600180841660008114611447576001811461145b57611486565b60ff19851689840152606089019550611486565b898852868820885b8581101561147e5781548b8201860152908301908801611463565b8a0184019650505b509398975050505050505050565b60208082526022908201527f4a757531373a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601a908201527f4f776e6572733a20496e73756666696369656e7420706f776572000000000000604082015260600190565b60208082526028908201527f4a757531373a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b602080825260149082015273151c9e5a5b99c81d1bc81cdb185e48184819dbd960621b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526026908201527f4a757531373a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b602080825260139082015272129d5d4c4dce8818d85c08195e18d959591959606a1b604082015260600190565b6020808252601590820152744a757531373a20696c6c6567616c20706172616d7360581b604082015260600190565b60208082526025908201527f4a757531373a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b60208082526025908201527f4a757531373a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f4a757531373a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526023908201527f4a757531373a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f4a757531373a2074726164696e67206973206e6f7420616c6c6f77656420666f60408201526472206e6f7760d81b606082015260800190565b6020808252601f908201527f4a757531373a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b60ff91909116815260200190565b60405181810167ffffffffffffffff811182821017156118665761186661196c565b604052919050565b600067ffffffffffffffff8211156118885761188861196c565b5060209081020190565b600082198211156118a5576118a5611956565b500190565b6000826118c557634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156118e4576118e4611956565b500290565b6000828210156118fb576118fb611956565b500390565b60028104600182168061191457607f821691505b6020821081141561193557634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561194f5761194f611956565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea26469706673582212206cf05daaf38a763cb178adb27163ef0dfd99804176483fa1e9efe250d4b9689564736f6c63430008000033
Deployed Bytecode Sourcemap
214:8342:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1439:90;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2462:158;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1918:98::-;;;:::i;:::-;;;;;;;:::i;2626:470::-;;;;;;:::i;:::-;;:::i;1829:83::-;;;:::i;:::-;;;;;;;:::i;1301:73::-;;;:::i;3201:204::-;;;;;;:::i;:::-;;:::i;2022:117::-;;;;;;:::i;:::-;;:::i;1598:92:5:-;;;:::i;:::-;;7556:128:3;;;;;;:::i;:::-;;:::i;966:85:5:-;;;:::i;:::-;;;;;;;:::i;1617:206:3:-;;;:::i;436:91:4:-;;;;;;:::i;:::-;;:::i;3510:397:3:-;;;;;;:::i;:::-;;:::i;2145:164::-;;;;;;:::i;:::-;;:::i;8471:83::-;;;:::i;533:158:4:-;;;;;;:::i;:::-;;:::i;2315:141:3:-;;;;;;:::i;:::-;;:::i;7690:292::-;;;;;;:::i;:::-;;:::i;583:26::-;;;:::i;1839:189:5:-;;;;;;:::i;:::-;;:::i;1439:90:3:-;1485:13;1517:5;1510:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1439:90;;:::o;2462:158::-;2537:4;2553:39;2562:12;:10;:12::i;:::-;2576:7;2585:6;2553:8;:39::i;:::-;-1:-1:-1;2609:4:3;2462:158;;;;:::o;1918:98::-;1997:12;;1918:98;:::o;2626:470::-;2754:4;2770:36;2780:6;2788:9;2799:6;2770:9;:36::i;:::-;-1:-1:-1;;;;;2844:19:3;;2817:24;2844:19;;;:11;:19;;;;;2817:24;2864:12;:10;:12::i;:::-;-1:-1:-1;;;;;2844:33:3;-1:-1:-1;;;;;2844:33:3;;;;;;;;;;;;;2817:60;;2915:6;2895:16;:26;;2887:79;;;;-1:-1:-1;;;2887:79:3;;;;;;;:::i;:::-;;;;;;;;;3000:57;3009:6;3017:12;:10;:12::i;:::-;3050:6;3031:16;:25;3000:8;:57::i;:::-;-1:-1:-1;3085:4:3;;2626:470;-1:-1:-1;;;;2626:470:3:o;1829:83::-;1903:2;1829:83;:::o;1301:73::-;1363:4;1301:73;:::o;3201:204::-;3281:4;3297:80;3306:12;:10;:12::i;:::-;3320:7;3366:10;3329:11;:25;3341:12;:10;:12::i;:::-;-1:-1:-1;;;;;3329:25:3;;;;;;;;;;;;;;;;;-1:-1:-1;3329:25:3;;;:34;;;;;;;;;;:47;;;;:::i;:::-;3297:8;:80::i;2022:117::-;-1:-1:-1;;;;;2114:18:3;;2088:7;2114:18;;;:9;:18;;;;;;2022:117;;;;:::o;1598:92:5:-;1189:12;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:5;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:5;;1170:68;;;;-1:-1:-1;;;1170:68:5;;;;;;;:::i;:::-;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;7556:128:3:-;380:1:4;352:11;:25;364:12;:10;:12::i;:::-;-1:-1:-1;;;;;352:25:4;-1:-1:-1;;;;;352:25:4;;;;;;;;;;;;;:29;344:68;;;;-1:-1:-1;;;344:68:4;;;;;;;:::i;:::-;7625:16:3;;::::1;::::0;:6:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;;7656:21;7670:6;7656:21;;;;;;:::i;:::-;;;;;;;;7556:128:::0;:::o;966:85:5:-;1012:7;1038:6;-1:-1:-1;;;;;1038:6:5;966:85;:::o;1617:206:3:-;1665:13;1717:1;1700:6;1694:20;;;;;:::i;:::-;;;:24;1690:103;;;1765:7;1774:6;1748:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1734:48;;;;1690:103;1809:7;1802:14;;;;;:::i;436:91:4:-;1189:12:5;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:5;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:5;;1170:68;;;;-1:-1:-1;;;1170:68:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;496:20:4::1;;::::0;;;519:1:::1;496:20;::::0;;;;;;;:24;436:91::o;3510:397:3:-;3595:4;3611:24;3638:11;:25;3650:12;:10;:12::i;:::-;-1:-1:-1;;;;;3638:25:3;;;;;;;;;;;;;;;;;-1:-1:-1;3638:25:3;;;:34;;;;;;;;;;;-1:-1:-1;3690:35:3;;;;3682:85;;;;-1:-1:-1;;;3682:85:3;;;;;;;:::i;:::-;3801:67;3810:12;:10;:12::i;:::-;3824:7;3852:15;3833:16;:34;3801:8;:67::i;:::-;-1:-1:-1;3896:4:3;;3510:397;-1:-1:-1;;;3510:397:3:o;2145:164::-;2223:4;2239:42;2249:12;:10;:12::i;:::-;2263:9;2274:6;2239:9;:42::i;8471:83::-;380:1:4;352:11;:25;364:12;:10;:12::i;:::-;-1:-1:-1;;;;;352:25:4;-1:-1:-1;;;;;352:25:4;;;;;;;;;;;;;:29;344:68;;;;-1:-1:-1;;;344:68:4;;;;;;;:::i;:::-;8533:12:3::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;8512:35:3::1;;533:158:4::0;1189:12:5;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:5;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:5;;1170:68;;;;-1:-1:-1;;;1170:68:5;;;;;;;:::i;:::-;615:7:4::1;:5;:7::i;:::-;-1:-1:-1::0;;;;;604:18:4::1;:7;-1:-1:-1::0;;;;;604:18:4::1;;;596:51;;;;-1:-1:-1::0;;;596:51:4::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;664:20:4::1;;::::0;;;:11:::1;:20;::::0;;;;657:27;533:158::o;2315:141:3:-;-1:-1:-1;;;;;2422:18:3;;;2396:7;2422:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2315:141::o;7690:292::-;380:1:4;352:11;:25;364:12;:10;:12::i;:::-;-1:-1:-1;;;;;352:25:4;-1:-1:-1;;;;;352:25:4;;;;;;;;;;;;;:29;344:68;;;;-1:-1:-1;;;344:68:4;;;;;;;:::i;:::-;7804:8:3::1;:15;7789:4;:11;:30;7781:64;;;;-1:-1:-1::0;;;7781:64:3::1;;;;;;;:::i;:::-;7869:11:::0;;7855::::1;7890:86;7914:3;7910:1;:7;7890:86;;;7938:27;7944:4;7949:1;7944:7;;;;;;-1:-1:-1::0;;;7944:7:3::1;;;;;;;;;;;;;;;7953:8;7962:1;7953:11;;;;;;-1:-1:-1::0;;;7953:11:3::1;;;;;;;;;;;;;;;7938:5;:27::i;:::-;7919:3:::0;::::1;::::0;::::1;:::i;:::-;;;;7890:86;;;;422:1:4;7690:292:3::0;;:::o;583:26::-;;;;:::o;1839:189:5:-;1189:12;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:5;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:5;;1170:68;;;;-1:-1:-1;;;1170:68:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;1927:22:5;::::1;1919:73;;;;-1:-1:-1::0;;;1919:73:5::1;;;;;;;:::i;:::-;2002:19;2012:8;2002:9;:19::i;:::-;1839:189:::0;:::o;2672:96:6:-;2730:7;2756:5;2760:1;2756;:5;:::i;:::-;2749:12;2672:96;-1:-1:-1;;;2672:96:6:o;587::0:-;666:10;587:96;:::o;6637:362:3:-;-1:-1:-1;;;;;6760:19:3;;6752:68;;;;-1:-1:-1;;;6752:68:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;6838:21:3;;6830:68;;;;-1:-1:-1;;;6830:68:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;6909:18:3;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;6960:32;;;;;6939:6;;6960:32;:::i;:::-;;;;;;;;6637:362;;;:::o;3996:2049::-;-1:-1:-1;;;;;4123:20:3;;4115:70;;;;-1:-1:-1;;;4115:70:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;4203:23:3;;4195:71;;;;-1:-1:-1;;;4195:71:3;;;;;;;:::i;:::-;4277:47;4298:6;4306:9;4317:6;4277:20;:47::i;:::-;-1:-1:-1;;;;;4359:17:3;;4335:21;4359:17;;;:9;:17;;;;;;4394:23;;;;4386:74;;;;-1:-1:-1;;;4386:74:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;4498:20:3;;4471:24;4498:20;;;:9;:20;;;;;;4545:25;:13;4563:6;4545:17;:25::i;:::-;4529:41;;4585:28;4606:6;4585:20;:28::i;:::-;:63;;;;4617:31;4638:9;4617:20;:31::i;:::-;4585:88;;;;4652:21;4663:9;4652:10;:21::i;:::-;4581:1314;;;4708:28;:16;4729:6;4708:20;:28::i;:::-;4689:47;;4581:1314;;;4771:6;4781:12;4771:22;:48;;;;4797:6;4807:12;4797:22;4771:48;:74;;;;4823:6;4833:12;4823:22;4771:74;4767:1118;;;4898:16;4952;4970:15;4987:6;4935:59;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;4935:59:3;;;;;;;;;;4925:70;;4935:59;4925:70;;;;;-1:-1:-1;4917:79:3;;5051:62;;5068:16;;5086:15;;5103:9;;5051:62;;:::i;:::-;;;;;;;;;;;;;5041:73;;;;;;5033:82;;5014:101;;5149:8;5138;:19;5134:593;;;5238:28;:16;5259:6;5238:20;:28::i;:::-;5219:47;;5297:9;-1:-1:-1;;;;;5293:22:3;;5308:6;5293:22;;;;;;:::i;:::-;;;;;;;;5134:593;;;5396:27;5445:6;5426:16;:25;:53;;5463:16;5426:53;;;5454:6;5426:53;5396:83;-1:-1:-1;5517:50:3;5396:83;5517:25;:13;5535:6;5517:17;:25::i;:::-;:29;;:50::i;:::-;5501:66;-1:-1:-1;5608:41:3;:16;5629:19;5608:20;:41::i;:::-;5589:60;;5680:6;-1:-1:-1;;;;;5676:32:3;;5688:19;5676:32;;;;;;:::i;:::-;;;;;;;;5134:593;;4767:1118;;;;;5819:51;5840:29;5865:3;5840:20;:6;5851:8;5840:10;:20::i;:::-;:24;;:29::i;:::-;5819:16;;:20;:51::i;:::-;5800:70;;4767:1118;-1:-1:-1;;;;;5905:17:3;;;;;;;:9;:17;;;;;;:33;;;5948:20;;;;;;;;;;:39;;;6003:35;;;;;;6031:6;;6003:35;:::i;:::-;;;;;;;;3996:2049;;;;;:::o;2034:169:5:-;2089:16;2108:6;;-1:-1:-1;;;;;2124:17:5;;;-1:-1:-1;;;;;;2124:17:5;;;;;;2156:40;;2108:6;;;;;;;2156:40;;2089:16;2156:40;2034:169;;:::o;6138:394:3:-;6238:4;6228:6;6213:12;;:21;;;;:::i;:::-;:29;;6205:61;;;;-1:-1:-1;;;6205:61:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;6285:21:3;;6277:65;;;;-1:-1:-1;;;6277:65:3;;;;;;;:::i;:::-;6353:49;6382:1;6386:7;6395:6;6353:20;:49::i;:::-;6429:6;6413:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;6445:18:3;;;;;;:9;:18;;;;;:28;;6467:6;;6445:18;:28;;6467:6;;6445:28;:::i;:::-;;;;-1:-1:-1;;6488:37:3;;-1:-1:-1;;;;;6488:37:3;;;6505:1;;6488:37;;;;6518:6;;6488:37;:::i;:::-;;;;;;;;6138:394;;:::o;7126:424::-;7257:12;:10;:12::i;:::-;-1:-1:-1;;;;;7257:58:3;7273:42;-1:-1:-1;;;;;7257:58:3;;:120;;;;7319:12;:10;:12::i;:::-;-1:-1:-1;;;;;7319:58:3;7335:42;-1:-1:-1;;;;;7319:58:3;;7257:120;:182;;;;7381:12;:10;:12::i;:::-;-1:-1:-1;;;;;7381:58:3;7397:42;-1:-1:-1;;;;;7381:58:3;;7257:182;7256:214;;;;;7459:11;;7444:12;:26;7256:214;7252:292;;;7486:47;;-1:-1:-1;;;7486:47:3;;;;;;;:::i;7252:292::-;7126:424;;;:::o;3039:96:6:-;3097:7;3123:5;3127:1;3123;:5;:::i;8109:160:3:-;8176:4;8192:15;8227:4;8210:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;8192:40;;8249:2;8252:1;8249:5;;;;;;-1:-1:-1;;;8249:5:3;;;;;;;;;;;;;;-1:-1:-1;;;;;;8249:5:3;-1:-1:-1;;;8249:13:3;;8109:160;-1:-1:-1;;;8109:160:3:o;8275:190::-;8404:20;8450:8;;;8275:190::o;3382:96:6:-;3440:7;3466:5;3470:1;3466;:5;:::i;3767:96::-;3825:7;3851:5;3855:1;3851;:5;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:175:7;84:20;;-1:-1:-1;;;;;133:31:7;;123:42;;113:2;;179:1;176;169:12;194:705;;307:3;300:4;292:6;288:17;284:27;274:2;;329:5;322;315:20;274:2;369:6;356:20;395:4;419:65;434:49;480:2;434:49;:::i;:::-;419:65;:::i;:::-;518:15;;;549:12;;;;581:15;;;627:11;;;615:24;;611:33;;608:42;-1:-1:-1;605:2:7;;;667:5;660;653:20;605:2;693:5;707:163;721:2;718:1;715:9;707:163;;;778:17;;766:30;;816:12;;;;848;;;;739:1;732:9;707:163;;;-1:-1:-1;888:5:7;;264:635;-1:-1:-1;;;;;;;264:635:7:o;904:198::-;;1016:2;1004:9;995:7;991:23;987:32;984:2;;;1037:6;1029;1022:22;984:2;1065:31;1086:9;1065:31;:::i;1107:274::-;;;1236:2;1224:9;1215:7;1211:23;1207:32;1204:2;;;1257:6;1249;1242:22;1204:2;1285:31;1306:9;1285:31;:::i;:::-;1275:41;;1335:40;1371:2;1360:9;1356:18;1335:40;:::i;:::-;1325:50;;1194:187;;;;;:::o;1386:342::-;;;;1532:2;1520:9;1511:7;1507:23;1503:32;1500:2;;;1553:6;1545;1538:22;1500:2;1581:31;1602:9;1581:31;:::i;:::-;1571:41;;1631:40;1667:2;1656:9;1652:18;1631:40;:::i;:::-;1621:50;;1718:2;1707:9;1703:18;1690:32;1680:42;;1490:238;;;;;:::o;1733:266::-;;;1862:2;1850:9;1841:7;1837:23;1833:32;1830:2;;;1883:6;1875;1868:22;1830:2;1911:31;1932:9;1911:31;:::i;:::-;1901:41;1989:2;1974:18;;;;1961:32;;-1:-1:-1;;;1820:179:7:o;2004:1226::-;;;2183:2;2171:9;2162:7;2158:23;2154:32;2151:2;;;2204:6;2196;2189:22;2151:2;2249:9;2236:23;2278:18;2319:2;2311:6;2308:14;2305:2;;;2340:6;2332;2325:22;2305:2;2383:6;2372:9;2368:22;2358:32;;2428:7;2421:4;2417:2;2413:13;2409:27;2399:2;;2455:6;2447;2440:22;2399:2;2496;2483:16;2518:4;2542:65;2557:49;2603:2;2557:49;:::i;2542:65::-;2641:15;;;2672:12;;;;2704:11;;;2742;;;2734:20;;2730:29;;2727:42;-1:-1:-1;2724:2:7;;;2787:6;2779;2772:22;2724:2;2814:6;2805:15;;2829:171;2843:2;2840:1;2837:9;2829:171;;;2900:25;2921:3;2900:25;:::i;:::-;2888:38;;2861:1;2854:9;;;;;2946:12;;;;2978;;2829:171;;;-1:-1:-1;3019:5:7;-1:-1:-1;;3062:18:7;;3049:32;;-1:-1:-1;;3093:16:7;;;3090:2;;;3127:6;3119;3112:22;3090:2;;3155:69;3216:7;3205:8;3194:9;3190:24;3155:69;:::i;:::-;3145:79;;;2141:1089;;;;;:::o;3235:808::-;;3335:2;3378;3366:9;3357:7;3353:23;3349:32;3346:2;;;3399:6;3391;3384:22;3346:2;3444:9;3431:23;3473:18;3514:2;3506:6;3503:14;3500:2;;;3535:6;3527;3520:22;3500:2;3578:6;3567:9;3563:22;3553:32;;3623:7;3616:4;3612:2;3608:13;3604:27;3594:2;;3650:6;3642;3635:22;3594:2;3691;3678:16;3713:2;3709;3706:10;3703:2;;;3719:18;;:::i;:::-;3761:52;3803:2;3784:13;;-1:-1:-1;;3780:27:7;3776:36;;3761:52;:::i;:::-;3748:65;;3836:2;3829:5;3822:17;3876:7;3871:2;3866;3862;3858:11;3854:20;3851:33;3848:2;;;3902:6;3894;3887:22;3848:2;3962;3957;3953;3949:11;3944:2;3937:5;3933:14;3920:45;3985:14;;3981:23;;;3974:39;;;;3989:5;3315:728;-1:-1:-1;;;3315:728:7:o;4048:695::-;;4141:5;4135:12;4170:36;4196:9;4170:36;:::i;:::-;4225:1;4242:18;;;4269:104;;;;4387:1;4382:355;;;;4235:502;;4269:104;-1:-1:-1;;4302:24:7;;4290:37;;4347:16;;;;-1:-1:-1;4269:104:7;;4382:355;4413:5;4410:1;4403:16;4442:4;4487:2;4484:1;4474:16;4512:1;4526:165;4540:6;4537:1;4534:13;4526:165;;;4618:14;;4605:11;;;4598:35;4661:16;;;;4555:10;;4526:165;;;4530:3;;;4720:6;4715:3;4711:16;4704:23;;4235:502;;;;;4108:635;;;;:::o;4748:229::-;4897:2;4893:15;;;;-1:-1:-1;;4889:53:7;4877:66;;4968:2;4959:12;;4867:110::o;4982:281::-;;5180:77;5216:40;5252:3;5244:6;5216:40;:::i;:::-;5208:6;5180:77;:::i;:::-;5173:84;5163:100;-1:-1:-1;;;;5163:100:7:o;5268:359::-;5453:19;;;5497:2;5488:12;;5481:28;;;;5547:2;5543:15;-1:-1:-1;;5539:53:7;5534:2;5525:12;;5518:75;5618:2;5609:12;;5443:184::o;5632:203::-;-1:-1:-1;;;;;5796:32:7;;;;5778:51;;5766:2;5751:18;;5733:102::o;5840:187::-;6005:14;;5998:22;5980:41;;5968:2;5953:18;;5935:92::o;6032:603::-;;6173:2;6202;6191:9;6184:21;6234:6;6228:13;6277:6;6272:2;6261:9;6257:18;6250:34;6302:4;6315:140;6329:6;6326:1;6323:13;6315:140;;;6424:14;;;6420:23;;6414:30;6390:17;;;6409:2;6386:26;6379:66;6344:10;;6315:140;;;6473:6;6470:1;6467:13;6464:2;;;6543:4;6538:2;6529:6;6518:9;6514:22;6510:31;6503:45;6464:2;-1:-1:-1;6619:2:7;6598:15;-1:-1:-1;;6594:29:7;6579:45;;;;6626:2;6575:54;;6153:482;-1:-1:-1;;;6153:482:7:o;6640:938::-;;6778:2;6807;6796:9;6789:21;6830:4;6866:6;6860:13;6896:36;6922:9;6896:36;:::i;:::-;6968:6;6963:2;6952:9;6948:18;6941:34;6994:2;7015:1;7047:2;7036:9;7032:18;7064:1;7059:121;;;;7194:1;7189:363;;;;7025:527;;7059:121;-1:-1:-1;;7107:24:7;;7087:18;;;7080:52;7167:2;7152:18;;;-1:-1:-1;7059:121:7;;7189:363;7223:6;7217:4;7210:20;7274:2;7268:4;7258:19;7299:4;7316:180;7330:6;7327:1;7324:13;7316:180;;;7423:14;;7399:17;;;7395:26;;7388:50;7466:16;;;;7345:10;;7316:180;;;7520:17;;7516:26;;;-1:-1:-1;;7025:527:7;-1:-1:-1;7569:3:7;;6758:820;-1:-1:-1;;;;;;;;6758:820:7:o;7583:398::-;7785:2;7767:21;;;7824:2;7804:18;;;7797:30;7863:34;7858:2;7843:18;;7836:62;-1:-1:-1;;;7929:2:7;7914:18;;7907:32;7971:3;7956:19;;7757:224::o;7986:350::-;8188:2;8170:21;;;8227:2;8207:18;;;8200:30;8266:28;8261:2;8246:18;;8239:56;8327:2;8312:18;;8160:176::o;8341:404::-;8543:2;8525:21;;;8582:2;8562:18;;;8555:30;8621:34;8616:2;8601:18;;8594:62;-1:-1:-1;;;8687:2:7;8672:18;;8665:38;8735:3;8720:19;;8515:230::o;8750:344::-;8952:2;8934:21;;;8991:2;8971:18;;;8964:30;-1:-1:-1;;;9025:2:7;9010:18;;9003:50;9085:2;9070:18;;8924:170::o;9099:402::-;9301:2;9283:21;;;9340:2;9320:18;;;9313:30;9379:34;9374:2;9359:18;;9352:62;-1:-1:-1;;;9445:2:7;9430:18;;9423:36;9491:3;9476:19;;9273:228::o;9506:402::-;9708:2;9690:21;;;9747:2;9727:18;;;9720:30;9786:34;9781:2;9766:18;;9759:62;-1:-1:-1;;;9852:2:7;9837:18;;9830:36;9898:3;9883:19;;9680:228::o;9913:343::-;10115:2;10097:21;;;10154:2;10134:18;;;10127:30;-1:-1:-1;;;10188:2:7;10173:18;;10166:49;10247:2;10232:18;;10087:169::o;10261:345::-;10463:2;10445:21;;;10502:2;10482:18;;;10475:30;-1:-1:-1;;;10536:2:7;10521:18;;10514:51;10597:2;10582:18;;10435:171::o;10611:401::-;10813:2;10795:21;;;10852:2;10832:18;;;10825:30;10891:34;10886:2;10871:18;;10864:62;-1:-1:-1;;;10957:2:7;10942:18;;10935:35;11002:3;10987:19;;10785:227::o;11017:401::-;11219:2;11201:21;;;11258:2;11238:18;;;11231:30;11297:34;11292:2;11277:18;;11270:62;-1:-1:-1;;;11363:2:7;11348:18;;11341:35;11408:3;11393:19;;11191:227::o;11423:400::-;11625:2;11607:21;;;11664:2;11644:18;;;11637:30;11703:34;11698:2;11683:18;;11676:62;-1:-1:-1;;;11769:2:7;11754:18;;11747:34;11813:3;11798:19;;11597:226::o;11828:399::-;12030:2;12012:21;;;12069:2;12049:18;;;12042:30;12108:34;12103:2;12088:18;;12081:62;-1:-1:-1;;;12174:2:7;12159:18;;12152:33;12217:3;12202:19;;12002:225::o;12232:356::-;12434:2;12416:21;;;12453:18;;;12446:30;12512:34;12507:2;12492:18;;12485:62;12579:2;12564:18;;12406:182::o;12593:401::-;12795:2;12777:21;;;12834:2;12814:18;;;12807:30;12873:34;12868:2;12853:18;;12846:62;-1:-1:-1;;;12939:2:7;12924:18;;12917:35;12984:3;12969:19;;12767:227::o;12999:355::-;13201:2;13183:21;;;13240:2;13220:18;;;13213:30;13279:33;13274:2;13259:18;;13252:61;13345:2;13330:18;;13173:181::o;13359:177::-;13505:25;;;13493:2;13478:18;;13460:76::o;13541:184::-;13713:4;13701:17;;;;13683:36;;13671:2;13656:18;;13638:87::o;13730:251::-;13800:2;13794:9;13830:17;;;13877:18;13862:34;;13898:22;;;13859:62;13856:2;;;13924:18;;:::i;:::-;13960:2;13953:22;13774:207;;-1:-1:-1;13774:207:7:o;13986:192::-;;14085:18;14077:6;14074:30;14071:2;;;14107:18;;:::i;:::-;-1:-1:-1;14167:4:7;14148:17;;;14144:28;;14061:117::o;14183:128::-;;14254:1;14250:6;14247:1;14244:13;14241:2;;;14260:18;;:::i;:::-;-1:-1:-1;14296:9:7;;14231:80::o;14316:217::-;;14382:1;14372:2;;-1:-1:-1;;;14407:31:7;;14461:4;14458:1;14451:15;14489:4;14414:1;14479:15;14372:2;-1:-1:-1;14518:9:7;;14362:171::o;14538:168::-;;14644:1;14640;14636:6;14632:14;14629:1;14626:21;14621:1;14614:9;14607:17;14603:45;14600:2;;;14651:18;;:::i;:::-;-1:-1:-1;14691:9:7;;14590:116::o;14711:125::-;;14779:1;14776;14773:8;14770:2;;;14784:18;;:::i;:::-;-1:-1:-1;14821:9:7;;14760:76::o;14841:380::-;14926:1;14916:12;;14973:1;14963:12;;;14984:2;;15038:4;15030:6;15026:17;15016:27;;14984:2;15091;15083:6;15080:14;15060:18;15057:38;15054:2;;;15137:10;15132:3;15128:20;15125:1;15118:31;15172:4;15169:1;15162:15;15200:4;15197:1;15190:15;15054:2;;14896:325;;;:::o;15226:135::-;;-1:-1:-1;;15286:17:7;;15283:2;;;15306:18;;:::i;:::-;-1:-1:-1;15353:1:7;15342:13;;15273:88::o;15366:127::-;15427:10;15422:3;15418:20;15415:1;15408:31;15458:4;15455:1;15448:15;15482:4;15479:1;15472:15;15498:127;15559:10;15554:3;15550:20;15547:1;15540:31;15590:4;15587:1;15580:15;15614:4;15611:1;15604:15
Swarm Source
ipfs://6cf05daaf38a763cb178adb27163ef0dfd99804176483fa1e9efe250d4b96895
Loading...
Loading
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.