Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
182 NANOKO
Holders
111
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 NANOKOLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Nanoko_update
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-19 */ // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: Contract test/ERC721T/IERC721Batch.sol pragma solidity ^0.8.0; interface IERC721Batch { function isOwnerOf( address account, uint[] calldata tokenIds ) external view returns( bool ); function transferBatch( address from, address to, uint[] calldata tokenIds, bytes calldata data ) external; function walletOfOwner( address account ) external view returns( uint[] memory ); } // File: Contract test/ERC721T/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: Contract test/ERC721T/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: Contract test/ERC721T/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); } // File: Contract test/ERC721T/ERC165.sol pragma solidity ^0.8.0; /** * @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; } } // File: Contract test/ERC721T/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: Contract test/ERC721T/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: Contract test/ERC721T/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: Contract test/ERC721T/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; } } // File: Contract test/ERC721T/ERC721T.sol pragma solidity ^0.8.0; /**************************************** * @author: squeebo_nft * * @team: GoldenX * **************************************** * Blimpie-ERC721 provides low-gas * * mints + transfers * ****************************************/ abstract contract ERC721T is Context, ERC165, IERC721, IERC721Metadata { using Address for address; string private _name; string private _symbol; mapping(uint => address) internal _tokenApprovals; mapping(address => mapping(address => bool)) internal _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } //public function balanceOf(address owner) public view virtual override returns( uint ); function name() external view virtual override returns (string memory) { return _name; } function ownerOf(uint tokenId) public view virtual override returns (address); function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } function symbol() external view virtual override returns (string memory) { return _symbol; } /* function totalSupply() public view virtual returns (uint) { return _owners.length - (_offset + _burned); } */ function approve(address to, uint tokenId) external virtual override { address owner = ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } function getApproved(uint tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } function setApprovalForAll(address operator, bool approved) external virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } function transferFrom( address from, address to, uint tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } function safeTransferFrom( address from, address to, uint tokenId ) external virtual override { safeTransferFrom(from, to, tokenId, ""); } function safeTransferFrom( address from, address to, uint tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } //internal function _approve(address to, uint tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ownerOf(tokenId), to, tokenId); } function _checkOnERC721Received( address from, address to, uint tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } function _exists(uint tokenId) internal view virtual returns (bool); function _isApprovedOrOwner(address spender, uint tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } function _safeTransfer( address from, address to, uint tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } function _transfer(address from, address to, uint tokenId) internal virtual; } // File: Contract test/ERC721T/ERC721EnumerableT.sol pragma solidity ^0.8.0; /**************************************** * @author: squeebo_nft * **************************************** * Blimpie-ERC721 provides low-gas * * mints + transfers * ****************************************/ abstract contract ERC721EnumerableT is ERC721T, IERC721Batch, IERC721Enumerable { function balanceOf( address owner ) public view virtual override( IERC721, ERC721T ) returns( uint ); function isOwnerOf( address account, uint[] calldata tokenIds ) external view virtual override returns( bool ); function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721T) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } function tokenOfOwnerByIndex(address owner, uint index) public view virtual override returns( uint tokenId ); function tokenByIndex(uint index) external view virtual override returns (uint) { require(index < totalSupply(), "ERC721Enumerable: global index out of bounds"); return index; } function totalSupply() public view virtual override returns( uint ); function transferBatch( address from, address to, uint[] calldata tokenIds, bytes calldata data ) external override{ for(uint i; i < tokenIds.length; ++i ){ safeTransferFrom( from, to, tokenIds[i], data ); } } function walletOfOwner( address account ) external view virtual override returns( uint[] memory ){ uint quantity = balanceOf( account ); uint[] memory wallet = new uint[]( quantity ); for( uint i; i < quantity; ++i ){ wallet[i] = tokenOfOwnerByIndex( account, i ); } return wallet; } } // File: Contract test/ERC721T/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: Contract test/ERC721T/Delegated.sol pragma solidity ^0.8.0; /*********************** * @author: squeebo_nft * ************************/ contract Delegated is Ownable { mapping(address => bool) internal _delegates; constructor(){ _delegates[owner()] = true; } modifier onlyDelegates { require(_delegates[msg.sender], "Invalid delegate" ); _; } //onlyOwner function isDelegate( address addr ) external view onlyOwner returns ( bool ){ return _delegates[addr]; } function setDelegate( address addr, bool isDelegate_ ) external onlyOwner{ _delegates[addr] = isDelegate_; } function transferOwnership(address newOwner) public virtual override onlyOwner { _delegates[newOwner] = true; super.transferOwnership( newOwner ); } } // File: Contract test/ERC721T/Nanoko_new.sol pragma solidity ^0.8.0; /**************************************** * TOS-ERC721 provides low-gas * * mints + transfers * ****************************************/ contract Nanoko_update is ERC721EnumerableT, Delegated, ReentrancyGuard { using Strings for uint; bool public revealed = false; string public notRevealedUri = "ipfs://Qma5M8iyJp4bewV4aVNHbUnu1MxG8Rk26McNPwrYt3iypG"; uint public MAX_SUPPLY = 7777; uint public PRICE = 0.02 ether; uint public MAX_QTY = 5; // Max mint amount per wallet uint public mintStartTime = 1647792000; address[] public nanokos; mapping(address => uint) private _balances; mapping(address => uint) public mintCount; mapping(address => bool) private _isFreeMinted; string private _tokenURIPrefix; string private _tokenURISuffix = ".json"; nanokoOld private _nanokoOld; constructor(address old) ERC721T("NanokoVerse", "NANOKO"){ _nanokoOld = nanokoOld(old); _dropForPreviousOwner(); } //------------------------------------------------------------------------------------------- // View Parts /** * @dev Returns the number of tokens in ``owners``'s account. */ function balanceOf(address account) public view override returns (uint) { require(account != address(0), "Nanoko: balance query for the zero address"); return _balances[account]; } /** * @dev Returns the bool of tokens if``owner``'s account contains the tokenIds. */ function isOwnerOf( address account, uint[] calldata tokenIds ) external view override returns( bool ){ for(uint i; i < tokenIds.length; ++i ){ if( nanokos[ tokenIds[i] ] != account ) return false; } return true; } /** * @dev Returns the owner of the `tokenId` token. */ function ownerOf( uint tokenId ) public override view returns( address owner_ ){ address owner = nanokos[tokenId]; require(owner != address(0), "Nanoko: query for nonexistent token"); return owner; } /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint index) public view override returns (uint index_) { require(index < totalSupply(), "Nanoko: global index out of bounds"); return index; } /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint index) public view override returns (uint tokenId_) { uint count; for(uint i; i < nanokos.length; ++i){ if(owner == nanokos[i]){ if( count == index ) return i; else ++count; } } revert("ERC721Enumerable: owner index out of bounds"); } /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint tokenId) external view override returns (string memory) { require(_exists(tokenId), "Nanoko: URI query for nonexistent token"); if(revealed == false) { return notRevealedUri; } return string(abi.encodePacked(_tokenURIPrefix, tokenId.toString(), _tokenURISuffix)); } /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() public view override returns( uint totalSupply_ ){ return nanokos.length; } /** * @dev Returns the list of tokenIds stored by the owner's account. */ function walletOfOwner( address account ) external view override returns( uint[] memory ){ uint quantity = balanceOf( account ); uint[] memory wallet = new uint[]( quantity ); for( uint i; i < quantity; ++i ){ wallet[i] = tokenOfOwnerByIndex( account, i ); } return wallet; } /** * @dev Returns is WL or OG of old contract. */ function isEligibleForFreeMint( address account ) public view returns(bool){ return( !_isFreeMinted[account] && (_nanokoOld.whitelistCount(account) > 0 || _nanokoOld.isOG(account)) ); } /** * @dev Returns the balance amount of the Contract address. */ function getBalanceOfContract() external view returns (uint256) { return address(this).balance; } //------------------------------------------------------------------------------------------- // Mint Part /** * @dev mints token based on the number of qty specified. */ function mint( uint quantity ) external payable nonReentrant { require(block.timestamp >= mintStartTime, "Nanoko: Minting is not start yet"); require(quantity + mintCount[msg.sender] <= MAX_QTY, "Nanoko: You can't mint that much"); require (msg.value >= PRICE * quantity, "Nanoko: Ether sent is not correct"); uint supply = totalSupply(); require(supply + quantity <= MAX_SUPPLY, "Nanoko: Mint exceeds supply" ); for(uint i; i < quantity; ++i){ _mint( msg.sender, supply++ ); } mintCount[msg.sender] += quantity; } function freeMint() external payable nonReentrant { require(block.timestamp >= mintStartTime, "Nanoko: Minting is not start yet"); require( isEligibleForFreeMint(msg.sender), "Nanoko: You are not eligable for free mint"); uint supply = totalSupply(); require(supply < MAX_SUPPLY, "Nanoko: Mint exceeds supply" ); _isFreeMinted[msg.sender] = true; _mint( msg.sender, supply ); } //------------------------------------------------------------------------------------------- // OnlyOwner/Delegate Parts /** * @dev Withdraws an amount from the contract balance. */ function withdrawAll() public onlyOwner { // This will payout the owner 100% of the contract balance. // Do not remove this otherwise you will not be able to withdraw the funds. // ============================================================================= uint amount = address(this).balance; payable(0xa2800c3D21948e22315e573B8Ec582606CbfC8E0).call{value: amount / 100 * 23}(""); payable(0x0ed819ccaECFc5527B606f00fD3c3b640146977d).call{value: amount / 100 * 36}(""); payable(0x2e8931A6A02eC56eEf941E29bb0b5121dE3FA128).call{value: amount / 200 * 71}(""); payable(0x3744D9468F991E110A16BE720484FE53c7fe9b73).call{value: amount / 200 * 11}(""); // require(os); // ============================================================================= }// /** * @dev Allows team to mint the token without restriction. */ function teamMint(uint[] calldata quantity, address[] calldata recipient) external onlyOwner{ require(quantity.length == recipient.length, "Nanoko: Must provide equal quantities and recipients" ); uint totalQuantity; uint supply = nanokos.length; for(uint i; i < quantity.length; ++i){ totalQuantity += quantity[i]; } require( supply + totalQuantity < MAX_SUPPLY, "Nanoko: Mint/order exceeds supply" ); for(uint i; i < recipient.length; ++i){ for(uint j; j < quantity[i]; ++j){ uint tokenId = supply++; _mint( recipient[i], tokenId); } } } /** * @dev Owner sets the Staking contract address. */ function flipRevealState() external onlyOwner { revealed = !revealed; } /** * @dev Owner sets the Staking contract address. */ function setUnrevealURI(string calldata notRevealUri_) external onlyOwner { notRevealedUri = notRevealUri_; } function setStartTime(uint newTimeStamp_) external onlyOwner { mintStartTime = newTimeStamp_; } /** * @dev Owner/Delegates sets the BaseURI of IPFS. */ function setBaseURI(string calldata prefix, string calldata suffix) external onlyOwner{ _tokenURIPrefix = prefix; _tokenURISuffix = suffix; } function setPrice(uint _price) external onlyOwner{ PRICE = _price; } //------------------------------------------------------------------------------------------- // Internal Parts /** * @dev increment and decrement balances based on address from and to. */ function _beforeTokenTransfer(address from, address to) internal { if( from != address(0) ) --_balances[ from ]; if( to != address(0) ) ++_balances[ to ]; } /** * @dev returns bool if the tokenId exist. */ function _exists(uint tokenId) internal view override returns (bool) { return tokenId < nanokos.length && nanokos[tokenId] != address(0); } /** * @dev mints token based address and tokenId */ function _mint(address to, uint tokenId) internal { _beforeTokenTransfer(address(0), to); nanokos.push(to); emit Transfer(address(0), to, tokenId); } /** * @dev transfer tokenId to other address. */ function _transfer(address from, address to, uint tokenId) internal override { require(nanokos[tokenId] == from, "Nanoko: transfer of token that is not owned"); // Clear approvals from the previous owner _approve(address(0), tokenId); _beforeTokenTransfer(from, to); nanokos[tokenId] = to; emit Transfer(from, to, tokenId); } function _dropForPreviousOwner() internal { uint amount = _nanokoOld.totalSupply(); for(uint i; i < amount; ++i){ _mint(_nanokoOld.ownerOf(i), i); } } } interface nanokoOld{ function isOG (address account) external view returns(bool); function whitelistCount (address account) external view returns(uint); function totalSupply() external view returns(uint); function ownerOf(uint tokenId) external view returns(address); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"old","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_QTY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipRevealState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalanceOfContract","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isDelegate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isEligibleForFreeMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"isOwnerOf","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nanokos","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","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":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"prefix","type":"string"},{"internalType":"string","name":"suffix","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"isDelegate_","type":"bool"}],"name":"setDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTimeStamp_","type":"uint256"}],"name":"setStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"notRevealUri_","type":"string"}],"name":"setUnrevealURI","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":"quantity","type":"uint256[]"},{"internalType":"address[]","name":"recipient","type":"address[]"}],"name":"teamMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"index_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"totalSupply_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6007805460ff1916905560e0604052603560808181529062003a6060a0398051620000339160089160209091019062000433565b50611e6160095566470de4df820000600a556005600b8190556362374f80600c556040805180820190915281815264173539b7b760d91b602090910190815262000081916012919062000433565b503480156200008f57600080fd5b5060405162003a9538038062003a95833981016040819052620000b291620004d9565b604080518082018252600b81526a4e616e6f6b6f566572736560a81b6020808301918252835180850190945260068452654e414e4f4b4f60d01b908401528151919291620001039160009162000433565b5080516200011990600190602084019062000433565b5050506200013662000130620001a760201b60201c565b620001ab565b6001600560006200014f6004546001600160a01b031690565b6001600160a01b0390811682526020820192909252604001600020805460ff1916921515929092179091556001600655601380546001600160a01b031916918316919091179055620001a0620001fd565b50620005b0565b3390565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601354604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b1580156200024357600080fd5b505afa15801562000258573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027e91906200050b565b905060005b8181101562000329576013546040516331a9108f60e11b81526004810183905262000316916001600160a01b031690636352211e9060240160206040518083038186803b158015620002d457600080fd5b505afa158015620002e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030f9190620004d9565b826200032d565b62000321816200057c565b905062000283565b5050565b6200033a600083620003b6565b600d805460018101825560009182527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160a01b03821615620003f3576001600160a01b0382166000908152600e602052604081208054909190620003ee9062000525565b909155505b6001600160a01b0381161562000329576001600160a01b0381166000908152600e6020526040812080549091906200042b906200057c565b909155505050565b82805462000441906200053f565b90600052602060002090601f016020900481019282620004655760008555620004b0565b82601f106200048057805160ff1916838001178555620004b0565b82800160010185558215620004b0579182015b82811115620004b057825182559160200191906001019062000493565b50620004be929150620004c2565b5090565b5b80821115620004be5760008155600101620004c3565b600060208284031215620004ec57600080fd5b81516001600160a01b03811681146200050457600080fd5b9392505050565b6000602082840312156200051e57600080fd5b5051919050565b6000816200053757620005376200059a565b506000190190565b600181811c908216806200055457607f821691505b602082108114156200057657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156200059357620005936200059a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6134a080620005c06000396000f3fe6080604052600436106102dc5760003560e01c80635b70ea9f1161018457806397bc411c116100d6578063c0e05d0b1161008a578063ed9ec88811610064578063ed9ec888146107ae578063f2fde38b146107db578063fa72de45146107fb57600080fd5b8063c0e05d0b14610725578063c87b56dd14610745578063e985e9c51461076557600080fd5b8063a22cb465116100bb578063a22cb465146106c5578063b534a5c4146106e5578063b88d4fde1461070557600080fd5b806397bc411c14610692578063a0712d68146106b257600080fd5b8063853828b61161013857806391b7f5ed1161011257806391b7f5ed14610647578063931e2e491461066757806395d89b411461067d57600080fd5b8063853828b6146105fe5780638d859f3e146106135780638da5cb5b1461062957600080fd5b80636790a9de116101695780636790a9de146105a957806370a08231146105c9578063715018a6146105e957600080fd5b80635b70ea9f146105815780636352211e1461058957600080fd5b80632533c7cd1161023d57806342842e0e116101f15780634d44660c116101cb5780634d44660c146105275780634f6ccce714610547578063518302271461056757600080fd5b806342842e0e146104ba578063438b6300146104da5780634a994eef1461050757600080fd5b80632f745c59116102225780632f745c591461046457806332cb6b0c146104845780633e0a322d1461049a57600080fd5b80632533c7cd1461042f5780632714ce921461044f57600080fd5b8063095ea7b3116102945780631c96cae9116102795780631c96cae9146103e657806322968885146103fc57806323b872dd1461040f57600080fd5b8063095ea7b3146103a557806318160ddd146103c757600080fd5b806307779627116102c55780630777962714610338578063081812fc14610358578063081c8c441461039057600080fd5b806301ffc9a7146102e157806306fdde0314610316575b600080fd5b3480156102ed57600080fd5b506103016102fc366004612f1f565b61081b565b60405190151581526020015b60405180910390f35b34801561032257600080fd5b5061032b610877565b60405161030d91906131dd565b34801561034457600080fd5b50610301610353366004612bcd565b610909565b34801561036457600080fd5b50610378610373366004612ffb565b61098e565b6040516001600160a01b03909116815260200161030d565b34801561039c57600080fd5b5061032b610a27565b3480156103b157600080fd5b506103c56103c0366004612e6c565b610ab5565b005b3480156103d357600080fd5b50600d545b60405190815260200161030d565b3480156103f257600080fd5b506103d8600b5481565b34801561040857600080fd5b50476103d8565b34801561041b57600080fd5b506103c561042a366004612cac565b610be7565b34801561043b57600080fd5b506103c561044a366004612e96565b610c6e565b34801561045b57600080fd5b506103c5610e9d565b34801561047057600080fd5b506103d861047f366004612e6c565b610f0b565b34801561049057600080fd5b506103d860095481565b3480156104a657600080fd5b506103c56104b5366004612ffb565b610fe9565b3480156104c657600080fd5b506103c56104d5366004612cac565b611048565b3480156104e657600080fd5b506104fa6104f5366004612bcd565b611063565b60405161030d9190613199565b34801561051357600080fd5b506103c5610522366004612e35565b611103565b34801561053357600080fd5b50610301610542366004612de2565b611188565b34801561055357600080fd5b506103d8610562366004612ffb565b61120a565b34801561057357600080fd5b506007546103019060ff1681565b6103c561128d565b34801561059557600080fd5b506103786105a4366004612ffb565b61143c565b3480156105b557600080fd5b506103c56105c4366004612f9b565b6114dc565b3480156105d557600080fd5b506103d86105e4366004612bcd565b611556565b3480156105f557600080fd5b506103c56115f0565b34801561060a57600080fd5b506103c5611656565b34801561061f57600080fd5b506103d8600a5481565b34801561063557600080fd5b506004546001600160a01b0316610378565b34801561065357600080fd5b506103c5610662366004612ffb565b611876565b34801561067357600080fd5b506103d8600c5481565b34801561068957600080fd5b5061032b6118d5565b34801561069e57600080fd5b506103c56106ad366004612f59565b6118e4565b6103c56106c0366004612ffb565b61194a565b3480156106d157600080fd5b506103c56106e0366004612e35565b611ba9565b3480156106f157600080fd5b506103c5610700366004612c1b565b611c6e565b34801561071157600080fd5b506103c5610720366004612ce8565b611ce3565b34801561073157600080fd5b50610301610740366004612bcd565b611d6b565b34801561075157600080fd5b5061032b610760366004612ffb565b611ec3565b34801561077157600080fd5b50610301610780366004612be8565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205460ff1690565b3480156107ba57600080fd5b506103d86107c9366004612bcd565b600f6020526000908152604090205481565b3480156107e757600080fd5b506103c56107f6366004612bcd565b612011565b34801561080757600080fd5b50610378610816366004612ffb565b61209a565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d630000000000000000000000000000000000000000000000000000000014806108715750610871826120c4565b92915050565b606060008054610886906132d1565b80601f01602080910402602001604051908101604052809291908181526020018280546108b2906132d1565b80156108ff5780601f106108d4576101008083540402835291602001916108ff565b820191906000526020600020905b8154815290600101906020018083116108e257829003601f168201915b5050505050905090565b6004546000906001600160a01b0316331461096b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b506001600160a01b03811660009081526005602052604090205460ff165b919050565b6000610999826121a7565b610a0b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610962565b506000908152600260205260409020546001600160a01b031690565b60088054610a34906132d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610a60906132d1565b8015610aad5780601f10610a8257610100808354040283529160200191610aad565b820191906000526020600020905b815481529060010190602001808311610a9057829003601f168201915b505050505081565b6000610ac08261143c565b9050806001600160a01b0316836001600160a01b03161415610b4a5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610962565b336001600160a01b0382161480610b665750610b668133610780565b610bd85760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610962565b610be283836121f1565b505050565b610bf13382612277565b610c635760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610962565b610be2838383612372565b6004546001600160a01b03163314610cc85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b828114610d3d5760405162461bcd60e51b815260206004820152603460248201527f4e616e6f6b6f3a204d7573742070726f7669646520657175616c207175616e7460448201527f697469657320616e6420726563697069656e74730000000000000000000000006064820152608401610962565b600d54600090815b85811015610d8357868682818110610d5f57610d5f6133d0565b9050602002013583610d7191906131f0565b9250610d7c81613325565b9050610d45565b50600954610d9183836131f0565b10610e045760405162461bcd60e51b815260206004820152602160248201527f4e616e6f6b6f3a204d696e742f6f72646572206578636565647320737570706c60448201527f79000000000000000000000000000000000000000000000000000000000000006064820152608401610962565b60005b83811015610e945760005b878783818110610e2457610e246133d0565b90506020020135811015610e8357600083610e3e81613325565b94509050610e72878785818110610e5757610e576133d0565b9050602002016020810190610e6c9190612bcd565b826124b2565b50610e7c81613325565b9050610e12565b50610e8d81613325565b9050610e07565b50505050505050565b6004546001600160a01b03163314610ef75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b6007805460ff19811660ff90911615179055565b60008060005b600d54811015610f7a57600d8181548110610f2e57610f2e6133d0565b6000918252602090912001546001600160a01b0386811691161415610f6a5783821415610f5e5791506108719050565b610f6782613325565b91505b610f7381613325565b9050610f11565b5060405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610962565b6004546001600160a01b031633146110435760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b600c55565b610be283838360405180602001604052806000815250611ce3565b6060600061107083611556565b905060008167ffffffffffffffff81111561108d5761108d6133ff565b6040519080825280602002602001820160405280156110b6578160200160208202803683370190505b50905060005b828110156110fb576110ce8582610f0b565b8282815181106110e0576110e06133d0565b60209081029190910101526110f481613325565b90506110bc565b509392505050565b6004546001600160a01b0316331461115d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000805b828110156111fd57846001600160a01b0316600d8585848181106111b2576111b26133d0565b90506020020135815481106111c9576111c96133d0565b6000918252602090912001546001600160a01b0316146111ed576000915050611203565b6111f681613325565b905061118c565b50600190505b9392505050565b6000611215600d5490565b82106112895760405162461bcd60e51b815260206004820152602260248201527f4e616e6f6b6f3a20676c6f62616c20696e646578206f7574206f6620626f756e60448201527f64730000000000000000000000000000000000000000000000000000000000006064820152608401610962565b5090565b600260065414156112e05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610962565b6002600655600c544210156113375760405162461bcd60e51b815260206004820181905260248201527f4e616e6f6b6f3a204d696e74696e67206973206e6f74207374617274207965746044820152606401610962565b61134033611d6b565b6113b25760405162461bcd60e51b815260206004820152602a60248201527f4e616e6f6b6f3a20596f7520617265206e6f7420656c696761626c6520666f7260448201527f2066726565206d696e74000000000000000000000000000000000000000000006064820152608401610962565b60006113bd600d5490565b905060095481106114105760405162461bcd60e51b815260206004820152601b60248201527f4e616e6f6b6f3a204d696e74206578636565647320737570706c7900000000006044820152606401610962565b336000818152601060205260409020805460ff1916600117905561143490826124b2565b506001600655565b600080600d8381548110611452576114526133d0565b6000918252602090912001546001600160a01b03169050806108715760405162461bcd60e51b815260206004820152602360248201527f4e616e6f6b6f3a20717565727920666f72206e6f6e6578697374656e7420746f60448201527f6b656e00000000000000000000000000000000000000000000000000000000006064820152608401610962565b6004546001600160a01b031633146115365760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b61154260118585612a98565b5061154f60128383612a98565b5050505050565b60006001600160a01b0382166115d45760405162461bcd60e51b815260206004820152602a60248201527f4e616e6f6b6f3a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610962565b506001600160a01b03166000908152600e602052604090205490565b6004546001600160a01b0316331461164a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b6116546000612551565b565b6004546001600160a01b031633146116b05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b4773a2800c3d21948e22315e573b8ec582606cbfc8e06116d1606483613208565b6116dc90601761321c565b604051600081818185875af1925050503d8060008114611718576040519150601f19603f3d011682016040523d82523d6000602084013e61171d565b606091505b50730ed819ccaecfc5527b606f00fd3c3b640146977d91506117429050606483613208565b61174d90602461321c565b604051600081818185875af1925050503d8060008114611789576040519150601f19603f3d011682016040523d82523d6000602084013e61178e565b606091505b50732e8931a6a02ec56eef941e29bb0b5121de3fa12891506117b3905060c883613208565b6117be90604761321c565b604051600081818185875af1925050503d80600081146117fa576040519150601f19603f3d011682016040523d82523d6000602084013e6117ff565b606091505b50733744d9468f991e110a16be720484fe53c7fe9b739150611824905060c883613208565b61182f90600b61321c565b604051600081818185875af1925050503d806000811461186b576040519150601f19603f3d011682016040523d82523d6000602084013e611870565b606091505b50505050565b6004546001600160a01b031633146118d05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b600a55565b606060018054610886906132d1565b6004546001600160a01b0316331461193e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b610be260088383612a98565b6002600654141561199d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610962565b6002600655600c544210156119f45760405162461bcd60e51b815260206004820181905260248201527f4e616e6f6b6f3a204d696e74696e67206973206e6f74207374617274207965746044820152606401610962565b600b54336000908152600f6020526040902054611a1190836131f0565b1115611a5f5760405162461bcd60e51b815260206004820181905260248201527f4e616e6f6b6f3a20596f752063616e2774206d696e742074686174206d7563686044820152606401610962565b80600a54611a6d919061321c565b341015611ae25760405162461bcd60e51b815260206004820152602160248201527f4e616e6f6b6f3a2045746865722073656e74206973206e6f7420636f7272656360448201527f74000000000000000000000000000000000000000000000000000000000000006064820152608401610962565b6000611aed600d5490565b600954909150611afd83836131f0565b1115611b4b5760405162461bcd60e51b815260206004820152601b60248201527f4e616e6f6b6f3a204d696e74206578636565647320737570706c7900000000006044820152606401610962565b60005b82811015611b7b57611b6b3383611b6481613325565b94506124b2565b611b7481613325565b9050611b4e565b50336000908152600f602052604081208054849290611b9b9084906131f0565b909155505060016006555050565b6001600160a01b038216331415611c025760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610962565b3360008181526003602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60005b83811015610e9457611cd38787878785818110611c9057611c906133d0565b9050602002013586868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ce392505050565b611cdc81613325565b9050611c71565b611ced3383612277565b611d5f5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610962565b611870848484846125bb565b6001600160a01b03811660009081526010602052604081205460ff1615801561087157506013546040517fdef872720000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152600092169063def872729060240160206040518083038186803b158015611dee57600080fd5b505afa158015611e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e269190613014565b118061087157506013546040517fc83271f50000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063c83271f59060240160206040518083038186803b158015611e8b57600080fd5b505afa158015611e9f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108719190612f02565b6060611ece826121a7565b611f405760405162461bcd60e51b815260206004820152602760248201527f4e616e6f6b6f3a2055524920717565727920666f72206e6f6e6578697374656e60448201527f7420746f6b656e000000000000000000000000000000000000000000000000006064820152608401610962565b60075460ff16611fdc5760088054611f57906132d1565b80601f0160208091040260200160405190810160405280929190818152602001828054611f83906132d1565b8015611fd05780601f10611fa557610100808354040283529160200191611fd0565b820191906000526020600020905b815481529060010190602001808311611fb357829003601f168201915b50505050509050919050565b6011611fe783612644565b6012604051602001611ffb9392919061312a565b6040516020818303038152906040529050919050565b6004546001600160a01b0316331461206b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b6001600160a01b0381166000908152600560205260409020805460ff1916600117905561209781612776565b50565b600d81815481106120aa57600080fd5b6000918252602090912001546001600160a01b0316905081565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061215757507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061087157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610871565b600d5460009082108015610871575060006001600160a01b0316600d83815481106121d4576121d46133d0565b6000918252602090912001546001600160a01b0316141592915050565b600081815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038416908117909155819061223e8261143c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612282826121a7565b6122f45760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610962565b60006122ff8361143c565b9050806001600160a01b0316846001600160a01b0316148061233a5750836001600160a01b031661232f8461098e565b6001600160a01b0316145b8061236a57506001600160a01b0380821660009081526003602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316600d828154811061238f5761238f6133d0565b6000918252602090912001546001600160a01b0316146124175760405162461bcd60e51b815260206004820152602b60248201527f4e616e6f6b6f3a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e65640000000000000000000000000000000000000000006064820152608401610962565b6124226000826121f1565b61242c8383612855565b81600d8281548110612440576124406133d0565b6000918252602082200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b6124bd600083612855565b600d805460018101825560009182527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600480546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6125c6848484612372565b6125d2848484846128cd565b6118705760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610962565b60608161268457505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156126ae578061269881613325565b91506126a79050600a83613208565b9150612688565b60008167ffffffffffffffff8111156126c9576126c96133ff565b6040519080825280601f01601f1916602001820160405280156126f3576020820181803683370190505b5090505b841561236a57612708600183613259565b9150612715600a8661335e565b6127209060306131f0565b60f81b818381518110612735576127356133d0565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061276f600a86613208565b94506126f7565b6004546001600160a01b031633146127d05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b6001600160a01b03811661284c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610962565b61209781612551565b6001600160a01b0382161561288f576001600160a01b0382166000908152600e60205260408120805490919061288a9061329c565b909155505b6001600160a01b038116156128c9576001600160a01b0381166000908152600e6020526040812080549091906128c490613325565b909155505b5050565b60006001600160a01b0384163b15612a8d576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a029061292a90339089908890889060040161315d565b602060405180830381600087803b15801561294457600080fd5b505af1925050508015612992575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261298f91810190612f3c565b60015b612a42573d8080156129c0576040519150601f19603f3d011682016040523d82523d6000602084013e6129c5565b606091505b508051612a3a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610962565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a020000000000000000000000000000000000000000000000000000000014905061236a565b506001949350505050565b828054612aa4906132d1565b90600052602060002090601f016020900481019282612ac65760008555612b0c565b82601f10612adf5782800160ff19823516178555612b0c565b82800160010185558215612b0c579182015b82811115612b0c578235825591602001919060010190612af1565b506112899291505b808211156112895760008155600101612b14565b80356001600160a01b038116811461098957600080fd5b60008083601f840112612b5157600080fd5b50813567ffffffffffffffff811115612b6957600080fd5b6020830191508360208260051b8501011115612b8457600080fd5b9250929050565b60008083601f840112612b9d57600080fd5b50813567ffffffffffffffff811115612bb557600080fd5b602083019150836020828501011115612b8457600080fd5b600060208284031215612bdf57600080fd5b61120382612b28565b60008060408385031215612bfb57600080fd5b612c0483612b28565b9150612c1260208401612b28565b90509250929050565b60008060008060008060808789031215612c3457600080fd5b612c3d87612b28565b9550612c4b60208801612b28565b9450604087013567ffffffffffffffff80821115612c6857600080fd5b612c748a838b01612b3f565b90965094506060890135915080821115612c8d57600080fd5b50612c9a89828a01612b8b565b979a9699509497509295939492505050565b600080600060608486031215612cc157600080fd5b612cca84612b28565b9250612cd860208501612b28565b9150604084013590509250925092565b60008060008060808587031215612cfe57600080fd5b612d0785612b28565b9350612d1560208601612b28565b925060408501359150606085013567ffffffffffffffff80821115612d3957600080fd5b818701915087601f830112612d4d57600080fd5b813581811115612d5f57612d5f6133ff565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715612da557612da56133ff565b816040528281528a6020848701011115612dbe57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600080600060408486031215612df757600080fd5b612e0084612b28565b9250602084013567ffffffffffffffff811115612e1c57600080fd5b612e2886828701612b3f565b9497909650939450505050565b60008060408385031215612e4857600080fd5b612e5183612b28565b91506020830135612e618161342e565b809150509250929050565b60008060408385031215612e7f57600080fd5b612e8883612b28565b946020939093013593505050565b60008060008060408587031215612eac57600080fd5b843567ffffffffffffffff80821115612ec457600080fd5b612ed088838901612b3f565b90965094506020870135915080821115612ee957600080fd5b50612ef687828801612b3f565b95989497509550505050565b600060208284031215612f1457600080fd5b81516112038161342e565b600060208284031215612f3157600080fd5b81356112038161343c565b600060208284031215612f4e57600080fd5b81516112038161343c565b60008060208385031215612f6c57600080fd5b823567ffffffffffffffff811115612f8357600080fd5b612f8f85828601612b8b565b90969095509350505050565b60008060008060408587031215612fb157600080fd5b843567ffffffffffffffff80821115612fc957600080fd5b612fd588838901612b8b565b90965094506020870135915080821115612fee57600080fd5b50612ef687828801612b8b565b60006020828403121561300d57600080fd5b5035919050565b60006020828403121561302657600080fd5b5051919050565b60008151808452613045816020860160208601613270565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8054600090600181811c908083168061309157607f831692505b60208084108214156130cc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b8180156130e057600181146130f15761311e565b60ff1986168952848901965061311e565b60008881526020902060005b868110156131165781548b8201529085019083016130fd565b505084890196505b50505050505092915050565b60006131368286613077565b8451613146818360208901613270565b61315281830186613077565b979650505050505050565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261318f608083018461302d565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156131d1578351835292840192918401916001016131b5565b50909695505050505050565b602081526000611203602083018461302d565b6000821982111561320357613203613372565b500190565b600082613217576132176133a1565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561325457613254613372565b500290565b60008282101561326b5761326b613372565b500390565b60005b8381101561328b578181015183820152602001613273565b838111156118705750506000910152565b6000816132ab576132ab613372565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600181811c908216806132e557607f821691505b6020821081141561331f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561335757613357613372565b5060010190565b60008261336d5761336d6133a1565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b801515811461209757600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461209757600080fdfea2646970667358221220e1ed29c10fa9a7f610fea00c6e70bed89470827e781d39820a81609348d318fb64736f6c63430008070033697066733a2f2f516d61354d3869794a7034626577563461564e4862556e75314d784738526b32364d634e50777259743369797047000000000000000000000000983862d7408edc9749d45f222bd578d6b5374399
Deployed Bytecode
0x6080604052600436106102dc5760003560e01c80635b70ea9f1161018457806397bc411c116100d6578063c0e05d0b1161008a578063ed9ec88811610064578063ed9ec888146107ae578063f2fde38b146107db578063fa72de45146107fb57600080fd5b8063c0e05d0b14610725578063c87b56dd14610745578063e985e9c51461076557600080fd5b8063a22cb465116100bb578063a22cb465146106c5578063b534a5c4146106e5578063b88d4fde1461070557600080fd5b806397bc411c14610692578063a0712d68146106b257600080fd5b8063853828b61161013857806391b7f5ed1161011257806391b7f5ed14610647578063931e2e491461066757806395d89b411461067d57600080fd5b8063853828b6146105fe5780638d859f3e146106135780638da5cb5b1461062957600080fd5b80636790a9de116101695780636790a9de146105a957806370a08231146105c9578063715018a6146105e957600080fd5b80635b70ea9f146105815780636352211e1461058957600080fd5b80632533c7cd1161023d57806342842e0e116101f15780634d44660c116101cb5780634d44660c146105275780634f6ccce714610547578063518302271461056757600080fd5b806342842e0e146104ba578063438b6300146104da5780634a994eef1461050757600080fd5b80632f745c59116102225780632f745c591461046457806332cb6b0c146104845780633e0a322d1461049a57600080fd5b80632533c7cd1461042f5780632714ce921461044f57600080fd5b8063095ea7b3116102945780631c96cae9116102795780631c96cae9146103e657806322968885146103fc57806323b872dd1461040f57600080fd5b8063095ea7b3146103a557806318160ddd146103c757600080fd5b806307779627116102c55780630777962714610338578063081812fc14610358578063081c8c441461039057600080fd5b806301ffc9a7146102e157806306fdde0314610316575b600080fd5b3480156102ed57600080fd5b506103016102fc366004612f1f565b61081b565b60405190151581526020015b60405180910390f35b34801561032257600080fd5b5061032b610877565b60405161030d91906131dd565b34801561034457600080fd5b50610301610353366004612bcd565b610909565b34801561036457600080fd5b50610378610373366004612ffb565b61098e565b6040516001600160a01b03909116815260200161030d565b34801561039c57600080fd5b5061032b610a27565b3480156103b157600080fd5b506103c56103c0366004612e6c565b610ab5565b005b3480156103d357600080fd5b50600d545b60405190815260200161030d565b3480156103f257600080fd5b506103d8600b5481565b34801561040857600080fd5b50476103d8565b34801561041b57600080fd5b506103c561042a366004612cac565b610be7565b34801561043b57600080fd5b506103c561044a366004612e96565b610c6e565b34801561045b57600080fd5b506103c5610e9d565b34801561047057600080fd5b506103d861047f366004612e6c565b610f0b565b34801561049057600080fd5b506103d860095481565b3480156104a657600080fd5b506103c56104b5366004612ffb565b610fe9565b3480156104c657600080fd5b506103c56104d5366004612cac565b611048565b3480156104e657600080fd5b506104fa6104f5366004612bcd565b611063565b60405161030d9190613199565b34801561051357600080fd5b506103c5610522366004612e35565b611103565b34801561053357600080fd5b50610301610542366004612de2565b611188565b34801561055357600080fd5b506103d8610562366004612ffb565b61120a565b34801561057357600080fd5b506007546103019060ff1681565b6103c561128d565b34801561059557600080fd5b506103786105a4366004612ffb565b61143c565b3480156105b557600080fd5b506103c56105c4366004612f9b565b6114dc565b3480156105d557600080fd5b506103d86105e4366004612bcd565b611556565b3480156105f557600080fd5b506103c56115f0565b34801561060a57600080fd5b506103c5611656565b34801561061f57600080fd5b506103d8600a5481565b34801561063557600080fd5b506004546001600160a01b0316610378565b34801561065357600080fd5b506103c5610662366004612ffb565b611876565b34801561067357600080fd5b506103d8600c5481565b34801561068957600080fd5b5061032b6118d5565b34801561069e57600080fd5b506103c56106ad366004612f59565b6118e4565b6103c56106c0366004612ffb565b61194a565b3480156106d157600080fd5b506103c56106e0366004612e35565b611ba9565b3480156106f157600080fd5b506103c5610700366004612c1b565b611c6e565b34801561071157600080fd5b506103c5610720366004612ce8565b611ce3565b34801561073157600080fd5b50610301610740366004612bcd565b611d6b565b34801561075157600080fd5b5061032b610760366004612ffb565b611ec3565b34801561077157600080fd5b50610301610780366004612be8565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205460ff1690565b3480156107ba57600080fd5b506103d86107c9366004612bcd565b600f6020526000908152604090205481565b3480156107e757600080fd5b506103c56107f6366004612bcd565b612011565b34801561080757600080fd5b50610378610816366004612ffb565b61209a565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d630000000000000000000000000000000000000000000000000000000014806108715750610871826120c4565b92915050565b606060008054610886906132d1565b80601f01602080910402602001604051908101604052809291908181526020018280546108b2906132d1565b80156108ff5780601f106108d4576101008083540402835291602001916108ff565b820191906000526020600020905b8154815290600101906020018083116108e257829003601f168201915b5050505050905090565b6004546000906001600160a01b0316331461096b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b506001600160a01b03811660009081526005602052604090205460ff165b919050565b6000610999826121a7565b610a0b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610962565b506000908152600260205260409020546001600160a01b031690565b60088054610a34906132d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610a60906132d1565b8015610aad5780601f10610a8257610100808354040283529160200191610aad565b820191906000526020600020905b815481529060010190602001808311610a9057829003601f168201915b505050505081565b6000610ac08261143c565b9050806001600160a01b0316836001600160a01b03161415610b4a5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610962565b336001600160a01b0382161480610b665750610b668133610780565b610bd85760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610962565b610be283836121f1565b505050565b610bf13382612277565b610c635760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610962565b610be2838383612372565b6004546001600160a01b03163314610cc85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b828114610d3d5760405162461bcd60e51b815260206004820152603460248201527f4e616e6f6b6f3a204d7573742070726f7669646520657175616c207175616e7460448201527f697469657320616e6420726563697069656e74730000000000000000000000006064820152608401610962565b600d54600090815b85811015610d8357868682818110610d5f57610d5f6133d0565b9050602002013583610d7191906131f0565b9250610d7c81613325565b9050610d45565b50600954610d9183836131f0565b10610e045760405162461bcd60e51b815260206004820152602160248201527f4e616e6f6b6f3a204d696e742f6f72646572206578636565647320737570706c60448201527f79000000000000000000000000000000000000000000000000000000000000006064820152608401610962565b60005b83811015610e945760005b878783818110610e2457610e246133d0565b90506020020135811015610e8357600083610e3e81613325565b94509050610e72878785818110610e5757610e576133d0565b9050602002016020810190610e6c9190612bcd565b826124b2565b50610e7c81613325565b9050610e12565b50610e8d81613325565b9050610e07565b50505050505050565b6004546001600160a01b03163314610ef75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b6007805460ff19811660ff90911615179055565b60008060005b600d54811015610f7a57600d8181548110610f2e57610f2e6133d0565b6000918252602090912001546001600160a01b0386811691161415610f6a5783821415610f5e5791506108719050565b610f6782613325565b91505b610f7381613325565b9050610f11565b5060405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610962565b6004546001600160a01b031633146110435760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b600c55565b610be283838360405180602001604052806000815250611ce3565b6060600061107083611556565b905060008167ffffffffffffffff81111561108d5761108d6133ff565b6040519080825280602002602001820160405280156110b6578160200160208202803683370190505b50905060005b828110156110fb576110ce8582610f0b565b8282815181106110e0576110e06133d0565b60209081029190910101526110f481613325565b90506110bc565b509392505050565b6004546001600160a01b0316331461115d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000805b828110156111fd57846001600160a01b0316600d8585848181106111b2576111b26133d0565b90506020020135815481106111c9576111c96133d0565b6000918252602090912001546001600160a01b0316146111ed576000915050611203565b6111f681613325565b905061118c565b50600190505b9392505050565b6000611215600d5490565b82106112895760405162461bcd60e51b815260206004820152602260248201527f4e616e6f6b6f3a20676c6f62616c20696e646578206f7574206f6620626f756e60448201527f64730000000000000000000000000000000000000000000000000000000000006064820152608401610962565b5090565b600260065414156112e05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610962565b6002600655600c544210156113375760405162461bcd60e51b815260206004820181905260248201527f4e616e6f6b6f3a204d696e74696e67206973206e6f74207374617274207965746044820152606401610962565b61134033611d6b565b6113b25760405162461bcd60e51b815260206004820152602a60248201527f4e616e6f6b6f3a20596f7520617265206e6f7420656c696761626c6520666f7260448201527f2066726565206d696e74000000000000000000000000000000000000000000006064820152608401610962565b60006113bd600d5490565b905060095481106114105760405162461bcd60e51b815260206004820152601b60248201527f4e616e6f6b6f3a204d696e74206578636565647320737570706c7900000000006044820152606401610962565b336000818152601060205260409020805460ff1916600117905561143490826124b2565b506001600655565b600080600d8381548110611452576114526133d0565b6000918252602090912001546001600160a01b03169050806108715760405162461bcd60e51b815260206004820152602360248201527f4e616e6f6b6f3a20717565727920666f72206e6f6e6578697374656e7420746f60448201527f6b656e00000000000000000000000000000000000000000000000000000000006064820152608401610962565b6004546001600160a01b031633146115365760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b61154260118585612a98565b5061154f60128383612a98565b5050505050565b60006001600160a01b0382166115d45760405162461bcd60e51b815260206004820152602a60248201527f4e616e6f6b6f3a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610962565b506001600160a01b03166000908152600e602052604090205490565b6004546001600160a01b0316331461164a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b6116546000612551565b565b6004546001600160a01b031633146116b05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b4773a2800c3d21948e22315e573b8ec582606cbfc8e06116d1606483613208565b6116dc90601761321c565b604051600081818185875af1925050503d8060008114611718576040519150601f19603f3d011682016040523d82523d6000602084013e61171d565b606091505b50730ed819ccaecfc5527b606f00fd3c3b640146977d91506117429050606483613208565b61174d90602461321c565b604051600081818185875af1925050503d8060008114611789576040519150601f19603f3d011682016040523d82523d6000602084013e61178e565b606091505b50732e8931a6a02ec56eef941e29bb0b5121de3fa12891506117b3905060c883613208565b6117be90604761321c565b604051600081818185875af1925050503d80600081146117fa576040519150601f19603f3d011682016040523d82523d6000602084013e6117ff565b606091505b50733744d9468f991e110a16be720484fe53c7fe9b739150611824905060c883613208565b61182f90600b61321c565b604051600081818185875af1925050503d806000811461186b576040519150601f19603f3d011682016040523d82523d6000602084013e611870565b606091505b50505050565b6004546001600160a01b031633146118d05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b600a55565b606060018054610886906132d1565b6004546001600160a01b0316331461193e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b610be260088383612a98565b6002600654141561199d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610962565b6002600655600c544210156119f45760405162461bcd60e51b815260206004820181905260248201527f4e616e6f6b6f3a204d696e74696e67206973206e6f74207374617274207965746044820152606401610962565b600b54336000908152600f6020526040902054611a1190836131f0565b1115611a5f5760405162461bcd60e51b815260206004820181905260248201527f4e616e6f6b6f3a20596f752063616e2774206d696e742074686174206d7563686044820152606401610962565b80600a54611a6d919061321c565b341015611ae25760405162461bcd60e51b815260206004820152602160248201527f4e616e6f6b6f3a2045746865722073656e74206973206e6f7420636f7272656360448201527f74000000000000000000000000000000000000000000000000000000000000006064820152608401610962565b6000611aed600d5490565b600954909150611afd83836131f0565b1115611b4b5760405162461bcd60e51b815260206004820152601b60248201527f4e616e6f6b6f3a204d696e74206578636565647320737570706c7900000000006044820152606401610962565b60005b82811015611b7b57611b6b3383611b6481613325565b94506124b2565b611b7481613325565b9050611b4e565b50336000908152600f602052604081208054849290611b9b9084906131f0565b909155505060016006555050565b6001600160a01b038216331415611c025760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610962565b3360008181526003602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60005b83811015610e9457611cd38787878785818110611c9057611c906133d0565b9050602002013586868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ce392505050565b611cdc81613325565b9050611c71565b611ced3383612277565b611d5f5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610962565b611870848484846125bb565b6001600160a01b03811660009081526010602052604081205460ff1615801561087157506013546040517fdef872720000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152600092169063def872729060240160206040518083038186803b158015611dee57600080fd5b505afa158015611e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e269190613014565b118061087157506013546040517fc83271f50000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063c83271f59060240160206040518083038186803b158015611e8b57600080fd5b505afa158015611e9f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108719190612f02565b6060611ece826121a7565b611f405760405162461bcd60e51b815260206004820152602760248201527f4e616e6f6b6f3a2055524920717565727920666f72206e6f6e6578697374656e60448201527f7420746f6b656e000000000000000000000000000000000000000000000000006064820152608401610962565b60075460ff16611fdc5760088054611f57906132d1565b80601f0160208091040260200160405190810160405280929190818152602001828054611f83906132d1565b8015611fd05780601f10611fa557610100808354040283529160200191611fd0565b820191906000526020600020905b815481529060010190602001808311611fb357829003601f168201915b50505050509050919050565b6011611fe783612644565b6012604051602001611ffb9392919061312a565b6040516020818303038152906040529050919050565b6004546001600160a01b0316331461206b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b6001600160a01b0381166000908152600560205260409020805460ff1916600117905561209781612776565b50565b600d81815481106120aa57600080fd5b6000918252602090912001546001600160a01b0316905081565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061215757507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061087157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610871565b600d5460009082108015610871575060006001600160a01b0316600d83815481106121d4576121d46133d0565b6000918252602090912001546001600160a01b0316141592915050565b600081815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038416908117909155819061223e8261143c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612282826121a7565b6122f45760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610962565b60006122ff8361143c565b9050806001600160a01b0316846001600160a01b0316148061233a5750836001600160a01b031661232f8461098e565b6001600160a01b0316145b8061236a57506001600160a01b0380821660009081526003602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316600d828154811061238f5761238f6133d0565b6000918252602090912001546001600160a01b0316146124175760405162461bcd60e51b815260206004820152602b60248201527f4e616e6f6b6f3a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e65640000000000000000000000000000000000000000006064820152608401610962565b6124226000826121f1565b61242c8383612855565b81600d8281548110612440576124406133d0565b6000918252602082200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b6124bd600083612855565b600d805460018101825560009182527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600480546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6125c6848484612372565b6125d2848484846128cd565b6118705760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610962565b60608161268457505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156126ae578061269881613325565b91506126a79050600a83613208565b9150612688565b60008167ffffffffffffffff8111156126c9576126c96133ff565b6040519080825280601f01601f1916602001820160405280156126f3576020820181803683370190505b5090505b841561236a57612708600183613259565b9150612715600a8661335e565b6127209060306131f0565b60f81b818381518110612735576127356133d0565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061276f600a86613208565b94506126f7565b6004546001600160a01b031633146127d05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610962565b6001600160a01b03811661284c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610962565b61209781612551565b6001600160a01b0382161561288f576001600160a01b0382166000908152600e60205260408120805490919061288a9061329c565b909155505b6001600160a01b038116156128c9576001600160a01b0381166000908152600e6020526040812080549091906128c490613325565b909155505b5050565b60006001600160a01b0384163b15612a8d576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a029061292a90339089908890889060040161315d565b602060405180830381600087803b15801561294457600080fd5b505af1925050508015612992575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261298f91810190612f3c565b60015b612a42573d8080156129c0576040519150601f19603f3d011682016040523d82523d6000602084013e6129c5565b606091505b508051612a3a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610962565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a020000000000000000000000000000000000000000000000000000000014905061236a565b506001949350505050565b828054612aa4906132d1565b90600052602060002090601f016020900481019282612ac65760008555612b0c565b82601f10612adf5782800160ff19823516178555612b0c565b82800160010185558215612b0c579182015b82811115612b0c578235825591602001919060010190612af1565b506112899291505b808211156112895760008155600101612b14565b80356001600160a01b038116811461098957600080fd5b60008083601f840112612b5157600080fd5b50813567ffffffffffffffff811115612b6957600080fd5b6020830191508360208260051b8501011115612b8457600080fd5b9250929050565b60008083601f840112612b9d57600080fd5b50813567ffffffffffffffff811115612bb557600080fd5b602083019150836020828501011115612b8457600080fd5b600060208284031215612bdf57600080fd5b61120382612b28565b60008060408385031215612bfb57600080fd5b612c0483612b28565b9150612c1260208401612b28565b90509250929050565b60008060008060008060808789031215612c3457600080fd5b612c3d87612b28565b9550612c4b60208801612b28565b9450604087013567ffffffffffffffff80821115612c6857600080fd5b612c748a838b01612b3f565b90965094506060890135915080821115612c8d57600080fd5b50612c9a89828a01612b8b565b979a9699509497509295939492505050565b600080600060608486031215612cc157600080fd5b612cca84612b28565b9250612cd860208501612b28565b9150604084013590509250925092565b60008060008060808587031215612cfe57600080fd5b612d0785612b28565b9350612d1560208601612b28565b925060408501359150606085013567ffffffffffffffff80821115612d3957600080fd5b818701915087601f830112612d4d57600080fd5b813581811115612d5f57612d5f6133ff565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715612da557612da56133ff565b816040528281528a6020848701011115612dbe57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600080600060408486031215612df757600080fd5b612e0084612b28565b9250602084013567ffffffffffffffff811115612e1c57600080fd5b612e2886828701612b3f565b9497909650939450505050565b60008060408385031215612e4857600080fd5b612e5183612b28565b91506020830135612e618161342e565b809150509250929050565b60008060408385031215612e7f57600080fd5b612e8883612b28565b946020939093013593505050565b60008060008060408587031215612eac57600080fd5b843567ffffffffffffffff80821115612ec457600080fd5b612ed088838901612b3f565b90965094506020870135915080821115612ee957600080fd5b50612ef687828801612b3f565b95989497509550505050565b600060208284031215612f1457600080fd5b81516112038161342e565b600060208284031215612f3157600080fd5b81356112038161343c565b600060208284031215612f4e57600080fd5b81516112038161343c565b60008060208385031215612f6c57600080fd5b823567ffffffffffffffff811115612f8357600080fd5b612f8f85828601612b8b565b90969095509350505050565b60008060008060408587031215612fb157600080fd5b843567ffffffffffffffff80821115612fc957600080fd5b612fd588838901612b8b565b90965094506020870135915080821115612fee57600080fd5b50612ef687828801612b8b565b60006020828403121561300d57600080fd5b5035919050565b60006020828403121561302657600080fd5b5051919050565b60008151808452613045816020860160208601613270565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8054600090600181811c908083168061309157607f831692505b60208084108214156130cc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b8180156130e057600181146130f15761311e565b60ff1986168952848901965061311e565b60008881526020902060005b868110156131165781548b8201529085019083016130fd565b505084890196505b50505050505092915050565b60006131368286613077565b8451613146818360208901613270565b61315281830186613077565b979650505050505050565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261318f608083018461302d565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156131d1578351835292840192918401916001016131b5565b50909695505050505050565b602081526000611203602083018461302d565b6000821982111561320357613203613372565b500190565b600082613217576132176133a1565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561325457613254613372565b500290565b60008282101561326b5761326b613372565b500390565b60005b8381101561328b578181015183820152602001613273565b838111156118705750506000910152565b6000816132ab576132ab613372565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600181811c908216806132e557607f821691505b6020821081141561331f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561335757613357613372565b5060010190565b60008261336d5761336d6133a1565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b801515811461209757600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461209757600080fdfea2646970667358221220e1ed29c10fa9a7f610fea00c6e70bed89470827e781d39820a81609348d318fb64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000983862d7408edc9749d45f222bd578d6b5374399
-----Decoded View---------------
Arg [0] : old (address): 0x983862D7408EdC9749D45f222bD578d6b5374399
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000983862d7408edc9749d45f222bd578d6b5374399
Deployed Bytecode Sourcemap
34118:9291:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29521:225;;;;;;;;;;-1:-1:-1;29521:225:0;;;;;:::i;:::-;;:::i;:::-;;;11603:14:1;;11596:22;11578:41;;11566:2;11551:18;29521:225:0;;;;;;;;24289:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;33449:112::-;;;;;;;;;;-1:-1:-1;33449:112:0;;;;;:::i;:::-;;:::i;25469:216::-;;;;;;;;;;-1:-1:-1;25469:216:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;10218:55:1;;;10200:74;;10188:2;10173:18;25469:216:0;10054:226:1;34257:86:0;;;;;;;;;;;;;:::i;25058:403::-;;;;;;;;;;-1:-1:-1;25058:403:0;;;;;:::i;:::-;;:::i;:::-;;37371:106;;;;;;;;;;-1:-1:-1;37457:7:0;:14;37371:106;;;21136:25:1;;;21124:2;21109:18;37371:106:0;20990:177:1;34428:28:0;;;;;;;;;;;;;;;;38212:105;;;;;;;;;;-1:-1:-1;38290:21:0;38212:105;;26168:334;;;;;;;;;;-1:-1:-1;26168:334:0;;;;;:::i;:::-;;:::i;40587:625::-;;;;;;;;;;-1:-1:-1;40587:625:0;;;;;:::i;:::-;;:::i;41280:79::-;;;;;;;;;;;;;:::i;36508:360::-;;;;;;;;;;-1:-1:-1;36508:360:0;;;;;:::i;:::-;;:::i;34350:31::-;;;;;;;;;;;;;;;;41552:103;;;;;;;;;;-1:-1:-1;41552:103:0;;;;;:::i;:::-;;:::i;26510:184::-;;;;;;;;;;-1:-1:-1;26510:184:0;;;;;:::i;:::-;;:::i;37564:312::-;;;;;;;;;;-1:-1:-1;37564:312:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;33567:116::-;;;;;;;;;;-1:-1:-1;33567:116:0;;;;;:::i;:::-;;:::i;35456:250::-;;;;;;;;;;-1:-1:-1;35456:250:0;;;;;:::i;:::-;;:::i;36158:177::-;;;;;;;;;;-1:-1:-1;36158:177:0;;;;;:::i;:::-;;:::i;34224:28::-;;;;;;;;;;-1:-1:-1;34224:28:0;;;;;;;;39081:410;;;:::i;35775:217::-;;;;;;;;;;-1:-1:-1;35775:217:0;;;;;:::i;:::-;;:::i;41726:154::-;;;;;;;;;;-1:-1:-1;41726:154:0;;;;;:::i;:::-;;:::i;35164:193::-;;;;;;;;;;-1:-1:-1;35164:193:0;;;;;:::i;:::-;;:::i;32399:94::-;;;;;;;;;;;;;:::i;39694:809::-;;;;;;;;;;;;;:::i;34386:37::-;;;;;;;;;;;;;;;;31748:87;;;;;;;;;;-1:-1:-1;31821:6:0;;-1:-1:-1;;;;;31821:6:0;31748:87;;41886:76;;;;;;;;;;-1:-1:-1;41886:76:0;;;;;:::i;:::-;;:::i;34491:38::-;;;;;;;;;;;;;;;;24798:106;;;;;;;;;;;;;:::i;41429:117::-;;;;;;;;;;-1:-1:-1;41429:117:0;;;;;:::i;:::-;;:::i;38511:564::-;;;;;;:::i;:::-;;:::i;25865:295::-;;;;;;;;;;-1:-1:-1;25865:295:0;;;;;:::i;:::-;;:::i;30155:245::-;;;;;;;;;;-1:-1:-1;30155:245:0;;;;;:::i;:::-;;:::i;26702:325::-;;;;;;;;;;-1:-1:-1;26702:325:0;;;;;:::i;:::-;;:::i;37941:192::-;;;;;;;;;;-1:-1:-1;37941:192:0;;;;;:::i;:::-;;:::i;36963:322::-;;;;;;;;;;-1:-1:-1;36963:322:0;;;;;:::i;:::-;;:::i;25693:164::-;;;;;;;;;;-1:-1:-1;25693:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;25814:25:0;;;25790:4;25814:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;25693:164;34616:42;;;;;;;;;;-1:-1:-1;34616:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;33689:161;;;;;;;;;;-1:-1:-1;33689:161:0;;;;;:::i;:::-;;:::i;34538:24::-;;;;;;;;;;-1:-1:-1;34538:24:0;;;;;:::i;:::-;;:::i;29521:225::-;29624:4;29648:50;;;29663:35;29648:50;;:90;;;29702:36;29726:11;29702:23;:36::i;:::-;29641:97;29521:225;-1:-1:-1;;29521:225:0:o;24289:102::-;24345:13;24378:5;24371:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24289:102;:::o;33449:112::-;31821:6;;33519:4;;-1:-1:-1;;;;;31821:6:0;23232:10;31968:23;31960:68;;;;-1:-1:-1;;;31960:68:0;;17657:2:1;31960:68:0;;;17639:21:1;;;17676:18;;;17669:30;17735:34;17715:18;;;17708:62;17787:18;;31960:68:0;;;;;;;;;-1:-1:-1;;;;;;33539:16:0;::::1;;::::0;;;:10:::1;:16;::::0;;;;;::::1;;32039:1;33449:112:::0;;;:::o;25469:216::-;25542:7;25570:16;25578:7;25570;:16::i;:::-;25562:73;;;;-1:-1:-1;;;25562:73:0;;17244:2:1;25562:73:0;;;17226:21:1;17283:2;17263:18;;;17256:30;17322:34;17302:18;;;17295:62;17393:14;17373:18;;;17366:42;17425:19;;25562:73:0;17042:408:1;25562:73:0;-1:-1:-1;25653:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;25653:24:0;;25469:216::o;34257:86::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25058:403::-;25138:13;25154:16;25162:7;25154;:16::i;:::-;25138:32;;25195:5;-1:-1:-1;;;;;25189:11:0;:2;-1:-1:-1;;;;;25189:11:0;;;25181:57;;;;-1:-1:-1;;;25181:57:0;;18018:2:1;25181:57:0;;;18000:21:1;18057:2;18037:18;;;18030:30;18096:34;18076:18;;;18069:62;18167:3;18147:18;;;18140:31;18188:19;;25181:57:0;17816:397:1;25181:57:0;23232:10;-1:-1:-1;;;;;25273:21:0;;;;:62;;-1:-1:-1;25298:37:0;25315:5;23232:10;25693:164;:::i;25298:37::-;25251:168;;;;-1:-1:-1;;;25251:168:0;;16056:2:1;25251:168:0;;;16038:21:1;16095:2;16075:18;;;16068:30;16134:34;16114:18;;;16107:62;16205:26;16185:18;;;16178:54;16249:19;;25251:168:0;15854:420:1;25251:168:0;25432:21;25441:2;25445:7;25432:8;:21::i;:::-;25127:334;25058:403;;:::o;26168:334::-;26360:41;23232:10;26393:7;26360:18;:41::i;:::-;26352:103;;;;-1:-1:-1;;;26352:103:0;;18420:2:1;26352:103:0;;;18402:21:1;18459:2;18439:18;;;18432:30;18498:34;18478:18;;;18471:62;18569:19;18549:18;;;18542:47;18606:19;;26352:103:0;18218:413:1;26352:103:0;26466:28;26476:4;26482:2;26486:7;26466:9;:28::i;40587:625::-;31821:6;;-1:-1:-1;;;;;31821:6:0;23232:10;31968:23;31960:68;;;;-1:-1:-1;;;31960:68:0;;17657:2:1;31960:68:0;;;17639:21:1;;;17676:18;;;17669:30;17735:34;17715:18;;;17708:62;17787:18;;31960:68:0;17455:356:1;31960:68:0;40694:35;;::::1;40686:101;;;::::0;-1:-1:-1;;;40686:101:0;;14512:2:1;40686:101:0::1;::::0;::::1;14494:21:1::0;14551:2;14531:18;;;14524:30;14590:34;14570:18;;;14563:62;14661:22;14641:18;;;14634:50;14701:19;;40686:101:0::1;14310:416:1::0;40686:101:0::1;40835:7;:14:::0;40796:18:::1;::::0;;40856:82:::1;40868:19:::0;;::::1;40856:82;;;40919:8;;40928:1;40919:11;;;;;;;:::i;:::-;;;;;;;40902:28;;;;;:::i;:::-;::::0;-1:-1:-1;40889:3:0::1;::::0;::::1;:::i;:::-;;;40856:82;;;-1:-1:-1::0;40978:10:0::1;::::0;40953:22:::1;40962:13:::0;40953:6;:22:::1;:::i;:::-;:35;40944:83;;;::::0;-1:-1:-1;;;40944:83:0;;16481:2:1;40944:83:0::1;::::0;::::1;16463:21:1::0;16520:2;16500:18;;;16493:30;16559:34;16539:18;;;16532:62;16630:3;16610:18;;;16603:31;16651:19;;40944:83:0::1;16279:397:1::0;40944:83:0::1;41040:6;41036:171;41048:20:::0;;::::1;41036:171;;;41087:6;41083:117;41099:8;;41108:1;41099:11;;;;;;;:::i;:::-;;;;;;;41095:1;:15;41083:117;;;41127:12;41142:8:::0;::::1;::::0;::::1;:::i;:::-;;;41127:23;;41161:29;41168:9;;41178:1;41168:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;41182:7;41161:5;:29::i;:::-;-1:-1:-1::0;41112:3:0::1;::::0;::::1;:::i;:::-;;;41083:117;;;-1:-1:-1::0;41070:3:0::1;::::0;::::1;:::i;:::-;;;41036:171;;;;40679:533;;40587:625:::0;;;;:::o;41280:79::-;31821:6;;-1:-1:-1;;;;;31821:6:0;23232:10;31968:23;31960:68;;;;-1:-1:-1;;;31960:68:0;;17657:2:1;31960:68:0;;;17639:21:1;;;17676:18;;;17669:30;17735:34;17715:18;;;17708:62;17787:18;;31960:68:0;17455:356:1;31960:68:0;41345:8:::1;::::0;;-1:-1:-1;;41333:20:0;::::1;41345:8;::::0;;::::1;41344:9;41333:20;::::0;;41280:79::o;36508:360::-;36594:13;36616:10;36637:6;36633:170;36649:7;:14;36645:18;;36633:170;;;36690:7;36698:1;36690:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;36681:19:0;;;36690:10;;36681:19;36678:118;;;36725:5;36716;:14;36712:74;;;36751:1;-1:-1:-1;36744:8:0;;-1:-1:-1;36744:8:0;36712:74;36779:7;;;:::i;:::-;;;36712:74;36665:3;;;:::i;:::-;;;36633:170;;;-1:-1:-1;36809:53:0;;-1:-1:-1;;;36809:53:0;;12458:2:1;36809:53:0;;;12440:21:1;12497:2;12477:18;;;12470:30;12536:34;12516:18;;;12509:62;12607:13;12587:18;;;12580:41;12638:19;;36809:53:0;12256:407:1;41552:103:0;31821:6;;-1:-1:-1;;;;;31821:6:0;23232:10;31968:23;31960:68;;;;-1:-1:-1;;;31960:68:0;;17657:2:1;31960:68:0;;;17639:21:1;;;17676:18;;;17669:30;17735:34;17715:18;;;17708:62;17787:18;;31960:68:0;17455:356:1;31960:68:0;41620:13:::1;:29:::0;41552:103::o;26510:184::-;26647:39;26664:4;26670:2;26674:7;26647:39;;;;;;;;;;;;:16;:39::i;37564:312::-;37638:13;37660;37676:20;37687:7;37676:9;:20::i;:::-;37660:36;;37703:20;37738:8;37726:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37726:22:0;;37703:45;;37760:6;37755:96;37772:8;37768:1;:12;37755:96;;;37810:33;37831:7;37840:1;37810:19;:33::i;:::-;37798:6;37805:1;37798:9;;;;;;;;:::i;:::-;;;;;;;;;;:45;37782:3;;;:::i;:::-;;;37755:96;;;-1:-1:-1;37864:6:0;37564:312;-1:-1:-1;;;37564:312:0:o;33567:116::-;31821:6;;-1:-1:-1;;;;;31821:6:0;23232:10;31968:23;31960:68;;;;-1:-1:-1;;;31960:68:0;;17657:2:1;31960:68:0;;;17639:21:1;;;17676:18;;;17669:30;17735:34;17715:18;;;17708:62;17787:18;;31960:68:0;17455:356:1;31960:68:0;-1:-1:-1;;;;;33647:16:0;;;::::1;;::::0;;;:10:::1;:16;::::0;;;;:30;;-1:-1:-1;;33647:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33567:116::o;35456:250::-;35552:4;35569:6;35565:116;35577:19;;;35565:116;;;35642:7;-1:-1:-1;;;;;35616:33:0;:7;35625:8;;35634:1;35625:11;;;;;;;:::i;:::-;;;;;;;35616:22;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;35616:22:0;:33;35612:61;;35668:5;35661:12;;;;;35612:61;35598:3;;;:::i;:::-;;;35565:116;;;;35696:4;35689:11;;35456:250;;;;;;:::o;36158:177::-;36222:11;36258:13;37457:7;:14;;37371:106;36258:13;36250:5;:21;36242:68;;;;-1:-1:-1;;;36242:68:0;;20381:2:1;36242:68:0;;;20363:21:1;20420:2;20400:18;;;20393:30;20459:34;20439:18;;;20432:62;20530:4;20510:18;;;20503:32;20552:19;;36242:68:0;20179:398:1;36242:68:0;-1:-1:-1;36324:5:0;36158:177::o;39081:410::-;1812:1;2410:7;;:19;;2402:63;;;;-1:-1:-1;;;2402:63:0;;20021:2:1;2402:63:0;;;20003:21:1;20060:2;20040:18;;;20033:30;20099:33;20079:18;;;20072:61;20150:18;;2402:63:0;19819:355:1;2402:63:0;1812:1;2543:7;:18;39165:13:::1;::::0;39146:15:::1;:32;;39138:77;;;::::0;-1:-1:-1;;;39138:77:0;;16883:2:1;39138:77:0::1;::::0;::::1;16865:21:1::0;;;16902:18;;;16895:30;16961:34;16941:18;;;16934:62;17013:18;;39138:77:0::1;16681:356:1::0;39138:77:0::1;39231:33;39253:10;39231:21;:33::i;:::-;39222:89;;;::::0;-1:-1:-1;;;39222:89:0;;18838:2:1;39222:89:0::1;::::0;::::1;18820:21:1::0;18877:2;18857:18;;;18850:30;18916:34;18896:18;;;18889:62;18987:12;18967:18;;;18960:40;19017:19;;39222:89:0::1;18636:406:1::0;39222:89:0::1;39318:11;39332:13;37457:7:::0;:14;;37371:106;39332:13:::1;39318:27;;39369:10;;39360:6;:19;39352:60;;;::::0;-1:-1:-1;;;39352:60:0;;15700:2:1;39352:60:0::1;::::0;::::1;15682:21:1::0;15739:2;15719:18;;;15712:30;15778:29;15758:18;;;15751:57;15825:18;;39352:60:0::1;15498:351:1::0;39352:60:0::1;39433:10;39419:25;::::0;;;:13:::1;:25;::::0;;;;:32;;-1:-1:-1;;39419:32:0::1;39447:4;39419:32;::::0;;39458:27:::1;::::0;39477:6;39458:5:::1;:27::i;:::-;-1:-1:-1::0;1768:1:0;2722:7;:22;39081:410::o;35775:217::-;35838:14;35861:13;35877:7;35885;35877:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;35877:16:0;;-1:-1:-1;35908:19:0;35900:67;;;;-1:-1:-1;;;35900:67:0;;13696:2:1;35900:67:0;;;13678:21:1;13735:2;13715:18;;;13708:30;13774:34;13754:18;;;13747:62;13845:5;13825:18;;;13818:33;13868:19;;35900:67:0;13494:399:1;41726:154:0;31821:6;;-1:-1:-1;;;;;31821:6:0;23232:10;31968:23;31960:68;;;;-1:-1:-1;;;31960:68:0;;17657:2:1;31960:68:0;;;17639:21:1;;;17676:18;;;17669:30;17735:34;17715:18;;;17708:62;17787:18;;31960:68:0;17455:356:1;31960:68:0;41819:24:::1;:15;41837:6:::0;;41819:24:::1;:::i;:::-;-1:-1:-1::0;41850:24:0::1;:15;41868:6:::0;;41850:24:::1;:::i;:::-;;41726:154:::0;;;;:::o;35164:193::-;35230:4;-1:-1:-1;;;;;35251:21:0;;35243:76;;;;-1:-1:-1;;;35243:76:0;;19610:2:1;35243:76:0;;;19592:21:1;19649:2;19629:18;;;19622:30;19688:34;19668:18;;;19661:62;19759:12;19739:18;;;19732:40;19789:19;;35243:76:0;19408:406:1;35243:76:0;-1:-1:-1;;;;;;35333:18:0;;;;;:9;:18;;;;;;;35164:193::o;32399:94::-;31821:6;;-1:-1:-1;;;;;31821:6:0;23232:10;31968:23;31960:68;;;;-1:-1:-1;;;31960:68:0;;17657:2:1;31960:68:0;;;17639:21:1;;;17676:18;;;17669:30;17735:34;17715:18;;;17708:62;17787:18;;31960:68:0;17455:356:1;31960:68:0;32464:21:::1;32482:1;32464:9;:21::i;:::-;32399:94::o:0;39694:809::-;31821:6;;-1:-1:-1;;;;;31821:6:0;23232:10;31968:23;31960:68;;;;-1:-1:-1;;;31960:68:0;;17657:2:1;31960:68:0;;;17639:21:1;;;17676:18;;;17669:30;17735:34;17715:18;;;17708:62;17787:18;;31960:68:0;17455:356:1;31960:68:0;39989:21:::1;40031:42;40087:12;40096:3;39989:21:::0;40087:12:::1;:::i;:::-;:17;::::0;40102:2:::1;40087:17;:::i;:::-;40023:86;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;40124:42:0::1;::::0;-1:-1:-1;40180:12:0::1;::::0;-1:-1:-1;40189:3:0::1;40180:6:::0;:12:::1;:::i;:::-;:17;::::0;40195:2:::1;40180:17;:::i;:::-;40116:86;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;40217:42:0::1;::::0;-1:-1:-1;40273:12:0::1;::::0;-1:-1:-1;40282:3:0::1;40273:6:::0;:12:::1;:::i;:::-;:17;::::0;40288:2:::1;40273:17;:::i;:::-;40209:86;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;40310:42:0::1;::::0;-1:-1:-1;40366:12:0::1;::::0;-1:-1:-1;40375:3:0::1;40366:6:::0;:12:::1;:::i;:::-;:17;::::0;40381:2:::1;40366:17;:::i;:::-;40302:86;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39734:769;39694:809::o:0;41886:76::-;31821:6;;-1:-1:-1;;;;;31821:6:0;23232:10;31968:23;31960:68;;;;-1:-1:-1;;;31960:68:0;;17657:2:1;31960:68:0;;;17639:21:1;;;17676:18;;;17669:30;17735:34;17715:18;;;17708:62;17787:18;;31960:68:0;17455:356:1;31960:68:0;41942:5:::1;:14:::0;41886:76::o;24798:106::-;24856:13;24889:7;24882:14;;;;;:::i;41429:117::-;31821:6;;-1:-1:-1;;;;;31821:6:0;23232:10;31968:23;31960:68;;;;-1:-1:-1;;;31960:68:0;;17657:2:1;31960:68:0;;;17639:21:1;;;17676:18;;;17669:30;17735:34;17715:18;;;17708:62;17787:18;;31960:68:0;17455:356:1;31960:68:0;41510:30:::1;:14;41527:13:::0;;41510:30:::1;:::i;38511:564::-:0;1812:1;2410:7;;:19;;2402:63;;;;-1:-1:-1;;;2402:63:0;;20021:2:1;2402:63:0;;;20003:21:1;20060:2;20040:18;;;20033:30;20099:33;20079:18;;;20072:61;20150:18;;2402:63:0;19819:355:1;2402:63:0;1812:1;2543:7;:18;38606:13:::1;::::0;38587:15:::1;:32;;38579:77;;;::::0;-1:-1:-1;;;38579:77:0;;16883:2:1;38579:77:0::1;::::0;::::1;16865:21:1::0;;;16902:18;;;16895:30;16961:34;16941:18;;;16934:62;17013:18;;38579:77:0::1;16681:356:1::0;38579:77:0::1;38707:7;::::0;38692:10:::1;38682:21;::::0;;;:9:::1;:21;::::0;;;;;38671:32:::1;::::0;:8;:32:::1;:::i;:::-;:43;;38663:88;;;::::0;-1:-1:-1;;;38663:88:0;;19249:2:1;38663:88:0::1;::::0;::::1;19231:21:1::0;;;19268:18;;;19261:30;19327:34;19307:18;;;19300:62;19379:18;;38663:88:0::1;19047:356:1::0;38663:88:0::1;38788:8;38780:5;;:16;;;;:::i;:::-;38767:9;:29;;38758:76;;;::::0;-1:-1:-1;;;38758:76:0;;12056:2:1;38758:76:0::1;::::0;::::1;12038:21:1::0;12095:2;12075:18;;;12068:30;12134:34;12114:18;;;12107:62;12205:3;12185:18;;;12178:31;12226:19;;38758:76:0::1;11854:397:1::0;38758:76:0::1;38841:11;38855:13;37457:7:::0;:14;;37371:106;38855:13:::1;38904:10;::::0;38841:27;;-1:-1:-1;38883:17:0::1;38892:8:::0;38841:27;38883:17:::1;:::i;:::-;:31;;38875:72;;;::::0;-1:-1:-1;;;38875:72:0;;15700:2:1;38875:72:0::1;::::0;::::1;15682:21:1::0;15739:2;15719:18;;;15712:30;15778:29;15758:18;;;15751:57;15825:18;;38875:72:0::1;15498:351:1::0;38875:72:0::1;38958:6;38954:76;38970:8;38966:1;:12;38954:76;;;38993:29;39000:10;39012:8:::0;::::1;::::0;::::1;:::i;:::-;;;38993:5;:29::i;:::-;38980:3;::::0;::::1;:::i;:::-;;;38954:76;;;-1:-1:-1::0;39046:10:0::1;39036:21;::::0;;;:9:::1;:21;::::0;;;;:33;;39061:8;;39036:21;:33:::1;::::0;39061:8;;39036:33:::1;:::i;:::-;::::0;;;-1:-1:-1;;1768:1:0;2722:7;:22;-1:-1:-1;;38511:564:0:o;25865:295::-;-1:-1:-1;;;;;25970:24:0;;23232:10;25970:24;;25962:62;;;;-1:-1:-1;;;25962:62:0;;14933:2:1;25962:62:0;;;14915:21:1;14972:2;14952:18;;;14945:30;15011:27;14991:18;;;14984:55;15056:18;;25962:62:0;14731:349:1;25962:62:0;23232:10;26035:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;26035:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;26035:53:0;;;;;;;;;;26104:48;;11578:41:1;;;26035:42:0;;23232:10;26104:48;;11551:18:1;26104:48:0;;;;;;;25865:295;;:::o;30155:245::-;30285:6;30281:112;30293:19;;;30281:112;;;30334:47;30352:4;30358:2;30362:8;;30371:1;30362:11;;;;;;;:::i;:::-;;;;;;;30375:4;;30334:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30334:16:0;;-1:-1:-1;;;30334:47:0:i;:::-;30314:3;;;:::i;:::-;;;30281:112;;26702:325;26874:41;23232:10;26907:7;26874:18;:41::i;:::-;26866:103;;;;-1:-1:-1;;;26866:103:0;;18420:2:1;26866:103:0;;;18402:21:1;18459:2;18439:18;;;18432:30;18498:34;18478:18;;;18471:62;18569:19;18549:18;;;18542:47;18606:19;;26866:103:0;18218:413:1;26866:103:0;26980:39;26994:4;27000:2;27004:7;27013:5;26980:13;:39::i;37941:192::-;-1:-1:-1;;;;;38031:22:0;;38011:4;38031:22;;;:13;:22;;;;;;;;38030:23;:95;;;;-1:-1:-1;38058:10:0;;:34;;;;;-1:-1:-1;;;;;10218:55:1;;;38058:34:0;;;10200:74:1;38095:1:0;;38058:10;;:25;;10173:18:1;;38058:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;:66;;;-1:-1:-1;38100:10:0;;:24;;;;;-1:-1:-1;;;;;10218:55:1;;;38100:24:0;;;10200:74:1;38100:10:0;;;;:15;;10173:18:1;;38100:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;36963:322::-;37027:13;37057:16;37065:7;37057;:16::i;:::-;37049:68;;;;-1:-1:-1;;;37049:68:0;;20784:2:1;37049:68:0;;;20766:21:1;20823:2;20803:18;;;20796:30;20862:34;20842:18;;;20835:62;20933:9;20913:18;;;20906:37;20960:19;;37049:68:0;20582:403:1;37049:68:0;37129:8;;;;37126:62;;37166:14;37159:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36963:322;;;:::o;37126:62::-;37225:15;37242:18;:7;:16;:18::i;:::-;37262:15;37208:70;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37194:85;;36963:322;;;:::o;33689:161::-;31821:6;;-1:-1:-1;;;;;31821:6:0;23232:10;31968:23;31960:68;;;;-1:-1:-1;;;31960:68:0;;17657:2:1;31960:68:0;;;17639:21:1;;;17676:18;;;17669:30;17735:34;17715:18;;;17708:62;17787:18;;31960:68:0;17455:356:1;31960:68:0;-1:-1:-1;;;;;33775:20:0;::::1;;::::0;;;:10:::1;:20;::::0;;;;:27;;-1:-1:-1;;33775:27:0::1;33798:4;33775:27;::::0;;33809:35:::1;33786:8:::0;33809:23:::1;:35::i;:::-;33689:161:::0;:::o;34538:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34538:24:0;;-1:-1:-1;34538:24:0;:::o;24485:305::-;24587:4;24624:40;;;24639:25;24624:40;;:105;;-1:-1:-1;24681:48:0;;;24696:33;24681:48;24624:105;:158;;;-1:-1:-1;16045:25:0;16030:40;;;;24746:36;15921:157;42420:147;42513:7;:14;42483:4;;42503:24;;:58;;;;;42559:1;-1:-1:-1;;;;;42531:30:0;:7;42539;42531:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;42531:16:0;:30;;42496:65;42420:147;-1:-1:-1;;42420:147:0:o;27053:164::-;27125:24;;;;:15;:24;;;;;:29;;;;-1:-1:-1;;;;;27125:29:0;;;;;;;;:24;;27179:16;27125:24;27179:7;:16::i;:::-;-1:-1:-1;;;;;27170:39:0;;;;;;;;;;;27053:164;;:::o;28105:338::-;28195:4;28220:16;28228:7;28220;:16::i;:::-;28212:73;;;;-1:-1:-1;;;28212:73:0;;15287:2:1;28212:73:0;;;15269:21:1;15326:2;15306:18;;;15299:30;15365:34;15345:18;;;15338:62;15436:14;15416:18;;;15409:42;15468:19;;28212:73:0;15085:408:1;28212:73:0;28296:13;28312:16;28320:7;28312;:16::i;:::-;28296:32;;28358:5;-1:-1:-1;;;;;28347:16:0;:7;-1:-1:-1;;;;;28347:16:0;;:51;;;;28391:7;-1:-1:-1;;;;;28367:31:0;:20;28379:7;28367:11;:20::i;:::-;-1:-1:-1;;;;;28367:31:0;;28347:51;:87;;;-1:-1:-1;;;;;;25814:25:0;;;25790:4;25814:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;28402:32;28339:96;28105:338;-1:-1:-1;;;;28105:338:0:o;42861:362::-;42973:4;-1:-1:-1;;;;;42953:24:0;:7;42961;42953:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;42953:16:0;:24;42945:80;;;;-1:-1:-1;;;42945:80:0;;14100:2:1;42945:80:0;;;14082:21:1;14139:2;14119:18;;;14112:30;14178:34;14158:18;;;14151:62;14249:13;14229:18;;;14222:41;14280:19;;42945:80:0;13898:407:1;42945:80:0;43082:29;43099:1;43103:7;43082:8;:29::i;:::-;43118:30;43139:4;43145:2;43118:20;:30::i;:::-;43176:2;43157:7;43165;43157:16;;;;;;;;:::i;:::-;;;;;;;;;:21;;;;-1:-1:-1;;;;;43157:21:0;;;;;;43190:27;;43209:7;;43190:27;;;;;;;;;;43157:16;43190:27;42861:362;;;:::o;42632:167::-;42689:36;42718:1;42722:2;42689:20;:36::i;:::-;42732:7;:16;;;;;;;-1:-1:-1;42732:16:0;;;;;;;;;-1:-1:-1;;;;;42732:16:0;;;;;;;;42760:33;;42785:7;;-1:-1:-1;42760:33:0;;-1:-1:-1;;42760:33:0;42632:167;;:::o;32848:173::-;32923:6;;;-1:-1:-1;;;;;32940:17:0;;;;;;;;;;;32973:40;;32923:6;;;32940:17;32923:6;;32973:40;;32904:16;;32973:40;32893:128;32848:173;:::o;28451:312::-;28605:28;28615:4;28621:2;28625:7;28605:9;:28::i;:::-;28652:48;28675:4;28681:2;28685:7;28694:5;28652:22;:48::i;:::-;28644:111;;;;-1:-1:-1;;;28644:111:0;;12870:2:1;28644:111:0;;;12852:21:1;12909:2;12889:18;;;12882:30;12948:34;12928:18;;;12921:62;13019:20;12999:18;;;12992:48;13057:19;;28644:111:0;12668:414:1;3124:723:0;3180:13;3401:10;3397:53;;-1:-1:-1;;3428:10:0;;;;;;;;;;;;;;;;;;3124:723::o;3397:53::-;3475:5;3460:12;3516:78;3523:9;;3516:78;;3549:8;;;;:::i;:::-;;-1:-1:-1;3572:10:0;;-1:-1:-1;3580:2:0;3572:10;;:::i;:::-;;;3516:78;;;3604:19;3636:6;3626:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3626:17:0;;3604:39;;3654:154;3661:10;;3654:154;;3688:11;3698:1;3688:11;;:::i;:::-;;-1:-1:-1;3757:10:0;3765:2;3757:5;:10;:::i;:::-;3744:24;;:2;:24;:::i;:::-;3731:39;;3714:6;3721;3714:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;3785:11:0;3794:2;3785:11;;:::i;:::-;;;3654:154;;32648:192;31821:6;;-1:-1:-1;;;;;31821:6:0;23232:10;31968:23;31960:68;;;;-1:-1:-1;;;31960:68:0;;17657:2:1;31960:68:0;;;17639:21:1;;;17676:18;;;17669:30;17735:34;17715:18;;;17708:62;17787:18;;31960:68:0;17455:356:1;31960:68:0;-1:-1:-1;;;;;32737:22:0;::::1;32729:73;;;::::0;-1:-1:-1;;;32729:73:0;;13289:2:1;32729:73:0::1;::::0;::::1;13271:21:1::0;13328:2;13308:18;;;13301:30;13367:34;13347:18;;;13340:62;13438:8;13418:18;;;13411:36;13464:19;;32729:73:0::1;13087:402:1::0;32729:73:0::1;32813:19;32823:8;32813:9;:19::i;42173:185::-:0;-1:-1:-1;;;;;42249:18:0;;;42245:51;;-1:-1:-1;;;;;42279:17:0;;;;;;:9;:17;;;;;42277:19;;42279:17;;;42277:19;;;:::i;:::-;;;;-1:-1:-1;42245:51:0;-1:-1:-1;;;;;42309:16:0;;;42305:47;;-1:-1:-1;;;;;42337:15:0;;;;;;:9;:15;;;;;42335:17;;42337:15;;;42335:17;;;:::i;:::-;;;;-1:-1:-1;42305:47:0;42173:185;;:::o;27225:796::-;27377:4;-1:-1:-1;;;;;27398:13:0;;6369:20;6417:8;27394:620;;27434:72;;;;;-1:-1:-1;;;;;27434:36:0;;;;;:72;;23232:10;;27485:4;;27491:7;;27500:5;;27434:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27434:72:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;27430:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27676:13:0;;27672:272;;27719:60;;-1:-1:-1;;;27719:60:0;;12870:2:1;27719:60:0;;;12852:21:1;12909:2;12889:18;;;12882:30;12948:34;12928:18;;;12921:62;13019:20;12999:18;;;12992:48;13057:19;;27719:60:0;12668:414:1;27672:272:0;27894:6;27888:13;27879:6;27875:2;27871:15;27864:38;27430:529;27557:51;;27567:41;27557:51;;-1:-1:-1;27550:58:0;;27394:620;-1:-1:-1;27998:4:0;27225:796;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:196:1;82:20;;-1:-1:-1;;;;;131:54:1;;121:65;;111:93;;200:1;197;190:12;215:367;278:8;288:6;342:3;335:4;327:6;323:17;319:27;309:55;;360:1;357;350:12;309:55;-1:-1:-1;383:20:1;;426:18;415:30;;412:50;;;458:1;455;448:12;412:50;495:4;487:6;483:17;471:29;;555:3;548:4;538:6;535:1;531:14;523:6;519:27;515:38;512:47;509:67;;;572:1;569;562:12;509:67;215:367;;;;;:::o;587:347::-;638:8;648:6;702:3;695:4;687:6;683:17;679:27;669:55;;720:1;717;710:12;669:55;-1:-1:-1;743:20:1;;786:18;775:30;;772:50;;;818:1;815;808:12;772:50;855:4;847:6;843:17;831:29;;907:3;900:4;891:6;883;879:19;875:30;872:39;869:59;;;924:1;921;914:12;939:186;998:6;1051:2;1039:9;1030:7;1026:23;1022:32;1019:52;;;1067:1;1064;1057:12;1019:52;1090:29;1109:9;1090:29;:::i;1130:260::-;1198:6;1206;1259:2;1247:9;1238:7;1234:23;1230:32;1227:52;;;1275:1;1272;1265:12;1227:52;1298:29;1317:9;1298:29;:::i;:::-;1288:39;;1346:38;1380:2;1369:9;1365:18;1346:38;:::i;:::-;1336:48;;1130:260;;;;;:::o;1395:894::-;1519:6;1527;1535;1543;1551;1559;1612:3;1600:9;1591:7;1587:23;1583:33;1580:53;;;1629:1;1626;1619:12;1580:53;1652:29;1671:9;1652:29;:::i;:::-;1642:39;;1700:38;1734:2;1723:9;1719:18;1700:38;:::i;:::-;1690:48;;1789:2;1778:9;1774:18;1761:32;1812:18;1853:2;1845:6;1842:14;1839:34;;;1869:1;1866;1859:12;1839:34;1908:70;1970:7;1961:6;1950:9;1946:22;1908:70;:::i;:::-;1997:8;;-1:-1:-1;1882:96:1;-1:-1:-1;2085:2:1;2070:18;;2057:32;;-1:-1:-1;2101:16:1;;;2098:36;;;2130:1;2127;2120:12;2098:36;;2169:60;2221:7;2210:8;2199:9;2195:24;2169:60;:::i;:::-;1395:894;;;;-1:-1:-1;1395:894:1;;-1:-1:-1;1395:894:1;;2248:8;;1395:894;-1:-1:-1;;;1395:894:1:o;2294:328::-;2371:6;2379;2387;2440:2;2428:9;2419:7;2415:23;2411:32;2408:52;;;2456:1;2453;2446:12;2408:52;2479:29;2498:9;2479:29;:::i;:::-;2469:39;;2527:38;2561:2;2550:9;2546:18;2527:38;:::i;:::-;2517:48;;2612:2;2601:9;2597:18;2584:32;2574:42;;2294:328;;;;;:::o;2627:1197::-;2722:6;2730;2738;2746;2799:3;2787:9;2778:7;2774:23;2770:33;2767:53;;;2816:1;2813;2806:12;2767:53;2839:29;2858:9;2839:29;:::i;:::-;2829:39;;2887:38;2921:2;2910:9;2906:18;2887:38;:::i;:::-;2877:48;;2972:2;2961:9;2957:18;2944:32;2934:42;;3027:2;3016:9;3012:18;2999:32;3050:18;3091:2;3083:6;3080:14;3077:34;;;3107:1;3104;3097:12;3077:34;3145:6;3134:9;3130:22;3120:32;;3190:7;3183:4;3179:2;3175:13;3171:27;3161:55;;3212:1;3209;3202:12;3161:55;3248:2;3235:16;3270:2;3266;3263:10;3260:36;;;3276:18;;:::i;:::-;3410:2;3404:9;3472:4;3464:13;;3315:66;3460:22;;;3484:2;3456:31;3452:40;3440:53;;;3508:18;;;3528:22;;;3505:46;3502:72;;;3554:18;;:::i;:::-;3594:10;3590:2;3583:22;3629:2;3621:6;3614:18;3669:7;3664:2;3659;3655;3651:11;3647:20;3644:33;3641:53;;;3690:1;3687;3680:12;3641:53;3746:2;3741;3737;3733:11;3728:2;3720:6;3716:15;3703:46;3791:1;3786:2;3781;3773:6;3769:15;3765:24;3758:35;3812:6;3802:16;;;;;;;2627:1197;;;;;;;:::o;3829:511::-;3924:6;3932;3940;3993:2;3981:9;3972:7;3968:23;3964:32;3961:52;;;4009:1;4006;3999:12;3961:52;4032:29;4051:9;4032:29;:::i;:::-;4022:39;;4112:2;4101:9;4097:18;4084:32;4139:18;4131:6;4128:30;4125:50;;;4171:1;4168;4161:12;4125:50;4210:70;4272:7;4263:6;4252:9;4248:22;4210:70;:::i;:::-;3829:511;;4299:8;;-1:-1:-1;4184:96:1;;-1:-1:-1;;;;3829:511:1:o;4345:315::-;4410:6;4418;4471:2;4459:9;4450:7;4446:23;4442:32;4439:52;;;4487:1;4484;4477:12;4439:52;4510:29;4529:9;4510:29;:::i;:::-;4500:39;;4589:2;4578:9;4574:18;4561:32;4602:28;4624:5;4602:28;:::i;:::-;4649:5;4639:15;;;4345:315;;;;;:::o;4665:254::-;4733:6;4741;4794:2;4782:9;4773:7;4769:23;4765:32;4762:52;;;4810:1;4807;4800:12;4762:52;4833:29;4852:9;4833:29;:::i;:::-;4823:39;4909:2;4894:18;;;;4881:32;;-1:-1:-1;;;4665:254:1:o;4924:773::-;5046:6;5054;5062;5070;5123:2;5111:9;5102:7;5098:23;5094:32;5091:52;;;5139:1;5136;5129:12;5091:52;5179:9;5166:23;5208:18;5249:2;5241:6;5238:14;5235:34;;;5265:1;5262;5255:12;5235:34;5304:70;5366:7;5357:6;5346:9;5342:22;5304:70;:::i;:::-;5393:8;;-1:-1:-1;5278:96:1;-1:-1:-1;5481:2:1;5466:18;;5453:32;;-1:-1:-1;5497:16:1;;;5494:36;;;5526:1;5523;5516:12;5494:36;;5565:72;5629:7;5618:8;5607:9;5603:24;5565:72;:::i;:::-;4924:773;;;;-1:-1:-1;5656:8:1;-1:-1:-1;;;;4924:773:1:o;5702:245::-;5769:6;5822:2;5810:9;5801:7;5797:23;5793:32;5790:52;;;5838:1;5835;5828:12;5790:52;5870:9;5864:16;5889:28;5911:5;5889:28;:::i;5952:245::-;6010:6;6063:2;6051:9;6042:7;6038:23;6034:32;6031:52;;;6079:1;6076;6069:12;6031:52;6118:9;6105:23;6137:30;6161:5;6137:30;:::i;6202:249::-;6271:6;6324:2;6312:9;6303:7;6299:23;6295:32;6292:52;;;6340:1;6337;6330:12;6292:52;6372:9;6366:16;6391:30;6415:5;6391:30;:::i;6456:410::-;6527:6;6535;6588:2;6576:9;6567:7;6563:23;6559:32;6556:52;;;6604:1;6601;6594:12;6556:52;6644:9;6631:23;6677:18;6669:6;6666:30;6663:50;;;6709:1;6706;6699:12;6663:50;6748:58;6798:7;6789:6;6778:9;6774:22;6748:58;:::i;:::-;6825:8;;6722:84;;-1:-1:-1;6456:410:1;-1:-1:-1;;;;6456:410:1:o;6871:719::-;6963:6;6971;6979;6987;7040:2;7028:9;7019:7;7015:23;7011:32;7008:52;;;7056:1;7053;7046:12;7008:52;7096:9;7083:23;7125:18;7166:2;7158:6;7155:14;7152:34;;;7182:1;7179;7172:12;7152:34;7221:58;7271:7;7262:6;7251:9;7247:22;7221:58;:::i;:::-;7298:8;;-1:-1:-1;7195:84:1;-1:-1:-1;7386:2:1;7371:18;;7358:32;;-1:-1:-1;7402:16:1;;;7399:36;;;7431:1;7428;7421:12;7399:36;;7470:60;7522:7;7511:8;7500:9;7496:24;7470:60;:::i;7595:180::-;7654:6;7707:2;7695:9;7686:7;7682:23;7678:32;7675:52;;;7723:1;7720;7713:12;7675:52;-1:-1:-1;7746:23:1;;7595:180;-1:-1:-1;7595:180:1:o;7780:184::-;7850:6;7903:2;7891:9;7882:7;7878:23;7874:32;7871:52;;;7919:1;7916;7909:12;7871:52;-1:-1:-1;7942:16:1;;7780:184;-1:-1:-1;7780:184:1:o;7969:316::-;8010:3;8048:5;8042:12;8075:6;8070:3;8063:19;8091:63;8147:6;8140:4;8135:3;8131:14;8124:4;8117:5;8113:16;8091:63;:::i;:::-;8199:2;8187:15;8204:66;8183:88;8174:98;;;;8274:4;8170:109;;7969:316;-1:-1:-1;;7969:316:1:o;8290:1088::-;8375:12;;8340:3;;8430:1;8450:18;;;;8503;;;;8530:61;;8584:4;8576:6;8572:17;8562:27;;8530:61;8610:2;8658;8650:6;8647:14;8627:18;8624:38;8621:218;;;8695:77;8692:1;8685:88;8796:4;8793:1;8786:15;8824:4;8821:1;8814:15;8621:218;8855:18;8882:162;;;;9058:1;9053:319;;;;8848:524;;8882:162;-1:-1:-1;;8919:9:1;8915:82;8910:3;8903:95;9027:6;9022:3;9018:16;9011:23;;8882:162;;9053:319;21245:1;21238:14;;;21282:4;21269:18;;9147:1;9161:165;9175:6;9172:1;9169:13;9161:165;;;9253:14;;9240:11;;;9233:35;9296:16;;;;9190:10;;9161:165;;;9165:3;;9355:6;9350:3;9346:16;9339:23;;8848:524;;;;;;;8290:1088;;;;:::o;9383:456::-;9604:3;9632:38;9666:3;9658:6;9632:38;:::i;:::-;9699:6;9693:13;9715:52;9760:6;9756:2;9749:4;9741:6;9737:17;9715:52;:::i;:::-;9783:50;9825:6;9821:2;9817:15;9809:6;9783:50;:::i;:::-;9776:57;9383:456;-1:-1:-1;;;;;;;9383:456:1:o;10285:511::-;10479:4;-1:-1:-1;;;;;10589:2:1;10581:6;10577:15;10566:9;10559:34;10641:2;10633:6;10629:15;10624:2;10613:9;10609:18;10602:43;;10681:6;10676:2;10665:9;10661:18;10654:34;10724:3;10719:2;10708:9;10704:18;10697:31;10745:45;10785:3;10774:9;10770:19;10762:6;10745:45;:::i;:::-;10737:53;10285:511;-1:-1:-1;;;;;;10285:511:1:o;10801:632::-;10972:2;11024:21;;;11094:13;;10997:18;;;11116:22;;;10943:4;;10972:2;11195:15;;;;11169:2;11154:18;;;10943:4;11238:169;11252:6;11249:1;11246:13;11238:169;;;11313:13;;11301:26;;11382:15;;;;11347:12;;;;11274:1;11267:9;11238:169;;;-1:-1:-1;11424:3:1;;10801:632;-1:-1:-1;;;;;;10801:632:1:o;11630:219::-;11779:2;11768:9;11761:21;11742:4;11799:44;11839:2;11828:9;11824:18;11816:6;11799:44;:::i;21298:128::-;21338:3;21369:1;21365:6;21362:1;21359:13;21356:39;;;21375:18;;:::i;:::-;-1:-1:-1;21411:9:1;;21298:128::o;21431:120::-;21471:1;21497;21487:35;;21502:18;;:::i;:::-;-1:-1:-1;21536:9:1;;21431:120::o;21556:228::-;21596:7;21722:1;21654:66;21650:74;21647:1;21644:81;21639:1;21632:9;21625:17;21621:105;21618:131;;;21729:18;;:::i;:::-;-1:-1:-1;21769:9:1;;21556:228::o;21789:125::-;21829:4;21857:1;21854;21851:8;21848:34;;;21862:18;;:::i;:::-;-1:-1:-1;21899:9:1;;21789:125::o;21919:258::-;21991:1;22001:113;22015:6;22012:1;22009:13;22001:113;;;22091:11;;;22085:18;22072:11;;;22065:39;22037:2;22030:10;22001:113;;;22132:6;22129:1;22126:13;22123:48;;;-1:-1:-1;;22167:1:1;22149:16;;22142:27;21919:258::o;22182:196::-;22221:3;22249:5;22239:39;;22258:18;;:::i;:::-;-1:-1:-1;22305:66:1;22294:78;;22182:196::o;22383:437::-;22462:1;22458:12;;;;22505;;;22526:61;;22580:4;22572:6;22568:17;22558:27;;22526:61;22633:2;22625:6;22622:14;22602:18;22599:38;22596:218;;;22670:77;22667:1;22660:88;22771:4;22768:1;22761:15;22799:4;22796:1;22789:15;22596:218;;22383:437;;;:::o;22825:195::-;22864:3;22895:66;22888:5;22885:77;22882:103;;;22965:18;;:::i;:::-;-1:-1:-1;23012:1:1;23001:13;;22825:195::o;23025:112::-;23057:1;23083;23073:35;;23088:18;;:::i;:::-;-1:-1:-1;23122:9:1;;23025:112::o;23142:184::-;23194:77;23191:1;23184:88;23291:4;23288:1;23281:15;23315:4;23312:1;23305:15;23331:184;23383:77;23380:1;23373:88;23480:4;23477:1;23470:15;23504:4;23501:1;23494:15;23520:184;23572:77;23569:1;23562:88;23669:4;23666:1;23659:15;23693:4;23690:1;23683:15;23709:184;23761:77;23758:1;23751:88;23858:4;23855:1;23848:15;23882:4;23879:1;23872:15;23898:118;23984:5;23977:13;23970:21;23963:5;23960:32;23950:60;;24006:1;24003;23996:12;24021:177;24106:66;24099:5;24095:78;24088:5;24085:89;24075:117;;24188:1;24185;24178:12
Swarm Source
ipfs://e1ed29c10fa9a7f610fea00c6e70bed89470827e781d39820a81609348d318fb
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.