Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 66 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Safe Transfer Fr... | 19157620 | 280 days ago | IN | 0 ETH | 0.0007714 | ||||
Safe Transfer Fr... | 16980484 | 585 days ago | IN | 0 ETH | 0.00112319 | ||||
Safe Transfer Fr... | 16904844 | 596 days ago | IN | 0 ETH | 0.00074564 | ||||
Safe Transfer Fr... | 16902490 | 596 days ago | IN | 0 ETH | 0.00070301 | ||||
Safe Transfer Fr... | 16875320 | 600 days ago | IN | 0 ETH | 0.00060642 | ||||
Safe Transfer Fr... | 16811538 | 609 days ago | IN | 0 ETH | 0.00088381 | ||||
Set Approval For... | 16767897 | 615 days ago | IN | 0 ETH | 0.00095853 | ||||
Set Approval For... | 16754640 | 617 days ago | IN | 0 ETH | 0.00094656 | ||||
Safe Transfer Fr... | 16740963 | 619 days ago | IN | 0 ETH | 0.00095094 | ||||
Safe Transfer Fr... | 16740960 | 619 days ago | IN | 0 ETH | 0.00090539 | ||||
Safe Transfer Fr... | 16725744 | 621 days ago | IN | 0 ETH | 0.00070441 | ||||
Safe Transfer Fr... | 16725596 | 621 days ago | IN | 0 ETH | 0.00089813 | ||||
Safe Transfer Fr... | 16725584 | 621 days ago | IN | 0 ETH | 0.00093706 | ||||
Safe Transfer Fr... | 16725567 | 621 days ago | IN | 0 ETH | 0.00092102 | ||||
Safe Transfer Fr... | 16697617 | 625 days ago | IN | 0 ETH | 0.00108443 | ||||
Set Approval For... | 16697376 | 625 days ago | IN | 0 ETH | 0.00128086 | ||||
Safe Transfer Fr... | 16690526 | 626 days ago | IN | 0 ETH | 0.00143843 | ||||
Safe Transfer Fr... | 16690508 | 626 days ago | IN | 0 ETH | 0.00155276 | ||||
Safe Transfer Fr... | 16690316 | 626 days ago | IN | 0 ETH | 0.00137867 | ||||
Safe Transfer Fr... | 16690305 | 626 days ago | IN | 0 ETH | 0.00097442 | ||||
Safe Transfer Fr... | 16690290 | 626 days ago | IN | 0 ETH | 0.00143823 | ||||
Safe Transfer Fr... | 16689389 | 626 days ago | IN | 0 ETH | 0.0010658 | ||||
Reserve Genesis | 16681859 | 627 days ago | IN | 0 ETH | 0.00168489 | ||||
Reserve Genesis | 16681856 | 627 days ago | IN | 0 ETH | 0.0015178 | ||||
Reserve Genesis | 16681846 | 627 days ago | IN | 0 ETH | 0.00110609 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
16505236 | 652 days ago | 0.256 ETH |
Loading...
Loading
Contract Name:
CHAINSOJUGenesis
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/math/SafeMath.sol"; contract CHAINSOJUGenesis is ERC1155Supply, Ownable { using SafeMath for uint256; mapping(uint256 => string) private _tokenURIs; mapping(address => bool) private whitelistMap; uint256[] public amounts = [90, 30, 30]; uint256 public mintPrice = 0.032 ether; uint256 public maxOnceLimit = 10; bool public saleIsActive = false; bool public isPresale = true; string public _name = "CHAIN SOJU Genesis"; string public _symbol = "CSG"; constructor() ERC1155("") {} function withdraw() public onlyOwner { uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); } function mintGenesis(uint256 _amount, uint256 _index) external payable { require(saleIsActive, "Sale has been paused."); if (isPresale) { require(whitelistMap[msg.sender], "Not whitelisted"); } require(_amount <= maxOnceLimit, "Max once purchase limit"); require( totalSupply(_index).add(_amount) <= amounts[_index], "Exceed max supply" ); require(msg.value >= mintPrice.mul(_amount), "Total price not match"); _mint(msg.sender, _index, _amount, ""); } function reserveGenesis( address _to, uint256 _index, uint256 _reserveAmount ) external onlyOwner { require( totalSupply(_index).add(_reserveAmount) <= amounts[_index], "Exceed max supply" ); _mint(_to, _index, _reserveAmount, ""); } function flipSaleState() public onlyOwner { saleIsActive = !saleIsActive; } function flipPresaleState() public onlyOwner { isPresale = !isPresale; } function setWhiteList(address _address) public onlyOwner { whitelistMap[_address] = true; } function setWhiteListMultiple(address[] memory _addresses) external onlyOwner { for (uint256 i = 0; i < _addresses.length; i++) { setWhiteList(_addresses[i]); } } function removeWhiteList(address _address) external onlyOwner { whitelistMap[_address] = false; } function isWhiteListed(address _address) external view returns (bool) { return whitelistMap[_address]; } function updateAmounts(uint256 _index, uint256 _amount) public onlyOwner { amounts[_index] = _amount; } function uri(uint256 id) public view virtual override returns (string memory) { require(exists(id), "Nonexistent token"); return _tokenURIs[id]; } function _setTokenURI(uint256 _tokenId, string memory _tokenUri) external onlyOwner { _tokenURIs[_tokenId] = _tokenUri; } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Supply.sol) pragma solidity ^0.8.0; import "../ERC1155.sol"; /** * @dev Extension of ERC1155 that adds tracking of total supply per id. * * Useful for scenarios where Fungible and Non-fungible tokens have to be * clearly identified. Note: While a totalSupply of 1 might mean the * corresponding is an NFT, there is no guarantees that no other token with the * same id are not going to be minted. */ abstract contract ERC1155Supply is ERC1155 { mapping(uint256 => uint256) private _totalSupply; /** * @dev Total amount of tokens in with a given id. */ function totalSupply(uint256 id) public view virtual returns (uint256) { return _totalSupply[id]; } /** * @dev Indicates whether any token exist with a given id, or not. */ function exists(uint256 id) public view virtual returns (bool) { return ERC1155Supply.totalSupply(id) > 0; } /** * @dev See {ERC1155-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); if (from == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] += amounts[i]; } } if (to == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] -= amounts[i]; } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/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() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) 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 generally not needed starting with Solidity 0.8, since 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; } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; import "./IERC1155.sol"; import "./IERC1155Receiver.sol"; import "./extensions/IERC1155MetadataURI.sol"; import "../../utils/Address.sol"; import "../../utils/Context.sol"; import "../../utils/introspection/ERC165.sol"; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; import "../IERC1155.sol"; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "optimizer": { "enabled": true, "runs": 1000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_tokenUri","type":"string"}],"name":"_setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"amounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPresaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isWhiteListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxOnceLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"mintGenesis","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_reserveAmount","type":"uint256"}],"name":"reserveGenesis","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"setWhiteListMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"updateAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60e0604052605a6080908152601e60a081905260c0526200002590600790600362000153565b506671afd498d00000600855600a6009819055805461ffff191661010017905560408051808201909152601280825271434841494e20534f4a552047656e6573697360701b60209092019182526200008091600b91620001a8565b506040805180820190915260038082526243534760e81b6020909201918252620000ad91600c91620001a8565b50348015620000bb57600080fd5b50604080516020810190915260008152620000d681620000e8565b50620000e23362000101565b62000279565b8051620000fd906002906020840190620001a8565b5050565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805482825590600052602060002090810192821562000196579160200282015b8281111562000196578251829060ff1690559160200191906001019062000174565b50620001a492915062000225565b5090565b828054620001b6906200023c565b90600052602060002090601f016020900481019282620001da576000855562000196565b82601f10620001f557805160ff191683800117855562000196565b8280016001018555821562000196579182015b828111156200019657825182559160200191906001019062000208565b5b80821115620001a4576000815560010162000226565b600181811c908216806200025157607f821691505b602082108114156200027357634e487b7160e01b600052602260045260246000fd5b50919050565b6128b480620002896000396000f3fe6080604052600436106101fd5760003560e01c8063715018a61161011d578063bec12b53116100b0578063e985e9c51161007f578063f242432a11610064578063f242432a146105f2578063f2fde38b14610612578063f81227d41461063257600080fd5b8063e985e9c51461058f578063eb8d2444146105d857600080fd5b8063bec12b5314610531578063cd00e7d914610551578063d28d885214610564578063e24f6e101461057957600080fd5b806395d89b41116100ec57806395d89b41146104ba578063a22cb465146104cf578063b09f1266146104ef578063bd85b0391461050457600080fd5b8063715018a61461043e57806386d8953a146104535780638da5cb5b1461047357806395364a841461049b57600080fd5b806339e899ee116101955780634e1273f4116101645780634e1273f4146103935780634f558e79146103c05780636817c76c146103ef5780636f9170f61461040557600080fd5b806339e899ee1461031e5780633ccfd60b1461033e57806345f0a44f146103535780634dfc39511461037357600080fd5b80630e89341c116101d15780630e89341c146102a95780632042e5c2146102c95780632eb2c2d6146102e957806334918dfd1461030957600080fd5b8062fdd58e14610202578063015388681461023557806301ffc9a71461025757806306fdde0314610287575b600080fd5b34801561020e57600080fd5b5061022261021d366004612355565b610647565b6040519081526020015b60405180910390f35b34801561024157600080fd5b5061025561025036600461249c565b6106f0565b005b34801561026357600080fd5b5061027761027236600461244c565b61075c565b604051901515815260200161022c565b34801561029357600080fd5b5061029c6107f9565b60405161022c9190612672565b3480156102b557600080fd5b5061029c6102c4366004612484565b61088b565b3480156102d557600080fd5b506102556102e43660046121c6565b610987565b3480156102f557600080fd5b50610255610304366004612212565b6109f0565b34801561031557600080fd5b50610255610a92565b34801561032a57600080fd5b506102556103393660046121c6565b610aee565b34801561034a57600080fd5b50610255610b5a565b34801561035f57600080fd5b5061022261036e366004612484565b610bd5565b34801561037f57600080fd5b5061025561038e3660046124ea565b610bf6565b34801561039f57600080fd5b506103b36103ae3660046123eb565b610c70565b60405161022c9190612631565b3480156103cc57600080fd5b506102776103db366004612484565b600090815260036020526040902054151590565b3480156103fb57600080fd5b5061022260085481565b34801561041157600080fd5b506102776104203660046121c6565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561044a57600080fd5b50610255610de6565b34801561045f57600080fd5b5061025561046e3660046123b0565b610e3a565b34801561047f57600080fd5b506004546040516001600160a01b03909116815260200161022c565b3480156104a757600080fd5b50600a5461027790610100900460ff1681565b3480156104c657600080fd5b5061029c610ed0565b3480156104db57600080fd5b506102556104ea36600461231b565b610edf565b3480156104fb57600080fd5b5061029c610eea565b34801561051057600080fd5b5061022261051f366004612484565b60009081526003602052604090205490565b34801561053d57600080fd5b5061025561054c36600461237e565b610f78565b61025561055f3660046124ea565b611075565b34801561057057600080fd5b5061029c611293565b34801561058557600080fd5b5061022260095481565b34801561059b57600080fd5b506102776105aa3660046121e0565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b3480156105e457600080fd5b50600a546102779060ff1681565b3480156105fe57600080fd5b5061025561060d3660046122b8565b6112a0565b34801561061e57600080fd5b5061025561062d3660046121c6565b61133b565b34801561063e57600080fd5b5061025561140b565b60006001600160a01b0383166106ca5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b6004546001600160a01b031633146107385760405162461bcd60e51b8152602060048201819052602482015260008051602061285f83398151915260448201526064016106c1565b6000828152600560209081526040909120825161075792840190611fb2565b505050565b60006001600160e01b031982167fd9b67a260000000000000000000000000000000000000000000000000000000014806107bf57506001600160e01b031982167f0e89341c00000000000000000000000000000000000000000000000000000000145b806107f357507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6060600b8054610808906126f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610834906126f7565b80156108815780601f1061085657610100808354040283529160200191610881565b820191906000526020600020905b81548152906001019060200180831161086457829003601f168201915b5050505050905090565b6000818152600360205260409020546060906108e95760405162461bcd60e51b815260206004820152601160248201527f4e6f6e6578697374656e7420746f6b656e00000000000000000000000000000060448201526064016106c1565b60008281526005602052604090208054610902906126f7565b80601f016020809104026020016040519081016040528092919081815260200182805461092e906126f7565b801561097b5780601f106109505761010080835404028352916020019161097b565b820191906000526020600020905b81548152906001019060200180831161095e57829003601f168201915b50505050509050919050565b6004546001600160a01b031633146109cf5760405162461bcd60e51b8152602060048201819052602482015260008051602061285f83398151915260448201526064016106c1565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6001600160a01b038516331480610a0c5750610a0c85336105aa565b610a7e5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f766564000000000000000000000000000060648201526084016106c1565b610a8b8585858585611470565b5050505050565b6004546001600160a01b03163314610ada5760405162461bcd60e51b8152602060048201819052602482015260008051602061285f83398151915260448201526064016106c1565b600a805460ff19811660ff90911615179055565b6004546001600160a01b03163314610b365760405162461bcd60e51b8152602060048201819052602482015260008051602061285f83398151915260448201526064016106c1565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6004546001600160a01b03163314610ba25760405162461bcd60e51b8152602060048201819052602482015260008051602061285f83398151915260448201526064016106c1565b6040514790339082156108fc029083906000818181858888f19350505050158015610bd1573d6000803e3d6000fd5b5050565b60078181548110610be557600080fd5b600091825260209091200154905081565b6004546001600160a01b03163314610c3e5760405162461bcd60e51b8152602060048201819052602482015260008051602061285f83398151915260448201526064016106c1565b8060078381548110610c6057634e487b7160e01b600052603260045260246000fd5b6000918252602090912001555050565b60608151835114610ce95760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d61746368000000000000000000000000000000000000000000000060648201526084016106c1565b6000835167ffffffffffffffff811115610d1357634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610d3c578160200160208202803683370190505b50905060005b8451811015610dde57610da3858281518110610d6e57634e487b7160e01b600052603260045260246000fd5b6020026020010151858381518110610d9657634e487b7160e01b600052603260045260246000fd5b6020026020010151610647565b828281518110610dc357634e487b7160e01b600052603260045260246000fd5b6020908102919091010152610dd78161275f565b9050610d42565b509392505050565b6004546001600160a01b03163314610e2e5760405162461bcd60e51b8152602060048201819052602482015260008051602061285f83398151915260448201526064016106c1565b610e38600061170d565b565b6004546001600160a01b03163314610e825760405162461bcd60e51b8152602060048201819052602482015260008051602061285f83398151915260448201526064016106c1565b60005b8151811015610bd157610ebe828281518110610eb157634e487b7160e01b600052603260045260246000fd5b6020026020010151610aee565b80610ec88161275f565b915050610e85565b6060600c8054610808906126f7565b610bd1338383611777565b600c8054610ef7906126f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610f23906126f7565b8015610f705780601f10610f4557610100808354040283529160200191610f70565b820191906000526020600020905b815481529060010190602001808311610f5357829003601f168201915b505050505081565b6004546001600160a01b03163314610fc05760405162461bcd60e51b8152602060048201819052602482015260008051602061285f83398151915260448201526064016106c1565b60078281548110610fe157634e487b7160e01b600052603260045260246000fd5b906000526020600020015461100c826110068560009081526003602052604090205490565b9061186c565b111561105a5760405162461bcd60e51b815260206004820152601160248201527f457863656564206d617820737570706c7900000000000000000000000000000060448201526064016106c1565b6107578383836040518060200160405280600081525061187f565b600a5460ff166110c75760405162461bcd60e51b815260206004820152601560248201527f53616c6520686173206265656e207061757365642e000000000000000000000060448201526064016106c1565b600a54610100900460ff1615611136573360009081526006602052604090205460ff166111365760405162461bcd60e51b815260206004820152600f60248201527f4e6f742077686974656c6973746564000000000000000000000000000000000060448201526064016106c1565b6009548211156111885760405162461bcd60e51b815260206004820152601760248201527f4d6178206f6e6365207075726368617365206c696d697400000000000000000060448201526064016106c1565b600781815481106111a957634e487b7160e01b600052603260045260246000fd5b90600052602060002001546111ce836110068460009081526003602052604090205490565b111561121c5760405162461bcd60e51b815260206004820152601160248201527f457863656564206d617820737570706c7900000000000000000000000000000060448201526064016106c1565b60085461122990836119ab565b3410156112785760405162461bcd60e51b815260206004820152601560248201527f546f74616c207072696365206e6f74206d61746368000000000000000000000060448201526064016106c1565b610bd13382846040518060200160405280600081525061187f565b600b8054610ef7906126f7565b6001600160a01b0385163314806112bc57506112bc85336105aa565b61132e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f766564000000000000000000000000000000000000000000000060648201526084016106c1565b610a8b85858585856119b7565b6004546001600160a01b031633146113835760405162461bcd60e51b8152602060048201819052602482015260008051602061285f83398151915260448201526064016106c1565b6001600160a01b0381166113ff5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016106c1565b6114088161170d565b50565b6004546001600160a01b031633146114535760405162461bcd60e51b8152602060048201819052602482015260008051602061285f83398151915260448201526064016106c1565b600a805461ff001981166101009182900460ff1615909102179055565b81518351146114e75760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d6174636800000000000000000000000000000000000000000000000060648201526084016106c1565b6001600160a01b03841661154b5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016106c1565b3361155a818787878787611b55565b60005b845181101561169f57600085828151811061158857634e487b7160e01b600052603260045260246000fd5b6020026020010151905060008583815181106115b457634e487b7160e01b600052603260045260246000fd5b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156116475760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b60648201526084016106c1565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906116849084906126a9565b92505081905550505050806116989061275f565b905061155d565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516116ef929190612644565b60405180910390a4611705818787878787611c99565b505050505050565b600480546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156117ff5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c66000000000000000000000000000000000000000000000060648201526084016106c1565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b600061187882846126a9565b9392505050565b6001600160a01b0384166118fb5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016106c1565b3361191b8160008761190c88611e4e565b61191588611e4e565b87611b55565b6000848152602081815260408083206001600160a01b03891684529091528120805485929061194b9084906126a9565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610a8b81600087878787611ea7565b600061187882846126c1565b6001600160a01b038416611a1b5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016106c1565b33611a2b81878761190c88611e4e565b6000848152602081815260408083206001600160a01b038a16845290915290205483811015611aaf5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b60648201526084016106c1565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290611aec9084906126a9565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611b4c828888888888611ea7565b50505050505050565b6001600160a01b038516611bf85760005b8351811015611bf657828181518110611b8f57634e487b7160e01b600052603260045260246000fd5b602002602001015160036000868481518110611bbb57634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000828254611be091906126a9565b90915550611bef90508161275f565b9050611b66565b505b6001600160a01b0384166117055760005b8351811015611b4c57828181518110611c3257634e487b7160e01b600052603260045260246000fd5b602002602001015160036000868481518110611c5e57634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000828254611c8391906126e0565b90915550611c9290508161275f565b9050611c09565b6001600160a01b0384163b156117055760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611cdd9089908990889088908890600401612590565b602060405180830381600087803b158015611cf757600080fd5b505af1925050508015611d27575060408051601f3d908101601f19168201909252611d2491810190612468565b60015b611ddd57611d336127a6565b806308c379a01415611d6d5750611d486127be565b80611d535750611d6f565b8060405162461bcd60e51b81526004016106c19190612672565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e74657200000000000000000000000060648201526084016106c1565b6001600160e01b0319811663bc197c8160e01b14611b4c5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b60648201526084016106c1565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611e9657634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6001600160a01b0384163b156117055760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611eeb90899089908890889088906004016125ee565b602060405180830381600087803b158015611f0557600080fd5b505af1925050508015611f35575060408051601f3d908101601f19168201909252611f3291810190612468565b60015b611f4157611d336127a6565b6001600160e01b0319811663f23a6e6160e01b14611b4c5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b60648201526084016106c1565b828054611fbe906126f7565b90600052602060002090601f016020900481019282611fe05760008555612026565b82601f10611ff957805160ff1916838001178555612026565b82800160010185558215612026579182015b8281111561202657825182559160200191906001019061200b565b50612032929150612036565b5090565b5b808211156120325760008155600101612037565b600067ffffffffffffffff83111561206557612065612790565b60405161207c601f8501601f191660200182612732565b80915083815284848401111561209157600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b03811681146120c057600080fd5b919050565b600082601f8301126120d5578081fd5b813560206120e282612685565b6040516120ef8282612732565b8381528281019150858301600585901b8701840188101561210e578586fd5b855b8581101561213357612121826120a9565b84529284019290840190600101612110565b5090979650505050505050565b600082601f830112612150578081fd5b8135602061215d82612685565b60405161216a8282612732565b8381528281019150858301600585901b87018401881015612189578586fd5b855b858110156121335781358452928401929084019060010161218b565b600082601f8301126121b7578081fd5b6118788383356020850161204b565b6000602082840312156121d7578081fd5b611878826120a9565b600080604083850312156121f2578081fd5b6121fb836120a9565b9150612209602084016120a9565b90509250929050565b600080600080600060a08688031215612229578081fd5b612232866120a9565b9450612240602087016120a9565b9350604086013567ffffffffffffffff8082111561225c578283fd5b61226889838a01612140565b9450606088013591508082111561227d578283fd5b61228989838a01612140565b9350608088013591508082111561229e578283fd5b506122ab888289016121a7565b9150509295509295909350565b600080600080600060a086880312156122cf578081fd5b6122d8866120a9565b94506122e6602087016120a9565b93506040860135925060608601359150608086013567ffffffffffffffff81111561230f578182fd5b6122ab888289016121a7565b6000806040838503121561232d578182fd5b612336836120a9565b91506020830135801515811461234a578182fd5b809150509250929050565b60008060408385031215612367578182fd5b612370836120a9565b946020939093013593505050565b600080600060608486031215612392578283fd5b61239b846120a9565b95602085013595506040909401359392505050565b6000602082840312156123c1578081fd5b813567ffffffffffffffff8111156123d7578182fd5b6123e3848285016120c5565b949350505050565b600080604083850312156123fd578182fd5b823567ffffffffffffffff80821115612414578384fd5b612420868387016120c5565b93506020850135915080821115612435578283fd5b5061244285828601612140565b9150509250929050565b60006020828403121561245d578081fd5b813561187881612848565b600060208284031215612479578081fd5b815161187881612848565b600060208284031215612495578081fd5b5035919050565b600080604083850312156124ae578182fd5b82359150602083013567ffffffffffffffff8111156124cb578182fd5b8301601f810185136124db578182fd5b6124428582356020840161204b565b600080604083850312156124fc578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b8381101561253a5781518752958201959082019060010161251e565b509495945050505050565b60008151808452815b8181101561256a5760208185018101518683018201520161254e565b8181111561257b5782602083870101525b50601f01601f19169290920160200192915050565b60006001600160a01b03808816835280871660208401525060a060408301526125bc60a083018661250b565b82810360608401526125ce818661250b565b905082810360808401526125e28185612545565b98975050505050505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a0608083015261262660a0830184612545565b979650505050505050565b602081526000611878602083018461250b565b604081526000612657604083018561250b565b8281036020840152612669818561250b565b95945050505050565b6020815260006118786020830184612545565b600067ffffffffffffffff82111561269f5761269f612790565b5060051b60200190565b600082198211156126bc576126bc61277a565b500190565b60008160001904831182151516156126db576126db61277a565b500290565b6000828210156126f2576126f261277a565b500390565b600181811c9082168061270b57607f821691505b6020821081141561272c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff8111828210171561275857612758612790565b6040525050565b60006000198214156127735761277361277a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156127bb57600481823e5160e01c5b90565b600060443d10156127cc5790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156127fc57505050505090565b82850191508151818111156128145750505050505090565b843d870101602082850101111561282e5750505050505090565b61283d60208286010187612732565b509095945050505050565b6001600160e01b03198116811461140857600080fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201d20b07beac7d57d75513fe48b75341c6f33adbb609510239691b4f7d4410b4564736f6c63430008040033
Deployed Bytecode
0x6080604052600436106101fd5760003560e01c8063715018a61161011d578063bec12b53116100b0578063e985e9c51161007f578063f242432a11610064578063f242432a146105f2578063f2fde38b14610612578063f81227d41461063257600080fd5b8063e985e9c51461058f578063eb8d2444146105d857600080fd5b8063bec12b5314610531578063cd00e7d914610551578063d28d885214610564578063e24f6e101461057957600080fd5b806395d89b41116100ec57806395d89b41146104ba578063a22cb465146104cf578063b09f1266146104ef578063bd85b0391461050457600080fd5b8063715018a61461043e57806386d8953a146104535780638da5cb5b1461047357806395364a841461049b57600080fd5b806339e899ee116101955780634e1273f4116101645780634e1273f4146103935780634f558e79146103c05780636817c76c146103ef5780636f9170f61461040557600080fd5b806339e899ee1461031e5780633ccfd60b1461033e57806345f0a44f146103535780634dfc39511461037357600080fd5b80630e89341c116101d15780630e89341c146102a95780632042e5c2146102c95780632eb2c2d6146102e957806334918dfd1461030957600080fd5b8062fdd58e14610202578063015388681461023557806301ffc9a71461025757806306fdde0314610287575b600080fd5b34801561020e57600080fd5b5061022261021d366004612355565b610647565b6040519081526020015b60405180910390f35b34801561024157600080fd5b5061025561025036600461249c565b6106f0565b005b34801561026357600080fd5b5061027761027236600461244c565b61075c565b604051901515815260200161022c565b34801561029357600080fd5b5061029c6107f9565b60405161022c9190612672565b3480156102b557600080fd5b5061029c6102c4366004612484565b61088b565b3480156102d557600080fd5b506102556102e43660046121c6565b610987565b3480156102f557600080fd5b50610255610304366004612212565b6109f0565b34801561031557600080fd5b50610255610a92565b34801561032a57600080fd5b506102556103393660046121c6565b610aee565b34801561034a57600080fd5b50610255610b5a565b34801561035f57600080fd5b5061022261036e366004612484565b610bd5565b34801561037f57600080fd5b5061025561038e3660046124ea565b610bf6565b34801561039f57600080fd5b506103b36103ae3660046123eb565b610c70565b60405161022c9190612631565b3480156103cc57600080fd5b506102776103db366004612484565b600090815260036020526040902054151590565b3480156103fb57600080fd5b5061022260085481565b34801561041157600080fd5b506102776104203660046121c6565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561044a57600080fd5b50610255610de6565b34801561045f57600080fd5b5061025561046e3660046123b0565b610e3a565b34801561047f57600080fd5b506004546040516001600160a01b03909116815260200161022c565b3480156104a757600080fd5b50600a5461027790610100900460ff1681565b3480156104c657600080fd5b5061029c610ed0565b3480156104db57600080fd5b506102556104ea36600461231b565b610edf565b3480156104fb57600080fd5b5061029c610eea565b34801561051057600080fd5b5061022261051f366004612484565b60009081526003602052604090205490565b34801561053d57600080fd5b5061025561054c36600461237e565b610f78565b61025561055f3660046124ea565b611075565b34801561057057600080fd5b5061029c611293565b34801561058557600080fd5b5061022260095481565b34801561059b57600080fd5b506102776105aa3660046121e0565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b3480156105e457600080fd5b50600a546102779060ff1681565b3480156105fe57600080fd5b5061025561060d3660046122b8565b6112a0565b34801561061e57600080fd5b5061025561062d3660046121c6565b61133b565b34801561063e57600080fd5b5061025561140b565b60006001600160a01b0383166106ca5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b6004546001600160a01b031633146107385760405162461bcd60e51b8152602060048201819052602482015260008051602061285f83398151915260448201526064016106c1565b6000828152600560209081526040909120825161075792840190611fb2565b505050565b60006001600160e01b031982167fd9b67a260000000000000000000000000000000000000000000000000000000014806107bf57506001600160e01b031982167f0e89341c00000000000000000000000000000000000000000000000000000000145b806107f357507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6060600b8054610808906126f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610834906126f7565b80156108815780601f1061085657610100808354040283529160200191610881565b820191906000526020600020905b81548152906001019060200180831161086457829003601f168201915b5050505050905090565b6000818152600360205260409020546060906108e95760405162461bcd60e51b815260206004820152601160248201527f4e6f6e6578697374656e7420746f6b656e00000000000000000000000000000060448201526064016106c1565b60008281526005602052604090208054610902906126f7565b80601f016020809104026020016040519081016040528092919081815260200182805461092e906126f7565b801561097b5780601f106109505761010080835404028352916020019161097b565b820191906000526020600020905b81548152906001019060200180831161095e57829003601f168201915b50505050509050919050565b6004546001600160a01b031633146109cf5760405162461bcd60e51b8152602060048201819052602482015260008051602061285f83398151915260448201526064016106c1565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6001600160a01b038516331480610a0c5750610a0c85336105aa565b610a7e5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f766564000000000000000000000000000060648201526084016106c1565b610a8b8585858585611470565b5050505050565b6004546001600160a01b03163314610ada5760405162461bcd60e51b8152602060048201819052602482015260008051602061285f83398151915260448201526064016106c1565b600a805460ff19811660ff90911615179055565b6004546001600160a01b03163314610b365760405162461bcd60e51b8152602060048201819052602482015260008051602061285f83398151915260448201526064016106c1565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6004546001600160a01b03163314610ba25760405162461bcd60e51b8152602060048201819052602482015260008051602061285f83398151915260448201526064016106c1565b6040514790339082156108fc029083906000818181858888f19350505050158015610bd1573d6000803e3d6000fd5b5050565b60078181548110610be557600080fd5b600091825260209091200154905081565b6004546001600160a01b03163314610c3e5760405162461bcd60e51b8152602060048201819052602482015260008051602061285f83398151915260448201526064016106c1565b8060078381548110610c6057634e487b7160e01b600052603260045260246000fd5b6000918252602090912001555050565b60608151835114610ce95760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d61746368000000000000000000000000000000000000000000000060648201526084016106c1565b6000835167ffffffffffffffff811115610d1357634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610d3c578160200160208202803683370190505b50905060005b8451811015610dde57610da3858281518110610d6e57634e487b7160e01b600052603260045260246000fd5b6020026020010151858381518110610d9657634e487b7160e01b600052603260045260246000fd5b6020026020010151610647565b828281518110610dc357634e487b7160e01b600052603260045260246000fd5b6020908102919091010152610dd78161275f565b9050610d42565b509392505050565b6004546001600160a01b03163314610e2e5760405162461bcd60e51b8152602060048201819052602482015260008051602061285f83398151915260448201526064016106c1565b610e38600061170d565b565b6004546001600160a01b03163314610e825760405162461bcd60e51b8152602060048201819052602482015260008051602061285f83398151915260448201526064016106c1565b60005b8151811015610bd157610ebe828281518110610eb157634e487b7160e01b600052603260045260246000fd5b6020026020010151610aee565b80610ec88161275f565b915050610e85565b6060600c8054610808906126f7565b610bd1338383611777565b600c8054610ef7906126f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610f23906126f7565b8015610f705780601f10610f4557610100808354040283529160200191610f70565b820191906000526020600020905b815481529060010190602001808311610f5357829003601f168201915b505050505081565b6004546001600160a01b03163314610fc05760405162461bcd60e51b8152602060048201819052602482015260008051602061285f83398151915260448201526064016106c1565b60078281548110610fe157634e487b7160e01b600052603260045260246000fd5b906000526020600020015461100c826110068560009081526003602052604090205490565b9061186c565b111561105a5760405162461bcd60e51b815260206004820152601160248201527f457863656564206d617820737570706c7900000000000000000000000000000060448201526064016106c1565b6107578383836040518060200160405280600081525061187f565b600a5460ff166110c75760405162461bcd60e51b815260206004820152601560248201527f53616c6520686173206265656e207061757365642e000000000000000000000060448201526064016106c1565b600a54610100900460ff1615611136573360009081526006602052604090205460ff166111365760405162461bcd60e51b815260206004820152600f60248201527f4e6f742077686974656c6973746564000000000000000000000000000000000060448201526064016106c1565b6009548211156111885760405162461bcd60e51b815260206004820152601760248201527f4d6178206f6e6365207075726368617365206c696d697400000000000000000060448201526064016106c1565b600781815481106111a957634e487b7160e01b600052603260045260246000fd5b90600052602060002001546111ce836110068460009081526003602052604090205490565b111561121c5760405162461bcd60e51b815260206004820152601160248201527f457863656564206d617820737570706c7900000000000000000000000000000060448201526064016106c1565b60085461122990836119ab565b3410156112785760405162461bcd60e51b815260206004820152601560248201527f546f74616c207072696365206e6f74206d61746368000000000000000000000060448201526064016106c1565b610bd13382846040518060200160405280600081525061187f565b600b8054610ef7906126f7565b6001600160a01b0385163314806112bc57506112bc85336105aa565b61132e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f766564000000000000000000000000000000000000000000000060648201526084016106c1565b610a8b85858585856119b7565b6004546001600160a01b031633146113835760405162461bcd60e51b8152602060048201819052602482015260008051602061285f83398151915260448201526064016106c1565b6001600160a01b0381166113ff5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016106c1565b6114088161170d565b50565b6004546001600160a01b031633146114535760405162461bcd60e51b8152602060048201819052602482015260008051602061285f83398151915260448201526064016106c1565b600a805461ff001981166101009182900460ff1615909102179055565b81518351146114e75760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d6174636800000000000000000000000000000000000000000000000060648201526084016106c1565b6001600160a01b03841661154b5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016106c1565b3361155a818787878787611b55565b60005b845181101561169f57600085828151811061158857634e487b7160e01b600052603260045260246000fd5b6020026020010151905060008583815181106115b457634e487b7160e01b600052603260045260246000fd5b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156116475760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b60648201526084016106c1565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906116849084906126a9565b92505081905550505050806116989061275f565b905061155d565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516116ef929190612644565b60405180910390a4611705818787878787611c99565b505050505050565b600480546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156117ff5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c66000000000000000000000000000000000000000000000060648201526084016106c1565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b600061187882846126a9565b9392505050565b6001600160a01b0384166118fb5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016106c1565b3361191b8160008761190c88611e4e565b61191588611e4e565b87611b55565b6000848152602081815260408083206001600160a01b03891684529091528120805485929061194b9084906126a9565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610a8b81600087878787611ea7565b600061187882846126c1565b6001600160a01b038416611a1b5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016106c1565b33611a2b81878761190c88611e4e565b6000848152602081815260408083206001600160a01b038a16845290915290205483811015611aaf5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b60648201526084016106c1565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290611aec9084906126a9565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611b4c828888888888611ea7565b50505050505050565b6001600160a01b038516611bf85760005b8351811015611bf657828181518110611b8f57634e487b7160e01b600052603260045260246000fd5b602002602001015160036000868481518110611bbb57634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000828254611be091906126a9565b90915550611bef90508161275f565b9050611b66565b505b6001600160a01b0384166117055760005b8351811015611b4c57828181518110611c3257634e487b7160e01b600052603260045260246000fd5b602002602001015160036000868481518110611c5e57634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000828254611c8391906126e0565b90915550611c9290508161275f565b9050611c09565b6001600160a01b0384163b156117055760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611cdd9089908990889088908890600401612590565b602060405180830381600087803b158015611cf757600080fd5b505af1925050508015611d27575060408051601f3d908101601f19168201909252611d2491810190612468565b60015b611ddd57611d336127a6565b806308c379a01415611d6d5750611d486127be565b80611d535750611d6f565b8060405162461bcd60e51b81526004016106c19190612672565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e74657200000000000000000000000060648201526084016106c1565b6001600160e01b0319811663bc197c8160e01b14611b4c5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b60648201526084016106c1565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611e9657634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6001600160a01b0384163b156117055760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611eeb90899089908890889088906004016125ee565b602060405180830381600087803b158015611f0557600080fd5b505af1925050508015611f35575060408051601f3d908101601f19168201909252611f3291810190612468565b60015b611f4157611d336127a6565b6001600160e01b0319811663f23a6e6160e01b14611b4c5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b60648201526084016106c1565b828054611fbe906126f7565b90600052602060002090601f016020900481019282611fe05760008555612026565b82601f10611ff957805160ff1916838001178555612026565b82800160010185558215612026579182015b8281111561202657825182559160200191906001019061200b565b50612032929150612036565b5090565b5b808211156120325760008155600101612037565b600067ffffffffffffffff83111561206557612065612790565b60405161207c601f8501601f191660200182612732565b80915083815284848401111561209157600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b03811681146120c057600080fd5b919050565b600082601f8301126120d5578081fd5b813560206120e282612685565b6040516120ef8282612732565b8381528281019150858301600585901b8701840188101561210e578586fd5b855b8581101561213357612121826120a9565b84529284019290840190600101612110565b5090979650505050505050565b600082601f830112612150578081fd5b8135602061215d82612685565b60405161216a8282612732565b8381528281019150858301600585901b87018401881015612189578586fd5b855b858110156121335781358452928401929084019060010161218b565b600082601f8301126121b7578081fd5b6118788383356020850161204b565b6000602082840312156121d7578081fd5b611878826120a9565b600080604083850312156121f2578081fd5b6121fb836120a9565b9150612209602084016120a9565b90509250929050565b600080600080600060a08688031215612229578081fd5b612232866120a9565b9450612240602087016120a9565b9350604086013567ffffffffffffffff8082111561225c578283fd5b61226889838a01612140565b9450606088013591508082111561227d578283fd5b61228989838a01612140565b9350608088013591508082111561229e578283fd5b506122ab888289016121a7565b9150509295509295909350565b600080600080600060a086880312156122cf578081fd5b6122d8866120a9565b94506122e6602087016120a9565b93506040860135925060608601359150608086013567ffffffffffffffff81111561230f578182fd5b6122ab888289016121a7565b6000806040838503121561232d578182fd5b612336836120a9565b91506020830135801515811461234a578182fd5b809150509250929050565b60008060408385031215612367578182fd5b612370836120a9565b946020939093013593505050565b600080600060608486031215612392578283fd5b61239b846120a9565b95602085013595506040909401359392505050565b6000602082840312156123c1578081fd5b813567ffffffffffffffff8111156123d7578182fd5b6123e3848285016120c5565b949350505050565b600080604083850312156123fd578182fd5b823567ffffffffffffffff80821115612414578384fd5b612420868387016120c5565b93506020850135915080821115612435578283fd5b5061244285828601612140565b9150509250929050565b60006020828403121561245d578081fd5b813561187881612848565b600060208284031215612479578081fd5b815161187881612848565b600060208284031215612495578081fd5b5035919050565b600080604083850312156124ae578182fd5b82359150602083013567ffffffffffffffff8111156124cb578182fd5b8301601f810185136124db578182fd5b6124428582356020840161204b565b600080604083850312156124fc578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b8381101561253a5781518752958201959082019060010161251e565b509495945050505050565b60008151808452815b8181101561256a5760208185018101518683018201520161254e565b8181111561257b5782602083870101525b50601f01601f19169290920160200192915050565b60006001600160a01b03808816835280871660208401525060a060408301526125bc60a083018661250b565b82810360608401526125ce818661250b565b905082810360808401526125e28185612545565b98975050505050505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a0608083015261262660a0830184612545565b979650505050505050565b602081526000611878602083018461250b565b604081526000612657604083018561250b565b8281036020840152612669818561250b565b95945050505050565b6020815260006118786020830184612545565b600067ffffffffffffffff82111561269f5761269f612790565b5060051b60200190565b600082198211156126bc576126bc61277a565b500190565b60008160001904831182151516156126db576126db61277a565b500290565b6000828210156126f2576126f261277a565b500390565b600181811c9082168061270b57607f821691505b6020821081141561272c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff8111828210171561275857612758612790565b6040525050565b60006000198214156127735761277361277a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156127bb57600481823e5160e01c5b90565b600060443d10156127cc5790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156127fc57505050505090565b82850191508151818111156128145750505050505090565b843d870101602082850101111561282e5750505050505090565b61283d60208286010187612732565b509095945050505050565b6001600160e01b03198116811461140857600080fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212201d20b07beac7d57d75513fe48b75341c6f33adbb609510239691b4f7d4410b4564736f6c63430008040033
Deployed Bytecode Sourcemap
255:3074:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2170:228:1;;;;;;;;;;-1:-1:-1;2170:228:1;;;;;:::i;:::-;;:::i;:::-;;;19326:25:12;;;19314:2;19299:18;2170:228:1;;;;;;;;2982:158:11;;;;;;;;;;-1:-1:-1;2982:158:11;;;;;:::i;:::-;;:::i;:::-;;1221:305:1;;;;;;;;;;-1:-1:-1;1221:305:1;;;;;:::i;:::-;;:::i;:::-;;;11554:14:12;;11547:22;11529:41;;11517:2;11502:18;1221:305:1;11484:92:12;3148:83:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;2755:219::-;;;;;;;;;;-1:-1:-1;2755:219:11;;;;;:::i;:::-;;:::i;2385:111::-;;;;;;;;;;-1:-1:-1;2385:111:11;;;;;:::i;:::-;;:::i;4045:430:1:-;;;;;;;;;;-1:-1:-1;4045:430:1;;;;;:::i;:::-;;:::i;1852:89:11:-;;;;;;;;;;;;;:::i;2043:105::-;;;;;;;;;;-1:-1:-1;2043:105:11;;;;;:::i;:::-;;:::i;790:143::-;;;;;;;;;;;;;:::i;455:39::-;;;;;;;;;;-1:-1:-1;455:39:11;;;;;:::i;:::-;;:::i;2630:117::-;;;;;;;;;;-1:-1:-1;2630:117:11;;;;;:::i;:::-;;:::i;2555:508:1:-;;;;;;;;;;-1:-1:-1;2555:508:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;886:120:4:-;;;;;;;;;;-1:-1:-1;886:120:4;;;;;:::i;:::-;943:4;770:16;;;:12;:16;;;;;;-1:-1:-1;;;886:120:4;503:38:11;;;;;;;;;;;;;;;;2504:118;;;;;;;;;;-1:-1:-1;2504:118:11;;;;;:::i;:::-;-1:-1:-1;;;;;2592:22:11;2568:4;2592:22;;;:12;:22;;;;;;;;;2504:118;1668:101:0;;;;;;;;;;;;;:::i;2156:221:11:-;;;;;;;;;;-1:-1:-1;2156:221:11;;;;;:::i;:::-;;:::i;1036:85:0:-;;;;;;;;;;-1:-1:-1;1108:6:0;;1036:85;;-1:-1:-1;;;;;1108:6:0;;;9126:74:12;;9114:2;9099:18;1036:85:0;9081:125:12;630:28:11;;;;;;;;;;-1:-1:-1;630:28:11;;;;;;;;;;;3239:87;;;;;;;;;;;;;:::i;3131:153:1:-;;;;;;;;;;-1:-1:-1;3131:153:1;;;;;:::i;:::-;;:::i;716:29:11:-;;;;;;;;;;;;;:::i;682:111:4:-;;;;;;;;;;-1:-1:-1;682:111:4;;;;;:::i;:::-;744:7;770:16;;;:12;:16;;;;;;;682:111;1519:325:11;;;;;;;;;;-1:-1:-1;1519:325:11;;;;;:::i;:::-;;:::i;941:570::-;;;;;;:::i;:::-;;:::i;667:42::-;;;;;;;;;;;;;:::i;550:32::-;;;;;;;;;;;;;;;;3351:166:1;;;;;;;;;;-1:-1:-1;3351:166:1;;;;;:::i;:::-;-1:-1:-1;;;;;3473:27:1;;;3450:4;3473:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;3351:166;591:32:11;;;;;;;;;;-1:-1:-1;591:32:11;;;;;;;;3584:389:1;;;;;;;;;;-1:-1:-1;3584:389:1;;;;;:::i;:::-;;:::i;1918:198:0:-;;;;;;;;;;-1:-1:-1;1918:198:0;;;;;:::i;:::-;;:::i;1949:86:11:-;;;;;;;;;;;;;:::i;2170:228:1:-;2256:7;-1:-1:-1;;;;;2283:21:1;;2275:77;;;;-1:-1:-1;;;2275:77:1;;13187:2:12;2275:77:1;;;13169:21:12;13226:2;13206:18;;;13199:30;13265:34;13245:18;;;13238:62;13336:13;13316:18;;;13309:41;13367:19;;2275:77:1;;;;;;;;;-1:-1:-1;2369:9:1;:13;;;;;;;;;;;-1:-1:-1;;;;;2369:22:1;;;;;;;;;;;;2170:228::o;2982:158:11:-;1108:6:0;;-1:-1:-1;;;;;1108:6:0;719:10:7;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;16688:2:12;1240:68:0;;;16670:21:12;;;16707:18;;;16700:30;-1:-1:-1;;;;;;;;;;;16746:18:12;;;16739:62;16818:18;;1240:68:0;16660:182:12;1240:68:0;3100:20:11::1;::::0;;;:10:::1;:20;::::0;;;;;;;:32;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;2982:158:::0;;:::o;1221:305:1:-;1323:4;-1:-1:-1;;;;;;1358:41:1;;1373:26;1358:41;;:109;;-1:-1:-1;;;;;;;1415:52:1;;1430:37;1415:52;1358:109;:161;;;-1:-1:-1;952:25:8;-1:-1:-1;;;;;;937:40:8;;;1483:36:1;1339:180;1221:305;-1:-1:-1;;1221:305:1:o;3148:83:11:-;3185:13;3218:5;3211:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3148:83;:::o;2755:219::-;943:4:4;770:16;;;:12;:16;;;;;;2863:13:11;;2894:40;;;;-1:-1:-1;;;2894:40:11;;14822:2:12;2894:40:11;;;14804:21:12;14861:2;14841:18;;;14834:30;14900:19;14880:18;;;14873:47;14937:18;;2894:40:11;14794:167:12;2894:40:11;2952:14;;;;:10;:14;;;;;2945:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2755:219;;;:::o;2385:111::-;1108:6:0;;-1:-1:-1;;;;;1108:6:0;719:10:7;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;16688:2:12;1240:68:0;;;16670:21:12;;;16707:18;;;16700:30;-1:-1:-1;;;;;;;;;;;16746:18:12;;;16739:62;16818:18;;1240:68:0;16660:182:12;1240:68:0;-1:-1:-1;;;;;2458:22:11::1;2483:5;2458:22:::0;;;:12:::1;:22;::::0;;;;:30;;-1:-1:-1;;2458:30:11::1;::::0;;2385:111::o;4045:430:1:-;-1:-1:-1;;;;;4270:20:1;;719:10:7;4270:20:1;;:60;;-1:-1:-1;4294:36:1;4311:4;719:10:7;3351:166:1;:::i;4294:36::-;4249:157;;;;-1:-1:-1;;;4249:157:1;;15168:2:12;4249:157:1;;;15150:21:12;15207:2;15187:18;;;15180:30;15246:34;15226:18;;;15219:62;15317:20;15297:18;;;15290:48;15355:19;;4249:157:1;15140:240:12;4249:157:1;4416:52;4439:4;4445:2;4449:3;4454:7;4463:4;4416:22;:52::i;:::-;4045:430;;;;;:::o;1852:89:11:-;1108:6:0;;-1:-1:-1;;;;;1108:6:0;719:10:7;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;16688:2:12;1240:68:0;;;16670:21:12;;;16707:18;;;16700:30;-1:-1:-1;;;;;;;;;;;16746:18:12;;;16739:62;16818:18;;1240:68:0;16660:182:12;1240:68:0;1921:12:11::1;::::0;;-1:-1:-1;;1905:28:11;::::1;1921:12;::::0;;::::1;1920:13;1905:28;::::0;;1852:89::o;2043:105::-;1108:6:0;;-1:-1:-1;;;;;1108:6:0;719:10:7;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;16688:2:12;1240:68:0;;;16670:21:12;;;16707:18;;;16700:30;-1:-1:-1;;;;;;;;;;;16746:18:12;;;16739:62;16818:18;;1240:68:0;16660:182:12;1240:68:0;-1:-1:-1;;;;;2111:22:11::1;;::::0;;;:12:::1;:22;::::0;;;;:29;;-1:-1:-1;;2111:29:11::1;2136:4;2111:29;::::0;;2043:105::o;790:143::-;1108:6:0;;-1:-1:-1;;;;;1108:6:0;719:10:7;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;16688:2:12;1240:68:0;;;16670:21:12;;;16707:18;;;16700:30;-1:-1:-1;;;;;;;;;;;16746:18:12;;;16739:62;16818:18;;1240:68:0;16660:182:12;1240:68:0;888:37:11::1;::::0;856:21:::1;::::0;896:10:::1;::::0;888:37;::::1;;;::::0;856:21;;838:15:::1;888:37:::0;838:15;888:37;856:21;896:10;888:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;1318:1:0;790:143:11:o:0;455:39::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;455:39:11;:::o;2630:117::-;1108:6:0;;-1:-1:-1;;;;;1108:6:0;719:10:7;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;16688:2:12;1240:68:0;;;16670:21:12;;;16707:18;;;16700:30;-1:-1:-1;;;;;;;;;;;16746:18:12;;;16739:62;16818:18;;1240:68:0;16660:182:12;1240:68:0;2732:7:11::1;2714;2722:6;2714:15;;;;;;-1:-1:-1::0;;;2714:15:11::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;:25:::0;-1:-1:-1;;2630:117:11:o;2555:508:1:-;2706:16;2765:3;:10;2746:8;:15;:29;2738:83;;;;-1:-1:-1;;;2738:83:1;;17809:2:12;2738:83:1;;;17791:21:12;17848:2;17828:18;;;17821:30;17887:34;17867:18;;;17860:62;17958:11;17938:18;;;17931:39;17987:19;;2738:83:1;17781:231:12;2738:83:1;2832:30;2879:8;:15;2865:30;;;;;;-1:-1:-1;;;2865:30:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2865:30:1;;2832:63;;2911:9;2906:120;2930:8;:15;2926:1;:19;2906:120;;;2985:30;2995:8;3004:1;2995:11;;;;;;-1:-1:-1;;;2995:11:1;;;;;;;;;;;;;;;3008:3;3012:1;3008:6;;;;;;-1:-1:-1;;;3008:6:1;;;;;;;;;;;;;;;2985:9;:30::i;:::-;2966:13;2980:1;2966:16;;;;;;-1:-1:-1;;;2966:16:1;;;;;;;;;;;;;;;;;;:49;2947:3;;;:::i;:::-;;;2906:120;;;-1:-1:-1;3043:13:1;2555:508;-1:-1:-1;;;2555:508:1:o;1668:101:0:-;1108:6;;-1:-1:-1;;;;;1108:6:0;719:10:7;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;16688:2:12;1240:68:0;;;16670:21:12;;;16707:18;;;16700:30;-1:-1:-1;;;;;;;;;;;16746:18:12;;;16739:62;16818:18;;1240:68:0;16660:182:12;1240:68:0;1732:30:::1;1759:1;1732:18;:30::i;:::-;1668:101::o:0;2156:221:11:-;1108:6:0;;-1:-1:-1;;;;;1108:6:0;719:10:7;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;16688:2:12;1240:68:0;;;16670:21:12;;;16707:18;;;16700:30;-1:-1:-1;;;;;;;;;;;16746:18:12;;;16739:62;16818:18;;1240:68:0;16660:182:12;1240:68:0;2273:9:11::1;2268:102;2292:10;:17;2288:1;:21;2268:102;;;2331:27;2344:10;2355:1;2344:13;;;;;;-1:-1:-1::0;;;2344:13:11::1;;;;;;;;;;;;;;;2331:12;:27::i;:::-;2311:3:::0;::::1;::::0;::::1;:::i;:::-;;;;2268:102;;3239:87:::0;3278:13;3311:7;3304:14;;;;;:::i;3131:153:1:-;3225:52;719:10:7;3258:8:1;3268;3225:18;:52::i;716:29:11:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1519:325::-;1108:6:0;;-1:-1:-1;;;;;1108:6:0;719:10:7;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;16688:2:12;1240:68:0;;;16670:21:12;;;16707:18;;;16700:30;-1:-1:-1;;;;;;;;;;;16746:18:12;;;16739:62;16818:18;;1240:68:0;16660:182:12;1240:68:0;1725:7:11::1;1733:6;1725:15;;;;;;-1:-1:-1::0;;;1725:15:11::1;;;;;;;;;;;;;;;;;1682:39;1706:14;1682:19;1694:6;744:7:4::0;770:16;;;:12;:16;;;;;;;682:111;1682:19:11::1;:23:::0;::::1;:39::i;:::-;:58;;1660:125;;;::::0;-1:-1:-1;;;1660:125:11;;16342:2:12;1660:125:11::1;::::0;::::1;16324:21:12::0;16381:2;16361:18;;;16354:30;16420:19;16400:18;;;16393:47;16457:18;;1660:125:11::1;16314:167:12::0;1660:125:11::1;1798:38;1804:3;1809:6;1817:14;1798:38;;;;;;;;;;;::::0;:5:::1;:38::i;941:570::-:0;1031:12;;;;1023:46;;;;-1:-1:-1;;;1023:46:11;;12428:2:12;1023:46:11;;;12410:21:12;12467:2;12447:18;;;12440:30;12506:23;12486:18;;;12479:51;12547:18;;1023:46:11;12400:171:12;1023:46:11;1084:9;;;;;;;1080:94;;;1131:10;1118:24;;;;:12;:24;;;;;;;;1110:52;;;;-1:-1:-1;;;1110:52:11;;15587:2:12;1110:52:11;;;15569:21:12;15626:2;15606:18;;;15599:30;15665:17;15645:18;;;15638:45;15700:18;;1110:52:11;15559:165:12;1110:52:11;1203:12;;1192:7;:23;;1184:59;;;;-1:-1:-1;;;1184:59:11;;18628:2:12;1184:59:11;;;18610:21:12;18667:2;18647:18;;;18640:30;18706:25;18686:18;;;18679:53;18749:18;;1184:59:11;18600:173:12;1184:59:11;1312:7;1320:6;1312:15;;;;;;-1:-1:-1;;;1312:15:11;;;;;;;;;;;;;;;;;1276:32;1300:7;1276:19;1288:6;744:7:4;770:16;;;:12;:16;;;;;;;682:111;1276:32:11;:51;;1254:118;;;;-1:-1:-1;;;1254:118:11;;16342:2:12;1254:118:11;;;16324:21:12;16381:2;16361:18;;;16354:30;16420:19;16400:18;;;16393:47;16457:18;;1254:118:11;16314:167:12;1254:118:11;1404:9;;:22;;1418:7;1404:13;:22::i;:::-;1391:9;:35;;1383:69;;;;-1:-1:-1;;;1383:69:11;;17049:2:12;1383:69:11;;;17031:21:12;17088:2;17068:18;;;17061:30;17127:23;17107:18;;;17100:51;17168:18;;1383:69:11;17021:171:12;1383:69:11;1465:38;1471:10;1483:6;1491:7;1465:38;;;;;;;;;;;;:5;:38::i;667:42::-;;;;;;;:::i;3584:389:1:-;-1:-1:-1;;;;;3784:20:1;;719:10:7;3784:20:1;;:60;;-1:-1:-1;3808:36:1;3825:4;719:10:7;3351:166:1;:::i;3808:36::-;3763:148;;;;-1:-1:-1;;;3763:148:1;;14006:2:12;3763:148:1;;;13988:21:12;14045:2;14025:18;;;14018:30;14084:34;14064:18;;;14057:62;14155:11;14135:18;;;14128:39;14184:19;;3763:148:1;13978:231:12;3763:148:1;3921:45;3939:4;3945:2;3949;3953:6;3961:4;3921:17;:45::i;1918:198:0:-;1108:6;;-1:-1:-1;;;;;1108:6:0;719:10:7;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;16688:2:12;1240:68:0;;;16670:21:12;;;16707:18;;;16700:30;-1:-1:-1;;;;;;;;;;;16746:18:12;;;16739:62;16818:18;;1240:68:0;16660:182:12;1240:68:0;-1:-1:-1;;;;;2006:22:0;::::1;1998:73;;;::::0;-1:-1:-1;;;1998:73:0;;13599:2:12;1998:73:0::1;::::0;::::1;13581:21:12::0;13638:2;13618:18;;;13611:30;13677:34;13657:18;;;13650:62;13748:8;13728:18;;;13721:36;13774:19;;1998:73:0::1;13571:228:12::0;1998:73:0::1;2081:28;2100:8;2081:18;:28::i;:::-;1918:198:::0;:::o;1949:86:11:-;1108:6:0;;-1:-1:-1;;;;;1108:6:0;719:10:7;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;16688:2:12;1240:68:0;;;16670:21:12;;;16707:18;;;16700:30;-1:-1:-1;;;;;;;;;;;16746:18:12;;;16739:62;16818:18;;1240:68:0;16660:182:12;1240:68:0;2018:9:11::1;::::0;;-1:-1:-1;;2005:22:11;::::1;2018:9;::::0;;;::::1;;;2017:10;2005:22:::0;;::::1;;::::0;;1949:86::o;6068:1045:1:-;6288:7;:14;6274:3;:10;:28;6266:81;;;;-1:-1:-1;;;6266:81:1;;18219:2:12;6266:81:1;;;18201:21:12;18258:2;18238:18;;;18231:30;18297:34;18277:18;;;18270:62;18368:10;18348:18;;;18341:38;18396:19;;6266:81:1;18191:230:12;6266:81:1;-1:-1:-1;;;;;6365:16:1;;6357:66;;;;-1:-1:-1;;;6357:66:1;;14416:2:12;6357:66:1;;;14398:21:12;14455:2;14435:18;;;14428:30;14494:34;14474:18;;;14467:62;-1:-1:-1;;;14545:18:12;;;14538:35;14590:19;;6357:66:1;14388:227:12;6357:66:1;719:10:7;6476:60:1;719:10:7;6507:4:1;6513:2;6517:3;6522:7;6531:4;6476:20;:60::i;:::-;6552:9;6547:411;6571:3;:10;6567:1;:14;6547:411;;;6602:10;6615:3;6619:1;6615:6;;;;;;-1:-1:-1;;;6615:6:1;;;;;;;;;;;;;;;6602:19;;6635:14;6652:7;6660:1;6652:10;;;;;;-1:-1:-1;;;6652:10:1;;;;;;;;;;;;;;;;;;;;6677:19;6699:13;;;;;;;;;;-1:-1:-1;;;;;6699:19:1;;;;;;;;;;;;6652:10;;-1:-1:-1;6740:21:1;;;;6732:76;;;;-1:-1:-1;;;6732:76:1;;15931:2:12;6732:76:1;;;15913:21:12;15970:2;15950:18;;;15943:30;16009:34;15989:18;;;15982:62;-1:-1:-1;;;16060:18:12;;;16053:40;16110:19;;6732:76:1;15903:232:12;6732:76:1;6850:9;:13;;;;;;;;;;;-1:-1:-1;;;;;6850:19:1;;;;;;;;;;6872:20;;;6850:42;;6920:17;;;;;;;:27;;6872:20;;6850:9;6920:27;;6872:20;;6920:27;:::i;:::-;;;;;;;;6547:411;;;6583:3;;;;:::i;:::-;;;6547:411;;;;7003:2;-1:-1:-1;;;;;6973:47:1;6997:4;-1:-1:-1;;;;;6973:47:1;6987:8;-1:-1:-1;;;;;6973:47:1;;7007:3;7012:7;6973:47;;;;;;;:::i;:::-;;;;;;;;7031:75;7067:8;7077:4;7083:2;7087:3;7092:7;7101:4;7031:35;:75::i;:::-;6068:1045;;;;;;:::o;2270:187:0:-;2362:6;;;-1:-1:-1;;;;;2378:17:0;;;;;;;;;;;2410:40;;2362:6;;;2378:17;2362:6;;2410:40;;2343:16;;2410:40;2270:187;;:::o;12074:323:1:-;12224:8;-1:-1:-1;;;;;12215:17:1;:5;-1:-1:-1;;;;;12215:17:1;;;12207:71;;;;-1:-1:-1;;;12207:71:1;;17399:2:12;12207:71:1;;;17381:21:12;17438:2;17418:18;;;17411:30;17477:34;17457:18;;;17450:62;17548:11;17528:18;;;17521:39;17577:19;;12207:71:1;17371:231:12;12207:71:1;-1:-1:-1;;;;;12288:25:1;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;12288:46:1;;;;;;;;;;12349:41;;11529::12;;;12349::1;;11502:18:12;12349:41:1;;;;;;;12074:323;;;:::o;2741:96:10:-;2799:7;2825:5;2829:1;2825;:5;:::i;:::-;2818:12;2741:96;-1:-1:-1;;;2741:96:10:o;8395:553:1:-;-1:-1:-1;;;;;8542:16:1;;8534:62;;;;-1:-1:-1;;;8534:62:1;;18980:2:12;8534:62:1;;;18962:21:12;19019:2;18999:18;;;18992:30;19058:34;19038:18;;;19031:62;19129:3;19109:18;;;19102:31;19150:19;;8534:62:1;18952:223:12;8534:62:1;719:10:7;8649:102:1;719:10:7;8607:16:1;8692:2;8696:21;8714:2;8696:17;:21::i;:::-;8719:25;8737:6;8719:17;:25::i;:::-;8746:4;8649:20;:102::i;:::-;8762:9;:13;;;;;;;;;;;-1:-1:-1;;;;;8762:17:1;;;;;;;;;:27;;8783:6;;8762:9;:27;;8783:6;;8762:27;:::i;:::-;;;;-1:-1:-1;;8804:52:1;;;19536:25:12;;;19592:2;19577:18;;19570:34;;;-1:-1:-1;;;;;8804:52:1;;;;8837:1;;8804:52;;;;;;19509:18:12;8804:52:1;;;;;;;8867:74;8898:8;8916:1;8920:2;8924;8928:6;8936:4;8867:30;:74::i;3451:96:10:-;3509:7;3535:5;3539:1;3535;:5;:::i;4925:797:1:-;-1:-1:-1;;;;;5106:16:1;;5098:66;;;;-1:-1:-1;;;5098:66:1;;14416:2:12;5098:66:1;;;14398:21:12;14455:2;14435:18;;;14428:30;14494:34;14474:18;;;14467:62;-1:-1:-1;;;14545:18:12;;;14538:35;14590:19;;5098:66:1;14388:227:12;5098:66:1;719:10:7;5217:96:1;719:10:7;5248:4:1;5254:2;5258:21;5276:2;5258:17;:21::i;5217:96::-;5324:19;5346:13;;;;;;;;;;;-1:-1:-1;;;;;5346:19:1;;;;;;;;;;5383:21;;;;5375:76;;;;-1:-1:-1;;;5375:76:1;;15931:2:12;5375:76:1;;;15913:21:12;15970:2;15950:18;;;15943:30;16009:34;15989:18;;;15982:62;-1:-1:-1;;;16060:18:12;;;16053:40;16110:19;;5375:76:1;15903:232:12;5375:76:1;5485:9;:13;;;;;;;;;;;-1:-1:-1;;;;;5485:19:1;;;;;;;;;;5507:20;;;5485:42;;5547:17;;;;;;;:27;;5507:20;;5485:9;5547:27;;5507:20;;5547:27;:::i;:::-;;;;-1:-1:-1;;5590:46:1;;;19536:25:12;;;19592:2;19577:18;;19570:34;;;-1:-1:-1;;;;;5590:46:1;;;;;;;;;;;;;;19509:18:12;5590:46:1;;;;;;;5647:68;5678:8;5688:4;5694:2;5698;5702:6;5710:4;5647:30;:68::i;:::-;4925:797;;;;;;;:::o;1076:634:4:-;-1:-1:-1;;;;;1388:18:4;;1384:156;;1427:9;1422:108;1446:3;:10;1442:1;:14;1422:108;;;1505:7;1513:1;1505:10;;;;;;-1:-1:-1;;;1505:10:4;;;;;;;;;;;;;;;1481:12;:20;1494:3;1498:1;1494:6;;;;;;-1:-1:-1;;;1494:6:4;;;;;;;;;;;;;;;1481:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;1458:3:4;;-1:-1:-1;1458:3:4;;:::i;:::-;;;1422:108;;;;1384:156;-1:-1:-1;;;;;1554:16:4;;1550:154;;1591:9;1586:108;1610:3;:10;1606:1;:14;1586:108;;;1669:7;1677:1;1669:10;;;;;;-1:-1:-1;;;1669:10:4;;;;;;;;;;;;;;;1645:12;:20;1658:3;1662:1;1658:6;;;;;;-1:-1:-1;;;1658:6:4;;;;;;;;;;;;;;;1645:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;1622:3:4;;-1:-1:-1;1622:3:4;;:::i;:::-;;;1586:108;;14282:792:1;-1:-1:-1;;;;;14514:13:1;;1465:19:6;:23;14510:558:1;;14549:79;;-1:-1:-1;;;14549:79:1;;-1:-1:-1;;;;;14549:43:1;;;;;:79;;14593:8;;14603:4;;14609:3;;14614:7;;14623:4;;14549:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14549:79:1;;;;;;;;-1:-1:-1;;14549:79:1;;;;;;;;;;;;:::i;:::-;;;14545:513;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;14934:6;14927:14;;-1:-1:-1;;;14927:14:1;;;;;;;;:::i;14545:513::-;;;14981:62;;-1:-1:-1;;;14981:62:1;;12007:2:12;14981:62:1;;;11989:21:12;12046:2;12026:18;;;12019:30;12085:34;12065:18;;;12058:62;12156:22;12136:18;;;12129:50;12196:19;;14981:62:1;11979:242:12;14545:513:1;-1:-1:-1;;;;;;14707:60:1;;-1:-1:-1;;;14707:60:1;14703:157;;14791:50;;-1:-1:-1;;;14791:50:1;;12778:2:12;14791:50:1;;;12760:21:12;12817:2;12797:18;;;12790:30;12856:34;12836:18;;;12829:62;-1:-1:-1;;;12907:18:12;;;12900:38;12955:19;;14791:50:1;12750:230:12;15080:193:1;15199:16;;;15213:1;15199:16;;;;;;;;;15146;;15174:22;;15199:16;;;;;;;;;;;;-1:-1:-1;15199:16:1;15174:41;;15236:7;15225:5;15231:1;15225:8;;;;;;-1:-1:-1;;;15225:8:1;;;;;;;;;;;;;;;;;;:18;15261:5;15080:193;-1:-1:-1;;15080:193:1:o;13551:725::-;-1:-1:-1;;;;;13758:13:1;;1465:19:6;:23;13754:516:1;;13793:72;;-1:-1:-1;;;13793:72:1;;-1:-1:-1;;;;;13793:38:1;;;;;:72;;13832:8;;13842:4;;13848:2;;13852:6;;13860:4;;13793:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13793:72:1;;;;;;;;-1:-1:-1;;13793:72:1;;;;;;;;;;;;:::i;:::-;;;13789:471;;;;:::i;:::-;-1:-1:-1;;;;;;13914:55:1;;-1:-1:-1;;;13914:55:1;13910:152;;13993:50;;-1:-1:-1;;;13993:50:1;;12778:2:12;13993:50:1;;;12760:21:12;12817:2;12797:18;;;12790:30;12856:34;12836:18;;;12829:62;-1:-1:-1;;;12907:18:12;;;12900:38;12955:19;;13993:50:1;12750:230:12;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:468:12;78:5;112:18;104:6;101:30;98:2;;;134:18;;:::i;:::-;183:2;177:9;195:69;252:2;231:15;;-1:-1:-1;;227:29:12;258:4;223:40;177:9;195:69;:::i;:::-;282:6;273:15;;312:6;304;297:22;352:3;343:6;338:3;334:16;331:25;328:2;;;369:1;366;359:12;328:2;419:6;414:3;407:4;399:6;395:17;382:44;474:1;467:4;458:6;450;446:19;442:30;435:41;;88:394;;;;;:::o;487:196::-;555:20;;-1:-1:-1;;;;;604:54:12;;594:65;;584:2;;673:1;670;663:12;584:2;536:147;;;:::o;688:761::-;742:5;795:3;788:4;780:6;776:17;772:27;762:2;;817:5;810;803:20;762:2;857:6;844:20;883:4;906:43;946:2;906:43;:::i;:::-;978:2;972:9;990:31;1018:2;1010:6;990:31;:::i;:::-;1056:18;;;1090:15;;;;-1:-1:-1;1125:15:12;;;1175:1;1171:10;;;1159:23;;1155:32;;1152:41;-1:-1:-1;1149:2:12;;;1210:5;1203;1196:20;1149:2;1236:5;1250:169;1264:2;1261:1;1258:9;1250:169;;;1321:23;1340:3;1321:23;:::i;:::-;1309:36;;1365:12;;;;1397;;;;1282:1;1275:9;1250:169;;;-1:-1:-1;1437:6:12;;752:697;-1:-1:-1;;;;;;;752:697:12:o;1454:755::-;1508:5;1561:3;1554:4;1546:6;1542:17;1538:27;1528:2;;1583:5;1576;1569:20;1528:2;1623:6;1610:20;1649:4;1672:43;1712:2;1672:43;:::i;:::-;1744:2;1738:9;1756:31;1784:2;1776:6;1756:31;:::i;:::-;1822:18;;;1856:15;;;;-1:-1:-1;1891:15:12;;;1941:1;1937:10;;;1925:23;;1921:32;;1918:41;-1:-1:-1;1915:2:12;;;1976:5;1969;1962:20;1915:2;2002:5;2016:163;2030:2;2027:1;2024:9;2016:163;;;2087:17;;2075:30;;2125:12;;;;2157;;;;2048:1;2041:9;2016:163;;2214:228;2256:5;2309:3;2302:4;2294:6;2290:17;2286:27;2276:2;;2331:5;2324;2317:20;2276:2;2357:79;2432:3;2423:6;2410:20;2403:4;2395:6;2391:17;2357:79;:::i;2447:196::-;2506:6;2559:2;2547:9;2538:7;2534:23;2530:32;2527:2;;;2580:6;2572;2565:22;2527:2;2608:29;2627:9;2608:29;:::i;2648:270::-;2716:6;2724;2777:2;2765:9;2756:7;2752:23;2748:32;2745:2;;;2798:6;2790;2783:22;2745:2;2826:29;2845:9;2826:29;:::i;:::-;2816:39;;2874:38;2908:2;2897:9;2893:18;2874:38;:::i;:::-;2864:48;;2735:183;;;;;:::o;2923:983::-;3077:6;3085;3093;3101;3109;3162:3;3150:9;3141:7;3137:23;3133:33;3130:2;;;3184:6;3176;3169:22;3130:2;3212:29;3231:9;3212:29;:::i;:::-;3202:39;;3260:38;3294:2;3283:9;3279:18;3260:38;:::i;:::-;3250:48;;3349:2;3338:9;3334:18;3321:32;3372:18;3413:2;3405:6;3402:14;3399:2;;;3434:6;3426;3419:22;3399:2;3462:61;3515:7;3506:6;3495:9;3491:22;3462:61;:::i;:::-;3452:71;;3576:2;3565:9;3561:18;3548:32;3532:48;;3605:2;3595:8;3592:16;3589:2;;;3626:6;3618;3611:22;3589:2;3654:63;3709:7;3698:8;3687:9;3683:24;3654:63;:::i;:::-;3644:73;;3770:3;3759:9;3755:19;3742:33;3726:49;;3800:2;3790:8;3787:16;3784:2;;;3821:6;3813;3806:22;3784:2;;3849:51;3892:7;3881:8;3870:9;3866:24;3849:51;:::i;:::-;3839:61;;;3120:786;;;;;;;;:::o;3911:626::-;4015:6;4023;4031;4039;4047;4100:3;4088:9;4079:7;4075:23;4071:33;4068:2;;;4122:6;4114;4107:22;4068:2;4150:29;4169:9;4150:29;:::i;:::-;4140:39;;4198:38;4232:2;4221:9;4217:18;4198:38;:::i;:::-;4188:48;;4283:2;4272:9;4268:18;4255:32;4245:42;;4334:2;4323:9;4319:18;4306:32;4296:42;;4389:3;4378:9;4374:19;4361:33;4417:18;4409:6;4406:30;4403:2;;;4454:6;4446;4439:22;4403:2;4482:49;4523:7;4514:6;4503:9;4499:22;4482:49;:::i;4542:367::-;4607:6;4615;4668:2;4656:9;4647:7;4643:23;4639:32;4636:2;;;4689:6;4681;4674:22;4636:2;4717:29;4736:9;4717:29;:::i;:::-;4707:39;;4796:2;4785:9;4781:18;4768:32;4843:5;4836:13;4829:21;4822:5;4819:32;4809:2;;4870:6;4862;4855:22;4809:2;4898:5;4888:15;;;4626:283;;;;;:::o;4914:264::-;4982:6;4990;5043:2;5031:9;5022:7;5018:23;5014:32;5011:2;;;5064:6;5056;5049:22;5011:2;5092:29;5111:9;5092:29;:::i;:::-;5082:39;5168:2;5153:18;;;;5140:32;;-1:-1:-1;;;5001:177:12:o;5183:332::-;5260:6;5268;5276;5329:2;5317:9;5308:7;5304:23;5300:32;5297:2;;;5350:6;5342;5335:22;5297:2;5378:29;5397:9;5378:29;:::i;:::-;5368:39;5454:2;5439:18;;5426:32;;-1:-1:-1;5505:2:12;5490:18;;;5477:32;;5287:228;-1:-1:-1;;;5287:228:12:o;5520:368::-;5604:6;5657:2;5645:9;5636:7;5632:23;5628:32;5625:2;;;5678:6;5670;5663:22;5625:2;5723:9;5710:23;5756:18;5748:6;5745:30;5742:2;;;5793:6;5785;5778:22;5742:2;5821:61;5874:7;5865:6;5854:9;5850:22;5821:61;:::i;:::-;5811:71;5615:273;-1:-1:-1;;;;5615:273:12:o;5893:625::-;6011:6;6019;6072:2;6060:9;6051:7;6047:23;6043:32;6040:2;;;6093:6;6085;6078:22;6040:2;6138:9;6125:23;6167:18;6208:2;6200:6;6197:14;6194:2;;;6229:6;6221;6214:22;6194:2;6257:61;6310:7;6301:6;6290:9;6286:22;6257:61;:::i;:::-;6247:71;;6371:2;6360:9;6356:18;6343:32;6327:48;;6400:2;6390:8;6387:16;6384:2;;;6421:6;6413;6406:22;6384:2;;6449:63;6504:7;6493:8;6482:9;6478:24;6449:63;:::i;:::-;6439:73;;;6030:488;;;;;:::o;6523:255::-;6581:6;6634:2;6622:9;6613:7;6609:23;6605:32;6602:2;;;6655:6;6647;6640:22;6602:2;6699:9;6686:23;6718:30;6742:5;6718:30;:::i;6783:259::-;6852:6;6905:2;6893:9;6884:7;6880:23;6876:32;6873:2;;;6926:6;6918;6911:22;6873:2;6963:9;6957:16;6982:30;7006:5;6982:30;:::i;7047:190::-;7106:6;7159:2;7147:9;7138:7;7134:23;7130:32;7127:2;;;7180:6;7172;7165:22;7127:2;-1:-1:-1;7208:23:12;;7117:120;-1:-1:-1;7117:120:12:o;7242:548::-;7320:6;7328;7381:2;7369:9;7360:7;7356:23;7352:32;7349:2;;;7402:6;7394;7387:22;7349:2;7443:9;7430:23;7420:33;;7504:2;7493:9;7489:18;7476:32;7531:18;7523:6;7520:30;7517:2;;;7568:6;7560;7553:22;7517:2;7596:22;;7649:4;7641:13;;7637:27;-1:-1:-1;7627:2:12;;7683:6;7675;7668:22;7627:2;7711:73;7776:7;7771:2;7758:16;7753:2;7749;7745:11;7711:73;:::i;7795:258::-;7863:6;7871;7924:2;7912:9;7903:7;7899:23;7895:32;7892:2;;;7945:6;7937;7930:22;7892:2;-1:-1:-1;;7973:23:12;;;8043:2;8028:18;;;8015:32;;-1:-1:-1;7882:171:12:o;8058:437::-;8111:3;8149:5;8143:12;8176:6;8171:3;8164:19;8202:4;8231:2;8226:3;8222:12;8215:19;;8268:2;8261:5;8257:14;8289:3;8301:169;8315:6;8312:1;8309:13;8301:169;;;8376:13;;8364:26;;8410:12;;;;8445:15;;;;8337:1;8330:9;8301:169;;;-1:-1:-1;8486:3:12;;8119:376;-1:-1:-1;;;;;8119:376:12:o;8500:475::-;8541:3;8579:5;8573:12;8606:6;8601:3;8594:19;8631:3;8643:162;8657:6;8654:1;8651:13;8643:162;;;8719:4;8775:13;;;8771:22;;8765:29;8747:11;;;8743:20;;8736:59;8672:12;8643:162;;;8823:6;8820:1;8817:13;8814:2;;;8889:3;8882:4;8873:6;8868:3;8864:16;8860:27;8853:40;8814:2;-1:-1:-1;8957:2:12;8936:15;-1:-1:-1;;8932:29:12;8923:39;;;;8964:4;8919:50;;8549:426;-1:-1:-1;;8549:426:12:o;9211:849::-;9533:4;-1:-1:-1;;;;;9643:2:12;9635:6;9631:15;9620:9;9613:34;9695:2;9687:6;9683:15;9678:2;9667:9;9663:18;9656:43;;9735:3;9730:2;9719:9;9715:18;9708:31;9762:57;9814:3;9803:9;9799:19;9791:6;9762:57;:::i;:::-;9867:9;9859:6;9855:22;9850:2;9839:9;9835:18;9828:50;9901:44;9938:6;9930;9901:44;:::i;:::-;9887:58;;9994:9;9986:6;9982:22;9976:3;9965:9;9961:19;9954:51;10022:32;10047:6;10039;10022:32;:::i;:::-;10014:40;9542:518;-1:-1:-1;;;;;;;;9542:518:12:o;10065:583::-;10287:4;-1:-1:-1;;;;;10397:2:12;10389:6;10385:15;10374:9;10367:34;10449:2;10441:6;10437:15;10432:2;10421:9;10417:18;10410:43;;10489:6;10484:2;10473:9;10469:18;10462:34;10532:6;10527:2;10516:9;10512:18;10505:34;10576:3;10570;10559:9;10555:19;10548:32;10597:45;10637:3;10626:9;10622:19;10614:6;10597:45;:::i;:::-;10589:53;10296:352;-1:-1:-1;;;;;;;10296:352:12:o;10653:261::-;10832:2;10821:9;10814:21;10795:4;10852:56;10904:2;10893:9;10889:18;10881:6;10852:56;:::i;10919:465::-;11176:2;11165:9;11158:21;11139:4;11202:56;11254:2;11243:9;11239:18;11231:6;11202:56;:::i;:::-;11306:9;11298:6;11294:22;11289:2;11278:9;11274:18;11267:50;11334:44;11371:6;11363;11334:44;:::i;:::-;11326:52;11148:236;-1:-1:-1;;;;;11148:236:12:o;11581:219::-;11730:2;11719:9;11712:21;11693:4;11750:44;11790:2;11779:9;11775:18;11767:6;11750:44;:::i;19615:183::-;19675:4;19708:18;19700:6;19697:30;19694:2;;;19730:18;;:::i;:::-;-1:-1:-1;19775:1:12;19771:14;19787:4;19767:25;;19684:114::o;19803:128::-;19843:3;19874:1;19870:6;19867:1;19864:13;19861:2;;;19880:18;;:::i;:::-;-1:-1:-1;19916:9:12;;19851:80::o;19936:168::-;19976:7;20042:1;20038;20034:6;20030:14;20027:1;20024:21;20019:1;20012:9;20005:17;20001:45;19998:2;;;20049:18;;:::i;:::-;-1:-1:-1;20089:9:12;;19988:116::o;20109:125::-;20149:4;20177:1;20174;20171:8;20168:2;;;20182:18;;:::i;:::-;-1:-1:-1;20219:9:12;;20158:76::o;20239:437::-;20318:1;20314:12;;;;20361;;;20382:2;;20436:4;20428:6;20424:17;20414:27;;20382:2;20489;20481:6;20478:14;20458:18;20455:38;20452:2;;;-1:-1:-1;;;20523:1:12;20516:88;20627:4;20624:1;20617:15;20655:4;20652:1;20645:15;20452:2;;20294:382;;;:::o;20681:249::-;20791:2;20772:13;;-1:-1:-1;;20768:27:12;20756:40;;20826:18;20811:34;;20847:22;;;20808:62;20805:2;;;20873:18;;:::i;:::-;20909:2;20902:22;-1:-1:-1;;20728:202:12:o;20935:135::-;20974:3;-1:-1:-1;;20995:17:12;;20992:2;;;21015:18;;:::i;:::-;-1:-1:-1;21062:1:12;21051:13;;20982:88::o;21075:184::-;-1:-1:-1;;;21124:1:12;21117:88;21224:4;21221:1;21214:15;21248:4;21245:1;21238:15;21264:184;-1:-1:-1;;;21313:1:12;21306:88;21413:4;21410:1;21403:15;21437:4;21434:1;21427:15;21453:185;21488:3;21530:1;21512:16;21509:23;21506:2;;;21580:1;21575:3;21570;21555:27;21611:10;21606:3;21602:20;21506:2;21496:142;:::o;21643:671::-;21682:3;21724:4;21706:16;21703:26;21700:2;;;21690:624;:::o;21700:2::-;21766;21760:9;-1:-1:-1;;21831:16:12;21827:25;;21824:1;21760:9;21803:50;21882:4;21876:11;21906:16;21941:18;22012:2;22005:4;21997:6;21993:17;21990:25;21985:2;21977:6;21974:14;21971:45;21968:2;;;22019:5;;;;;21690:624;:::o;21968:2::-;22056:6;22050:4;22046:17;22035:28;;22092:3;22086:10;22119:2;22111:6;22108:14;22105:2;;;22125:5;;;;;;21690:624;:::o;22105:2::-;22209;22190:16;22184:4;22180:27;22176:36;22169:4;22160:6;22155:3;22151:16;22147:27;22144:69;22141:2;;;22216:5;;;;;;21690:624;:::o;22141:2::-;22232:57;22283:4;22274:6;22266;22262:19;22258:30;22252:4;22232:57;:::i;:::-;-1:-1:-1;22305:3:12;;21690:624;-1:-1:-1;;;;;21690:624:12:o;22319:177::-;-1:-1:-1;;;;;;22397:5:12;22393:78;22386:5;22383:89;22373:2;;22486:1;22483;22476:12
Swarm Source
ipfs://1d20b07beac7d57d75513fe48b75341c6f33adbb609510239691b4f7d4410b45
Loading...
Loading
Loading...
Loading
OVERVIEW
CHAIN SOJU Genesis by ChainSpirit marks the 'birth' of our first community product. This digital bottle contains 40% alc/vol distilled SOJU Spirit ready for the Metaverse.*DISCLAIMER*Anyone holding the CHAIN SOJU NFT is given the 'right' to redeem the physical bottle throu...Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.