Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 85 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 18906260 | 374 days ago | IN | 0 ETH | 0.00075081 | ||||
Set Approval For... | 18894663 | 375 days ago | IN | 0 ETH | 0.00108378 | ||||
Set Approval For... | 14226150 | 1055 days ago | IN | 0 ETH | 0.00340225 | ||||
Set Approval For... | 13241185 | 1209 days ago | IN | 0 ETH | 0.0023132 | ||||
Claim For Loot | 13177476 | 1219 days ago | IN | 0 ETH | 0.0285081 | ||||
Approve | 13160968 | 1222 days ago | IN | 0 ETH | 0.00275558 | ||||
Claim For Loot | 13159108 | 1222 days ago | IN | 0 ETH | 0.02194082 | ||||
Claim For Loot | 13159106 | 1222 days ago | IN | 0 ETH | 0.02318526 | ||||
Set Approval For... | 13158206 | 1222 days ago | IN | 0 ETH | 0.00406395 | ||||
Claim | 13157817 | 1222 days ago | IN | 0 ETH | 0.01995663 | ||||
Claim For Loot | 13157619 | 1222 days ago | IN | 0 ETH | 0.01868317 | ||||
Claim | 13157542 | 1222 days ago | IN | 0 ETH | 0.02234942 | ||||
Set Approval For... | 13156616 | 1222 days ago | IN | 0 ETH | 0.00542613 | ||||
Claim For Loot | 13156567 | 1222 days ago | IN | 0 ETH | 0.02135855 | ||||
Claim For Loot | 13156353 | 1222 days ago | IN | 0 ETH | 0.02812532 | ||||
Claim For Loot | 13156333 | 1222 days ago | IN | 0 ETH | 0.03060313 | ||||
Set Approval For... | 13155560 | 1222 days ago | IN | 0 ETH | 0.00594154 | ||||
Claim For Loot | 13154828 | 1223 days ago | IN | 0 ETH | 0.03980723 | ||||
Claim For Loot | 13154826 | 1223 days ago | IN | 0 ETH | 0.03884542 | ||||
Claim For Loot | 13154823 | 1223 days ago | IN | 0 ETH | 0.03721276 | ||||
Claim For Loot | 13154823 | 1223 days ago | IN | 0 ETH | 0.03624364 | ||||
Claim For Loot | 13154753 | 1223 days ago | IN | 0 ETH | 0.02788444 | ||||
Claim For Loot | 13154724 | 1223 days ago | IN | 0 ETH | 0.02319765 | ||||
Set Approval For... | 13154400 | 1223 days ago | IN | 0 ETH | 0.00563156 | ||||
Set Approval For... | 13154285 | 1223 days ago | IN | 0 ETH | 0.0077698 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Spells
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-03 */ // SPDX-License-Identifier: MIT 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); } /** * @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; } /** * @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); } } /* * @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; } } /** * @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); } } /** * @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 make 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; } } /** * @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); } /** * @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); } /** * @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); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private 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); } } } } /** * @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; } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.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); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 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); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @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. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).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; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } /** * @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); } /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } pragma solidity ^0.8.0; contract Spells is ERC721Enumerable, Ownable, ReentrancyGuard { uint256 public mintPrice = 10000000000000000; ///0.01 ETH address public devAddress = 0xbEd7F034C2F5F353484c26415EC98CA1e3efB067; function withdraw() public { require(msg.sender == devAddress, 'Must be Dev to withdraw ETH'); uint balance = address(this).balance; payable(msg.sender).transfer(balance); } ERC721 loot = ERC721(0xFF9C1b15B16263C61d017ee9F65C50e4AE0113D7); string[] private spellWord0 = [ "Pyro", "Aqua", "Aero", "Terra", "Holy", "Dark", "Cosmos", "Chrono", "Electro", "Cryo", "Toxic", "Chloro", "Lava", "Psyco", "Metal", "Vibra", "Blood", "Aether", "Nether", "Sacrosaint", "Time Dialation", "Corruption", "Nighmare", "illusion" "Sound" ]; string[] private spellWord1 = [ "Strike", "Storm", "Meld", "Orb", "Blast", "Aura", "Blitz", "Disruption", "Hex", "Obliteration", "Strength", "Flash", "Wave", "Blackout", "Blade", "Lash", "Seal", "Bane", "Typhoon", "Curse", "Salvo", "Decimation", "Fear", "Absolution", "Bolt" "Strength", "Nightmare", "Whip", "Hail", "Assult", "Prophecy", "Charm", "Hope", "Spike", "Tempest" ]; string[] private spellWord2 = [ "Tempehold", "Cloudrun", "Huricus", "Triterem", "Lerttaeis", "Doyzenuras", "Aesgiert", "Lu-in", "Vogorit", "Sa Dezo", "Mundorrock", "Banmisssat", "Zimahal", "Pindasat", "Zionasill", "Ulitar", "Terulla", "Ismadrum" "Panthor", "Nionamar" "Synthala", "Lizbola", "Mongolira", "Rondulora", "Holosama", "Naphila", "Calular", "Vamlulla", "Gamquilar", "Dinmandar", "Dinfroros", "Riplulla", "Tilmundor" ]; string[] private actions = [ "Heal", "Guard", "Bloom", "Freeze", "Blackout", "Binding", "Touch", "Defense", "Charm", "Teleport", "Drain", "Float", "Sheild", "Web", "Knock", "Sleep", "Mirror", "Detect", "Trap", "Paralyse", "Resist Magic", "Speed", "Cure", "Flight", "Enfeeble", "Light", "Detect" ]; string[] private rareActions = [ "Reanimate dead with Blood of the Fallen", "Strengthened Radience of Light", "Toxic Blight Monsoon ", "Summon Frozen Tundra", "Time dialation Repeated Distruction", "Metal Hail with Motlen Sundering" ]; constructor() ERC721("Spells (for Adventurers)", "SPELLS") Ownable() {} function claim(uint256 tokenId) public nonReentrant { require(tokenId > 8000 && tokenId < 10001, "Token ID invalid"); _safeMint(_msgSender(), tokenId); _safeMint(_msgSender(), tokenId + 10000); } function claimForLoot(uint256 tokenId) public nonReentrant { require(tokenId > 0 && tokenId < 8001, "Token ID invalid"); require(loot.ownerOf(tokenId) == msg.sender, "Not Loot owner"); _safeMint(_msgSender(), tokenId); _safeMint(_msgSender(), tokenId + 10000); } function getSpellName(uint256 tokenId) public view returns (string memory) { require(tokenId < 10001, "Token ID invalid"); string[3] memory parts; uint256 rand0 = random(string(abi.encodePacked(toString(tokenId), "0"))); parts[0] = spellWord0[rand0 % spellWord0.length]; uint256 rand1 = random(string(abi.encodePacked(toString(tokenId), "1"))); parts[1] = spellWord1[rand1 % spellWord1.length]; uint256 rand2 = random(string(abi.encodePacked(toString(tokenId), "2"))); parts[2] = spellWord2[rand2 % spellWord2.length]; return string(abi.encodePacked(parts[0], " ", parts[1], " ", " Tomb of ", parts[2])); } function getSpellActions(uint256 tokenId) public view returns (string[4] memory) { string[4] memory spellActions; uint256 rand1 = random(string(abi.encodePacked(toString(tokenId), "1"))); if (rand1 % 21 == 0) { spellActions[0] = rareActions[rand1 % rareActions.length]; } else { spellActions[0] = actions[rand1 % actions.length]; } uint256 rand2 = random(string(abi.encodePacked(toString(tokenId), "2"))); if (rand2 % 21 == 0) { spellActions[1] = rareActions[rand2 % rareActions.length]; } else { spellActions[1] = actions[rand2 % actions.length]; } uint256 rand3 = random(string(abi.encodePacked(toString(tokenId), "3"))); if (rand3 % 21 == 0) { spellActions[2] = rareActions[rand3 % rareActions.length]; } else { spellActions[2] = actions[rand3 % actions.length]; } uint256 rand4 = random(string(abi.encodePacked(toString(tokenId), "4"))); if (rand4 % 21 == 0) { spellActions[3] = rareActions[rand4 % rareActions.length]; } else { spellActions[3] = actions[rand4 % actions.length]; } return spellActions; } function getAction(uint256 tokenId) public view returns (string memory) { uint256 rand = random(string(toString(tokenId))); if (rand % 21 == 0) { return rareActions[rand % rareActions.length]; } else { return actions[rand % actions.length]; } } function tokenURI(uint256 tokenId) override public view returns (string memory) { if (tokenId < 10001) { return spellTokenUri(tokenId); } else { return actionTokenUri(tokenId); } } function random(string memory input) internal pure returns (uint256) { return uint256(keccak256(abi.encodePacked(input))); } function spellTokenUri(uint256 tokenId) internal view returns (string memory) { string[4] memory spellActions = getSpellActions(tokenId); string[11] memory parts; parts[0] = '<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 350 350"><style>.base { fill: white; font-family: serif; font-size: 14px; }</style><rect width="100%" height="100%" fill="black" /><text x="10" y="20" class="base" text-decoration="underline">'; parts[1] = getSpellName(tokenId); parts[2] = '</text><text x="10" y="40" class="base">'; parts[3] = spellActions[0]; parts[4] = '</text><text x="10" y="60" class="base">'; parts[5] = spellActions[1]; parts[6] = '</text><text x="10" y="80" class="base">'; parts[7] = spellActions[2]; parts[8] = '</text><text x="10" y="100" class="base">'; parts[9] = spellActions[3]; parts[10] = '</text></svg>'; string memory output = string(abi.encodePacked(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5], parts[6], parts[7], parts[8])); output = string(abi.encodePacked(output, parts[9], parts[10])); string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "Tomb: ', parts[1], '", "description": "Spells for Adventurers is extension for Loot for Adventurers.", "attributes": [ { "trait_type": "Spell 1", "value": "', spellActions[0], '" }, { "trait_type": "Spell 2", "value": "', spellActions[1], '" }, { "trait_type": "Spell 3", "value": "', spellActions[2], '" }, { "trait_type": "Spell 4", "value": "', spellActions[3], '" } ], "image": "data:image/svg+xml;base64,', Base64.encode(bytes(output)), '"}')))); output = string(abi.encodePacked('data:application/json;base64,', json)); return output; } function actionTokenUri(uint256 tokenId) internal view returns (string memory) { string[3] memory parts; parts[0] = '<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 350 350"><style>.base { fill: black; font-family: serif; font-size: 14px; }</style><rect width="100%" height="100%" fill="white" /><text x="10" y="20" class="base">'; parts[1] = getAction(tokenId); parts[2] = '</text></svg>'; string memory output = string(abi.encodePacked(parts[0], parts[1], parts[2])); string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "Spell: ', parts[1], '", "description": "Spells for Adventurers is extension for Loot for Adventurers, random spells generated and stored on chain.", "attributes": [ { "trait_type": "Spell Type", "value": "', parts[1], '" } ], "image": "data:image/svg+xml;base64,', Base64.encode(bytes(output)), '"}')))); output = string(abi.encodePacked('data:application/json;base64,', json)); return output; } /** * @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); } } /// [MIT License] /// @title Base64 /// @notice Provides a function for encoding some bytes in base64 /// @author Brecht Devos <[email protected]> library Base64 { bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /// @notice Encodes some bytes to the base64 representation function encode(bytes memory data) internal pure returns (string memory) { uint256 len = data.length; if (len == 0) return ""; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((len + 2) / 3); // Add some extra buffer at the end bytes memory result = new bytes(encodedLen + 32); bytes memory table = TABLE; assembly { let tablePtr := add(table, 1) let resultPtr := add(result, 32) for { let i := 0 } lt(i, len) { } { i := add(i, 3) let input := and(mload(add(data, i)), 0xffffff) let out := mload(add(tablePtr, and(shr(18, input), 0x3F))) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF)) out := shl(224, out) mstore(resultPtr, out) resultPtr := add(resultPtr, 4) } switch mod(len, 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } mstore(result, encodedLen) } return string(result); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claimForLoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getAction","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getSpellActions","outputs":[{"internalType":"string[4]","name":"","type":"string[4]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getSpellName","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","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":"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":"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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","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":"","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":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
662386f26fc10000600c55600d80546001600160a01b031990811673bed7f034c2f5f353484c26415ec98ca1e3efb067178255600e805490911673ff9c1b15b16263c61d017ee9f65c50e4ae0113d71781556004610380818152635079726f60e01b6103a05260809081526103c0828152634171756160e01b6103e05260a052610400828152634165726f60e01b6104205260c052600561044081815264546572726160d81b6104605260e05261048083815263486f6c7960e01b6104a052610100526104c0838152634461726b60e01b6104e05261012052600661050081815265436f736d6f7360d01b6105205261014052610540818152654368726f6e6f60d01b6105605261016052600761058090815266456c656374726f60c81b6105a052610180526105c0848152634372796f60e01b6105e0526101a05261060082815264546f78696360d81b610620526101c0526106408181526543686c6f726f60d01b610660526101e052610680938452634c61766160e01b6106a052610200939093526106c081815264507379636f60d81b6106e052610220526107008181526413595d185b60da1b610720526102405261074081815264566962726160d81b610760526102605261078090815264109b1bdbd960da1b6107a052610280526107c08281526520b2ba3432b960d11b6107e0526102a052610800918252652732ba3432b960d11b610820526102c091909152600a6108408181526914d858dc9bdcd85a5b9d60b21b610860526102e0526108809283526d2a34b6b2902234b0b630ba34b7b760911b6108a052610300929092526108c09182526921b7b9393ab83a34b7b760b11b6108e052610320919091526008610900908152674e6967686d61726560c01b61092052610340526109806040526109409182526c1a5b1b1d5cda5bdb94dbdd5b99609a1b6109605261036091909152620002c690600f906018620010c4565b5060408051610480810182526006610440820181815265537472696b6560d01b61046084015282528251808401845260058082526453746f726d60d81b602083810191909152808501929092528451808601865260048082526313595b1960e21b82850152858701919091528551808701875260038082526227b93160e91b8286015260608701919091528651808801885283815264109b185cdd60da1b81860152608087015286518088018852828152634175726160e01b8186015260a08701528651808801885283815264213634ba3d60d91b8186015260c087015286518088018852600a808252692234b9b93ab83a34b7b760b11b8287015260e08801919091528751808901895291825262090caf60eb1b8286015261010087019190915286518088018852600c8082526b27b13634ba32b930ba34b7b760a11b82870152610120880191909152875180890189526008808252670a6e8e4cadccee8d60c31b828801526101408901919091528851808a018a528581526408cd8c2e6d60db1b818801526101608901528851808a018a52848152635761766560e01b818801526101808901528851808a018a5281815267109b1858dadbdd5d60c21b818801526101a08901528851808a018a5285815264426c61646560d81b818801526101c08901528851808a018a5284815263098c2e6d60e31b818801526101e08901528851808a018a528481526314d9585b60e21b818801526102008901528851808a018a528481526342616e6560e01b818801526102208901528851808a018a526007808252662a3cb83437b7b760c91b828901526102408a01919091528951808b018b5286815264437572736560d81b818901526102608a01528951808b018b528681526453616c766f60d81b818901526102808a01528951808b018b52848152692232b1b4b6b0ba34b7b760b11b818901526102a08a01528951808b018b52858152632332b0b960e11b818901526102c08a01528951808b018b529384526920b139b7b63aba34b7b760b11b848801526102e08901939093528851808a018a529182526b084ded8e8a6e8e4cadccee8d60a31b828701526103008801919091528751808901895260098152684e696768746d61726560b81b8187015261032088015287518089018952838152630576869760e41b81870152610340880152875180890189528381526312185a5b60e21b818701526103608801528751808901895295865265105cdcdd5b1d60d21b86860152610380870195909552865180880188529485526750726f706865637960c01b858501526103a08601949094528551808701875282815264436861726d60d81b818501526103c08601528551808701875290815263486f706560e01b818401526103e085015284518086018652908152645370696b6560d81b8183015261040084015283518085019094529083526615195b5c195cdd60ca1b908301526104208101919091526200070f90601090602262001128565b50604080516104208101825260096103e082018181526815195b5c195a1bdb1960ba1b61040084015282528251808401845260088082526721b637bab2393ab760c11b60208381019190915280850192909252845180860186526007808252664875726963757360c81b82850152858701919091528551808701875282815267547269746572656d60c01b81850152606086015285518087018752848152684c657274746165697360b81b81850152608086015285518087018752600a80825269446f797a656e7572617360b01b8286015260a0870191909152865180880188528381526710595cd9da595c9d60c21b8186015260c0870152865180880188526005815264263a96b4b760d91b8186015260e08701528651808801885282815266159bd9dbdc9a5d60ca1b81860152610100870152865180880188528281526653612044657a6f60c81b8186015261012087015286518088018852818152694d756e646f72726f636b60b01b81860152610140870152865180880188529081526910985b9b5a5cdcdcd85d60b21b818501526101608601528551808701875281815266169a5b585a185b60ca1b818501526101808601528551808701875282815267141a5b99185cd85d60c21b818501526101a08601528551808701875284815268169a5bdb985cda5b1b60ba1b818501526101c08601528551808701875260068152652ab634ba30b960d11b818501526101e08601528551808701875281815266546572756c6c6160c81b8185015261020086015285518087018752600f81526e24b9b6b0b2393ab6a830b73a3437b960891b8185015261022086015285518087018752601081526f4e696f6e616d617253796e7468616c6160801b8185015261024086015285518087018752818152664c697a626f6c6160c81b8185015261026086015285518087018752848152684d6f6e676f6c69726160b81b818501526102808601528551808701875284815268526f6e64756c6f726160b81b818501526102a08601528551808701875282815267486f6c6f73616d6160c01b818501526102c086015285518087018752818152664e617068696c6160c81b818501526102e0860152855180870187529081526621b0b63ab630b960c91b81840152610300850152845180860186528181526756616d6c756c6c6160c01b81840152610320850152845180860186528381526823b0b6b8bab4b630b960b91b8184015261034085015284518086018652838152682234b736b0b73230b960b91b81840152610360850152845180860186528381526844696e66726f726f7360b81b8184015261038085015284518086018652908152675269706c756c6c6160c01b818301526103a08401528351808501909452908352682a34b636bab73237b960b91b908301526103c081019190915262000b2d90601190601f6200117a565b50604080516103a08101825260046103608201818152631219585b60e21b61038084015282528251808401845260058082526411dd585c9960da1b602083810191909152808501929092528451808601865281815264426c6f6f6d60d81b818401528486015284518086018652600680825265467265657a6560d01b82850152606086019190915285518087018752600880825267109b1858dadbdd5d60c21b8286015260808701919091528651808801885260078082526642696e64696e6760c81b8287015260a088019190915287518089018952848152640a8deeac6d60db1b8187015260c08801528751808901895290815266446566656e736560c81b8186015260e08701528651808801885283815264436861726d60d81b81860152610100870152865180880188528181526715195b195c1bdc9d60c21b818601526101208701528651808801885283815264223930b4b760d91b818601526101408701528651808801885283815264119b1bd85d60da1b81860152610160870152865180880188528281526514da195a5b1960d21b818601526101808701528651808801885260038152622bb2b160e91b818601526101a087015286518088018852838152644b6e6f636b60d81b818601526101c087015286518088018852838152640536c6565760dc1b818601526101e0870152865180880188528281526526b4b93937b960d11b81860152610200870152865180880188528281526511195d1958dd60d21b81860181905261022088019190915287518089018952868152630547261760e41b818701526102408801528751808901895282815267506172616c79736560c01b8187015261026088015287518089018952600c81526b526573697374204d6167696360a01b81870152610280880152875180890189528481526414dc19595960da1b818701526102a088015287518089018952958652634375726560e01b868601526102c08701959095528651808801885282815265119b1a59da1d60d21b818601526102e08701528651808801885290815267456e666565626c6560c01b818501526103008601528551808701875291825264131a59da1d60da1b828401526103208501919091528451808601909552845283015261034081019190915262000e8390601290601b620011cc565b50604080516101208101909152602760c08201818152829162004a3f60e084013981526020016040518060400160405280601e81526020017f537472656e677468656e65642052616469656e6365206f66204c69676874000081525081526020016040518060400160405280601581526020017f546f78696320426c69676874204d6f6e736f6f6e20000000000000000000000081525081526020016040518060400160405280601481526020017f53756d6d6f6e2046726f7a656e2054756e647261000000000000000000000000815250815260200160405180606001604052806023815260200162004a666023913981526040805180820190915260208082527f4d6574616c204861696c2077697468204d6f746c656e2053756e646572696e67828201529091015262000fbe9060139060066200121e565b5034801562000fcc57600080fd5b50604080518082018252601881527f5370656c6c732028666f7220416476656e7475726572732900000000000000006020808301918252835180850190945260068452655350454c4c5360d01b908401528151919291620010309160009162001270565b5080516200104690600190602084019062001270565b505050620010636200105d6200106e60201b60201c565b62001072565b6001600b55620013b2565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805482825590600052602060002090810192821562001116579160200282015b828111156200111657825180516200110591849160209091019062001270565b5091602001919060010190620010e5565b5062001124929150620012fb565b5090565b82805482825590600052602060002090810192821562001116579160200282015b828111156200111657825180516200116991849160209091019062001270565b509160200191906001019062001149565b82805482825590600052602060002090810192821562001116579160200282015b82811115620011165782518051620011bb91849160209091019062001270565b50916020019190600101906200119b565b82805482825590600052602060002090810192821562001116579160200282015b828111156200111657825180516200120d91849160209091019062001270565b5091602001919060010190620011ed565b82805482825590600052602060002090810192821562001116579160200282015b828111156200111657825180516200125f91849160209091019062001270565b50916020019190600101906200123f565b8280546200127e9062001375565b90600052602060002090601f016020900481019282620012a25760008555620012ed565b82601f10620012bd57805160ff1916838001178555620012ed565b82800160010185558215620012ed579182015b82811115620012ed578251825591602001919060010190620012d0565b50620011249291506200131c565b808211156200112457600062001312828262001333565b50600101620012fb565b5b808211156200112457600081556001016200131d565b508054620013419062001375565b6000825580601f1062001352575050565b601f0160209004906000526020600020908101906200137291906200131c565b50565b600181811c908216806200138a57607f821691505b60208210811415620013ac57634e487b7160e01b600052602260045260246000fd5b50919050565b61367d80620013c26000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636352211e116100f9578063b6e7687311610097578063dbe5813c11610071578063dbe5813c14610366578063e8a8267114610386578063e985e9c514610399578063f2fde38b146103d557600080fd5b8063b6e768731461032d578063b88d4fde14610340578063c87b56dd1461035357600080fd5b8063715018a6116100d3578063715018a6146102f95780638da5cb5b1461030157806395d89b4114610312578063a22cb4651461031a57600080fd5b80636352211e146102ca5780636817c76c146102dd57806370a08231146102e657600080fd5b80632f745c59116101665780633ccfd60b116101405780633ccfd60b1461028957806342842e0e1461029157806347d8636a146102a45780634f6ccce7146102b757600080fd5b80632f745c5914610250578063379607f5146102635780633ad10ef61461027657600080fd5b806301ffc9a7146101ae57806306fdde03146101d6578063081812fc146101eb578063095ea7b31461021657806318160ddd1461022b57806323b872dd1461023d575b600080fd5b6101c16101bc3660046129a3565b6103e8565b60405190151581526020015b60405180910390f35b6101de610413565b6040516101cd91906130e5565b6101fe6101f93660046129dd565b6104a5565b6040516001600160a01b0390911681526020016101cd565b610229610224366004612977565b61053f565b005b6008545b6040519081526020016101cd565b61022961024b366004612823565b610655565b61022f61025e366004612977565b610686565b6102296102713660046129dd565b61071c565b600d546101fe906001600160a01b031681565b6102296107c9565b61022961029f366004612823565b610856565b6102296102b23660046129dd565b610871565b61022f6102c53660046129dd565b6109b8565b6101fe6102d83660046129dd565b610a4b565b61022f600c5481565b61022f6102f43660046127a9565b610ac2565b610229610b49565b600a546001600160a01b03166101fe565b6101de610baf565b610229610328366004612944565b610bbe565b6101de61033b3660046129dd565b610c83565b61022961034e366004612864565b610d76565b6101de6103613660046129dd565b610dae565b6103796103743660046129dd565b610dcc565b6040516101cd9190613098565b6101de6103943660046129dd565b611517565b6101c16103a73660046127ea565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6102296103e33660046127a9565b61181d565b60006001600160e01b0319821663780e9d6360e01b148061040d575061040d826118e8565b92915050565b60606000805461042290613253565b80601f016020809104026020016040519081016040528092919081815260200182805461044e90613253565b801561049b5780601f106104705761010080835404028352916020019161049b565b820191906000526020600020905b81548152906001019060200180831161047e57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166105235760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061054a82610a4b565b9050806001600160a01b0316836001600160a01b031614156105b85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161051a565b336001600160a01b03821614806105d457506105d481336103a7565b6106465760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161051a565b6106508383611938565b505050565b61065f33826119a6565b61067b5760405162461bcd60e51b815260040161051a90613174565b610650838383611a9d565b600061069183610ac2565b82106106f35760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161051a565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6002600b54141561076f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161051a565b6002600b55611f4081118015610786575061271181105b6107a25760405162461bcd60e51b815260040161051a9061314a565b6107ac3382611c48565b6107c1336107bc836127106131c5565b611c48565b506001600b55565b600d546001600160a01b031633146108235760405162461bcd60e51b815260206004820152601b60248201527f4d7573742062652044657620746f207769746864726177204554480000000000604482015260640161051a565b6040514790339082156108fc029083906000818181858888f19350505050158015610852573d6000803e3d6000fd5b5050565b61065083838360405180602001604052806000815250610d76565b6002600b5414156108c45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161051a565b6002600b5580158015906108d95750611f4181105b6108f55760405162461bcd60e51b815260040161051a9061314a565b600e546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e9060240160206040518083038186803b15801561093957600080fd5b505afa15801561094d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097191906127cd565b6001600160a01b0316146107a25760405162461bcd60e51b815260206004820152600e60248201526d2737ba102637b7ba1037bbb732b960911b604482015260640161051a565b60006109c360085490565b8210610a265760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161051a565b60088281548110610a3957610a396132f9565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b03168061040d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161051a565b60006001600160a01b038216610b2d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161051a565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b03163314610ba35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161051a565b610bad6000611c62565b565b60606001805461042290613253565b6001600160a01b038216331415610c175760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161051a565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60606000610c98610c9384611cb4565b611db2565b9050610ca56015826132a3565b610d625760138054610cb790836132a3565b81548110610cc757610cc76132f9565b906000526020600020018054610cdc90613253565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0890613253565b8015610d555780601f10610d2a57610100808354040283529160200191610d55565b820191906000526020600020905b815481529060010190602001808311610d3857829003601f168201915b5050505050915050919050565b60128054610cb790836132a3565b50919050565b610d8033836119a6565b610d9c5760405162461bcd60e51b815260040161051a90613174565b610da884848484611de3565b50505050565b6060612711821015610dc35761040d82611e16565b61040d82612034565b610dd461274d565b610ddc61274d565b6000610e0e610dea85611cb4565b604051602001610dfa9190612c9b565b604051602081830303815290604052611db2565b9050610e1b6015826132a3565b610eed5760138054610e2d90836132a3565b81548110610e3d57610e3d6132f9565b906000526020600020018054610e5290613253565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7e90613253565b8015610ecb5780601f10610ea057610100808354040283529160200191610ecb565b820191906000526020600020905b815481529060010190602001808311610eae57829003601f168201915b505050505082600060048110610ee357610ee36132f9565b6020020152610fb7565b60128054610efb90836132a3565b81548110610f0b57610f0b6132f9565b906000526020600020018054610f2090613253565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4c90613253565b8015610f995780601f10610f6e57610100808354040283529160200191610f99565b820191906000526020600020905b815481529060010190602001808311610f7c57829003601f168201915b505050505082600060048110610fb157610fb16132f9565b60200201525b6000610fd5610fc586611cb4565b604051602001610dfa9190612c76565b9050610fe26015826132a3565b6110b45760138054610ff490836132a3565b81548110611004576110046132f9565b90600052602060002001805461101990613253565b80601f016020809104026020016040519081016040528092919081815260200182805461104590613253565b80156110925780601f1061106757610100808354040283529160200191611092565b820191906000526020600020905b81548152906001019060200180831161107557829003601f168201915b5050505050836001600481106110aa576110aa6132f9565b602002015261117e565b601280546110c290836132a3565b815481106110d2576110d26132f9565b9060005260206000200180546110e790613253565b80601f016020809104026020016040519081016040528092919081815260200182805461111390613253565b80156111605780601f1061113557610100808354040283529160200191611160565b820191906000526020600020905b81548152906001019060200180831161114357829003601f168201915b505050505083600160048110611178576111786132f9565b60200201525b600061119c61118c87611cb4565b604051602001610dfa9190612be5565b90506111a96015826132a3565b61127b57601380546111bb90836132a3565b815481106111cb576111cb6132f9565b9060005260206000200180546111e090613253565b80601f016020809104026020016040519081016040528092919081815260200182805461120c90613253565b80156112595780601f1061122e57610100808354040283529160200191611259565b820191906000526020600020905b81548152906001019060200180831161123c57829003601f168201915b505050505084600260048110611271576112716132f9565b6020020152611345565b6012805461128990836132a3565b81548110611299576112996132f9565b9060005260206000200180546112ae90613253565b80601f01602080910402602001604051908101604052809291908181526020018280546112da90613253565b80156113275780601f106112fc57610100808354040283529160200191611327565b820191906000526020600020905b81548152906001019060200180831161130a57829003601f168201915b50505050508460026004811061133f5761133f6132f9565b60200201525b600061136361135388611cb4565b604051602001610dfa9190612bc0565b90506113706015826132a3565b611442576013805461138290836132a3565b81548110611392576113926132f9565b9060005260206000200180546113a790613253565b80601f01602080910402602001604051908101604052809291908181526020018280546113d390613253565b80156114205780601f106113f557610100808354040283529160200191611420565b820191906000526020600020905b81548152906001019060200180831161140357829003601f168201915b505050505085600360048110611438576114386132f9565b602002015261150c565b6012805461145090836132a3565b81548110611460576114606132f9565b90600052602060002001805461147590613253565b80601f01602080910402602001604051908101604052809291908181526020018280546114a190613253565b80156114ee5780601f106114c3576101008083540402835291602001916114ee565b820191906000526020600020905b8154815290600101906020018083116114d157829003601f168201915b505050505085600360048110611506576115066132f9565b60200201525b509295945050505050565b6060612711821061153a5760405162461bcd60e51b815260040161051a9061314a565b611542612774565b600061156061155085611cb4565b604051602001610dfa9190612b9b565b600f80549192509061157290836132a3565b81548110611582576115826132f9565b90600052602060002001805461159790613253565b80601f01602080910402602001604051908101604052809291908181526020018280546115c390613253565b80156116105780601f106115e557610100808354040283529160200191611610565b820191906000526020600020905b8154815290600101906020018083116115f357829003601f168201915b505050505082600060038110611628576116286132f9565b6020020152600061163b610dea86611cb4565b601080549192509061164d90836132a3565b8154811061165d5761165d6132f9565b90600052602060002001805461167290613253565b80601f016020809104026020016040519081016040528092919081815260200182805461169e90613253565b80156116eb5780601f106116c0576101008083540402835291602001916116eb565b820191906000526020600020905b8154815290600101906020018083116116ce57829003601f168201915b505050505083600160038110611703576117036132f9565b60200201526000611716610fc587611cb4565b601180549192509061172890836132a3565b81548110611738576117386132f9565b90600052602060002001805461174d90613253565b80601f016020809104026020016040519081016040528092919081815260200182805461177990613253565b80156117c65780601f1061179b576101008083540402835291602001916117c6565b820191906000526020600020905b8154815290600101906020018083116117a957829003601f168201915b5050505050846002600381106117de576117de6132f9565b6020908102919091019190915284518582015160408088015190516118039401612c0a565b604051602081830303815290604052945050505050919050565b600a546001600160a01b031633146118775760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161051a565b6001600160a01b0381166118dc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161051a565b6118e581611c62565b50565b60006001600160e01b031982166380ac58cd60e01b148061191957506001600160e01b03198216635b5e139f60e01b145b8061040d57506301ffc9a760e01b6001600160e01b031983161461040d565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061196d82610a4b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611a1f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161051a565b6000611a2a83610a4b565b9050806001600160a01b0316846001600160a01b03161480611a655750836001600160a01b0316611a5a846104a5565b6001600160a01b0316145b80611a9557506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611ab082610a4b565b6001600160a01b031614611b185760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161051a565b6001600160a01b038216611b7a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161051a565b611b85838383612111565b611b90600082611938565b6001600160a01b0383166000908152600360205260408120805460019290611bb9908490613210565b90915550506001600160a01b0382166000908152600360205260408120805460019290611be79084906131c5565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6108528282604051806020016040528060008152506121c9565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606081611cd85750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611d025780611cec81613288565b9150611cfb9050600a836131dd565b9150611cdc565b60008167ffffffffffffffff811115611d1d57611d1d61330f565b6040519080825280601f01601f191660200182016040528015611d47576020820181803683370190505b5090505b8415611a9557611d5c600183613210565b9150611d69600a866132a3565b611d749060306131c5565b60f81b818381518110611d8957611d896132f9565b60200101906001600160f81b031916908160001a905350611dab600a866131dd565b9450611d4b565b600081604051602001611dc59190612a7b565b60408051601f19818403018152919052805160209091012092915050565b611dee848484611a9d565b611dfa848484846121fc565b610da85760405162461bcd60e51b815260040161051a906130f8565b60606000611e2383610dcc565b9050611e2d61278e565b604051806101400160405280610119815260200161335161011991398152611e5484611517565b81600160200201819052506040518060600160405280602881526020016135236028913960408083019190915282516060808401919091528151908101909152602880825261346a6020830139608082015260208281015160a08301526040805160608101909152602880825290916134929083013960c082015260408083015160e083015280516060810190915260298082526134ba6020830139610100820152606082015161012082015260408051808201909152600d81526c1e17ba32bc3a1f1e17b9bb339f60991b602082015281600a602090810291909101919091528151828201516040808501516060860151608087015160a088015160c089015160e08a01516101008b0151965160009a611f729a99989101612ada565b60408051808303601f1901815290829052610120840151610140850151919350611fa192849290602001612a97565b60408051808303601f19018152918152602080850151865191870151928701516060880151949550600094612007949293929190611fde88612309565b604051602001611ff396959493929190612e20565b604051602081830303815290604052612309565b90508060405160200161201a9190613016565b60408051601f198184030181529190529695505050505050565b606061203e612774565b60405180610120016040528060fd815260200161354b60fd9139815261206383610c83565b6020828101918252604080518082018252600d81526c1e17ba32bc3a1f1e17b9bb339f60991b818401528185018190528451935191516000946120aa949093929101612a97565b60408051808303601f1901815291905260208301519091506000906120e590806120d385612309565b604051602001611ff393929190612cc0565b9050806040516020016120f89190613016565b60408051601f1981840301815291905295945050505050565b6001600160a01b03831661216c5761216781600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b61218f565b816001600160a01b0316836001600160a01b03161461218f5761218f838261246f565b6001600160a01b0382166121a6576106508161250c565b826001600160a01b0316826001600160a01b0316146106505761065082826125bb565b6121d383836125ff565b6121e060008484846121fc565b6106505760405162461bcd60e51b815260040161051a906130f8565b60006001600160a01b0384163b156122fe57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061224090339089908890889060040161305b565b602060405180830381600087803b15801561225a57600080fd5b505af192505050801561228a575060408051601f3d908101601f19168201909252612287918101906129c0565b60015b6122e4573d8080156122b8576040519150601f19603f3d011682016040523d82523d6000602084013e6122bd565b606091505b5080516122dc5760405162461bcd60e51b815260040161051a906130f8565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611a95565b506001949350505050565b805160609080612329575050604080516020810190915260008152919050565b600060036123388360026131c5565b61234291906131dd565b61234d9060046131f1565b9050600061235c8260206131c5565b67ffffffffffffffff8111156123745761237461330f565b6040519080825280601f01601f19166020018201604052801561239e576020820181803683370190505b50905060006040518060600160405280604081526020016134e3604091399050600181016020830160005b8681101561242a576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b8352600490920191016123c9565b506003860660018114612444576002811461245557612461565b613d3d60f01b600119830152612461565b603d60f81b6000198301525b505050918152949350505050565b6000600161247c84610ac2565b6124869190613210565b6000838152600760205260409020549091508082146124d9576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061251e90600190613210565b60008381526009602052604081205460088054939450909284908110612546576125466132f9565b906000526020600020015490508060088381548110612567576125676132f9565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061259f5761259f6132e3565b6001900381819060005260206000200160009055905550505050565b60006125c683610ac2565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166126555760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161051a565b6000818152600260205260409020546001600160a01b0316156126ba5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161051a565b6126c660008383612111565b6001600160a01b03821660009081526003602052604081208054600192906126ef9084906131c5565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60405180608001604052806004905b606081526020019060019003908161275c5790505090565b60408051606080820190925290815260026020820161275c565b60408051610160810190915260608152600a6020820161275c565b6000602082840312156127bb57600080fd5b81356127c681613325565b9392505050565b6000602082840312156127df57600080fd5b81516127c681613325565b600080604083850312156127fd57600080fd5b823561280881613325565b9150602083013561281881613325565b809150509250929050565b60008060006060848603121561283857600080fd5b833561284381613325565b9250602084013561285381613325565b929592945050506040919091013590565b6000806000806080858703121561287a57600080fd5b843561288581613325565b9350602085013561289581613325565b925060408501359150606085013567ffffffffffffffff808211156128b957600080fd5b818701915087601f8301126128cd57600080fd5b8135818111156128df576128df61330f565b604051601f8201601f19908116603f011681019083821181831017156129075761290761330f565b816040528281528a602084870101111561292057600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561295757600080fd5b823561296281613325565b91506020830135801515811461281857600080fd5b6000806040838503121561298a57600080fd5b823561299581613325565b946020939093013593505050565b6000602082840312156129b557600080fd5b81356127c68161333a565b6000602082840312156129d257600080fd5b81516127c68161333a565b6000602082840312156129ef57600080fd5b5035919050565b60008151808452612a0e816020860160208601613227565b601f01601f19169290920160200192915050565b60008151612a34818560208601613227565b9290920192915050565b7f22207d205d2c2022696d616765223a2022646174613a696d6167652f7376672b81526a1e1b5b0ed8985cd94d8d0b60aa1b6020820152602b0190565b60008251612a8d818460208701613227565b9190910192915050565b60008451612aa9818460208901613227565b845190830190612abd818360208901613227565b8451910190612ad0818360208801613227565b0195945050505050565b60008a51612aec818460208f01613227565b8a51612afe8183860160208f01613227565b8a519184010190612b13818360208e01613227565b8951612b258183850160208e01613227565b8951929091010190612b3b818360208c01613227565b8751612b4d8183850160208c01613227565b8751929091010190612b63818360208a01613227565b8551612b758183850160208a01613227565b8551929091010190612b8b818360208801613227565b019b9a5050505050505050505050565b60008251612bad818460208701613227565b600360fc1b920191825250600101919050565b60008251612bd2818460208701613227565b600d60fa1b920191825250600101919050565b60008251612bf7818460208701613227565b603360f81b920191825250600101919050565b60008451612c1c818460208901613227565b8083019050600160fd1b8082528551612c3c816001850160208a01613227565b6001920191820152680102a37b6b11037b3160bd1b60028201528351612c6981600b840160208801613227565b01600b0195945050505050565b60008251612c88818460208701613227565b601960f91b920191825250600101919050565b60008251612cad818460208701613227565b603160f81b920191825250600101919050565b7003d913730b6b2911d101129b832b6361d1607d1b81528351600090612ced816011850160208901613227565b7f222c20226465736372697074696f6e223a20225370656c6c7320666f722041646011918401918201527f76656e74757265727320697320657874656e73696f6e20666f72204c6f6f742060318201527f666f7220416476656e7475726572732c2072616e646f6d207370656c6c73206760518201527f656e65726174656420616e642073746f726564206f6e20636861696e2e222c2060718201527f2261747472696275746573223a205b207b202274726169745f74797065223a2060918201527f225370656c6c2054797065222c202276616c7565223a2022000000000000000060b18201528451612de88160c9840160208901613227565b612df660c982840101612a3e565b9150508351612e09818360208801613227565b61227d60f01b910190815260020195945050505050565b6f03d913730b6b2911d10112a37b6b11d160851b81528651600090612e4c816010850160208c01613227565b7f222c20226465736372697074696f6e223a20225370656c6c7320666f722041646010918401918201527f76656e74757265727320697320657874656e73696f6e20666f72204c6f6f742060308201527f666f7220416476656e7475726572732e222c202261747472696275746573223a60508201527f205b207b202274726169745f74797065223a20225370656c6c2031222c20227660708201526730b63ab2911d101160c11b60908201528751612f0c816098840160208c01613227565b7f22207d2c207b202274726169745f74797065223a20225370656c6c2032222c206098929091019182015269113b30b63ab2911d101160b11b60b8820152613009612ffb612ff5612ff0612fea612fae612fa8612f6c60c289018f612a22565b7f22207d2c207b202274726169745f74797065223a20225370656c6c2033222c20815269113b30b63ab2911d101160b11b6020820152602a0190565b8c612a22565b7f22207d2c207b202274726169745f74797065223a20225370656c6c2034222c20815269113b30b63ab2911d101160b11b6020820152602a0190565b89612a22565b612a3e565b86612a22565b61227d60f01b815260020190565b9998505050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161304e81601d850160208701613227565b91909101601d0192915050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061308e908301846129f6565b9695505050505050565b602080825260009060a0830183820185845b60048110156130d957601f198785030183526130c78483516129f6565b935091840191908401906001016130aa565b50919695505050505050565b6020815260006127c660208301846129f6565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526010908201526f151bdad95b881251081a5b9d985b1a5960821b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156131d8576131d86132b7565b500190565b6000826131ec576131ec6132cd565b500490565b600081600019048311821515161561320b5761320b6132b7565b500290565b600082821015613222576132226132b7565b500390565b60005b8381101561324257818101518382015260200161322a565b83811115610da85750506000910152565b600181811c9082168061326757607f821691505b60208210811415610d7057634e487b7160e01b600052602260045260246000fd5b600060001982141561329c5761329c6132b7565b5060010190565b6000826132b2576132b26132cd565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146118e557600080fd5b6001600160e01b0319811681146118e557600080fdfe3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c7465787420783d2231302220793d2232302220636c6173733d22626173652220746578742d6465636f726174696f6e3d22756e6465726c696e65223e3c2f746578743e3c7465787420783d2231302220793d2236302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d2238302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223130302220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c2f746578743e3c7465787420783d2231302220793d2234302220636c6173733d2262617365223e3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a20626c61636b3b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22776869746522202f3e3c7465787420783d2231302220793d2232302220636c6173733d2262617365223ea2646970667358221220bf14afff97ad26f72bc352cd9aa07aa8216a1997f861eb683b69f82dccad900f64736f6c634300080700335265616e696d6174652064656164207769746820426c6f6f64206f66207468652046616c6c656e54696d65206469616c6174696f6e205265706561746564204469737472756374696f6e
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101a95760003560e01c80636352211e116100f9578063b6e7687311610097578063dbe5813c11610071578063dbe5813c14610366578063e8a8267114610386578063e985e9c514610399578063f2fde38b146103d557600080fd5b8063b6e768731461032d578063b88d4fde14610340578063c87b56dd1461035357600080fd5b8063715018a6116100d3578063715018a6146102f95780638da5cb5b1461030157806395d89b4114610312578063a22cb4651461031a57600080fd5b80636352211e146102ca5780636817c76c146102dd57806370a08231146102e657600080fd5b80632f745c59116101665780633ccfd60b116101405780633ccfd60b1461028957806342842e0e1461029157806347d8636a146102a45780634f6ccce7146102b757600080fd5b80632f745c5914610250578063379607f5146102635780633ad10ef61461027657600080fd5b806301ffc9a7146101ae57806306fdde03146101d6578063081812fc146101eb578063095ea7b31461021657806318160ddd1461022b57806323b872dd1461023d575b600080fd5b6101c16101bc3660046129a3565b6103e8565b60405190151581526020015b60405180910390f35b6101de610413565b6040516101cd91906130e5565b6101fe6101f93660046129dd565b6104a5565b6040516001600160a01b0390911681526020016101cd565b610229610224366004612977565b61053f565b005b6008545b6040519081526020016101cd565b61022961024b366004612823565b610655565b61022f61025e366004612977565b610686565b6102296102713660046129dd565b61071c565b600d546101fe906001600160a01b031681565b6102296107c9565b61022961029f366004612823565b610856565b6102296102b23660046129dd565b610871565b61022f6102c53660046129dd565b6109b8565b6101fe6102d83660046129dd565b610a4b565b61022f600c5481565b61022f6102f43660046127a9565b610ac2565b610229610b49565b600a546001600160a01b03166101fe565b6101de610baf565b610229610328366004612944565b610bbe565b6101de61033b3660046129dd565b610c83565b61022961034e366004612864565b610d76565b6101de6103613660046129dd565b610dae565b6103796103743660046129dd565b610dcc565b6040516101cd9190613098565b6101de6103943660046129dd565b611517565b6101c16103a73660046127ea565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6102296103e33660046127a9565b61181d565b60006001600160e01b0319821663780e9d6360e01b148061040d575061040d826118e8565b92915050565b60606000805461042290613253565b80601f016020809104026020016040519081016040528092919081815260200182805461044e90613253565b801561049b5780601f106104705761010080835404028352916020019161049b565b820191906000526020600020905b81548152906001019060200180831161047e57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166105235760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061054a82610a4b565b9050806001600160a01b0316836001600160a01b031614156105b85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161051a565b336001600160a01b03821614806105d457506105d481336103a7565b6106465760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161051a565b6106508383611938565b505050565b61065f33826119a6565b61067b5760405162461bcd60e51b815260040161051a90613174565b610650838383611a9d565b600061069183610ac2565b82106106f35760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161051a565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6002600b54141561076f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161051a565b6002600b55611f4081118015610786575061271181105b6107a25760405162461bcd60e51b815260040161051a9061314a565b6107ac3382611c48565b6107c1336107bc836127106131c5565b611c48565b506001600b55565b600d546001600160a01b031633146108235760405162461bcd60e51b815260206004820152601b60248201527f4d7573742062652044657620746f207769746864726177204554480000000000604482015260640161051a565b6040514790339082156108fc029083906000818181858888f19350505050158015610852573d6000803e3d6000fd5b5050565b61065083838360405180602001604052806000815250610d76565b6002600b5414156108c45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161051a565b6002600b5580158015906108d95750611f4181105b6108f55760405162461bcd60e51b815260040161051a9061314a565b600e546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e9060240160206040518083038186803b15801561093957600080fd5b505afa15801561094d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097191906127cd565b6001600160a01b0316146107a25760405162461bcd60e51b815260206004820152600e60248201526d2737ba102637b7ba1037bbb732b960911b604482015260640161051a565b60006109c360085490565b8210610a265760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161051a565b60088281548110610a3957610a396132f9565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b03168061040d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161051a565b60006001600160a01b038216610b2d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161051a565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b03163314610ba35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161051a565b610bad6000611c62565b565b60606001805461042290613253565b6001600160a01b038216331415610c175760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161051a565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60606000610c98610c9384611cb4565b611db2565b9050610ca56015826132a3565b610d625760138054610cb790836132a3565b81548110610cc757610cc76132f9565b906000526020600020018054610cdc90613253565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0890613253565b8015610d555780601f10610d2a57610100808354040283529160200191610d55565b820191906000526020600020905b815481529060010190602001808311610d3857829003601f168201915b5050505050915050919050565b60128054610cb790836132a3565b50919050565b610d8033836119a6565b610d9c5760405162461bcd60e51b815260040161051a90613174565b610da884848484611de3565b50505050565b6060612711821015610dc35761040d82611e16565b61040d82612034565b610dd461274d565b610ddc61274d565b6000610e0e610dea85611cb4565b604051602001610dfa9190612c9b565b604051602081830303815290604052611db2565b9050610e1b6015826132a3565b610eed5760138054610e2d90836132a3565b81548110610e3d57610e3d6132f9565b906000526020600020018054610e5290613253565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7e90613253565b8015610ecb5780601f10610ea057610100808354040283529160200191610ecb565b820191906000526020600020905b815481529060010190602001808311610eae57829003601f168201915b505050505082600060048110610ee357610ee36132f9565b6020020152610fb7565b60128054610efb90836132a3565b81548110610f0b57610f0b6132f9565b906000526020600020018054610f2090613253565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4c90613253565b8015610f995780601f10610f6e57610100808354040283529160200191610f99565b820191906000526020600020905b815481529060010190602001808311610f7c57829003601f168201915b505050505082600060048110610fb157610fb16132f9565b60200201525b6000610fd5610fc586611cb4565b604051602001610dfa9190612c76565b9050610fe26015826132a3565b6110b45760138054610ff490836132a3565b81548110611004576110046132f9565b90600052602060002001805461101990613253565b80601f016020809104026020016040519081016040528092919081815260200182805461104590613253565b80156110925780601f1061106757610100808354040283529160200191611092565b820191906000526020600020905b81548152906001019060200180831161107557829003601f168201915b5050505050836001600481106110aa576110aa6132f9565b602002015261117e565b601280546110c290836132a3565b815481106110d2576110d26132f9565b9060005260206000200180546110e790613253565b80601f016020809104026020016040519081016040528092919081815260200182805461111390613253565b80156111605780601f1061113557610100808354040283529160200191611160565b820191906000526020600020905b81548152906001019060200180831161114357829003601f168201915b505050505083600160048110611178576111786132f9565b60200201525b600061119c61118c87611cb4565b604051602001610dfa9190612be5565b90506111a96015826132a3565b61127b57601380546111bb90836132a3565b815481106111cb576111cb6132f9565b9060005260206000200180546111e090613253565b80601f016020809104026020016040519081016040528092919081815260200182805461120c90613253565b80156112595780601f1061122e57610100808354040283529160200191611259565b820191906000526020600020905b81548152906001019060200180831161123c57829003601f168201915b505050505084600260048110611271576112716132f9565b6020020152611345565b6012805461128990836132a3565b81548110611299576112996132f9565b9060005260206000200180546112ae90613253565b80601f01602080910402602001604051908101604052809291908181526020018280546112da90613253565b80156113275780601f106112fc57610100808354040283529160200191611327565b820191906000526020600020905b81548152906001019060200180831161130a57829003601f168201915b50505050508460026004811061133f5761133f6132f9565b60200201525b600061136361135388611cb4565b604051602001610dfa9190612bc0565b90506113706015826132a3565b611442576013805461138290836132a3565b81548110611392576113926132f9565b9060005260206000200180546113a790613253565b80601f01602080910402602001604051908101604052809291908181526020018280546113d390613253565b80156114205780601f106113f557610100808354040283529160200191611420565b820191906000526020600020905b81548152906001019060200180831161140357829003601f168201915b505050505085600360048110611438576114386132f9565b602002015261150c565b6012805461145090836132a3565b81548110611460576114606132f9565b90600052602060002001805461147590613253565b80601f01602080910402602001604051908101604052809291908181526020018280546114a190613253565b80156114ee5780601f106114c3576101008083540402835291602001916114ee565b820191906000526020600020905b8154815290600101906020018083116114d157829003601f168201915b505050505085600360048110611506576115066132f9565b60200201525b509295945050505050565b6060612711821061153a5760405162461bcd60e51b815260040161051a9061314a565b611542612774565b600061156061155085611cb4565b604051602001610dfa9190612b9b565b600f80549192509061157290836132a3565b81548110611582576115826132f9565b90600052602060002001805461159790613253565b80601f01602080910402602001604051908101604052809291908181526020018280546115c390613253565b80156116105780601f106115e557610100808354040283529160200191611610565b820191906000526020600020905b8154815290600101906020018083116115f357829003601f168201915b505050505082600060038110611628576116286132f9565b6020020152600061163b610dea86611cb4565b601080549192509061164d90836132a3565b8154811061165d5761165d6132f9565b90600052602060002001805461167290613253565b80601f016020809104026020016040519081016040528092919081815260200182805461169e90613253565b80156116eb5780601f106116c0576101008083540402835291602001916116eb565b820191906000526020600020905b8154815290600101906020018083116116ce57829003601f168201915b505050505083600160038110611703576117036132f9565b60200201526000611716610fc587611cb4565b601180549192509061172890836132a3565b81548110611738576117386132f9565b90600052602060002001805461174d90613253565b80601f016020809104026020016040519081016040528092919081815260200182805461177990613253565b80156117c65780601f1061179b576101008083540402835291602001916117c6565b820191906000526020600020905b8154815290600101906020018083116117a957829003601f168201915b5050505050846002600381106117de576117de6132f9565b6020908102919091019190915284518582015160408088015190516118039401612c0a565b604051602081830303815290604052945050505050919050565b600a546001600160a01b031633146118775760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161051a565b6001600160a01b0381166118dc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161051a565b6118e581611c62565b50565b60006001600160e01b031982166380ac58cd60e01b148061191957506001600160e01b03198216635b5e139f60e01b145b8061040d57506301ffc9a760e01b6001600160e01b031983161461040d565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061196d82610a4b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611a1f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161051a565b6000611a2a83610a4b565b9050806001600160a01b0316846001600160a01b03161480611a655750836001600160a01b0316611a5a846104a5565b6001600160a01b0316145b80611a9557506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611ab082610a4b565b6001600160a01b031614611b185760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161051a565b6001600160a01b038216611b7a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161051a565b611b85838383612111565b611b90600082611938565b6001600160a01b0383166000908152600360205260408120805460019290611bb9908490613210565b90915550506001600160a01b0382166000908152600360205260408120805460019290611be79084906131c5565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6108528282604051806020016040528060008152506121c9565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606081611cd85750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611d025780611cec81613288565b9150611cfb9050600a836131dd565b9150611cdc565b60008167ffffffffffffffff811115611d1d57611d1d61330f565b6040519080825280601f01601f191660200182016040528015611d47576020820181803683370190505b5090505b8415611a9557611d5c600183613210565b9150611d69600a866132a3565b611d749060306131c5565b60f81b818381518110611d8957611d896132f9565b60200101906001600160f81b031916908160001a905350611dab600a866131dd565b9450611d4b565b600081604051602001611dc59190612a7b565b60408051601f19818403018152919052805160209091012092915050565b611dee848484611a9d565b611dfa848484846121fc565b610da85760405162461bcd60e51b815260040161051a906130f8565b60606000611e2383610dcc565b9050611e2d61278e565b604051806101400160405280610119815260200161335161011991398152611e5484611517565b81600160200201819052506040518060600160405280602881526020016135236028913960408083019190915282516060808401919091528151908101909152602880825261346a6020830139608082015260208281015160a08301526040805160608101909152602880825290916134929083013960c082015260408083015160e083015280516060810190915260298082526134ba6020830139610100820152606082015161012082015260408051808201909152600d81526c1e17ba32bc3a1f1e17b9bb339f60991b602082015281600a602090810291909101919091528151828201516040808501516060860151608087015160a088015160c089015160e08a01516101008b0151965160009a611f729a99989101612ada565b60408051808303601f1901815290829052610120840151610140850151919350611fa192849290602001612a97565b60408051808303601f19018152918152602080850151865191870151928701516060880151949550600094612007949293929190611fde88612309565b604051602001611ff396959493929190612e20565b604051602081830303815290604052612309565b90508060405160200161201a9190613016565b60408051601f198184030181529190529695505050505050565b606061203e612774565b60405180610120016040528060fd815260200161354b60fd9139815261206383610c83565b6020828101918252604080518082018252600d81526c1e17ba32bc3a1f1e17b9bb339f60991b818401528185018190528451935191516000946120aa949093929101612a97565b60408051808303601f1901815291905260208301519091506000906120e590806120d385612309565b604051602001611ff393929190612cc0565b9050806040516020016120f89190613016565b60408051601f1981840301815291905295945050505050565b6001600160a01b03831661216c5761216781600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b61218f565b816001600160a01b0316836001600160a01b03161461218f5761218f838261246f565b6001600160a01b0382166121a6576106508161250c565b826001600160a01b0316826001600160a01b0316146106505761065082826125bb565b6121d383836125ff565b6121e060008484846121fc565b6106505760405162461bcd60e51b815260040161051a906130f8565b60006001600160a01b0384163b156122fe57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061224090339089908890889060040161305b565b602060405180830381600087803b15801561225a57600080fd5b505af192505050801561228a575060408051601f3d908101601f19168201909252612287918101906129c0565b60015b6122e4573d8080156122b8576040519150601f19603f3d011682016040523d82523d6000602084013e6122bd565b606091505b5080516122dc5760405162461bcd60e51b815260040161051a906130f8565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611a95565b506001949350505050565b805160609080612329575050604080516020810190915260008152919050565b600060036123388360026131c5565b61234291906131dd565b61234d9060046131f1565b9050600061235c8260206131c5565b67ffffffffffffffff8111156123745761237461330f565b6040519080825280601f01601f19166020018201604052801561239e576020820181803683370190505b50905060006040518060600160405280604081526020016134e3604091399050600181016020830160005b8681101561242a576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b8352600490920191016123c9565b506003860660018114612444576002811461245557612461565b613d3d60f01b600119830152612461565b603d60f81b6000198301525b505050918152949350505050565b6000600161247c84610ac2565b6124869190613210565b6000838152600760205260409020549091508082146124d9576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061251e90600190613210565b60008381526009602052604081205460088054939450909284908110612546576125466132f9565b906000526020600020015490508060088381548110612567576125676132f9565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061259f5761259f6132e3565b6001900381819060005260206000200160009055905550505050565b60006125c683610ac2565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166126555760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161051a565b6000818152600260205260409020546001600160a01b0316156126ba5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161051a565b6126c660008383612111565b6001600160a01b03821660009081526003602052604081208054600192906126ef9084906131c5565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60405180608001604052806004905b606081526020019060019003908161275c5790505090565b60408051606080820190925290815260026020820161275c565b60408051610160810190915260608152600a6020820161275c565b6000602082840312156127bb57600080fd5b81356127c681613325565b9392505050565b6000602082840312156127df57600080fd5b81516127c681613325565b600080604083850312156127fd57600080fd5b823561280881613325565b9150602083013561281881613325565b809150509250929050565b60008060006060848603121561283857600080fd5b833561284381613325565b9250602084013561285381613325565b929592945050506040919091013590565b6000806000806080858703121561287a57600080fd5b843561288581613325565b9350602085013561289581613325565b925060408501359150606085013567ffffffffffffffff808211156128b957600080fd5b818701915087601f8301126128cd57600080fd5b8135818111156128df576128df61330f565b604051601f8201601f19908116603f011681019083821181831017156129075761290761330f565b816040528281528a602084870101111561292057600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561295757600080fd5b823561296281613325565b91506020830135801515811461281857600080fd5b6000806040838503121561298a57600080fd5b823561299581613325565b946020939093013593505050565b6000602082840312156129b557600080fd5b81356127c68161333a565b6000602082840312156129d257600080fd5b81516127c68161333a565b6000602082840312156129ef57600080fd5b5035919050565b60008151808452612a0e816020860160208601613227565b601f01601f19169290920160200192915050565b60008151612a34818560208601613227565b9290920192915050565b7f22207d205d2c2022696d616765223a2022646174613a696d6167652f7376672b81526a1e1b5b0ed8985cd94d8d0b60aa1b6020820152602b0190565b60008251612a8d818460208701613227565b9190910192915050565b60008451612aa9818460208901613227565b845190830190612abd818360208901613227565b8451910190612ad0818360208801613227565b0195945050505050565b60008a51612aec818460208f01613227565b8a51612afe8183860160208f01613227565b8a519184010190612b13818360208e01613227565b8951612b258183850160208e01613227565b8951929091010190612b3b818360208c01613227565b8751612b4d8183850160208c01613227565b8751929091010190612b63818360208a01613227565b8551612b758183850160208a01613227565b8551929091010190612b8b818360208801613227565b019b9a5050505050505050505050565b60008251612bad818460208701613227565b600360fc1b920191825250600101919050565b60008251612bd2818460208701613227565b600d60fa1b920191825250600101919050565b60008251612bf7818460208701613227565b603360f81b920191825250600101919050565b60008451612c1c818460208901613227565b8083019050600160fd1b8082528551612c3c816001850160208a01613227565b6001920191820152680102a37b6b11037b3160bd1b60028201528351612c6981600b840160208801613227565b01600b0195945050505050565b60008251612c88818460208701613227565b601960f91b920191825250600101919050565b60008251612cad818460208701613227565b603160f81b920191825250600101919050565b7003d913730b6b2911d101129b832b6361d1607d1b81528351600090612ced816011850160208901613227565b7f222c20226465736372697074696f6e223a20225370656c6c7320666f722041646011918401918201527f76656e74757265727320697320657874656e73696f6e20666f72204c6f6f742060318201527f666f7220416476656e7475726572732c2072616e646f6d207370656c6c73206760518201527f656e65726174656420616e642073746f726564206f6e20636861696e2e222c2060718201527f2261747472696275746573223a205b207b202274726169745f74797065223a2060918201527f225370656c6c2054797065222c202276616c7565223a2022000000000000000060b18201528451612de88160c9840160208901613227565b612df660c982840101612a3e565b9150508351612e09818360208801613227565b61227d60f01b910190815260020195945050505050565b6f03d913730b6b2911d10112a37b6b11d160851b81528651600090612e4c816010850160208c01613227565b7f222c20226465736372697074696f6e223a20225370656c6c7320666f722041646010918401918201527f76656e74757265727320697320657874656e73696f6e20666f72204c6f6f742060308201527f666f7220416476656e7475726572732e222c202261747472696275746573223a60508201527f205b207b202274726169745f74797065223a20225370656c6c2031222c20227660708201526730b63ab2911d101160c11b60908201528751612f0c816098840160208c01613227565b7f22207d2c207b202274726169745f74797065223a20225370656c6c2032222c206098929091019182015269113b30b63ab2911d101160b11b60b8820152613009612ffb612ff5612ff0612fea612fae612fa8612f6c60c289018f612a22565b7f22207d2c207b202274726169745f74797065223a20225370656c6c2033222c20815269113b30b63ab2911d101160b11b6020820152602a0190565b8c612a22565b7f22207d2c207b202274726169745f74797065223a20225370656c6c2034222c20815269113b30b63ab2911d101160b11b6020820152602a0190565b89612a22565b612a3e565b86612a22565b61227d60f01b815260020190565b9998505050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161304e81601d850160208701613227565b91909101601d0192915050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061308e908301846129f6565b9695505050505050565b602080825260009060a0830183820185845b60048110156130d957601f198785030183526130c78483516129f6565b935091840191908401906001016130aa565b50919695505050505050565b6020815260006127c660208301846129f6565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526010908201526f151bdad95b881251081a5b9d985b1a5960821b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156131d8576131d86132b7565b500190565b6000826131ec576131ec6132cd565b500490565b600081600019048311821515161561320b5761320b6132b7565b500290565b600082821015613222576132226132b7565b500390565b60005b8381101561324257818101518382015260200161322a565b83811115610da85750506000910152565b600181811c9082168061326757607f821691505b60208210811415610d7057634e487b7160e01b600052602260045260246000fd5b600060001982141561329c5761329c6132b7565b5060010190565b6000826132b2576132b26132cd565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146118e557600080fd5b6001600160e01b0319811681146118e557600080fdfe3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c7465787420783d2231302220793d2232302220636c6173733d22626173652220746578742d6465636f726174696f6e3d22756e6465726c696e65223e3c2f746578743e3c7465787420783d2231302220793d2236302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d2238302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223130302220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c2f746578743e3c7465787420783d2231302220793d2234302220636c6173733d2262617365223e3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a20626c61636b3b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22776869746522202f3e3c7465787420783d2231302220793d2232302220636c6173733d2262617365223ea2646970667358221220bf14afff97ad26f72bc352cd9aa07aa8216a1997f861eb683b69f82dccad900f64736f6c63430008070033
Deployed Bytecode Sourcemap
44511:10480:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38332:224;;;;;;:::i;:::-;;:::i;:::-;;;17487:14:1;;17480:22;17462:41;;17450:2;17435:18;38332:224:0;;;;;;;;25446:100;;;:::i;:::-;;;;;;;:::i;27005:221::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;16092:32:1;;;16074:51;;16062:2;16047:18;27005:221:0;15928:203:1;26528:411:0;;;;;;:::i;:::-;;:::i;:::-;;38972:113;39060:10;:17;38972:113;;;26079:25:1;;;26067:2;26052:18;38972:113:0;25933:177:1;27895:339:0;;;;;;:::i;:::-;;:::i;38640:256::-;;;;;;:::i;:::-;;:::i;47910:227::-;;;;;;:::i;:::-;;:::i;44649:70::-;;;;;-1:-1:-1;;;;;44649:70:0;;;44728:205;;;:::i;28305:185::-;;;;;;:::i;:::-;;:::i;48145:303::-;;;;;;:::i;:::-;;:::i;39162:233::-;;;;;;:::i;:::-;;:::i;25140:239::-;;;;;;:::i;:::-;;:::i;44582:44::-;;;;;;24870:208;;;;;;:::i;:::-;;:::i;9838:94::-;;;:::i;9187:87::-;9260:6;;-1:-1:-1;;;;;9260:6:0;9187:87;;25615:104;;;:::i;27298:295::-;;;;;;:::i;:::-;;:::i;50473:311::-;;;;;;:::i;:::-;;:::i;28561:328::-;;;;;;:::i;:::-;;:::i;50792:238::-;;;;;;:::i;:::-;;:::i;49160:1305::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;48460:692::-;;;;;;:::i;:::-;;:::i;27664:164::-;;;;;;:::i;:::-;-1:-1:-1;;;;;27785:25:0;;;27761:4;27785:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;27664:164;10087:192;;;;;;:::i;:::-;;:::i;38332:224::-;38434:4;-1:-1:-1;;;;;;38458:50:0;;-1:-1:-1;;;38458:50:0;;:90;;;38512:36;38536:11;38512:23;:36::i;:::-;38451:97;38332:224;-1:-1:-1;;38332:224:0:o;25446:100::-;25500:13;25533:5;25526:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25446:100;:::o;27005:221::-;27081:7;30488:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30488:16:0;27101:73;;;;-1:-1:-1;;;27101:73:0;;22657:2:1;27101:73:0;;;22639:21:1;22696:2;22676:18;;;22669:30;22735:34;22715:18;;;22708:62;-1:-1:-1;;;22786:18:1;;;22779:42;22838:19;;27101:73:0;;;;;;;;;-1:-1:-1;27194:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;27194:24:0;;27005:221::o;26528:411::-;26609:13;26625:23;26640:7;26625:14;:23::i;:::-;26609:39;;26673:5;-1:-1:-1;;;;;26667:11:0;:2;-1:-1:-1;;;;;26667:11:0;;;26659:57;;;;-1:-1:-1;;;26659:57:0;;24186:2:1;26659:57:0;;;24168:21:1;24225:2;24205:18;;;24198:30;24264:34;24244:18;;;24237:62;-1:-1:-1;;;24315:18:1;;;24308:31;24356:19;;26659:57:0;23984:397:1;26659:57:0;8137:10;-1:-1:-1;;;;;26751:21:0;;;;:62;;-1:-1:-1;26776:37:0;26793:5;8137:10;27664:164;:::i;26776:37::-;26729:168;;;;-1:-1:-1;;;26729:168:0;;21050:2:1;26729:168:0;;;21032:21:1;21089:2;21069:18;;;21062:30;21128:34;21108:18;;;21101:62;21199:26;21179:18;;;21172:54;21243:19;;26729:168:0;20848:420:1;26729:168:0;26910:21;26919:2;26923:7;26910:8;:21::i;:::-;26598:341;26528:411;;:::o;27895:339::-;28090:41;8137:10;28123:7;28090:18;:41::i;:::-;28082:103;;;;-1:-1:-1;;;28082:103:0;;;;;;;:::i;:::-;28198:28;28208:4;28214:2;28218:7;28198:9;:28::i;38640:256::-;38737:7;38773:23;38790:5;38773:16;:23::i;:::-;38765:5;:31;38757:87;;;;-1:-1:-1;;;38757:87:0;;17940:2:1;38757:87:0;;;17922:21:1;17979:2;17959:18;;;17952:30;18018:34;17998:18;;;17991:62;-1:-1:-1;;;18069:18:1;;;18062:41;18120:19;;38757:87:0;17738:407:1;38757:87:0;-1:-1:-1;;;;;;38862:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;38640:256::o;47910:227::-;12126:1;12722:7;;:19;;12714:63;;;;-1:-1:-1;;;12714:63:0;;25419:2:1;12714:63:0;;;25401:21:1;25458:2;25438:18;;;25431:30;25497:33;25477:18;;;25470:61;25548:18;;12714:63:0;25217:355:1;12714:63:0;12126:1;12855:7;:18;47991:4:::1;47981:14:::0;::::1;:33:::0;::::1;;;;48009:5;47999:7;:15;47981:33;47973:62;;;;-1:-1:-1::0;;;47973:62:0::1;;;;;;;:::i;:::-;48046:32;8137:10:::0;48070:7:::1;48046:9;:32::i;:::-;48089:40;8137:10:::0;48113:15:::1;:7:::0;48123:5:::1;48113:15;:::i;:::-;48089:9;:40::i;:::-;-1:-1:-1::0;12082:1:0;13034:7;:22;47910:227::o;44728:205::-;44788:10;;-1:-1:-1;;;;;44788:10:0;44774;:24;44766:64;;;;-1:-1:-1;;;44766:64:0;;25779:2:1;44766:64:0;;;25761:21:1;25818:2;25798:18;;;25791:30;25857:29;25837:18;;;25830:57;25904:18;;44766:64:0;25577:351:1;44766:64:0;44888:37;;44856:21;;44896:10;;44888:37;;;;;44856:21;;44841:12;44888:37;44841:12;44888:37;44856:21;44896:10;44888:37;;;;;;;;;;;;;;;;;;;;;44755:178;44728:205::o;28305:185::-;28443:39;28460:4;28466:2;28470:7;28443:39;;;;;;;;;;;;:16;:39::i;48145:303::-;12126:1;12722:7;;:19;;12714:63;;;;-1:-1:-1;;;12714:63:0;;25419:2:1;12714:63:0;;;25401:21:1;25458:2;25438:18;;;25431:30;25497:33;25477:18;;;25470:61;25548:18;;12714:63:0;25217:355:1;12714:63:0;12126:1;12855:7;:18;48223:11;;;;;:29:::1;;;48248:4;48238:7;:14;48223:29;48215:58;;;;-1:-1:-1::0;;;48215:58:0::1;;;;;;;:::i;:::-;48292:4;::::0;:21:::1;::::0;-1:-1:-1;;;48292:21:0;;::::1;::::0;::::1;26079:25:1::0;;;48317:10:0::1;::::0;-1:-1:-1;;;;;48292:4:0::1;::::0;:12:::1;::::0;26052:18:1;;48292:21:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;48292:35:0::1;;48284:62;;;::::0;-1:-1:-1;;;48284:62:0;;19535:2:1;48284:62:0::1;::::0;::::1;19517:21:1::0;19574:2;19554:18;;;19547:30;-1:-1:-1;;;19593:18:1;;;19586:44;19647:18;;48284:62:0::1;19333:338:1::0;39162:233:0;39237:7;39273:30;39060:10;:17;;38972:113;39273:30;39265:5;:38;39257:95;;;;-1:-1:-1;;;39257:95:0;;25006:2:1;39257:95:0;;;24988:21:1;25045:2;25025:18;;;25018:30;25084:34;25064:18;;;25057:62;-1:-1:-1;;;25135:18:1;;;25128:42;25187:19;;39257:95:0;24804:408:1;39257:95:0;39370:10;39381:5;39370:17;;;;;;;;:::i;:::-;;;;;;;;;39363:24;;39162:233;;;:::o;25140:239::-;25212:7;25248:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25248:16:0;25283:19;25275:73;;;;-1:-1:-1;;;25275:73:0;;21886:2:1;25275:73:0;;;21868:21:1;21925:2;21905:18;;;21898:30;21964:34;21944:18;;;21937:62;-1:-1:-1;;;22015:18:1;;;22008:39;22064:19;;25275:73:0;21684:405:1;24870:208:0;24942:7;-1:-1:-1;;;;;24970:19:0;;24962:74;;;;-1:-1:-1;;;24962:74:0;;21475:2:1;24962:74:0;;;21457:21:1;21514:2;21494:18;;;21487:30;21553:34;21533:18;;;21526:62;-1:-1:-1;;;21604:18:1;;;21597:40;21654:19;;24962:74:0;21273:406:1;24962:74:0;-1:-1:-1;;;;;;25054:16:0;;;;;:9;:16;;;;;;;24870:208::o;9838:94::-;9260:6;;-1:-1:-1;;;;;9260:6:0;8137:10;9407:23;9399:68;;;;-1:-1:-1;;;9399:68:0;;23070:2:1;9399:68:0;;;23052:21:1;;;23089:18;;;23082:30;23148:34;23128:18;;;23121:62;23200:18;;9399:68:0;22868:356:1;9399:68:0;9903:21:::1;9921:1;9903:9;:21::i;:::-;9838:94::o:0;25615:104::-;25671:13;25704:7;25697:14;;;;;:::i;27298:295::-;-1:-1:-1;;;;;27401:24:0;;8137:10;27401:24;;27393:62;;;;-1:-1:-1;;;27393:62:0;;20283:2:1;27393:62:0;;;20265:21:1;20322:2;20302:18;;;20295:30;20361:27;20341:18;;;20334:55;20406:18;;27393:62:0;20081:349:1;27393:62:0;8137:10;27468:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;27468:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;27468:53:0;;;;;;;;;;27537:48;;17462:41:1;;;27468:42:0;;8137:10;27537:48;;17435:18:1;27537:48:0;;;;;;;27298:295;;:::o;50473:311::-;50530:13;50556:12;50571:33;50585:17;50594:7;50585:8;:17::i;:::-;50571:6;:33::i;:::-;50556:48;-1:-1:-1;50619:9:0;50626:2;50556:48;50619:9;:::i;:::-;50615:162;;50657:11;50676:18;;50669:25;;:4;:25;:::i;:::-;50657:38;;;;;;;;:::i;:::-;;;;;;;;50650:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50473:311;;;:::o;50615:162::-;50735:7;50750:14;;50743:21;;:4;:21;:::i;50615:162::-;50545:239;50473:311;;;:::o;28561:328::-;28736:41;8137:10;28769:7;28736:18;:41::i;:::-;28728:103;;;;-1:-1:-1;;;28728:103:0;;;;;;;:::i;:::-;28842:39;28856:4;28862:2;28866:7;28875:5;28842:13;:39::i;:::-;28561:328;;;;:::o;50792:238::-;50857:13;50897:5;50887:7;:15;50883:140;;;50926:22;50940:7;50926:13;:22::i;50883:140::-;50988:23;51003:7;50988:14;:23::i;49160:1305::-;49223:16;;:::i;:::-;49252:29;;:::i;:::-;49294:13;49310:56;49341:17;49350:7;49341:8;:17::i;:::-;49324:40;;;;;;;;:::i;:::-;;;;;;;;;;;;;49310:6;:56::i;:::-;49294:72;-1:-1:-1;49381:10:0;49389:2;49294:72;49381:10;:::i;:::-;49377:187;;49431:11;49451:18;;49443:26;;:5;:26;:::i;:::-;49431:39;;;;;;;;:::i;:::-;;;;;;;;49413:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;49426:1;49413:15;;;;;;;:::i;:::-;;;;:57;49377:187;;;49521:7;49537:14;;49529:22;;:5;:22;:::i;:::-;49521:31;;;;;;;;:::i;:::-;;;;;;;;49503:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;49516:1;49503:15;;;;;;;:::i;:::-;;;;:49;49377:187;49584:13;49600:56;49631:17;49640:7;49631:8;:17::i;:::-;49614:40;;;;;;;;:::i;49600:56::-;49584:72;-1:-1:-1;49671:10:0;49679:2;49584:72;49671:10;:::i;:::-;49667:187;;49721:11;49741:18;;49733:26;;:5;:26;:::i;:::-;49721:39;;;;;;;;:::i;:::-;;;;;;;;49703:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;49716:1;49703:15;;;;;;;:::i;:::-;;;;:57;49667:187;;;49811:7;49827:14;;49819:22;;:5;:22;:::i;:::-;49811:31;;;;;;;;:::i;:::-;;;;;;;;49793:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;49806:1;49793:15;;;;;;;:::i;:::-;;;;:49;49667:187;49874:13;49890:56;49921:17;49930:7;49921:8;:17::i;:::-;49904:40;;;;;;;;:::i;49890:56::-;49874:72;-1:-1:-1;49961:10:0;49969:2;49874:72;49961:10;:::i;:::-;49957:187;;50011:11;50031:18;;50023:26;;:5;:26;:::i;:::-;50011:39;;;;;;;;:::i;:::-;;;;;;;;49993:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;50006:1;49993:15;;;;;;;:::i;:::-;;;;:57;49957:187;;;50101:7;50117:14;;50109:22;;:5;:22;:::i;:::-;50101:31;;;;;;;;:::i;:::-;;;;;;;;50083:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;50096:1;50083:15;;;;;;;:::i;:::-;;;;:49;49957:187;50156:13;50172:56;50203:17;50212:7;50203:8;:17::i;:::-;50186:40;;;;;;;;:::i;50172:56::-;50156:72;-1:-1:-1;50243:10:0;50251:2;50156:72;50243:10;:::i;:::-;50239:187;;50293:11;50313:18;;50305:26;;:5;:26;:::i;:::-;50293:39;;;;;;;;:::i;:::-;;;;;;;;50275:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;50288:1;50275:15;;;;;;;:::i;:::-;;;;:57;50239:187;;;50383:7;50399:14;;50391:22;;:5;:22;:::i;:::-;50383:31;;;;;;;;:::i;:::-;;;;;;;;50365:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;50378:1;50365:15;;;;;;;:::i;:::-;;;;:49;50239:187;-1:-1:-1;50445:12:0;;49160:1305;-1:-1:-1;;;;;49160:1305:0:o;48460:692::-;48520:13;48564:5;48554:7;:15;48546:44;;;;-1:-1:-1;;;48546:44:0;;;;;;;:::i;:::-;48601:22;;:::i;:::-;48634:13;48650:56;48681:17;48690:7;48681:8;:17::i;:::-;48664:40;;;;;;;;:::i;48650:56::-;48728:10;48747:17;;48634:72;;-1:-1:-1;48728:10:0;48739:25;;48634:72;48739:25;:::i;:::-;48728:37;;;;;;;;:::i;:::-;;;;;;;;48717:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;48723:1;48717:8;;;;;;;:::i;:::-;;;;:48;48776:13;48792:56;48823:17;48832:7;48823:8;:17::i;48792:56::-;48870:10;48889:17;;48776:72;;-1:-1:-1;48870:10:0;48881:25;;48776:72;48881:25;:::i;:::-;48870:37;;;;;;;;:::i;:::-;;;;;;;;48859:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;48865:1;48859:8;;;;;;;:::i;:::-;;;;:48;48918:13;48934:56;48965:17;48974:7;48965:8;:17::i;48934:56::-;49012:10;49031:17;;48918:72;;-1:-1:-1;49012:10:0;49023:25;;48918:72;49023:25;:::i;:::-;49012:37;;;;;;;;:::i;:::-;;;;;;;;49001:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;49007:1;49001:8;;;;;;;:::i;:::-;;;;;;;;;:48;;;;49091:8;;49106;;;;49134;;;;;49074:69;;;;;;:::i;:::-;;;;;;;;;;;;;49060:84;;;;;;48460:692;;;:::o;10087:192::-;9260:6;;-1:-1:-1;;;;;9260:6:0;8137:10;9407:23;9399:68;;;;-1:-1:-1;;;9399:68:0;;23070:2:1;9399:68:0;;;23052:21:1;;;23089:18;;;23082:30;23148:34;23128:18;;;23121:62;23200:18;;9399:68:0;22868:356:1;9399:68:0;-1:-1:-1;;;;;10176:22:0;::::1;10168:73;;;::::0;-1:-1:-1;;;10168:73:0;;18771:2:1;10168:73:0::1;::::0;::::1;18753:21:1::0;18810:2;18790:18;;;18783:30;18849:34;18829:18;;;18822:62;-1:-1:-1;;;18900:18:1;;;18893:36;18946:19;;10168:73:0::1;18569:402:1::0;10168:73:0::1;10252:19;10262:8;10252:9;:19::i;:::-;10087:192:::0;:::o;24501:305::-;24603:4;-1:-1:-1;;;;;;24640:40:0;;-1:-1:-1;;;24640:40:0;;:105;;-1:-1:-1;;;;;;;24697:48:0;;-1:-1:-1;;;24697:48:0;24640:105;:158;;;-1:-1:-1;;;;;;;;;;23217:40:0;;;24762:36;23108:157;34381:174;34456:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;34456:29:0;-1:-1:-1;;;;;34456:29:0;;;;;;;;:24;;34510:23;34456:24;34510:14;:23::i;:::-;-1:-1:-1;;;;;34501:46:0;;;;;;;;;;;34381:174;;:::o;30693:348::-;30786:4;30488:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30488:16:0;30803:73;;;;-1:-1:-1;;;30803:73:0;;20637:2:1;30803:73:0;;;20619:21:1;20676:2;20656:18;;;20649:30;20715:34;20695:18;;;20688:62;-1:-1:-1;;;20766:18:1;;;20759:42;20818:19;;30803:73:0;20435:408:1;30803:73:0;30887:13;30903:23;30918:7;30903:14;:23::i;:::-;30887:39;;30956:5;-1:-1:-1;;;;;30945:16:0;:7;-1:-1:-1;;;;;30945:16:0;;:51;;;;30989:7;-1:-1:-1;;;;;30965:31:0;:20;30977:7;30965:11;:20::i;:::-;-1:-1:-1;;;;;30965:31:0;;30945:51;:87;;;-1:-1:-1;;;;;;27785:25:0;;;27761:4;27785:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;31000:32;30937:96;30693:348;-1:-1:-1;;;;30693:348:0:o;33685:578::-;33844:4;-1:-1:-1;;;;;33817:31:0;:23;33832:7;33817:14;:23::i;:::-;-1:-1:-1;;;;;33817:31:0;;33809:85;;;;-1:-1:-1;;;33809:85:0;;23776:2:1;33809:85:0;;;23758:21:1;23815:2;23795:18;;;23788:30;23854:34;23834:18;;;23827:62;-1:-1:-1;;;23905:18:1;;;23898:39;23954:19;;33809:85:0;23574:405:1;33809:85:0;-1:-1:-1;;;;;33913:16:0;;33905:65;;;;-1:-1:-1;;;33905:65:0;;19878:2:1;33905:65:0;;;19860:21:1;19917:2;19897:18;;;19890:30;19956:34;19936:18;;;19929:62;-1:-1:-1;;;20007:18:1;;;20000:34;20051:19;;33905:65:0;19676:400:1;33905:65:0;33983:39;34004:4;34010:2;34014:7;33983:20;:39::i;:::-;34087:29;34104:1;34108:7;34087:8;:29::i;:::-;-1:-1:-1;;;;;34129:15:0;;;;;;:9;:15;;;;;:20;;34148:1;;34129:15;:20;;34148:1;;34129:20;:::i;:::-;;;;-1:-1:-1;;;;;;;34160:13:0;;;;;;:9;:13;;;;;:18;;34177:1;;34160:13;:18;;34177:1;;34160:18;:::i;:::-;;;;-1:-1:-1;;34189:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;34189:21:0;-1:-1:-1;;;;;34189:21:0;;;;;;;;;34228:27;;34189:16;;34228:27;;;;;;;33685:578;;;:::o;31383:110::-;31459:26;31469:2;31473:7;31459:26;;;;;;;;;;;;:9;:26::i;10287:173::-;10362:6;;;-1:-1:-1;;;;;10379:17:0;;;-1:-1:-1;;;;;;10379:17:0;;;;;;;10412:40;;10362:6;;;10379:17;10362:6;;10412:40;;10343:16;;10412:40;10332:128;10287:173;:::o;54265:723::-;54321:13;54542:10;54538:53;;-1:-1:-1;;54569:10:0;;;;;;;;;;;;-1:-1:-1;;;54569:10:0;;;;;54265:723::o;54538:53::-;54616:5;54601:12;54657:78;54664:9;;54657:78;;54690:8;;;;:::i;:::-;;-1:-1:-1;54713:10:0;;-1:-1:-1;54721:2:0;54713:10;;:::i;:::-;;;54657:78;;;54745:19;54777:6;54767:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54767:17:0;;54745:39;;54795:154;54802:10;;54795:154;;54829:11;54839:1;54829:11;;:::i;:::-;;-1:-1:-1;54898:10:0;54906:2;54898:5;:10;:::i;:::-;54885:24;;:2;:24;:::i;:::-;54872:39;;54855:6;54862;54855:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;54855:56:0;;;;;;;;-1:-1:-1;54926:11:0;54935:2;54926:11;;:::i;:::-;;;54795:154;;51038:138;51098:7;51160:5;51143:23;;;;;;;;:::i;:::-;;;;-1:-1:-1;;51143:23:0;;;;;;;;;51133:34;;51143:23;51133:34;;;;;51038:138;-1:-1:-1;;51038:138:0:o;29771:315::-;29928:28;29938:4;29944:2;29948:7;29928:9;:28::i;:::-;29975:48;29998:4;30004:2;30008:7;30017:5;29975:22;:48::i;:::-;29967:111;;;;-1:-1:-1;;;29967:111:0;;;;;;;:::i;51188:1879::-;51251:13;51277:29;51309:24;51325:7;51309:15;:24::i;:::-;51277:56;;51344:23;;:::i;:::-;51380:294;;;;;;;;;;;;;;;;;;;51698:21;51711:7;51698:12;:21::i;:::-;51687:5;51693:1;51687:8;;;:32;;;;51732:53;;;;;;;;;;;;;;;;;:8;;;;:53;;;;51809:15;;51798:8;;;;:26;;;;51837:53;;;;;;;;;;;;;51732:8;51837:53;;;:8;;;:53;:8;51914:15;;;;51903:8;;;:26;51942:53;;;;;;;;;;;;;;;;;;;;:8;;;:53;52019:15;;;;;52008:8;;;:26;52047:54;;;;;;;;;;;;;51942:8;52047:54;;;:8;;;:54;52125:15;;;;52114:8;;;:26;52153:27;;;;;;;;;;;;-1:-1:-1;;;52047:8:0;52153:27;;;52047:5;52159:2;52153:9;;;;;;;;:27;;;;52240:8;;52250;;;;52260;;;;;52270;;;;52280;;;;52290;;;;52300;;;;52310;;;;52320;;;;52223:106;;52193:20;;52223:106;;52240:8;52250;52320;52223:106;;:::i;:::-;;;;;;;-1:-1:-1;;52223:106:0;;;;;;;52382:8;;;;52392:9;;;;52223:106;;-1:-1:-1;52357:45:0;;52223:106;;52392:9;52382:8;52357:45;;:::i;:::-;;;;;;;-1:-1:-1;;52357:45:0;;;;;;52509:8;;;;;52659:15;;52722;;;;52785;;;;52848;;;;52357:45;;-1:-1:-1;52424:18:0;;52445:505;;52509:8;;52659:15;52722;52785;52912:28;52357:45;52912:13;:28::i;:::-;52472:475;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52445:13;:505::i;:::-;52424:526;;53027:4;52977:55;;;;;;;;:::i;:::-;;;;-1:-1:-1;;52977:55:0;;;;;;;;;;51188:1879;-1:-1:-1;;;;;;51188:1879:0:o;53079:1080::-;53143:13;53169:22;;:::i;:::-;53204:266;;;;;;;;;;;;;;;;;;;53494:18;53504:7;53494:9;:18::i;:::-;53483:8;;;;:29;;;53525:26;;;;;;;;;;;-1:-1:-1;;;53525:26:0;;;;:8;;;:26;;;53611:8;;53621;;53594:46;;-1:-1:-1;;53594:46:0;;53611:8;;53621;53525:26;53594:46;;:::i;:::-;;;;;;;-1:-1:-1;;53594:46:0;;;;;;53749:8;;;;53594:46;;-1:-1:-1;53662:18:0;;53683:359;;53749:8;54004:28;53594:46;54004:13;:28::i;:::-;53710:329;;;;;;;;;;:::i;53683:359::-;53662:380;;54119:4;54069:55;;;;;;;;:::i;:::-;;;;-1:-1:-1;;54069:55:0;;;;;;;;;;53079:1080;-1:-1:-1;;;;;53079:1080:0:o;40008:589::-;-1:-1:-1;;;;;40214:18:0;;40210:187;;40249:40;40281:7;41424:10;:17;;41397:24;;;;:15;:24;;;;;:44;;;41452:24;;;;;;;;;;;;41320:164;40249:40;40210:187;;;40319:2;-1:-1:-1;;;;;40311:10:0;:4;-1:-1:-1;;;;;40311:10:0;;40307:90;;40338:47;40371:4;40377:7;40338:32;:47::i;:::-;-1:-1:-1;;;;;40411:16:0;;40407:183;;40444:45;40481:7;40444:36;:45::i;40407:183::-;40517:4;-1:-1:-1;;;;;40511:10:0;:2;-1:-1:-1;;;;;40511:10:0;;40507:83;;40538:40;40566:2;40570:7;40538:27;:40::i;31720:321::-;31850:18;31856:2;31860:7;31850:5;:18::i;:::-;31901:54;31932:1;31936:2;31940:7;31949:5;31901:22;:54::i;:::-;31879:154;;;;-1:-1:-1;;;31879:154:0;;;;;;;:::i;35120:803::-;35275:4;-1:-1:-1;;;;;35296:13:0;;15603:20;15651:8;35292:624;;35332:72;;-1:-1:-1;;;35332:72:0;;-1:-1:-1;;;;;35332:36:0;;;;;:72;;8137:10;;35383:4;;35389:7;;35398:5;;35332:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35332:72:0;;;;;;;;-1:-1:-1;;35332:72:0;;;;;;;;;;;;:::i;:::-;;;35328:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35578:13:0;;35574:272;;35621:60;;-1:-1:-1;;;35621:60:0;;;;;;;:::i;35574:272::-;35796:6;35790:13;35781:6;35777:2;35773:15;35766:38;35328:533;-1:-1:-1;;;;;;35455:55:0;-1:-1:-1;;;35455:55:0;;-1:-1:-1;35448:62:0;;35292:624;-1:-1:-1;35900:4:0;35120:803;;;;;;:::o;55342:1607::-;55440:11;;55400:13;;55466:8;55462:23;;-1:-1:-1;;55476:9:0;;;;;;;;;-1:-1:-1;55476:9:0;;;55342:1607;-1:-1:-1;55342:1607:0:o;55462:23::-;55537:18;55575:1;55564:7;:3;55570:1;55564:7;:::i;:::-;55563:13;;;;:::i;:::-;55558:19;;:1;:19;:::i;:::-;55537:40;-1:-1:-1;55635:19:0;55667:15;55537:40;55680:2;55667:15;:::i;:::-;55657:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55657:26:0;;55635:48;;55696:18;55717:5;;;;;;;;;;;;;;;;;55696:26;;55786:1;55779:5;55775:13;55831:2;55823:6;55819:15;55882:1;55850:777;55905:3;55902:1;55899:10;55850:777;;;55960:1;56003:12;;;;;55997:19;56098:4;56086:2;56082:14;;;;;56064:40;;56058:47;56207:2;56203:14;;;56199:25;;56185:40;;56179:47;56336:1;56332:13;;;56328:24;;56314:39;;56308:46;56456:16;;;;56442:31;;56436:38;56134:1;56130:11;;;56228:4;56175:58;;;56166:68;56259:11;;56304:57;;;56295:67;;;;56387:11;;56432:49;;56423:59;56511:3;56507:13;56540:22;;56610:1;56595:17;;;;55953:9;55850:777;;;55854:44;56659:1;56654:3;56650:11;56680:1;56675:84;;;;56778:1;56773:82;;;;56643:212;;56675:84;-1:-1:-1;;;;;56708:17:0;;56701:43;56675:84;;56773:82;-1:-1:-1;;;;;56806:17:0;;56799:41;56643:212;-1:-1:-1;;;56871:26:0;;;56878:6;55342:1607;-1:-1:-1;;;;55342:1607:0:o;42111:988::-;42377:22;42427:1;42402:22;42419:4;42402:16;:22::i;:::-;:26;;;;:::i;:::-;42439:18;42460:26;;;:17;:26;;;;;;42377:51;;-1:-1:-1;42593:28:0;;;42589:328;;-1:-1:-1;;;;;42660:18:0;;42638:19;42660:18;;;:12;:18;;;;;;;;:34;;;;;;;;;42711:30;;;;;;:44;;;42828:30;;:17;:30;;;;;:43;;;42589:328;-1:-1:-1;43013:26:0;;;;:17;:26;;;;;;;;43006:33;;;-1:-1:-1;;;;;43057:18:0;;;;;:12;:18;;;;;:34;;;;;;;43050:41;42111:988::o;43394:1079::-;43672:10;:17;43647:22;;43672:21;;43692:1;;43672:21;:::i;:::-;43704:18;43725:24;;;:15;:24;;;;;;44098:10;:26;;43647:46;;-1:-1:-1;43725:24:0;;43647:46;;44098:26;;;;;;:::i;:::-;;;;;;;;;44076:48;;44162:11;44137:10;44148;44137:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;44242:28;;;:15;:28;;;;;;;:41;;;44414:24;;;;;44407:31;44449:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;43465:1008;;;43394:1079;:::o;40898:221::-;40983:14;41000:20;41017:2;41000:16;:20::i;:::-;-1:-1:-1;;;;;41031:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;41076:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;40898:221:0:o;32377:382::-;-1:-1:-1;;;;;32457:16:0;;32449:61;;;;-1:-1:-1;;;32449:61:0;;22296:2:1;32449:61:0;;;22278:21:1;;;22315:18;;;22308:30;22374:34;22354:18;;;22347:62;22426:18;;32449:61:0;22094:356:1;32449:61:0;30464:4;30488:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30488:16:0;:30;32521:58;;;;-1:-1:-1;;;32521:58:0;;19178:2:1;32521:58:0;;;19160:21:1;19217:2;19197:18;;;19190:30;19256;19236:18;;;19229:58;19304:18;;32521:58:0;18976:352:1;32521:58:0;32592:45;32621:1;32625:2;32629:7;32592:20;:45::i;:::-;-1:-1:-1;;;;;32650:13:0;;;;;;:9;:13;;;;;:18;;32667:1;;32650:13;:18;;32667:1;;32650:18;:::i;:::-;;;;-1:-1:-1;;32679:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32679:21:0;-1:-1:-1;;;;;32679:21:0;;;;;;;;32718:33;;32679:16;;;32718:33;;32679:16;;32718:33;32377:382;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:247:1;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;:::-;250:5;14:247;-1:-1:-1;;;14:247:1:o;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;522:388::-;590:6;598;651:2;639:9;630:7;626:23;622:32;619:52;;;667:1;664;657:12;619:52;706:9;693:23;725:31;750:5;725:31;:::i;:::-;775:5;-1:-1:-1;832:2:1;817:18;;804:32;845:33;804:32;845:33;:::i;:::-;897:7;887:17;;;522:388;;;;;:::o;915:456::-;992:6;1000;1008;1061:2;1049:9;1040:7;1036:23;1032:32;1029:52;;;1077:1;1074;1067:12;1029:52;1116:9;1103:23;1135:31;1160:5;1135:31;:::i;:::-;1185:5;-1:-1:-1;1242:2:1;1227:18;;1214:32;1255:33;1214:32;1255:33;:::i;:::-;915:456;;1307:7;;-1:-1:-1;;;1361:2:1;1346:18;;;;1333:32;;915:456::o;1376:1266::-;1471:6;1479;1487;1495;1548:3;1536:9;1527:7;1523:23;1519:33;1516:53;;;1565:1;1562;1555:12;1516:53;1604:9;1591:23;1623:31;1648:5;1623:31;:::i;:::-;1673:5;-1:-1:-1;1730:2:1;1715:18;;1702:32;1743:33;1702:32;1743:33;:::i;:::-;1795:7;-1:-1:-1;1849:2:1;1834:18;;1821:32;;-1:-1:-1;1904:2:1;1889:18;;1876:32;1927:18;1957:14;;;1954:34;;;1984:1;1981;1974:12;1954:34;2022:6;2011:9;2007:22;1997:32;;2067:7;2060:4;2056:2;2052:13;2048:27;2038:55;;2089:1;2086;2079:12;2038:55;2125:2;2112:16;2147:2;2143;2140:10;2137:36;;;2153:18;;:::i;:::-;2228:2;2222:9;2196:2;2282:13;;-1:-1:-1;;2278:22:1;;;2302:2;2274:31;2270:40;2258:53;;;2326:18;;;2346:22;;;2323:46;2320:72;;;2372:18;;:::i;:::-;2412:10;2408:2;2401:22;2447:2;2439:6;2432:18;2487:7;2482:2;2477;2473;2469:11;2465:20;2462:33;2459:53;;;2508:1;2505;2498:12;2459:53;2564:2;2559;2555;2551:11;2546:2;2538:6;2534:15;2521:46;2609:1;2604:2;2599;2591:6;2587:15;2583:24;2576:35;2630:6;2620:16;;;;;;;1376:1266;;;;;;;:::o;2647:416::-;2712:6;2720;2773:2;2761:9;2752:7;2748:23;2744:32;2741:52;;;2789:1;2786;2779:12;2741:52;2828:9;2815:23;2847:31;2872:5;2847:31;:::i;:::-;2897:5;-1:-1:-1;2954:2:1;2939:18;;2926:32;2996:15;;2989:23;2977:36;;2967:64;;3027:1;3024;3017:12;3068:315;3136:6;3144;3197:2;3185:9;3176:7;3172:23;3168:32;3165:52;;;3213:1;3210;3203:12;3165:52;3252:9;3239:23;3271:31;3296:5;3271:31;:::i;:::-;3321:5;3373:2;3358:18;;;;3345:32;;-1:-1:-1;;;3068:315:1:o;3388:245::-;3446:6;3499:2;3487:9;3478:7;3474:23;3470:32;3467:52;;;3515:1;3512;3505:12;3467:52;3554:9;3541:23;3573:30;3597:5;3573:30;:::i;3638:249::-;3707:6;3760:2;3748:9;3739:7;3735:23;3731:32;3728:52;;;3776:1;3773;3766:12;3728:52;3808:9;3802:16;3827:30;3851:5;3827:30;:::i;3892:180::-;3951:6;4004:2;3992:9;3983:7;3979:23;3975:32;3972:52;;;4020:1;4017;4010:12;3972:52;-1:-1:-1;4043:23:1;;3892:180;-1:-1:-1;3892:180:1:o;4077:257::-;4118:3;4156:5;4150:12;4183:6;4178:3;4171:19;4199:63;4255:6;4248:4;4243:3;4239:14;4232:4;4225:5;4221:16;4199:63;:::i;:::-;4316:2;4295:15;-1:-1:-1;;4291:29:1;4282:39;;;;4323:4;4278:50;;4077:257;-1:-1:-1;;4077:257:1:o;4339:185::-;4381:3;4419:5;4413:12;4434:52;4479:6;4474:3;4467:4;4460:5;4456:16;4434:52;:::i;:::-;4502:16;;;;;4339:185;-1:-1:-1;;4339:185:1:o;4529:222::-;4606:66;4594:79;;-1:-1:-1;;;4698:2:1;4689:12;;4682:35;4742:2;4733:12;;4529:222::o;5378:276::-;5509:3;5547:6;5541:13;5563:53;5609:6;5604:3;5597:4;5589:6;5585:17;5563:53;:::i;:::-;5632:16;;;;;5378:276;-1:-1:-1;;5378:276:1:o;5659:664::-;5886:3;5924:6;5918:13;5940:53;5986:6;5981:3;5974:4;5966:6;5962:17;5940:53;:::i;:::-;6056:13;;6015:16;;;;6078:57;6056:13;6015:16;6112:4;6100:17;;6078:57;:::i;:::-;6202:13;;6157:20;;;6224:57;6202:13;6157:20;6258:4;6246:17;;6224:57;:::i;:::-;6297:20;;5659:664;-1:-1:-1;;;;;5659:664:1:o;6328:1767::-;6843:3;6881:6;6875:13;6897:53;6943:6;6938:3;6931:4;6923:6;6919:17;6897:53;:::i;:::-;6981:6;6975:13;6997:68;7056:8;7047:6;7042:3;7038:16;7031:4;7023:6;7019:17;6997:68;:::i;:::-;7143:13;;7091:16;;;7087:31;;7165:57;7143:13;7087:31;7199:4;7187:17;;7165:57;:::i;:::-;7253:6;7247:13;7269:72;7332:8;7321;7314:5;7310:20;7303:4;7295:6;7291:17;7269:72;:::i;:::-;7423:13;;7367:20;;;;7363:35;;7445:57;7423:13;7363:35;7479:4;7467:17;;7445:57;:::i;:::-;7533:6;7527:13;7549:72;7612:8;7601;7594:5;7590:20;7583:4;7575:6;7571:17;7549:72;:::i;:::-;7703:13;;7647:20;;;;7643:35;;7725:57;7703:13;7643:35;7759:4;7747:17;;7725:57;:::i;:::-;7813:6;7807:13;7829:72;7892:8;7881;7874:5;7870:20;7863:4;7855:6;7851:17;7829:72;:::i;:::-;7980:13;;7924:20;;;;7920:35;;8002:54;7980:13;7920:35;8036:4;8024:17;;8002:54;:::i;:::-;8072:17;;6328:1767;-1:-1:-1;;;;;;;;;;;6328:1767:1:o;8100:439::-;8332:3;8370:6;8364:13;8386:53;8432:6;8427:3;8420:4;8412:6;8408:17;8386:53;:::i;:::-;-1:-1:-1;;;8461:16:1;;8486:18;;;-1:-1:-1;8531:1:1;8520:13;;8100:439;-1:-1:-1;8100:439:1:o;8544:::-;8776:3;8814:6;8808:13;8830:53;8876:6;8871:3;8864:4;8856:6;8852:17;8830:53;:::i;:::-;-1:-1:-1;;;8905:16:1;;8930:18;;;-1:-1:-1;8975:1:1;8964:13;;8544:439;-1:-1:-1;8544:439:1:o;8988:::-;9220:3;9258:6;9252:13;9274:53;9320:6;9315:3;9308:4;9300:6;9296:17;9274:53;:::i;:::-;-1:-1:-1;;;9349:16:1;;9374:18;;;-1:-1:-1;9419:1:1;9408:13;;8988:439;-1:-1:-1;8988:439:1:o;9432:1103::-;9962:3;10000:6;9994:13;10016:53;10062:6;10057:3;10050:4;10042:6;10038:17;10016:53;:::i;:::-;10100:6;10095:3;10091:16;10078:29;;-1:-1:-1;;;10152:2:1;10145:5;10138:17;10186:6;10180:13;10202:65;10258:8;10254:1;10247:5;10243:13;10236:4;10228:6;10224:17;10202:65;:::i;:::-;10330:1;10286:20;;10322:10;;;10315:22;-1:-1:-1;;;10361:1:1;10353:10;;10346:31;10402:13;;10424:63;10402:13;10473:2;10465:11;;10458:4;10446:17;;10424:63;:::i;:::-;10507:17;10526:2;10503:26;;9432:1103;-1:-1:-1;;;;;9432:1103:1:o;10540:439::-;10772:3;10810:6;10804:13;10826:53;10872:6;10867:3;10860:4;10852:6;10848:17;10826:53;:::i;:::-;-1:-1:-1;;;10901:16:1;;10926:18;;;-1:-1:-1;10971:1:1;10960:13;;10540:439;-1:-1:-1;10540:439:1:o;10984:::-;11216:3;11254:6;11248:13;11270:53;11316:6;11311:3;11304:4;11296:6;11292:17;11270:53;:::i;:::-;-1:-1:-1;;;11345:16:1;;11370:18;;;-1:-1:-1;11415:1:1;11404:13;;10984:439;-1:-1:-1;10984:439:1:o;11428:1757::-;-1:-1:-1;;;12077:59:1;;12159:13;;12059:3;;12181:62;12159:13;12231:2;12222:12;;12215:4;12203:17;;12181:62;:::i;:::-;12307:66;12302:2;12262:16;;;12294:11;;;12287:87;12403:34;12398:2;12390:11;;12383:55;12467:34;12462:2;12454:11;;12447:55;12532:66;12526:3;12518:12;;12511:88;12629:66;12623:3;12615:12;;12608:88;12726:66;12720:3;12712:12;;12705:88;12818:13;;12840:64;12818:13;12889:3;12881:12;;12874:4;12862:17;;12840:64;:::i;:::-;12923:58;12976:3;12965:8;12961:2;12957:17;12953:27;12923:58;:::i;:::-;12913:68;;;13012:6;13006:13;13028:54;13073:8;13069:2;13062:4;13054:6;13050:17;13028:54;:::i;:::-;-1:-1:-1;;;13101:17:1;;13127:26;;;13177:1;13169:10;;11428:1757;-1:-1:-1;;;;;11428:1757:1:o;13190:2280::-;-1:-1:-1;;;14286:57:1;;14366:13;;14268:3;;14388:62;14366:13;14438:2;14429:12;;14422:4;14410:17;;14388:62;:::i;:::-;14514:66;14509:2;14469:16;;;14501:11;;;14494:87;14610:34;14605:2;14597:11;;14590:55;14674:66;14669:2;14661:11;;14654:87;14771:66;14765:3;14757:12;;14750:88;-1:-1:-1;;;14862:3:1;14854:12;;14847:50;14922:13;;14944:64;14922:13;14993:3;14985:12;;14978:4;14966:17;;14944:64;:::i;:::-;15074:66;15068:3;15027:17;;;;15060:12;;;15053:88;-1:-1:-1;;;15165:3:1;15157:12;;15150:54;15220:244;15250:213;15276:186;15306:155;15332:128;15362:97;15388:70;15418:39;15452:3;15444:12;;15436:6;15418:39;:::i;:::-;4963:66;4951:79;;-1:-1:-1;;;5055:2:1;5046:12;;5039:54;5118:2;5109:12;;4886:241;15388:70;15380:6;15362:97;:::i;:::-;5209:66;5197:79;;-1:-1:-1;;;5301:2:1;5292:12;;5285:54;5364:2;5355:12;;5132:241;15332:128;15324:6;15306:155;:::i;:::-;15276:186;:::i;:::-;15268:6;15250:213;:::i;:::-;-1:-1:-1;;;4821:27:1;;4873:1;4864:11;;4756:125;15220:244;15213:251;13190:2280;-1:-1:-1;;;;;;;;;13190:2280:1:o;15475:448::-;15737:31;15732:3;15725:44;15707:3;15798:6;15792:13;15814:62;15869:6;15864:2;15859:3;15855:12;15848:4;15840:6;15836:17;15814:62;:::i;:::-;15896:16;;;;15914:2;15892:25;;15475:448;-1:-1:-1;;15475:448:1:o;16136:488::-;-1:-1:-1;;;;;16405:15:1;;;16387:34;;16457:15;;16452:2;16437:18;;16430:43;16504:2;16489:18;;16482:34;;;16552:3;16547:2;16532:18;;16525:31;;;16330:4;;16573:45;;16598:19;;16590:6;16573:45;:::i;:::-;16565:53;16136:488;-1:-1:-1;;;;;;16136:488:1:o;16629:688::-;16816:2;16868:21;;;16787:4;;16975:3;16960:19;;16841:18;;;17002:6;16787:4;17036:252;17050:4;17047:1;17044:11;17036:252;;;17141:2;17137:7;17125:9;17117:6;17113:22;17109:36;17104:3;17097:49;17169:39;17201:6;17192;17186:13;17169:39;:::i;:::-;17159:49;-1:-1:-1;17266:12:1;;;;17231:15;;;;17070:1;17063:9;17036:252;;;-1:-1:-1;17305:6:1;;16629:688;-1:-1:-1;;;;;;16629:688:1:o;17514:219::-;17663:2;17652:9;17645:21;17626:4;17683:44;17723:2;17712:9;17708:18;17700:6;17683:44;:::i;18150:414::-;18352:2;18334:21;;;18391:2;18371:18;;;18364:30;18430:34;18425:2;18410:18;;18403:62;-1:-1:-1;;;18496:2:1;18481:18;;18474:48;18554:3;18539:19;;18150:414::o;23229:340::-;23431:2;23413:21;;;23470:2;23450:18;;;23443:30;-1:-1:-1;;;23504:2:1;23489:18;;23482:46;23560:2;23545:18;;23229:340::o;24386:413::-;24588:2;24570:21;;;24627:2;24607:18;;;24600:30;24666:34;24661:2;24646:18;;24639:62;-1:-1:-1;;;24732:2:1;24717:18;;24710:47;24789:3;24774:19;;24386:413::o;26115:128::-;26155:3;26186:1;26182:6;26179:1;26176:13;26173:39;;;26192:18;;:::i;:::-;-1:-1:-1;26228:9:1;;26115:128::o;26248:120::-;26288:1;26314;26304:35;;26319:18;;:::i;:::-;-1:-1:-1;26353:9:1;;26248:120::o;26373:168::-;26413:7;26479:1;26475;26471:6;26467:14;26464:1;26461:21;26456:1;26449:9;26442:17;26438:45;26435:71;;;26486:18;;:::i;:::-;-1:-1:-1;26526:9:1;;26373:168::o;26546:125::-;26586:4;26614:1;26611;26608:8;26605:34;;;26619:18;;:::i;:::-;-1:-1:-1;26656:9:1;;26546:125::o;26676:258::-;26748:1;26758:113;26772:6;26769:1;26766:13;26758:113;;;26848:11;;;26842:18;26829:11;;;26822:39;26794:2;26787:10;26758:113;;;26889:6;26886:1;26883:13;26880:48;;;-1:-1:-1;;26924:1:1;26906:16;;26899:27;26676:258::o;26939:380::-;27018:1;27014:12;;;;27061;;;27082:61;;27136:4;27128:6;27124:17;27114:27;;27082:61;27189:2;27181:6;27178:14;27158:18;27155:38;27152:161;;;27235:10;27230:3;27226:20;27223:1;27216:31;27270:4;27267:1;27260:15;27298:4;27295:1;27288:15;27324:135;27363:3;-1:-1:-1;;27384:17:1;;27381:43;;;27404:18;;:::i;:::-;-1:-1:-1;27451:1:1;27440:13;;27324:135::o;27464:112::-;27496:1;27522;27512:35;;27527:18;;:::i;:::-;-1:-1:-1;27561:9:1;;27464:112::o;27581:127::-;27642:10;27637:3;27633:20;27630:1;27623:31;27673:4;27670:1;27663:15;27697:4;27694:1;27687:15;27713:127;27774:10;27769:3;27765:20;27762:1;27755:31;27805:4;27802:1;27795:15;27829:4;27826:1;27819:15;27845:127;27906:10;27901:3;27897:20;27894:1;27887:31;27937:4;27934:1;27927:15;27961:4;27958:1;27951:15;27977:127;28038:10;28033:3;28029:20;28026:1;28019:31;28069:4;28066:1;28059:15;28093:4;28090:1;28083:15;28109:127;28170:10;28165:3;28161:20;28158:1;28151:31;28201:4;28198:1;28191:15;28225:4;28222:1;28215:15;28241:131;-1:-1:-1;;;;;28316:31:1;;28306:42;;28296:70;;28362:1;28359;28352:12;28377:131;-1:-1:-1;;;;;;28451:32:1;;28441:43;;28431:71;;28498:1;28495;28488:12
Swarm Source
ipfs://bf14afff97ad26f72bc352cd9aa07aa8216a1997f861eb683b69f82dccad900f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.