Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 14 from a total of 14 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 15211269 | 891 days ago | IN | 0 ETH | 0.00022346 | ||||
Set Approval For... | 15211239 | 891 days ago | IN | 0 ETH | 0.00042174 | ||||
Set Approval For... | 15139933 | 902 days ago | IN | 0 ETH | 0.00026613 | ||||
Set Approval For... | 15128451 | 903 days ago | IN | 0 ETH | 0.00055868 | ||||
Set Approval For... | 15128435 | 903 days ago | IN | 0 ETH | 0.00046063 | ||||
Set Approval For... | 15128433 | 903 days ago | IN | 0 ETH | 0.00037526 | ||||
Set Approval For... | 15128428 | 903 days ago | IN | 0 ETH | 0.0003358 | ||||
Set Approval For... | 15128387 | 903 days ago | IN | 0 ETH | 0.00036189 | ||||
Set Approval For... | 15128378 | 903 days ago | IN | 0 ETH | 0.00043551 | ||||
Set Approval For... | 15128375 | 903 days ago | IN | 0 ETH | 0.00038976 | ||||
Set Approval For... | 15127036 | 904 days ago | IN | 0 ETH | 0.00058225 | ||||
Set Approval For... | 15056772 | 914 days ago | IN | 0 ETH | 0.00052945 | ||||
Set Approval For... | 15056761 | 914 days ago | IN | 0 ETH | 0.00097467 | ||||
Set Operator | 14985130 | 927 days ago | IN | 0 ETH | 0.00147539 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
NFTStore
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-18 */ /** *Submitted for verification at Etherscan.io on 2022-05-17 */ // SPDX-License-Identifier: UNLICINCED pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts/introspection/IERC165.sol pragma solidity ^0.6.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol pragma solidity ^0.6.2; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external; } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol pragma solidity ^0.6.0; /** * _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns(bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns(bytes4); } // File: @openzeppelin/contracts/introspection/ERC165.sol pragma solidity ^0.6.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts may inherit from this and call {_registerInterface} to declare * their support of an interface. */ contract ERC165 is IERC165 { /* * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7 */ bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; /** * @dev Mapping of interface ids to whether or not it's supported. */ mapping(bytes4 => bool) private _supportedInterfaces; constructor () internal { // Derived contracts need only register support for their own interfaces, // we register support for ERC165 itself here _registerInterface(_INTERFACE_ID_ERC165); } /** * @dev See {IERC165-supportsInterface}. * * Time complexity O(1), guaranteed to always use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) public view override returns (bool) { return _supportedInterfaces[interfaceId]; } /** * @dev Registers the contract as an implementer of the interface defined by * `interfaceId`. Support of the actual ERC165 interface is automatic and * registering its interface id is not required. * * See {IERC165-supportsInterface}. * * Requirements: * * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`). */ function _registerInterface(bytes4 interfaceId) internal virtual { require(interfaceId != 0xffffffff, "ERC165: invalid interface id"); _supportedInterfaces[interfaceId] = true; } } // File: @openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol pragma solidity ^0.6.0; /** * @dev _Available since v3.1._ */ abstract contract ERC1155Receiver is ERC165, IERC1155Receiver { constructor() public { _registerInterface( ERC1155Receiver(0).onERC1155Received.selector ^ ERC1155Receiver(0).onERC1155BatchReceived.selector ); } } // File: @openzeppelin/contracts/GSN/Context.sol pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN 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 payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.6.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ 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 () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: contracts/lib/CommonConstants.sol pragma solidity 0.6.12; /** Note: Simple contract to use as base for const vals */ contract CommonConstants { bytes4 internal constant ERC1155_ACCEPTED = 0xf23a6e61; // bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)")) bytes4 internal constant ERC1155_BATCH_ACCEPTED = 0xbc197c81; // bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)")) } // File: contracts/lib/Roles.sol pragma solidity 0.6.12; /** * @title Roles * @dev Library for managing addresses assigned to a Role. */ library Roles { struct Role { mapping(address => bool) bearer; } /** * @dev Give an account access to this role. */ function add(Role storage role, address account) internal { require(!has(role, account), "Roles: account already has role"); role.bearer[account] = true; } /** * @dev Remove an account's access to this role. */ function remove(Role storage role, address account) internal { require(has(role, account), "Roles: account does not have role"); role.bearer[account] = false; } /** * @dev Check if an account has this role. * @return bool */ function has(Role storage role, address account) internal view returns (bool) { require(account != address(0), "Roles: account is the zero address"); return role.bearer[account]; } } // File: contracts/lib/SignerRole.sol pragma solidity 0.6.12; contract SignerRole is Context { using Roles for Roles.Role; event SignerAdded(address indexed account); event SignerRemoved(address indexed account); Roles.Role private _signers; constructor() internal { _addSigner(_msgSender()); } modifier onlySigner() { require( isSigner(_msgSender()), "SignerRole: caller does not have the Signer role" ); _; } function isSigner(address account) public view returns (bool) { return _signers.has(account); } function addSigner(address account) public virtual onlySigner { _addSigner(account); } function renounceSigner() public { _removeSigner(_msgSender()); } function _addSigner(address account) internal { _signers.add(account); emit SignerAdded(account); } function _removeSigner(address account) internal { _signers.remove(account); emit SignerRemoved(account); } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155MetadataURI.sol pragma solidity ^0.6.2; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.6.2; /** * @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 in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: contracts/lib/ERC1155Base.sol pragma solidity 0.6.12; /** * * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155Base is Context, ERC165, IERC1155, IERC1155MetadataURI { using SafeMath for uint256; using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) internal _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) internal _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string internal _uri; /* * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4 * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465 * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5 * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6 * * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^ * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26 */ bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26; /* * bytes4(keccak256('uri(uint256)')) == 0x0e89341c */ bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c; /** * @dev See {_setURI}. */ constructor() public { // register the supported interfaces to conform to ERC1155 via ERC165 _registerInterface(_INTERFACE_ID_ERC1155); // register the supported interfaces to conform to ERC1155MetadataURI via ERC165 _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) external view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view override returns (uint256) { require( account != address(0), "ERC1155: balance query for the zero address" ); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view override returns (uint256[] memory) { require( accounts.length == ids.length, "ERC1155: accounts and ids length mismatch" ); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { require( accounts[i] != address(0), "ERC1155: batch balance query for the zero address" ); batchBalances[i] = _balances[ids[i]][accounts[i]]; } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require( _msgSender() != operator, "ERC1155: setting approval status for self" ); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require(to != address(0), "ERC1155: transfer to the zero address"); require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); address operator = _msgSender(); _beforeTokenTransfer( operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data ); _balances[id][from] = _balances[id][from].sub( amount, "ERC1155: insufficient balance for transfer" ); _balances[id][to] = _balances[id][to].add(amount); emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( ids.length == amounts.length, "ERC1155: ids and amounts length mismatch" ); require(to != address(0), "ERC1155: transfer to the zero address"); require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; _balances[id][from] = _balances[id][from].sub( amount, "ERC1155: insufficient balance for transfer" ); _balances[id][to] = _balances[id][to].add(amount); } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck( operator, from, to, ids, amounts, data ); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`. * * Emits a {TransferSingle} event. * * Requirements: * * - `account` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address account, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(account != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer( operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data ); _balances[id][account] = _balances[id][account].add(amount); emit TransferSingle(operator, address(0), account, id, amount); _doSafeTransferAcceptanceCheck( operator, address(0), account, id, amount, data ); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require( ids.length == amounts.length, "ERC1155: ids and amounts length mismatch" ); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]); } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck( operator, address(0), to, ids, amounts, data ); } /** * @dev Destroys `amount` tokens of token type `id` from `account` * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens of token type `id`. */ function _burn( address account, uint256 id, uint256 amount ) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer( operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), "" ); _balances[id][account] = _balances[id][account].sub( amount, "ERC1155: burn amount exceeds balance" ); emit TransferSingle(operator, account, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address account, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); require( ids.length == amounts.length, "ERC1155: ids and amounts length mismatch" ); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][account] = _balances[ids[i]][account].sub( amounts[i], "ERC1155: burn amount exceeds balance" ); } emit TransferBatch(operator, account, address(0), ids, amounts); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received( operator, from, id, amount, data ) returns (bytes4 response) { if ( response != IERC1155Receiver(to).onERC1155Received.selector ) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived( operator, from, ids, amounts, data ) returns (bytes4 response) { if ( response != IERC1155Receiver(to).onERC1155BatchReceived.selector ) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: contracts/test.sol // File: contracts/lib/UintLibrary.sol pragma solidity 0.6.12; library UintLibrary { function toString(uint256 _i) internal pure returns (string memory) { if (_i == 0) { return "0"; } uint256 j = _i; uint256 len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint256 k = len - 1; while (_i != 0) { bstr[k--] = bytes1(uint8(48 + (_i % 10))); _i /= 10; } return string(bstr); } } // File: contracts/lib/StringLibrary.sol pragma solidity 0.6.12; library StringLibrary { using UintLibrary for uint256; function append(string memory _a, string memory _b) internal pure returns (string memory) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory bab = new bytes(_ba.length + _bb.length); uint256 k = 0; for (uint256 i = 0; i < _ba.length; i++) bab[k++] = _ba[i]; for (uint256 i = 0; i < _bb.length; i++) bab[k++] = _bb[i]; return string(bab); } function append( string memory _a, string memory _b, string memory _c ) internal pure returns (string memory) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory bbb = new bytes(_ba.length + _bb.length + _bc.length); uint256 k = 0; for (uint256 i = 0; i < _ba.length; i++) bbb[k++] = _ba[i]; for (uint256 i = 0; i < _bb.length; i++) bbb[k++] = _bb[i]; for (uint256 i = 0; i < _bc.length; i++) bbb[k++] = _bc[i]; return string(bbb); } function recover( string memory message, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { bytes memory msgBytes = bytes(message); bytes memory fullMessage = concat( bytes("\x19Ethereum Signed Message:\n"), bytes(msgBytes.length.toString()), msgBytes, new bytes(0), new bytes(0), new bytes(0), new bytes(0) ); return ecrecover(keccak256(fullMessage), v, r, s); } function concat( bytes memory _ba, bytes memory _bb, bytes memory _bc, bytes memory _bd, bytes memory _be, bytes memory _bf, bytes memory _bg ) internal pure returns (bytes memory) { bytes memory resultBytes = new bytes( _ba.length + _bb.length + _bc.length + _bd.length + _be.length + _bf.length + _bg.length ); uint256 k = 0; for (uint256 i = 0; i < _ba.length; i++) resultBytes[k++] = _ba[i]; for (uint256 i = 0; i < _bb.length; i++) resultBytes[k++] = _bb[i]; for (uint256 i = 0; i < _bc.length; i++) resultBytes[k++] = _bc[i]; for (uint256 i = 0; i < _bd.length; i++) resultBytes[k++] = _bd[i]; for (uint256 i = 0; i < _be.length; i++) resultBytes[k++] = _be[i]; for (uint256 i = 0; i < _bf.length; i++) resultBytes[k++] = _bf[i]; for (uint256 i = 0; i < _bg.length; i++) resultBytes[k++] = _bg[i]; return resultBytes; } } // File: contracts/lib/HasTokenURI.sol pragma solidity 0.6.12; contract HasTokenURI { using StringLibrary for string; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev Returns an URI for a given token ID. * Throws if the token ID does not exist. May return an empty string. * @param tokenId uint256 ID of the token to query */ function _tokenURI(uint256 tokenId) internal view returns (string memory) { return (_tokenURIs[tokenId]); } /** * @dev Internal function to set the token URI for a given token. * Reverts if the token ID does not exist. * @param tokenId uint256 ID of the token to set its URI * @param uri string URI to assign */ function _setTokenURI(uint256 tokenId, string memory uri) internal virtual { _tokenURIs[tokenId] = uri; } function _clearTokenURI(uint256 tokenId) internal { if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } // File: contracts/lib/StoreBase.sol pragma solidity 0.6.12; /** Note: The ERC-165 identifier for this interface is 0x0e89341c. */ contract ERC1155Metadata_URI is HasTokenURI { function tokenUri(uint256 _id) external view virtual returns (string memory) { return _tokenURI(_id); } } contract StoreBase is ERC165, Ownable, ERC1155Metadata_URI, ERC1155Base { // id => creator mapping(uint256 => address) public creators; // Creates a new token type and assings _initialSupply to minter function _mint( address from, address to, uint256 _id, uint256 _supply, string memory _uri ) internal { require( creators[_id] == address(0x0) || creators[_id] == from, "Token is already minted" ); require(_supply != 0, "Supply should be positive"); require(bytes(_uri).length > 0, "Uri should be set"); creators[_id] = from; _balances[_id][to] += _supply; _setTokenURI(_id, _uri); // Transfer event with mint semantic emit TransferSingle(msg.sender, address(0x0), to, _id, _supply); emit URI(_uri, _id); } function burn(uint256 _id, uint256 _value) external { require(creators[_id] == msg.sender, "Only creators able to burns "); _burn(msg.sender, _id, _value); } /** * @dev Internal function to set the token URI for a given token. * Reverts if the token ID does not exist. * @param tokenId uint256 ID of the token to set its URI * @param uri string URI to assign */ function _setTokenURI(uint256 tokenId, string memory uri) internal virtual override { require(creators[tokenId] != address(0x0), "Token should exist"); super._setTokenURI(tokenId, uri); } } pragma solidity 0.6.12; pragma experimental ABIEncoderV2; contract NFTStore is Ownable, SignerRole, StoreBase { string public name; string public symbol; mapping(address => bool) public operators; mapping(bytes32 => bool) public messageHash; uint256 public blockLimit = 60; event SetOperator(address operators, bool status); //modifier modifier isOperator() { require(operators[msg.sender] == true, "Only operator"); _; } constructor( string memory _name, string memory _symbol, address signer ) public { name = _name; symbol = _symbol; _addSigner(signer); _registerInterface(bytes4(keccak256("MINT_WITH_ADDRESS"))); } function addSigner(address account) public virtual override onlyOwner { _addSigner(account); } function removeSigner(address account) public onlyOwner { _removeSigner(account); } function setBlockLimit(uint256 newBlockLimit) external onlyOwner { blockLimit = newBlockLimit; } function mint( address from, address to, uint256 id, uint256 blockExpiry, uint8 v, bytes32 r, bytes32 s, uint256 supply, string memory uri ) public isOperator returns (bool) { require( blockExpiry >= block.number && blockExpiry <= (block.number + blockLimit), "signature expired" ); bytes32 msgHash = prepareHash(id, blockExpiry); require( isSigner(ecrecover(msgHash, v, r, s)), "signer should sign tokenId" ); require(!messageHash[msgHash], "signature duplicate"); messageHash[msgHash] = true; _mint(from, to, id, supply, uri); return true; } function mintWithSignature( address from, address to, uint256 id, uint256 blockExpiry, uint8 v, bytes32 r, bytes32 s, uint256 supply, string memory uri ) public returns (bool) { require( blockExpiry >= block.number && blockExpiry <= (block.number + blockLimit), "signature expired" ); bytes32 msgHash = prepareMintHash(from, id, blockExpiry); require( isSigner(ecrecover(msgHash, v, r, s)), "signer should sign tokenId" ); require(!messageHash[msgHash], "signature duplicate"); messageHash[msgHash] = true; _mint(from, to, id, supply, uri); return true; } function setOperator(address operator, bool status) public onlyOwner { operators[operator] = status; emit SetOperator(operator, status); } function prepareHash(uint256 id, uint256 blockExpiry) public pure returns (bytes32) { return keccak256( abi.encodePacked( "\x19Ethereum Signed Message:\n32", keccak256( abi.encodePacked( abi.encodePacked( id, blockExpiry) ) ) ) ); } function prepareMintHash( address from, uint256 id, uint256 blockExpiry ) public view returns (bytes32) { return keccak256( abi.encodePacked( "\x19Ethereum Signed Message:\n32", keccak256( abi.encodePacked( abi.encodePacked(this, id, blockExpiry, from) ) ) ) ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"signer","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"operators","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"SetOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"SignerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"SignerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"creators","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSigner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"messageHash","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"blockExpiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"blockExpiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"mintWithSignature","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"operators","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"blockExpiry","type":"uint256"}],"name":"prepareHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"blockExpiry","type":"uint256"}],"name":"prepareMintHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBlockLimit","type":"uint256"}],"name":"setBlockLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"tokenUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052603c600c553480156200001657600080fd5b50604051620054223803806200542283398181016040528101906200003c9190620005aa565b620000546301ffc9a760e01b620001d260201b60201c565b600062000066620002aa60201b60201c565b905080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200012562000119620002aa60201b60201c565b620002b260201b60201c565b6200013d63d9b67a2660e01b620001d260201b60201c565b62000155630e89341c60e01b620001d260201b60201c565b82600890805190602001906200016d92919062000491565b5081600990805190602001906200018692919062000491565b506200019881620002b260201b60201c565b620001c97fe37243f27916e395706434720b54132b80ef5cc8c56f39b0df6485e8dfb697cf620001d260201b60201c565b50505062000874565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156200023e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002359062000740565b60405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b620002cd8160026200031360201b620020831790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f2460405160405180910390a250565b620003258282620003c660201b60201c565b1562000368576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200035f906200071e565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200043a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004319062000762565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004d457805160ff191683800117855562000505565b8280016001018555821562000505579182015b8281111562000504578251825591602001919060010190620004e7565b5b50905062000514919062000518565b5090565b5b808211156200053357600081600090555060010162000519565b5090565b60008151905062000548816200085a565b92915050565b600082601f8301126200056057600080fd5b8151620005776200057182620007b2565b62000784565b915080825260208301602083018583830111156200059457600080fd5b620005a183828462000824565b50505092915050565b600080600060608486031215620005c057600080fd5b600084015167ffffffffffffffff811115620005db57600080fd5b620005e9868287016200054e565b935050602084015167ffffffffffffffff8111156200060757600080fd5b62000615868287016200054e565b9250506040620006288682870162000537565b9150509250925092565b600062000641601f83620007df565b91507f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006000830152602082019050919050565b600062000683601c83620007df565b91507f4552433136353a20696e76616c696420696e74657266616365206964000000006000830152602082019050919050565b6000620006c5602283620007df565b91507f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006020820190508181036000830152620007398162000632565b9050919050565b600060208201905081810360008301526200075b8162000674565b9050919050565b600060208201905081810360008301526200077d81620006b6565b9050919050565b6000604051905081810181811067ffffffffffffffff82111715620007a857600080fd5b8060405250919050565b600067ffffffffffffffff821115620007ca57600080fd5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b6000620007fd8262000804565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156200084457808201518184015260208101905062000827565b8381111562000854576000848401525b50505050565b6200086581620007f0565b81146200087157600080fd5b50565b614b9e80620008846000396000f3fe608060405234801561001057600080fd5b50600436106101ce5760003560e01c80637649145c11610104578063cd53d08e116100a2578063eb12d61e11610071578063eb12d61e14610589578063f242432a146105a5578063f2fde38b146105c1578063f3bcd237146105dd576101ce565b8063cd53d08e146104ef578063d1442f4d1461051f578063e5c8b03d1461054f578063e985e9c514610559576101ce565b806395d89b41116100de57806395d89b4114610469578063a22cb46514610487578063b390c0ab146104a3578063bc9ffa17146104bf576101ce565b80637649145c146103eb5780637df73e271461041b5780638da5cb5b1461044b576101ce565b80631675f455116101715780634b7157d31161014b5780634b7157d3146103655780634e1273f414610395578063558a7297146103c5578063715018a6146103e1576101ce565b80631675f455146102e95780632eb2c2d61461031957806336cedc7c14610335576101ce565b80630e316ab7116101ad5780630e316ab7146102515780630e89341c1461026d578063113555851461029d57806313e7c9d8146102b9576101ce565b8062fdd58e146101d357806301ffc9a71461020357806306fdde0314610233575b600080fd5b6101ed60048036038101906101e89190613479565b6105fb565b6040516101fa91906146e6565b60405180910390f35b61021d60048036038101906102189190613599565b6106c5565b60405161022a9190614309565b60405180910390f35b61023b61072c565b6040516102489190614384565b60405180910390f35b61026b600480360381019061026691906131ac565b6107ca565b005b610287600480360381019061028291906135eb565b61086d565b6040516102949190614384565b60405180910390f35b6102b760048036038101906102b291906135eb565b610911565b005b6102d360048036038101906102ce91906131ac565b6109b2565b6040516102e09190614309565b60405180910390f35b61030360048036038101906102fe91906135eb565b6109d2565b6040516103109190614384565b60405180910390f35b610333600480360381019061032e9190613211565b6109e4565b005b61034f600480360381019061034a91906134b5565b610da5565b60405161035c9190614324565b60405180910390f35b61037f600480360381019061037a919061335f565b610e22565b60405161038c9190614309565b60405180910390f35b6103af60048036038101906103aa9190613504565b610fc8565b6040516103bc91906142b0565b60405180910390f35b6103df60048036038101906103da919061343d565b61118e565b005b6103e96112b9565b005b6104056004803603810190610400919061335f565b611411565b6040516104129190614309565b60405180910390f35b610435600480360381019061043091906131ac565b611649565b6040516104429190614309565b60405180910390f35b610453611666565b60405161046091906141aa565b60405180910390f35b610471611690565b60405161047e9190614384565b60405180910390f35b6104a1600480360381019061049c919061343d565b61172e565b005b6104bd60048036038101906104b89190613614565b6118af565b005b6104d960048036038101906104d49190613570565b61195f565b6040516104e69190614309565b60405180910390f35b610509600480360381019061050491906135eb565b61197f565b60405161051691906141aa565b60405180910390f35b61053960048036038101906105349190613614565b6119b2565b6040516105469190614324565b60405180910390f35b610557611a2a565b005b610573600480360381019061056e91906131d5565b611a3c565b6040516105809190614309565b60405180910390f35b6105a3600480360381019061059e91906131ac565b611ad0565b005b6105bf60048036038101906105ba91906132d0565b611b73565b005b6105db60048036038101906105d691906131ac565b611eb6565b005b6105e561207d565b6040516105f291906146e6565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066390614426565b60405180910390fd5b6004600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b60088054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107c25780601f10610797576101008083540402835291602001916107c2565b820191906000526020600020905b8154815290600101906020018083116107a557829003601f168201915b505050505081565b6107d261212b565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085890614586565b60405180910390fd5b61086a81612133565b50565b606060068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109055780601f106108da57610100808354040283529160200191610905565b820191906000526020600020905b8154815290600101906020018083116108e857829003601f168201915b50505050509050919050565b61091961212b565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099f90614586565b60405180910390fd5b80600c8190555050565b600a6020528060005260406000206000915054906101000a900460ff1681565b60606109dd8261218d565b9050919050565b8151835114610a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1f90614646565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8f90614506565b60405180910390fd5b610aa061212b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610ae65750610ae585610ae061212b565b611a3c565b5b610b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1c90614526565b60405180910390fd5b6000610b2f61212b565b9050610b3f818787878787612242565b60005b8451811015610d10576000858281518110610b5957fe5b602002602001015190506000858381518110610b7157fe5b60200260200101519050610bf8816040518060600160405280602a8152602001614b3f602a91396004600086815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224a9092919063ffffffff16565b6004600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610caf816004600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122a590919063ffffffff16565b6004600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050806001019050610b42565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610d879291906142d2565b60405180910390a4610d9d8187878787876122fa565b505050505050565b600030838386604051602001610dbe949392919061410a565b604051602081830303815290604052604051602001610ddd91906140f3565b60405160208183030381529060405280519060200120604051602001610e039190614158565b6040516020818303038152906040528051906020012090509392505050565b6000438710158015610e385750600c5443018711155b610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e906146a6565b60405180910390fd5b6000610e848b8a8a610da5565b9050610edd60018289898960405160008152602001604052604051610eac949392919061433f565b6020604051602081039080840390855afa158015610ece573d6000803e3d6000fd5b50505060206040510351611649565b610f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f13906146c6565b60405180910390fd5b600b600082815260200190815260200160002060009054906101000a900460ff1615610f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f74906144c6565b60405180910390fd5b6001600b600083815260200190815260200160002060006101000a81548160ff021916908315150217905550610fb68b8b8b87876124ca565b60019150509998505050505050505050565b6060815183511461100e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100590614626565b60405180910390fd5b6060835167ffffffffffffffff8111801561102857600080fd5b506040519080825280602002602001820160405280156110575781602001602082028036833780820191505090505b50905060005b845181101561118357600073ffffffffffffffffffffffffffffffffffffffff1685828151811061108a57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614446565b60405180910390fd5b600460008583815181106110f957fe5b60200260200101518152602001908152602001600020600086838151811061111d57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482828151811061116c57fe5b60200260200101818152505080600101905061105d565b508091505092915050565b61119661212b565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121c90614586565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f1618a22a3b00b9ac70fd5a82f1f5cdd8cb272bd0f1b740ddf7c26ab05881dd5b82826040516112ad929190614287565b60405180910390a15050565b6112c161212b565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134790614586565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600060011515600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146114a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149d90614686565b60405180910390fd5b4387101580156114ba5750600c5443018711155b6114f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f0906146a6565b60405180910390fd5b600061150589896119b2565b905061155e6001828989896040516000815260200160405260405161152d949392919061433f565b6020604051602081039080840390855afa15801561154f573d6000803e3d6000fd5b50505060206040510351611649565b61159d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611594906146c6565b60405180910390fd5b600b600082815260200190815260200160002060009054906101000a900460ff16156115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f5906144c6565b60405180910390fd5b6001600b600083815260200190815260200160002060006101000a81548160ff0219169083151502179055506116378b8b8b87876124ca565b60019150509998505050505050505050565b600061165f8260026127d590919063ffffffff16565b9050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60098054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117265780601f106116fb57610100808354040283529160200191611726565b820191906000526020600020905b81548152906001019060200180831161170957829003601f168201915b505050505081565b8173ffffffffffffffffffffffffffffffffffffffff1661174d61212b565b73ffffffffffffffffffffffffffffffffffffffff1614156117a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179b90614606565b60405180910390fd5b80600560006117b161212b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661185e61212b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118a39190614309565b60405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff166007600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194790614666565b60405180910390fd5b61195b33838361289d565b5050565b600b6020528060005260406000206000915054906101000a900460ff1681565b60076020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600082826040516020016119c792919061417e565b6040516020818303038152906040526040516020016119e691906140f3565b60405160208183030381529060405280519060200120604051602001611a0c9190614158565b60405160208183030381529060405280519060200120905092915050565b611a3a611a3561212b565b612133565b565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ad861212b565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5e90614586565b60405180910390fd5b611b7081612a9d565b50565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bda90614506565b60405180910390fd5b611beb61212b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611c315750611c3085611c2b61212b565b611a3c565b5b611c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c67906144a6565b60405180910390fd5b6000611c7a61212b565b9050611c9a818787611c8b88612af7565b611c9488612af7565b87612242565b611d17836040518060600160405280602a8152602001614b3f602a91396004600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224a9092919063ffffffff16565b6004600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611dce836004600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122a590919063ffffffff16565b6004600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611e98929190614701565b60405180910390a4611eae818787878787612b67565b505050505050565b611ebe61212b565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4490614586565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb490614466565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b61208d82826127d5565b156120cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c490614406565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b612147816002612d3790919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b60405160405180910390a250565b6060600360008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122365780601f1061220b57610100808354040283529160200191612236565b820191906000526020600020905b81548152906001019060200180831161221957829003601f168201915b50505050509050919050565b505050505050565b6000838311158290612292576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122899190614384565b60405180910390fd5b5060008385039050809150509392505050565b6000808284019050838110156122f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e790614486565b60405180910390fd5b8091505092915050565b6123198473ffffffffffffffffffffffffffffffffffffffff16612dde565b156124c2578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161235f9594939291906141c5565b602060405180830381600087803b15801561237957600080fd5b505af19250505080156123aa57506040513d601f19601f820116820180604052508101906123a791906135c2565b60015b612439576123b66149da565b806123c157506123fe565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f59190614384565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612430906143a6565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146124c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b7906143e6565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff166007600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061259657508473ffffffffffffffffffffffffffffffffffffffff166007600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6125d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cc906145c6565b60405180910390fd5b6000821415612619576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612610906145e6565b60405180910390fd5b600081511161265d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612654906144e6565b60405180910390fd5b846007600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816004600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506127178382612df1565b8373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62868660405161278e929190614701565b60405180910390a4827f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b826040516127c69190614384565b60405180910390a25050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283d906145a6565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561290d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290490614566565b60405180910390fd5b600061291761212b565b90506129478185600061292987612af7565b61293287612af7565b60405180602001604052806000815250612242565b6129c482604051806060016040528060248152602001614b1b602491396004600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224a9092919063ffffffff16565b6004600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051612a8f929190614701565b60405180910390a450505050565b612ab181600261208390919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f2460405160405180910390a250565b606080600167ffffffffffffffff81118015612b1257600080fd5b50604051908082528060200260200182016040528015612b415781602001602082028036833780820191505090505b5090508281600081518110612b5257fe5b60200260200101818152505080915050919050565b612b868473ffffffffffffffffffffffffffffffffffffffff16612dde565b15612d2f578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612bcc95949392919061422d565b602060405180830381600087803b158015612be657600080fd5b505af1925050508015612c1757506040513d601f19601f82011682018060405250810190612c1491906135c2565b60015b612ca657612c236149da565b80612c2e5750612c6b565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c629190614384565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9d906143a6565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d24906143e6565b60405180910390fd5b505b505050505050565b612d4182826127d5565b612d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7790614546565b60405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff166007600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8b906143c6565b60405180910390fd5b612e9e8282612ea2565b5050565b80600360008481526020019081526020016000209080519060200190612ec9929190612ece565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612f0f57805160ff1916838001178555612f3d565b82800160010185558215612f3d579182015b82811115612f3c578251825591602001919060010190612f21565b5b509050612f4a9190612f4e565b5090565b5b80821115612f67576000816000905550600101612f4f565b5090565b600081359050612f7a81614a90565b92915050565b600082601f830112612f9157600080fd5b8135612fa4612f9f82614757565b61472a565b91508181835260208401935060208101905083856020840282011115612fc957600080fd5b60005b83811015612ff95781612fdf8882612f6b565b845260208401935060208301925050600181019050612fcc565b5050505092915050565b600082601f83011261301457600080fd5b81356130276130228261477f565b61472a565b9150818183526020840193506020810190508385602084028201111561304c57600080fd5b60005b8381101561307c57816130628882613182565b84526020840193506020830192505060018101905061304f565b5050505092915050565b60008135905061309581614aa7565b92915050565b6000813590506130aa81614abe565b92915050565b6000813590506130bf81614ad5565b92915050565b6000815190506130d481614ad5565b92915050565b600082601f8301126130eb57600080fd5b81356130fe6130f9826147a7565b61472a565b9150808252602083016020830185838301111561311a57600080fd5b613125838284614935565b50505092915050565b600082601f83011261313f57600080fd5b813561315261314d826147d3565b61472a565b9150808252602083016020830185838301111561316e57600080fd5b613179838284614935565b50505092915050565b60008135905061319181614aec565b92915050565b6000813590506131a681614b03565b92915050565b6000602082840312156131be57600080fd5b60006131cc84828501612f6b565b91505092915050565b600080604083850312156131e857600080fd5b60006131f685828601612f6b565b925050602061320785828601612f6b565b9150509250929050565b600080600080600060a0868803121561322957600080fd5b600061323788828901612f6b565b955050602061324888828901612f6b565b945050604086013567ffffffffffffffff81111561326557600080fd5b61327188828901613003565b935050606086013567ffffffffffffffff81111561328e57600080fd5b61329a88828901613003565b925050608086013567ffffffffffffffff8111156132b757600080fd5b6132c3888289016130da565b9150509295509295909350565b600080600080600060a086880312156132e857600080fd5b60006132f688828901612f6b565b955050602061330788828901612f6b565b945050604061331888828901613182565b935050606061332988828901613182565b925050608086013567ffffffffffffffff81111561334657600080fd5b613352888289016130da565b9150509295509295909350565b60008060008060008060008060006101208a8c03121561337e57600080fd5b600061338c8c828d01612f6b565b995050602061339d8c828d01612f6b565b98505060406133ae8c828d01613182565b97505060606133bf8c828d01613182565b96505060806133d08c828d01613197565b95505060a06133e18c828d0161309b565b94505060c06133f28c828d0161309b565b93505060e06134038c828d01613182565b9250506101008a013567ffffffffffffffff81111561342157600080fd5b61342d8c828d0161312e565b9150509295985092959850929598565b6000806040838503121561345057600080fd5b600061345e85828601612f6b565b925050602061346f85828601613086565b9150509250929050565b6000806040838503121561348c57600080fd5b600061349a85828601612f6b565b92505060206134ab85828601613182565b9150509250929050565b6000806000606084860312156134ca57600080fd5b60006134d886828701612f6b565b93505060206134e986828701613182565b92505060406134fa86828701613182565b9150509250925092565b6000806040838503121561351757600080fd5b600083013567ffffffffffffffff81111561353157600080fd5b61353d85828601612f80565b925050602083013567ffffffffffffffff81111561355a57600080fd5b61356685828601613003565b9150509250929050565b60006020828403121561358257600080fd5b60006135908482850161309b565b91505092915050565b6000602082840312156135ab57600080fd5b60006135b9848285016130b0565b91505092915050565b6000602082840312156135d457600080fd5b60006135e2848285016130c5565b91505092915050565b6000602082840312156135fd57600080fd5b600061360b84828501613182565b91505092915050565b6000806040838503121561362757600080fd5b600061363585828601613182565b925050602061364685828601613182565b9150509250929050565b600061365c83836140af565b60208301905092915050565b61367181614886565b82525050565b61368861368382614886565b614977565b82525050565b60006136998261480f565b6136a3818561483d565b93506136ae836147ff565b8060005b838110156136df5781516136c68882613650565b97506136d183614830565b9250506001810190506136b2565b5085935050505092915050565b6136f581614898565b82525050565b613704816148a4565b82525050565b61371b613716826148a4565b614989565b82525050565b600061372c8261481a565b613736818561484e565b9350613746818560208601614944565b61374f816149af565b840191505092915050565b60006137658261481a565b61376f818561485f565b935061377f818560208601614944565b80840191505092915050565b61379c61379782614911565b614977565b82525050565b60006137ad82614825565b6137b7818561486a565b93506137c7818560208601614944565b6137d0816149af565b840191505092915050565b60006137e860348361486a565b91507f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008301527f526563656976657220696d706c656d656e7465720000000000000000000000006020830152604082019050919050565b600061384e60128361486a565b91507f546f6b656e2073686f756c6420657869737400000000000000000000000000006000830152602082019050919050565b600061388e60288361486a565b91507f455243313135353a204552433131353552656365697665722072656a6563746560008301527f6420746f6b656e730000000000000000000000000000000000000000000000006020830152604082019050919050565b60006138f4601f8361486a565b91507f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006000830152602082019050919050565b6000613934601c8361487b565b91507f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000830152601c82019050919050565b6000613974602b8361486a565b91507f455243313135353a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b60006139da60318361486a565b91507f455243313135353a2062617463682062616c616e636520717565727920666f7260008301527f20746865207a65726f20616464726573730000000000000000000000000000006020830152604082019050919050565b6000613a4060268361486a565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613aa6601b8361486a565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000613ae660298361486a565b91507f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008301527f20617070726f76656400000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b4c60138361486a565b91507f7369676e6174757265206475706c6963617465000000000000000000000000006000830152602082019050919050565b6000613b8c60118361486a565b91507f5572692073686f756c64206265207365740000000000000000000000000000006000830152602082019050919050565b6000613bcc60258361486a565b91507f455243313135353a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c3260328361486a565b91507f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b6000613c9860218361486a565b91507f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c60008301527f65000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613cfe60238361486a565b91507f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d6460208361486a565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613da460228361486a565b91507f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e0a60178361486a565b91507f546f6b656e20697320616c7265616479206d696e7465640000000000000000006000830152602082019050919050565b6000613e4a60198361486a565b91507f537570706c792073686f756c6420626520706f736974697665000000000000006000830152602082019050919050565b6000613e8a60298361486a565b91507f455243313135353a2073657474696e6720617070726f76616c2073746174757360008301527f20666f722073656c6600000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ef060298361486a565b91507f455243313135353a206163636f756e747320616e6420696473206c656e67746860008301527f206d69736d6174636800000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f5660288361486a565b91507f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008301527f6d69736d617463680000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613fbc601c8361486a565b91507f4f6e6c792063726561746f72732061626c6520746f206275726e7320000000006000830152602082019050919050565b6000613ffc600d8361486a565b91507f4f6e6c79206f70657261746f72000000000000000000000000000000000000006000830152602082019050919050565b600061403c60118361486a565b91507f7369676e617475726520657870697265640000000000000000000000000000006000830152602082019050919050565b600061407c601a8361486a565b91507f7369676e65722073686f756c64207369676e20746f6b656e49640000000000006000830152602082019050919050565b6140b8816148fa565b82525050565b6140c7816148fa565b82525050565b6140de6140d9826148fa565b6149a5565b82525050565b6140ed81614904565b82525050565b60006140ff828461375a565b915081905092915050565b6000614116828761378b565b60148201915061412682866140cd565b60208201915061413682856140cd565b6020820191506141468284613677565b60148201915081905095945050505050565b600061416382613927565b915061416f828461370a565b60208201915081905092915050565b600061418a82856140cd565b60208201915061419a82846140cd565b6020820191508190509392505050565b60006020820190506141bf6000830184613668565b92915050565b600060a0820190506141da6000830188613668565b6141e76020830187613668565b81810360408301526141f9818661368e565b9050818103606083015261420d818561368e565b905081810360808301526142218184613721565b90509695505050505050565b600060a0820190506142426000830188613668565b61424f6020830187613668565b61425c60408301866140be565b61426960608301856140be565b818103608083015261427b8184613721565b90509695505050505050565b600060408201905061429c6000830185613668565b6142a960208301846136ec565b9392505050565b600060208201905081810360008301526142ca818461368e565b905092915050565b600060408201905081810360008301526142ec818561368e565b90508181036020830152614300818461368e565b90509392505050565b600060208201905061431e60008301846136ec565b92915050565b600060208201905061433960008301846136fb565b92915050565b600060808201905061435460008301876136fb565b61436160208301866140e4565b61436e60408301856136fb565b61437b60608301846136fb565b95945050505050565b6000602082019050818103600083015261439e81846137a2565b905092915050565b600060208201905081810360008301526143bf816137db565b9050919050565b600060208201905081810360008301526143df81613841565b9050919050565b600060208201905081810360008301526143ff81613881565b9050919050565b6000602082019050818103600083015261441f816138e7565b9050919050565b6000602082019050818103600083015261443f81613967565b9050919050565b6000602082019050818103600083015261445f816139cd565b9050919050565b6000602082019050818103600083015261447f81613a33565b9050919050565b6000602082019050818103600083015261449f81613a99565b9050919050565b600060208201905081810360008301526144bf81613ad9565b9050919050565b600060208201905081810360008301526144df81613b3f565b9050919050565b600060208201905081810360008301526144ff81613b7f565b9050919050565b6000602082019050818103600083015261451f81613bbf565b9050919050565b6000602082019050818103600083015261453f81613c25565b9050919050565b6000602082019050818103600083015261455f81613c8b565b9050919050565b6000602082019050818103600083015261457f81613cf1565b9050919050565b6000602082019050818103600083015261459f81613d57565b9050919050565b600060208201905081810360008301526145bf81613d97565b9050919050565b600060208201905081810360008301526145df81613dfd565b9050919050565b600060208201905081810360008301526145ff81613e3d565b9050919050565b6000602082019050818103600083015261461f81613e7d565b9050919050565b6000602082019050818103600083015261463f81613ee3565b9050919050565b6000602082019050818103600083015261465f81613f49565b9050919050565b6000602082019050818103600083015261467f81613faf565b9050919050565b6000602082019050818103600083015261469f81613fef565b9050919050565b600060208201905081810360008301526146bf8161402f565b9050919050565b600060208201905081810360008301526146df8161406f565b9050919050565b60006020820190506146fb60008301846140be565b92915050565b600060408201905061471660008301856140be565b61472360208301846140be565b9392505050565b6000604051905081810181811067ffffffffffffffff8211171561474d57600080fd5b8060405250919050565b600067ffffffffffffffff82111561476e57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561479657600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156147be57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156147ea57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614891826148da565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061491c82614923565b9050919050565b600061492e826148da565b9050919050565b82818337600083830152505050565b60005b83811015614962578082015181840152602081019050614947565b83811115614971576000848401525b50505050565b600061498282614993565b9050919050565b6000819050919050565b600061499e826149c0565b9050919050565b6000819050919050565b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b600060443d10156149ea57614a8d565b60046000803e6149fb6000516149cd565b6308c379a08114614a0c5750614a8d565b60405160043d036004823e80513d602482011167ffffffffffffffff82111715614a3857505050614a8d565b808201805167ffffffffffffffff811115614a57575050505050614a8d565b8060208301013d8501811115614a7257505050505050614a8d565b614a7b826149af565b60208401016040528296505050505050505b90565b614a9981614886565b8114614aa457600080fd5b50565b614ab081614898565b8114614abb57600080fd5b50565b614ac7816148a4565b8114614ad257600080fd5b50565b614ade816148ae565b8114614ae957600080fd5b50565b614af5816148fa565b8114614b0057600080fd5b50565b614b0c81614904565b8114614b1757600080fd5b5056fe455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e73666572a2646970667358221220334ea3584f0b42603f23b1ee6cd5a1b3b9088ba94ea0e767981a21aec711333764736f6c634300060c0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000009940d1cb841092fe9203694d7041491338ff3090000000000000000000000000000000000000000000000000000000000000000c4d696e7479537761704e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064d696e7479730000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101ce5760003560e01c80637649145c11610104578063cd53d08e116100a2578063eb12d61e11610071578063eb12d61e14610589578063f242432a146105a5578063f2fde38b146105c1578063f3bcd237146105dd576101ce565b8063cd53d08e146104ef578063d1442f4d1461051f578063e5c8b03d1461054f578063e985e9c514610559576101ce565b806395d89b41116100de57806395d89b4114610469578063a22cb46514610487578063b390c0ab146104a3578063bc9ffa17146104bf576101ce565b80637649145c146103eb5780637df73e271461041b5780638da5cb5b1461044b576101ce565b80631675f455116101715780634b7157d31161014b5780634b7157d3146103655780634e1273f414610395578063558a7297146103c5578063715018a6146103e1576101ce565b80631675f455146102e95780632eb2c2d61461031957806336cedc7c14610335576101ce565b80630e316ab7116101ad5780630e316ab7146102515780630e89341c1461026d578063113555851461029d57806313e7c9d8146102b9576101ce565b8062fdd58e146101d357806301ffc9a71461020357806306fdde0314610233575b600080fd5b6101ed60048036038101906101e89190613479565b6105fb565b6040516101fa91906146e6565b60405180910390f35b61021d60048036038101906102189190613599565b6106c5565b60405161022a9190614309565b60405180910390f35b61023b61072c565b6040516102489190614384565b60405180910390f35b61026b600480360381019061026691906131ac565b6107ca565b005b610287600480360381019061028291906135eb565b61086d565b6040516102949190614384565b60405180910390f35b6102b760048036038101906102b291906135eb565b610911565b005b6102d360048036038101906102ce91906131ac565b6109b2565b6040516102e09190614309565b60405180910390f35b61030360048036038101906102fe91906135eb565b6109d2565b6040516103109190614384565b60405180910390f35b610333600480360381019061032e9190613211565b6109e4565b005b61034f600480360381019061034a91906134b5565b610da5565b60405161035c9190614324565b60405180910390f35b61037f600480360381019061037a919061335f565b610e22565b60405161038c9190614309565b60405180910390f35b6103af60048036038101906103aa9190613504565b610fc8565b6040516103bc91906142b0565b60405180910390f35b6103df60048036038101906103da919061343d565b61118e565b005b6103e96112b9565b005b6104056004803603810190610400919061335f565b611411565b6040516104129190614309565b60405180910390f35b610435600480360381019061043091906131ac565b611649565b6040516104429190614309565b60405180910390f35b610453611666565b60405161046091906141aa565b60405180910390f35b610471611690565b60405161047e9190614384565b60405180910390f35b6104a1600480360381019061049c919061343d565b61172e565b005b6104bd60048036038101906104b89190613614565b6118af565b005b6104d960048036038101906104d49190613570565b61195f565b6040516104e69190614309565b60405180910390f35b610509600480360381019061050491906135eb565b61197f565b60405161051691906141aa565b60405180910390f35b61053960048036038101906105349190613614565b6119b2565b6040516105469190614324565b60405180910390f35b610557611a2a565b005b610573600480360381019061056e91906131d5565b611a3c565b6040516105809190614309565b60405180910390f35b6105a3600480360381019061059e91906131ac565b611ad0565b005b6105bf60048036038101906105ba91906132d0565b611b73565b005b6105db60048036038101906105d691906131ac565b611eb6565b005b6105e561207d565b6040516105f291906146e6565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066390614426565b60405180910390fd5b6004600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b60088054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107c25780601f10610797576101008083540402835291602001916107c2565b820191906000526020600020905b8154815290600101906020018083116107a557829003601f168201915b505050505081565b6107d261212b565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085890614586565b60405180910390fd5b61086a81612133565b50565b606060068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109055780601f106108da57610100808354040283529160200191610905565b820191906000526020600020905b8154815290600101906020018083116108e857829003601f168201915b50505050509050919050565b61091961212b565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099f90614586565b60405180910390fd5b80600c8190555050565b600a6020528060005260406000206000915054906101000a900460ff1681565b60606109dd8261218d565b9050919050565b8151835114610a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1f90614646565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8f90614506565b60405180910390fd5b610aa061212b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610ae65750610ae585610ae061212b565b611a3c565b5b610b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1c90614526565b60405180910390fd5b6000610b2f61212b565b9050610b3f818787878787612242565b60005b8451811015610d10576000858281518110610b5957fe5b602002602001015190506000858381518110610b7157fe5b60200260200101519050610bf8816040518060600160405280602a8152602001614b3f602a91396004600086815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224a9092919063ffffffff16565b6004600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610caf816004600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122a590919063ffffffff16565b6004600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050806001019050610b42565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610d879291906142d2565b60405180910390a4610d9d8187878787876122fa565b505050505050565b600030838386604051602001610dbe949392919061410a565b604051602081830303815290604052604051602001610ddd91906140f3565b60405160208183030381529060405280519060200120604051602001610e039190614158565b6040516020818303038152906040528051906020012090509392505050565b6000438710158015610e385750600c5443018711155b610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e906146a6565b60405180910390fd5b6000610e848b8a8a610da5565b9050610edd60018289898960405160008152602001604052604051610eac949392919061433f565b6020604051602081039080840390855afa158015610ece573d6000803e3d6000fd5b50505060206040510351611649565b610f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f13906146c6565b60405180910390fd5b600b600082815260200190815260200160002060009054906101000a900460ff1615610f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f74906144c6565b60405180910390fd5b6001600b600083815260200190815260200160002060006101000a81548160ff021916908315150217905550610fb68b8b8b87876124ca565b60019150509998505050505050505050565b6060815183511461100e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100590614626565b60405180910390fd5b6060835167ffffffffffffffff8111801561102857600080fd5b506040519080825280602002602001820160405280156110575781602001602082028036833780820191505090505b50905060005b845181101561118357600073ffffffffffffffffffffffffffffffffffffffff1685828151811061108a57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614446565b60405180910390fd5b600460008583815181106110f957fe5b60200260200101518152602001908152602001600020600086838151811061111d57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482828151811061116c57fe5b60200260200101818152505080600101905061105d565b508091505092915050565b61119661212b565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121c90614586565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f1618a22a3b00b9ac70fd5a82f1f5cdd8cb272bd0f1b740ddf7c26ab05881dd5b82826040516112ad929190614287565b60405180910390a15050565b6112c161212b565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134790614586565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600060011515600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146114a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149d90614686565b60405180910390fd5b4387101580156114ba5750600c5443018711155b6114f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f0906146a6565b60405180910390fd5b600061150589896119b2565b905061155e6001828989896040516000815260200160405260405161152d949392919061433f565b6020604051602081039080840390855afa15801561154f573d6000803e3d6000fd5b50505060206040510351611649565b61159d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611594906146c6565b60405180910390fd5b600b600082815260200190815260200160002060009054906101000a900460ff16156115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f5906144c6565b60405180910390fd5b6001600b600083815260200190815260200160002060006101000a81548160ff0219169083151502179055506116378b8b8b87876124ca565b60019150509998505050505050505050565b600061165f8260026127d590919063ffffffff16565b9050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60098054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117265780601f106116fb57610100808354040283529160200191611726565b820191906000526020600020905b81548152906001019060200180831161170957829003601f168201915b505050505081565b8173ffffffffffffffffffffffffffffffffffffffff1661174d61212b565b73ffffffffffffffffffffffffffffffffffffffff1614156117a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179b90614606565b60405180910390fd5b80600560006117b161212b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661185e61212b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118a39190614309565b60405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff166007600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194790614666565b60405180910390fd5b61195b33838361289d565b5050565b600b6020528060005260406000206000915054906101000a900460ff1681565b60076020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600082826040516020016119c792919061417e565b6040516020818303038152906040526040516020016119e691906140f3565b60405160208183030381529060405280519060200120604051602001611a0c9190614158565b60405160208183030381529060405280519060200120905092915050565b611a3a611a3561212b565b612133565b565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ad861212b565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5e90614586565b60405180910390fd5b611b7081612a9d565b50565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bda90614506565b60405180910390fd5b611beb61212b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611c315750611c3085611c2b61212b565b611a3c565b5b611c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c67906144a6565b60405180910390fd5b6000611c7a61212b565b9050611c9a818787611c8b88612af7565b611c9488612af7565b87612242565b611d17836040518060600160405280602a8152602001614b3f602a91396004600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224a9092919063ffffffff16565b6004600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611dce836004600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122a590919063ffffffff16565b6004600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611e98929190614701565b60405180910390a4611eae818787878787612b67565b505050505050565b611ebe61212b565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4490614586565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb490614466565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b61208d82826127d5565b156120cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c490614406565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b612147816002612d3790919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b60405160405180910390a250565b6060600360008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122365780601f1061220b57610100808354040283529160200191612236565b820191906000526020600020905b81548152906001019060200180831161221957829003601f168201915b50505050509050919050565b505050505050565b6000838311158290612292576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122899190614384565b60405180910390fd5b5060008385039050809150509392505050565b6000808284019050838110156122f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e790614486565b60405180910390fd5b8091505092915050565b6123198473ffffffffffffffffffffffffffffffffffffffff16612dde565b156124c2578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161235f9594939291906141c5565b602060405180830381600087803b15801561237957600080fd5b505af19250505080156123aa57506040513d601f19601f820116820180604052508101906123a791906135c2565b60015b612439576123b66149da565b806123c157506123fe565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f59190614384565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612430906143a6565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146124c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b7906143e6565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff166007600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061259657508473ffffffffffffffffffffffffffffffffffffffff166007600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6125d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cc906145c6565b60405180910390fd5b6000821415612619576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612610906145e6565b60405180910390fd5b600081511161265d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612654906144e6565b60405180910390fd5b846007600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816004600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506127178382612df1565b8373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62868660405161278e929190614701565b60405180910390a4827f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b826040516127c69190614384565b60405180910390a25050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283d906145a6565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561290d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290490614566565b60405180910390fd5b600061291761212b565b90506129478185600061292987612af7565b61293287612af7565b60405180602001604052806000815250612242565b6129c482604051806060016040528060248152602001614b1b602491396004600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224a9092919063ffffffff16565b6004600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051612a8f929190614701565b60405180910390a450505050565b612ab181600261208390919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f2460405160405180910390a250565b606080600167ffffffffffffffff81118015612b1257600080fd5b50604051908082528060200260200182016040528015612b415781602001602082028036833780820191505090505b5090508281600081518110612b5257fe5b60200260200101818152505080915050919050565b612b868473ffffffffffffffffffffffffffffffffffffffff16612dde565b15612d2f578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612bcc95949392919061422d565b602060405180830381600087803b158015612be657600080fd5b505af1925050508015612c1757506040513d601f19601f82011682018060405250810190612c1491906135c2565b60015b612ca657612c236149da565b80612c2e5750612c6b565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c629190614384565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9d906143a6565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d24906143e6565b60405180910390fd5b505b505050505050565b612d4182826127d5565b612d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7790614546565b60405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff166007600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8b906143c6565b60405180910390fd5b612e9e8282612ea2565b5050565b80600360008481526020019081526020016000209080519060200190612ec9929190612ece565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612f0f57805160ff1916838001178555612f3d565b82800160010185558215612f3d579182015b82811115612f3c578251825591602001919060010190612f21565b5b509050612f4a9190612f4e565b5090565b5b80821115612f67576000816000905550600101612f4f565b5090565b600081359050612f7a81614a90565b92915050565b600082601f830112612f9157600080fd5b8135612fa4612f9f82614757565b61472a565b91508181835260208401935060208101905083856020840282011115612fc957600080fd5b60005b83811015612ff95781612fdf8882612f6b565b845260208401935060208301925050600181019050612fcc565b5050505092915050565b600082601f83011261301457600080fd5b81356130276130228261477f565b61472a565b9150818183526020840193506020810190508385602084028201111561304c57600080fd5b60005b8381101561307c57816130628882613182565b84526020840193506020830192505060018101905061304f565b5050505092915050565b60008135905061309581614aa7565b92915050565b6000813590506130aa81614abe565b92915050565b6000813590506130bf81614ad5565b92915050565b6000815190506130d481614ad5565b92915050565b600082601f8301126130eb57600080fd5b81356130fe6130f9826147a7565b61472a565b9150808252602083016020830185838301111561311a57600080fd5b613125838284614935565b50505092915050565b600082601f83011261313f57600080fd5b813561315261314d826147d3565b61472a565b9150808252602083016020830185838301111561316e57600080fd5b613179838284614935565b50505092915050565b60008135905061319181614aec565b92915050565b6000813590506131a681614b03565b92915050565b6000602082840312156131be57600080fd5b60006131cc84828501612f6b565b91505092915050565b600080604083850312156131e857600080fd5b60006131f685828601612f6b565b925050602061320785828601612f6b565b9150509250929050565b600080600080600060a0868803121561322957600080fd5b600061323788828901612f6b565b955050602061324888828901612f6b565b945050604086013567ffffffffffffffff81111561326557600080fd5b61327188828901613003565b935050606086013567ffffffffffffffff81111561328e57600080fd5b61329a88828901613003565b925050608086013567ffffffffffffffff8111156132b757600080fd5b6132c3888289016130da565b9150509295509295909350565b600080600080600060a086880312156132e857600080fd5b60006132f688828901612f6b565b955050602061330788828901612f6b565b945050604061331888828901613182565b935050606061332988828901613182565b925050608086013567ffffffffffffffff81111561334657600080fd5b613352888289016130da565b9150509295509295909350565b60008060008060008060008060006101208a8c03121561337e57600080fd5b600061338c8c828d01612f6b565b995050602061339d8c828d01612f6b565b98505060406133ae8c828d01613182565b97505060606133bf8c828d01613182565b96505060806133d08c828d01613197565b95505060a06133e18c828d0161309b565b94505060c06133f28c828d0161309b565b93505060e06134038c828d01613182565b9250506101008a013567ffffffffffffffff81111561342157600080fd5b61342d8c828d0161312e565b9150509295985092959850929598565b6000806040838503121561345057600080fd5b600061345e85828601612f6b565b925050602061346f85828601613086565b9150509250929050565b6000806040838503121561348c57600080fd5b600061349a85828601612f6b565b92505060206134ab85828601613182565b9150509250929050565b6000806000606084860312156134ca57600080fd5b60006134d886828701612f6b565b93505060206134e986828701613182565b92505060406134fa86828701613182565b9150509250925092565b6000806040838503121561351757600080fd5b600083013567ffffffffffffffff81111561353157600080fd5b61353d85828601612f80565b925050602083013567ffffffffffffffff81111561355a57600080fd5b61356685828601613003565b9150509250929050565b60006020828403121561358257600080fd5b60006135908482850161309b565b91505092915050565b6000602082840312156135ab57600080fd5b60006135b9848285016130b0565b91505092915050565b6000602082840312156135d457600080fd5b60006135e2848285016130c5565b91505092915050565b6000602082840312156135fd57600080fd5b600061360b84828501613182565b91505092915050565b6000806040838503121561362757600080fd5b600061363585828601613182565b925050602061364685828601613182565b9150509250929050565b600061365c83836140af565b60208301905092915050565b61367181614886565b82525050565b61368861368382614886565b614977565b82525050565b60006136998261480f565b6136a3818561483d565b93506136ae836147ff565b8060005b838110156136df5781516136c68882613650565b97506136d183614830565b9250506001810190506136b2565b5085935050505092915050565b6136f581614898565b82525050565b613704816148a4565b82525050565b61371b613716826148a4565b614989565b82525050565b600061372c8261481a565b613736818561484e565b9350613746818560208601614944565b61374f816149af565b840191505092915050565b60006137658261481a565b61376f818561485f565b935061377f818560208601614944565b80840191505092915050565b61379c61379782614911565b614977565b82525050565b60006137ad82614825565b6137b7818561486a565b93506137c7818560208601614944565b6137d0816149af565b840191505092915050565b60006137e860348361486a565b91507f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008301527f526563656976657220696d706c656d656e7465720000000000000000000000006020830152604082019050919050565b600061384e60128361486a565b91507f546f6b656e2073686f756c6420657869737400000000000000000000000000006000830152602082019050919050565b600061388e60288361486a565b91507f455243313135353a204552433131353552656365697665722072656a6563746560008301527f6420746f6b656e730000000000000000000000000000000000000000000000006020830152604082019050919050565b60006138f4601f8361486a565b91507f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006000830152602082019050919050565b6000613934601c8361487b565b91507f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000830152601c82019050919050565b6000613974602b8361486a565b91507f455243313135353a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b60006139da60318361486a565b91507f455243313135353a2062617463682062616c616e636520717565727920666f7260008301527f20746865207a65726f20616464726573730000000000000000000000000000006020830152604082019050919050565b6000613a4060268361486a565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613aa6601b8361486a565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000613ae660298361486a565b91507f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008301527f20617070726f76656400000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b4c60138361486a565b91507f7369676e6174757265206475706c6963617465000000000000000000000000006000830152602082019050919050565b6000613b8c60118361486a565b91507f5572692073686f756c64206265207365740000000000000000000000000000006000830152602082019050919050565b6000613bcc60258361486a565b91507f455243313135353a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c3260328361486a565b91507f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b6000613c9860218361486a565b91507f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c60008301527f65000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613cfe60238361486a565b91507f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d6460208361486a565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613da460228361486a565b91507f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e0a60178361486a565b91507f546f6b656e20697320616c7265616479206d696e7465640000000000000000006000830152602082019050919050565b6000613e4a60198361486a565b91507f537570706c792073686f756c6420626520706f736974697665000000000000006000830152602082019050919050565b6000613e8a60298361486a565b91507f455243313135353a2073657474696e6720617070726f76616c2073746174757360008301527f20666f722073656c6600000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ef060298361486a565b91507f455243313135353a206163636f756e747320616e6420696473206c656e67746860008301527f206d69736d6174636800000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f5660288361486a565b91507f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008301527f6d69736d617463680000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613fbc601c8361486a565b91507f4f6e6c792063726561746f72732061626c6520746f206275726e7320000000006000830152602082019050919050565b6000613ffc600d8361486a565b91507f4f6e6c79206f70657261746f72000000000000000000000000000000000000006000830152602082019050919050565b600061403c60118361486a565b91507f7369676e617475726520657870697265640000000000000000000000000000006000830152602082019050919050565b600061407c601a8361486a565b91507f7369676e65722073686f756c64207369676e20746f6b656e49640000000000006000830152602082019050919050565b6140b8816148fa565b82525050565b6140c7816148fa565b82525050565b6140de6140d9826148fa565b6149a5565b82525050565b6140ed81614904565b82525050565b60006140ff828461375a565b915081905092915050565b6000614116828761378b565b60148201915061412682866140cd565b60208201915061413682856140cd565b6020820191506141468284613677565b60148201915081905095945050505050565b600061416382613927565b915061416f828461370a565b60208201915081905092915050565b600061418a82856140cd565b60208201915061419a82846140cd565b6020820191508190509392505050565b60006020820190506141bf6000830184613668565b92915050565b600060a0820190506141da6000830188613668565b6141e76020830187613668565b81810360408301526141f9818661368e565b9050818103606083015261420d818561368e565b905081810360808301526142218184613721565b90509695505050505050565b600060a0820190506142426000830188613668565b61424f6020830187613668565b61425c60408301866140be565b61426960608301856140be565b818103608083015261427b8184613721565b90509695505050505050565b600060408201905061429c6000830185613668565b6142a960208301846136ec565b9392505050565b600060208201905081810360008301526142ca818461368e565b905092915050565b600060408201905081810360008301526142ec818561368e565b90508181036020830152614300818461368e565b90509392505050565b600060208201905061431e60008301846136ec565b92915050565b600060208201905061433960008301846136fb565b92915050565b600060808201905061435460008301876136fb565b61436160208301866140e4565b61436e60408301856136fb565b61437b60608301846136fb565b95945050505050565b6000602082019050818103600083015261439e81846137a2565b905092915050565b600060208201905081810360008301526143bf816137db565b9050919050565b600060208201905081810360008301526143df81613841565b9050919050565b600060208201905081810360008301526143ff81613881565b9050919050565b6000602082019050818103600083015261441f816138e7565b9050919050565b6000602082019050818103600083015261443f81613967565b9050919050565b6000602082019050818103600083015261445f816139cd565b9050919050565b6000602082019050818103600083015261447f81613a33565b9050919050565b6000602082019050818103600083015261449f81613a99565b9050919050565b600060208201905081810360008301526144bf81613ad9565b9050919050565b600060208201905081810360008301526144df81613b3f565b9050919050565b600060208201905081810360008301526144ff81613b7f565b9050919050565b6000602082019050818103600083015261451f81613bbf565b9050919050565b6000602082019050818103600083015261453f81613c25565b9050919050565b6000602082019050818103600083015261455f81613c8b565b9050919050565b6000602082019050818103600083015261457f81613cf1565b9050919050565b6000602082019050818103600083015261459f81613d57565b9050919050565b600060208201905081810360008301526145bf81613d97565b9050919050565b600060208201905081810360008301526145df81613dfd565b9050919050565b600060208201905081810360008301526145ff81613e3d565b9050919050565b6000602082019050818103600083015261461f81613e7d565b9050919050565b6000602082019050818103600083015261463f81613ee3565b9050919050565b6000602082019050818103600083015261465f81613f49565b9050919050565b6000602082019050818103600083015261467f81613faf565b9050919050565b6000602082019050818103600083015261469f81613fef565b9050919050565b600060208201905081810360008301526146bf8161402f565b9050919050565b600060208201905081810360008301526146df8161406f565b9050919050565b60006020820190506146fb60008301846140be565b92915050565b600060408201905061471660008301856140be565b61472360208301846140be565b9392505050565b6000604051905081810181811067ffffffffffffffff8211171561474d57600080fd5b8060405250919050565b600067ffffffffffffffff82111561476e57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561479657600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156147be57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156147ea57600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614891826148da565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061491c82614923565b9050919050565b600061492e826148da565b9050919050565b82818337600083830152505050565b60005b83811015614962578082015181840152602081019050614947565b83811115614971576000848401525b50505050565b600061498282614993565b9050919050565b6000819050919050565b600061499e826149c0565b9050919050565b6000819050919050565b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b600060443d10156149ea57614a8d565b60046000803e6149fb6000516149cd565b6308c379a08114614a0c5750614a8d565b60405160043d036004823e80513d602482011167ffffffffffffffff82111715614a3857505050614a8d565b808201805167ffffffffffffffff811115614a57575050505050614a8d565b8060208301013d8501811115614a7257505050505050614a8d565b614a7b826149af565b60208401016040528296505050505050505b90565b614a9981614886565b8114614aa457600080fd5b50565b614ab081614898565b8114614abb57600080fd5b50565b614ac7816148a4565b8114614ad257600080fd5b50565b614ade816148ae565b8114614ae957600080fd5b50565b614af5816148fa565b8114614b0057600080fd5b50565b614b0c81614904565b8114614b1757600080fd5b5056fe455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e73666572a2646970667358221220334ea3584f0b42603f23b1ee6cd5a1b3b9088ba94ea0e767981a21aec711333764736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000009940d1cb841092fe9203694d7041491338ff3090000000000000000000000000000000000000000000000000000000000000000c4d696e7479537761704e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064d696e7479730000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): MintySwapNFT
Arg [1] : _symbol (string): Mintys
Arg [2] : signer (address): 0x9940D1CB841092fe9203694D7041491338ff3090
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000009940d1cb841092fe9203694d7041491338ff3090
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [4] : 4d696e7479537761704e46540000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 4d696e7479730000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
49912:3837:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30230:301;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13638:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49971:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50747:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29922:157;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50852:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50025:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48093:158;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33285:1314;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53235:511;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51768:802;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30697:695;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52578:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17514:148;;;:::i;:::-;;50970:790;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20160:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16872:79;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49996:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31465:380;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49172:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50073:43;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48359;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52747:480;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20385:79;;;:::i;:::-;;31917:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50631:108;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32190:1018;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17817:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50125:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30230:301;30344:7;30410:1;30391:21;;:7;:21;;;;30369:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;30501:9;:13;30511:2;30501:13;;;;;;;;;;;:22;30515:7;30501:22;;;;;;;;;;;;;;;;30494:29;;30230:301;;;;:::o;13638:142::-;13715:4;13739:20;:33;13760:11;13739:33;;;;;;;;;;;;;;;;;;;;;;;;;;;13732:40;;13638:142;;;:::o;49971:18::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50747:97::-;17094:12;:10;:12::i;:::-;17084:22;;:6;;;;;;;;;;;:22;;;17076:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;50814:22:::1;50828:7;50814:13;:22::i;:::-;50747:97:::0;:::o;29922:157::-;30029:13;30067:4;30060:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29922:157;;;:::o;50852:110::-;17094:12;:10;:12::i;:::-;17084:22;;:6;;;;;;;;;;;:22;;;17076:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;50941:13:::1;50928:10;:26;;;;50852:110:::0;:::o;50025:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;48093:158::-;48191:13;48229:14;48239:3;48229:9;:14::i;:::-;48222:21;;48093:158;;;:::o;33285:1314::-;33532:7;:14;33518:3;:10;:28;33496:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;33647:1;33633:16;;:2;:16;;;;33625:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33732:12;:10;:12::i;:::-;33724:20;;:4;:20;;;:60;;;;33748:36;33765:4;33771:12;:10;:12::i;:::-;33748:16;:36::i;:::-;33724:60;33702:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;33875:16;33894:12;:10;:12::i;:::-;33875:31;;33919:60;33940:8;33950:4;33956:2;33960:3;33965:7;33974:4;33919:20;:60::i;:::-;33997:9;33992:358;34016:3;:10;34012:1;:14;33992:358;;;34048:10;34061:3;34065:1;34061:6;;;;;;;;;;;;;;34048:19;;34082:14;34099:7;34107:1;34099:10;;;;;;;;;;;;;;34082:27;;34148:126;34190:6;34148:126;;;;;;;;;;;;;;;;;:9;:13;34158:2;34148:13;;;;;;;;;;;:19;34162:4;34148:19;;;;;;;;;;;;;;;;:23;;:126;;;;;:::i;:::-;34126:9;:13;34136:2;34126:13;;;;;;;;;;;:19;34140:4;34126:19;;;;;;;;;;;;;;;:148;;;;34309:29;34331:6;34309:9;:13;34319:2;34309:13;;;;;;;;;;;:17;34323:2;34309:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;34289:9;:13;34299:2;34289:13;;;;;;;;;;;:17;34303:2;34289:17;;;;;;;;;;;;;;;:49;;;;33992:358;;34028:3;;;;;33992:358;;;;34397:2;34367:47;;34391:4;34367:47;;34381:8;34367:47;;;34401:3;34406:7;34367:47;;;;;;;:::i;:::-;;;;;;;;34427:164;34477:8;34500:4;34519:2;34536:3;34554:7;34576:4;34427:35;:164::i;:::-;33285:1314;;;;;;:::o;53235:511::-;53362:7;53626:4;53632:2;53636:11;53649:4;53609:45;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53562:119;;;;;;;;:::i;:::-;;;;;;;;;;;;;53526:178;;;;;;53430:293;;;;;;;;:::i;:::-;;;;;;;;;;;;;53402:336;;;;;;53382:356;;53235:511;;;;;:::o;51768:802::-;52024:4;52078:12;52063:11;:27;;:90;;;;;52142:10;;52127:12;:25;52111:11;:42;;52063:90;52041:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;52209:15;52227:38;52243:4;52249:2;52253:11;52227:15;:38::i;:::-;52209:56;;52298:37;52307:27;52317:7;52326:1;52329;52332;52307:27;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52298:8;:37::i;:::-;52276:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;52409:11;:20;52421:7;52409:20;;;;;;;;;;;;;;;;;;;;;52408:21;52400:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;52489:4;52466:11;:20;52478:7;52466:20;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;52506:32;52512:4;52518:2;52522;52526:6;52534:3;52506:5;:32::i;:::-;52558:4;52551:11;;;51768:802;;;;;;;;;;;:::o;30697:695::-;30836:16;30911:3;:10;30892:8;:15;:29;30870:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;31003:30;31050:8;:15;31036:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31003:63;;31084:9;31079:273;31103:8;:15;31099:1;:19;31079:273;;;31189:1;31166:25;;:8;31175:1;31166:11;;;;;;;;;;;;;;:25;;;;31140:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;31310:9;:17;31320:3;31324:1;31320:6;;;;;;;;;;;;;;31310:17;;;;;;;;;;;:30;31328:8;31337:1;31328:11;;;;;;;;;;;;;;31310:30;;;;;;;;;;;;;;;;31291:13;31305:1;31291:16;;;;;;;;;;;;;:49;;;;;31120:3;;;;;31079:273;;;;31371:13;31364:20;;;30697:695;;;;:::o;52578:161::-;17094:12;:10;:12::i;:::-;17084:22;;:6;;;;;;;;;;;:22;;;17076:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;52680:6:::1;52658:9;:19;52668:8;52658:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;52702:29;52714:8;52724:6;52702:29;;;;;;;:::i;:::-;;;;;;;;52578:161:::0;;:::o;17514:148::-;17094:12;:10;:12::i;:::-;17084:22;;:6;;;;;;;;;;;:22;;;17076:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17621:1:::1;17584:40;;17605:6;;;;;;;;;;;17584:40;;;;;;;;;;;;17652:1;17635:6;;:19;;;;;;;;;;;;;;;;;;17514:148::o:0;50970:790::-;51224:4;50302;50277:29;;:9;:21;50287:10;50277:21;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;50269:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;51278:12:::1;51263:11;:27;;:90;;;;;51342:10;;51327:12;:25;51311:11;:42;;51263:90;51241:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;51409:15;51427:28;51439:2;51443:11;51427;:28::i;:::-;51409:46;;51488:37;51497:27;51507:7;51516:1;51519;51522;51497:27;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;51488:8;:37::i;:::-;51466:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;51599:11;:20;51611:7;51599:20;;;;;;;;;;;;;;;;;;;;;51598:21;51590:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;51679:4;51656:11;:20;51668:7;51656:20;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;51696:32;51702:4;51708:2;51712;51716:6;51724:3;51696:5;:32::i;:::-;51748:4;51741:11;;;50970:790:::0;;;;;;;;;;;:::o;20160:109::-;20216:4;20240:21;20253:7;20240:8;:12;;:21;;;;:::i;:::-;20233:28;;20160:109;;;:::o;16872:79::-;16910:7;16937:6;;;;;;;;;;;16930:13;;16872:79;:::o;49996:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31465:380::-;31630:8;31614:24;;:12;:10;:12::i;:::-;:24;;;;31592:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;31765:8;31720:18;:32;31739:12;:10;:12::i;:::-;31720:32;;;;;;;;;;;;;;;:42;31753:8;31720:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;31818:8;31789:48;;31804:12;:10;:12::i;:::-;31789:48;;;31828:8;31789:48;;;;;;:::i;:::-;;;;;;;;31465:380;;:::o;49172:182::-;49260:10;49243:27;;:8;:13;49252:3;49243:13;;;;;;;;;;;;;;;;;;;;;:27;;;49235:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49316:30;49322:10;49334:3;49339:6;49316:5;:30::i;:::-;49172:182;;:::o;50073:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;48359:::-;;;;;;;;;;;;;;;;;;;;;;:::o;52747:480::-;52849:7;53119:2;53123:11;53101:34;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53054:108;;;;;;;;:::i;:::-;;;;;;;;;;;;;53018:167;;;;;;52922:282;;;;;;;;:::i;:::-;;;;;;;;;;;;;52894:325;;;;;;52874:345;;52747:480;;;;:::o;20385:79::-;20429:27;20443:12;:10;:12::i;:::-;20429:13;:27::i;:::-;20385:79::o;31917:201::-;32044:4;32073:18;:27;32092:7;32073:27;;;;;;;;;;;;;;;:37;32101:8;32073:37;;;;;;;;;;;;;;;;;;;;;;;;;32066:44;;31917:201;;;;:::o;50631:108::-;17094:12;:10;:12::i;:::-;17084:22;;:6;;;;;;;;;;;:22;;;17076:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;50712:19:::1;50723:7;50712:10;:19::i;:::-;50631:108:::0;:::o;32190:1018::-;32398:1;32384:16;;:2;:16;;;;32376:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32483:12;:10;:12::i;:::-;32475:20;;:4;:20;;;:60;;;;32499:36;32516:4;32522:12;:10;:12::i;:::-;32499:16;:36::i;:::-;32475:60;32453:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;32617:16;32636:12;:10;:12::i;:::-;32617:31;;32661:185;32696:8;32719:4;32738:2;32755:21;32773:2;32755:17;:21::i;:::-;32791:25;32809:6;32791:17;:25::i;:::-;32831:4;32661:20;:185::i;:::-;32881:114;32919:6;32881:114;;;;;;;;;;;;;;;;;:9;:13;32891:2;32881:13;;;;;;;;;;;:19;32895:4;32881:19;;;;;;;;;;;;;;;;:23;;:114;;;;;:::i;:::-;32859:9;:13;32869:2;32859:13;;;;;;;;;;;:19;32873:4;32859:19;;;;;;;;;;;;;;;:136;;;;33026:29;33048:6;33026:9;:13;33036:2;33026:13;;;;;;;;;;;:17;33040:2;33026:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;33006:9;:13;33016:2;33006:13;;;;;;;;;;;:17;33020:2;33006:17;;;;;;;;;;;;;;;:49;;;;33104:2;33073:46;;33098:4;33073:46;;33088:8;33073:46;;;33108:2;33112:6;33073:46;;;;;;;:::i;:::-;;;;;;;;33132:68;33163:8;33173:4;33179:2;33183;33187:6;33195:4;33132:30;:68::i;:::-;32190:1018;;;;;;:::o;17817:244::-;17094:12;:10;:12::i;:::-;17084:22;;:6;;;;;;;;;;;:22;;;17076:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17926:1:::1;17906:22;;:8;:22;;;;17898:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18016:8;17987:38;;18008:6;;;;;;;;;;;17987:38;;;;;;;;;;;;18045:8;18036:6;;:17;;;;;;;;;;;;;;;;;;17817:244:::0;:::o;50125:30::-;;;;:::o;18848:178::-;18926:18;18930:4;18936:7;18926:3;:18::i;:::-;18925:19;18917:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;19014:4;18991;:11;;:20;19003:7;18991:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;18848:178;;:::o;15428:106::-;15481:15;15516:10;15509:17;;15428:106;:::o;20602:130::-;20662:24;20678:7;20662:8;:15;;:24;;;;:::i;:::-;20716:7;20702:22;;;;;;;;;;;;20602:130;:::o;47231:121::-;47290:13;47324:10;:19;47335:7;47324:19;;;;;;;;;;;47316:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47231:121;;;:::o;40861:221::-;;;;;;;:::o;1881:192::-;1967:7;2000:1;1995;:6;;2003:12;1987:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2027:9;2043:1;2039;:5;2027:17;;2064:1;2057:8;;;1881:192;;;;;:::o;978:181::-;1036:7;1056:9;1072:1;1068;:5;1056:17;;1097:1;1092;:6;;1084:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1150:1;1143:8;;;978:181;;;;:::o;42040:1000::-;42280:15;:2;:13;;;:15::i;:::-;42276:757;;;42350:2;42333:43;;;42399:8;42430:4;42457:3;42483:7;42513:4;42333:203;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42312:710;;;;:::i;:::-;;;;;;;;42895:6;42888:14;;;;;;;;;;;:::i;:::-;;;;;;;;42312:710;42944:62;;;;;;;;;;:::i;:::-;;;;;;;;42312:710;42654:52;;;42621:85;;;:8;:85;;;;42595:224;;42749:50;;;;;;;;;;:::i;:::-;;;;;;;;42595:224;42550:284;42276:757;42040:1000;;;;;;:::o;48481:683::-;48691:3;48666:29;;:8;:13;48675:3;48666:13;;;;;;;;;;;;;;;;;;;;;:29;;;:54;;;;48716:4;48699:21;;:8;:13;48708:3;48699:13;;;;;;;;;;;;;;;;;;;;;:21;;;48666:54;48644:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;48801:1;48790:7;:12;;48782:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;48872:1;48857:4;48851:18;:22;48843:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;48924:4;48908:8;:13;48917:3;48908:13;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;48963:7;48941:9;:14;48951:3;48941:14;;;;;;;;;;;:18;48956:2;48941:18;;;;;;;;;;;;;;;;:29;;;;;;;;;;;48981:23;48994:3;48999:4;48981:12;:23::i;:::-;49109:2;49068:58;;49103:3;49068:58;;49083:10;49068:58;;;49113:3;49118:7;49068:58;;;;;;;:::i;:::-;;;;;;;;49152:3;49142:14;49146:4;49142:14;;;;;;:::i;:::-;;;;;;;;48481:683;;;;;:::o;19384:235::-;19483:4;19532:1;19513:21;;:7;:21;;;;19505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19591:4;:11;;:20;19603:7;19591:20;;;;;;;;;;;;;;;;;;;;;;;;;19584:27;;19384:235;;;;:::o;38233:674::-;38382:1;38363:21;;:7;:21;;;;38355:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;38437:16;38456:12;:10;:12::i;:::-;38437:31;;38481:194;38516:8;38539:7;38569:1;38586:21;38604:2;38586:17;:21::i;:::-;38622:25;38640:6;38622:17;:25::i;:::-;38481:194;;;;;;;;;;;;:20;:194::i;:::-;38713:111;38754:6;38713:111;;;;;;;;;;;;;;;;;:9;:13;38723:2;38713:13;;;;;;;;;;;:22;38727:7;38713:22;;;;;;;;;;;;;;;;:26;;:111;;;;;:::i;:::-;38688:9;:13;38698:2;38688:13;;;;;;;;;;;:22;38702:7;38688:22;;;;;;;;;;;;;;;:136;;;;38884:1;38842:57;;38867:7;38842:57;;38857:8;38842:57;;;38888:2;38892:6;38842:57;;;;;;;:::i;:::-;;;;;;;;38233:674;;;;:::o;20472:122::-;20529:21;20542:7;20529:8;:12;;:21;;;;:::i;:::-;20578:7;20566:20;;;;;;;;;;;;20472:122;:::o;43048:230::-;43141:16;43175:22;43214:1;43200:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43175:41;;43238:7;43227:5;43233:1;43227:8;;;;;;;;;;;;;:18;;;;;43265:5;43258:12;;;43048:230;;;:::o;41090:942::-;41305:15;:2;:13;;;:15::i;:::-;41301:724;;;41375:2;41358:38;;;41419:8;41450:4;41477:2;41502:6;41531:4;41358:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41337:677;;;;:::i;:::-;;;;;;;;41887:6;41880:14;;;;;;;;;;;:::i;:::-;;;;;;;;41337:677;41936:62;;;;;;;;;;:::i;:::-;;;;;;;;41337:677;41651:47;;;41639:59;;;:8;:59;;;;41613:198;;41741:50;;;;;;;;;;:::i;:::-;;;;;;;;41613:198;41568:258;41301:724;41090:942;;;;;;:::o;19106:183::-;19186:18;19190:4;19196:7;19186:3;:18::i;:::-;19178:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;19276:5;19253:4;:11;;:20;19265:7;19253:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;19106:183;;:::o;22125:422::-;22185:4;22393:12;22504:7;22492:20;22484:28;;22538:1;22531:4;:8;22524:15;;;22125:422;;;:::o;49601:242::-;49765:3;49736:33;;:8;:17;49745:7;49736:17;;;;;;;;;;;;;;;;;;;;;:33;;;;49728:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;49803:32;49822:7;49831:3;49803:18;:32::i;:::-;49601:242;;:::o;47599:119::-;47707:3;47685:10;:19;47696:7;47685:19;;;;;;;;;;;:25;;;;;;;;;;;;:::i;:::-;;47599:119;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;;85:6;72:20;63:29;;97:33;124:5;97:33;:::i;:::-;57:78;;;;:::o;160:707::-;;277:3;270:4;262:6;258:17;254:27;244:2;;295:1;292;285:12;244:2;332:6;319:20;354:80;369:64;426:6;369:64;:::i;:::-;354:80;:::i;:::-;345:89;;451:5;476:6;469:5;462:21;506:4;498:6;494:17;484:27;;528:4;523:3;519:14;512:21;;581:6;628:3;620:4;612:6;608:17;603:3;599:27;596:36;593:2;;;645:1;642;635:12;593:2;670:1;655:206;680:6;677:1;674:13;655:206;;;738:3;760:37;793:3;781:10;760:37;:::i;:::-;755:3;748:50;821:4;816:3;812:14;805:21;;849:4;844:3;840:14;833:21;;712:149;702:1;699;695:9;690:14;;655:206;;;659:14;237:630;;;;;;;:::o;893:707::-;;1010:3;1003:4;995:6;991:17;987:27;977:2;;1028:1;1025;1018:12;977:2;1065:6;1052:20;1087:80;1102:64;1159:6;1102:64;:::i;:::-;1087:80;:::i;:::-;1078:89;;1184:5;1209:6;1202:5;1195:21;1239:4;1231:6;1227:17;1217:27;;1261:4;1256:3;1252:14;1245:21;;1314:6;1361:3;1353:4;1345:6;1341:17;1336:3;1332:27;1329:36;1326:2;;;1378:1;1375;1368:12;1326:2;1403:1;1388:206;1413:6;1410:1;1407:13;1388:206;;;1471:3;1493:37;1526:3;1514:10;1493:37;:::i;:::-;1488:3;1481:50;1554:4;1549:3;1545:14;1538:21;;1582:4;1577:3;1573:14;1566:21;;1445:149;1435:1;1432;1428:9;1423:14;;1388:206;;;1392:14;970:630;;;;;;;:::o;1608:124::-;;1685:6;1672:20;1663:29;;1697:30;1721:5;1697:30;:::i;:::-;1657:75;;;;:::o;1739:130::-;;1819:6;1806:20;1797:29;;1831:33;1858:5;1831:33;:::i;:::-;1791:78;;;;:::o;1876:128::-;;1955:6;1942:20;1933:29;;1967:32;1993:5;1967:32;:::i;:::-;1927:77;;;;:::o;2011:132::-;;2094:6;2088:13;2079:22;;2106:32;2132:5;2106:32;:::i;:::-;2073:70;;;;:::o;2151:440::-;;2252:3;2245:4;2237:6;2233:17;2229:27;2219:2;;2270:1;2267;2260:12;2219:2;2307:6;2294:20;2329:64;2344:48;2385:6;2344:48;:::i;:::-;2329:64;:::i;:::-;2320:73;;2413:6;2406:5;2399:21;2449:4;2441:6;2437:17;2482:4;2475:5;2471:16;2517:3;2508:6;2503:3;2499:16;2496:25;2493:2;;;2534:1;2531;2524:12;2493:2;2544:41;2578:6;2573:3;2568;2544:41;:::i;:::-;2212:379;;;;;;;:::o;2600:442::-;;2702:3;2695:4;2687:6;2683:17;2679:27;2669:2;;2720:1;2717;2710:12;2669:2;2757:6;2744:20;2779:65;2794:49;2836:6;2794:49;:::i;:::-;2779:65;:::i;:::-;2770:74;;2864:6;2857:5;2850:21;2900:4;2892:6;2888:17;2933:4;2926:5;2922:16;2968:3;2959:6;2954:3;2950:16;2947:25;2944:2;;;2985:1;2982;2975:12;2944:2;2995:41;3029:6;3024:3;3019;2995:41;:::i;:::-;2662:380;;;;;;;:::o;3050:130::-;;3130:6;3117:20;3108:29;;3142:33;3169:5;3142:33;:::i;:::-;3102:78;;;;:::o;3187:126::-;;3265:6;3252:20;3243:29;;3277:31;3302:5;3277:31;:::i;:::-;3237:76;;;;:::o;3320:241::-;;3424:2;3412:9;3403:7;3399:23;3395:32;3392:2;;;3440:1;3437;3430:12;3392:2;3475:1;3492:53;3537:7;3528:6;3517:9;3513:22;3492:53;:::i;:::-;3482:63;;3454:97;3386:175;;;;:::o;3568:366::-;;;3689:2;3677:9;3668:7;3664:23;3660:32;3657:2;;;3705:1;3702;3695:12;3657:2;3740:1;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3719:97;3847:2;3865:53;3910:7;3901:6;3890:9;3886:22;3865:53;:::i;:::-;3855:63;;3826:98;3651:283;;;;;:::o;3941:1119::-;;;;;;4172:3;4160:9;4151:7;4147:23;4143:33;4140:2;;;4189:1;4186;4179:12;4140:2;4224:1;4241:53;4286:7;4277:6;4266:9;4262:22;4241:53;:::i;:::-;4231:63;;4203:97;4331:2;4349:53;4394:7;4385:6;4374:9;4370:22;4349:53;:::i;:::-;4339:63;;4310:98;4467:2;4456:9;4452:18;4439:32;4491:18;4483:6;4480:30;4477:2;;;4523:1;4520;4513:12;4477:2;4543:78;4613:7;4604:6;4593:9;4589:22;4543:78;:::i;:::-;4533:88;;4418:209;4686:2;4675:9;4671:18;4658:32;4710:18;4702:6;4699:30;4696:2;;;4742:1;4739;4732:12;4696:2;4762:78;4832:7;4823:6;4812:9;4808:22;4762:78;:::i;:::-;4752:88;;4637:209;4905:3;4894:9;4890:19;4877:33;4930:18;4922:6;4919:30;4916:2;;;4962:1;4959;4952:12;4916:2;4982:62;5036:7;5027:6;5016:9;5012:22;4982:62;:::i;:::-;4972:72;;4856:194;4134:926;;;;;;;;:::o;5067:847::-;;;;;;5248:3;5236:9;5227:7;5223:23;5219:33;5216:2;;;5265:1;5262;5255:12;5216:2;5300:1;5317:53;5362:7;5353:6;5342:9;5338:22;5317:53;:::i;:::-;5307:63;;5279:97;5407:2;5425:53;5470:7;5461:6;5450:9;5446:22;5425:53;:::i;:::-;5415:63;;5386:98;5515:2;5533:53;5578:7;5569:6;5558:9;5554:22;5533:53;:::i;:::-;5523:63;;5494:98;5623:2;5641:53;5686:7;5677:6;5666:9;5662:22;5641:53;:::i;:::-;5631:63;;5602:98;5759:3;5748:9;5744:19;5731:33;5784:18;5776:6;5773:30;5770:2;;;5816:1;5813;5806:12;5770:2;5836:62;5890:7;5881:6;5870:9;5866:22;5836:62;:::i;:::-;5826:72;;5710:194;5210:704;;;;;;;;:::o;5921:1349::-;;;;;;;;;;6169:3;6157:9;6148:7;6144:23;6140:33;6137:2;;;6186:1;6183;6176:12;6137:2;6221:1;6238:53;6283:7;6274:6;6263:9;6259:22;6238:53;:::i;:::-;6228:63;;6200:97;6328:2;6346:53;6391:7;6382:6;6371:9;6367:22;6346:53;:::i;:::-;6336:63;;6307:98;6436:2;6454:53;6499:7;6490:6;6479:9;6475:22;6454:53;:::i;:::-;6444:63;;6415:98;6544:2;6562:53;6607:7;6598:6;6587:9;6583:22;6562:53;:::i;:::-;6552:63;;6523:98;6652:3;6671:51;6714:7;6705:6;6694:9;6690:22;6671:51;:::i;:::-;6661:61;;6631:97;6759:3;6778:53;6823:7;6814:6;6803:9;6799:22;6778:53;:::i;:::-;6768:63;;6738:99;6868:3;6887:53;6932:7;6923:6;6912:9;6908:22;6887:53;:::i;:::-;6877:63;;6847:99;6977:3;6996:53;7041:7;7032:6;7021:9;7017:22;6996:53;:::i;:::-;6986:63;;6956:99;7114:3;7103:9;7099:19;7086:33;7139:18;7131:6;7128:30;7125:2;;;7171:1;7168;7161:12;7125:2;7191:63;7246:7;7237:6;7226:9;7222:22;7191:63;:::i;:::-;7181:73;;7065:195;6131:1139;;;;;;;;;;;:::o;7277:360::-;;;7395:2;7383:9;7374:7;7370:23;7366:32;7363:2;;;7411:1;7408;7401:12;7363:2;7446:1;7463:53;7508:7;7499:6;7488:9;7484:22;7463:53;:::i;:::-;7453:63;;7425:97;7553:2;7571:50;7613:7;7604:6;7593:9;7589:22;7571:50;:::i;:::-;7561:60;;7532:95;7357:280;;;;;:::o;7644:366::-;;;7765:2;7753:9;7744:7;7740:23;7736:32;7733:2;;;7781:1;7778;7771:12;7733:2;7816:1;7833:53;7878:7;7869:6;7858:9;7854:22;7833:53;:::i;:::-;7823:63;;7795:97;7923:2;7941:53;7986:7;7977:6;7966:9;7962:22;7941:53;:::i;:::-;7931:63;;7902:98;7727:283;;;;;:::o;8017:491::-;;;;8155:2;8143:9;8134:7;8130:23;8126:32;8123:2;;;8171:1;8168;8161:12;8123:2;8206:1;8223:53;8268:7;8259:6;8248:9;8244:22;8223:53;:::i;:::-;8213:63;;8185:97;8313:2;8331:53;8376:7;8367:6;8356:9;8352:22;8331:53;:::i;:::-;8321:63;;8292:98;8421:2;8439:53;8484:7;8475:6;8464:9;8460:22;8439:53;:::i;:::-;8429:63;;8400:98;8117:391;;;;;:::o;8515:638::-;;;8686:2;8674:9;8665:7;8661:23;8657:32;8654:2;;;8702:1;8699;8692:12;8654:2;8765:1;8754:9;8750:17;8737:31;8788:18;8780:6;8777:30;8774:2;;;8820:1;8817;8810:12;8774:2;8840:78;8910:7;8901:6;8890:9;8886:22;8840:78;:::i;:::-;8830:88;;8716:208;8983:2;8972:9;8968:18;8955:32;9007:18;8999:6;8996:30;8993:2;;;9039:1;9036;9029:12;8993:2;9059:78;9129:7;9120:6;9109:9;9105:22;9059:78;:::i;:::-;9049:88;;8934:209;8648:505;;;;;:::o;9160:241::-;;9264:2;9252:9;9243:7;9239:23;9235:32;9232:2;;;9280:1;9277;9270:12;9232:2;9315:1;9332:53;9377:7;9368:6;9357:9;9353:22;9332:53;:::i;:::-;9322:63;;9294:97;9226:175;;;;:::o;9408:239::-;;9511:2;9499:9;9490:7;9486:23;9482:32;9479:2;;;9527:1;9524;9517:12;9479:2;9562:1;9579:52;9623:7;9614:6;9603:9;9599:22;9579:52;:::i;:::-;9569:62;;9541:96;9473:174;;;;:::o;9654:261::-;;9768:2;9756:9;9747:7;9743:23;9739:32;9736:2;;;9784:1;9781;9774:12;9736:2;9819:1;9836:63;9891:7;9882:6;9871:9;9867:22;9836:63;:::i;:::-;9826:73;;9798:107;9730:185;;;;:::o;9922:241::-;;10026:2;10014:9;10005:7;10001:23;9997:32;9994:2;;;10042:1;10039;10032:12;9994:2;10077:1;10094:53;10139:7;10130:6;10119:9;10115:22;10094:53;:::i;:::-;10084:63;;10056:97;9988:175;;;;:::o;10170:366::-;;;10291:2;10279:9;10270:7;10266:23;10262:32;10259:2;;;10307:1;10304;10297:12;10259:2;10342:1;10359:53;10404:7;10395:6;10384:9;10380:22;10359:53;:::i;:::-;10349:63;;10321:97;10449:2;10467:53;10512:7;10503:6;10492:9;10488:22;10467:53;:::i;:::-;10457:63;;10428:98;10253:283;;;;;:::o;10544:173::-;;10631:46;10673:3;10665:6;10631:46;:::i;:::-;10706:4;10701:3;10697:14;10683:28;;10624:93;;;;:::o;10725:113::-;10808:24;10826:5;10808:24;:::i;:::-;10803:3;10796:37;10790:48;;:::o;10845:152::-;10946:45;10966:24;10984:5;10966:24;:::i;:::-;10946:45;:::i;:::-;10941:3;10934:58;10928:69;;:::o;11035:690::-;;11180:54;11228:5;11180:54;:::i;:::-;11247:86;11326:6;11321:3;11247:86;:::i;:::-;11240:93;;11354:56;11404:5;11354:56;:::i;:::-;11430:7;11458:1;11443:260;11468:6;11465:1;11462:13;11443:260;;;11535:6;11529:13;11556:63;11615:3;11600:13;11556:63;:::i;:::-;11549:70;;11636:60;11689:6;11636:60;:::i;:::-;11626:70;;11500:203;11490:1;11487;11483:9;11478:14;;11443:260;;;11447:14;11716:3;11709:10;;11159:566;;;;;;;:::o;11733:104::-;11810:21;11825:5;11810:21;:::i;:::-;11805:3;11798:34;11792:45;;:::o;11844:113::-;11927:24;11945:5;11927:24;:::i;:::-;11922:3;11915:37;11909:48;;:::o;11964:152::-;12065:45;12085:24;12103:5;12085:24;:::i;:::-;12065:45;:::i;:::-;12060:3;12053:58;12047:69;;:::o;12123:343::-;;12233:38;12265:5;12233:38;:::i;:::-;12283:70;12346:6;12341:3;12283:70;:::i;:::-;12276:77;;12358:52;12403:6;12398:3;12391:4;12384:5;12380:16;12358:52;:::i;:::-;12431:29;12453:6;12431:29;:::i;:::-;12426:3;12422:39;12415:46;;12213:253;;;;;:::o;12473:356::-;;12601:38;12633:5;12601:38;:::i;:::-;12651:88;12732:6;12727:3;12651:88;:::i;:::-;12644:95;;12744:52;12789:6;12784:3;12777:4;12770:5;12766:16;12744:52;:::i;:::-;12817:6;12812:3;12808:16;12801:23;;12581:248;;;;;:::o;12836:199::-;12954:75;12974:54;13022:5;12974:54;:::i;:::-;12954:75;:::i;:::-;12949:3;12942:88;12936:99;;:::o;13042:347::-;;13154:39;13187:5;13154:39;:::i;:::-;13205:71;13269:6;13264:3;13205:71;:::i;:::-;13198:78;;13281:52;13326:6;13321:3;13314:4;13307:5;13303:16;13281:52;:::i;:::-;13354:29;13376:6;13354:29;:::i;:::-;13349:3;13345:39;13338:46;;13134:255;;;;;:::o;13397:389::-;;13557:67;13621:2;13616:3;13557:67;:::i;:::-;13550:74;;13657:34;13653:1;13648:3;13644:11;13637:55;13726:22;13721:2;13716:3;13712:12;13705:44;13777:2;13772:3;13768:12;13761:19;;13543:243;;;:::o;13795:318::-;;13955:67;14019:2;14014:3;13955:67;:::i;:::-;13948:74;;14055:20;14051:1;14046:3;14042:11;14035:41;14104:2;14099:3;14095:12;14088:19;;13941:172;;;:::o;14122:377::-;;14282:67;14346:2;14341:3;14282:67;:::i;:::-;14275:74;;14382:34;14378:1;14373:3;14369:11;14362:55;14451:10;14446:2;14441:3;14437:12;14430:32;14490:2;14485:3;14481:12;14474:19;;14268:231;;;:::o;14508:331::-;;14668:67;14732:2;14727:3;14668:67;:::i;:::-;14661:74;;14768:33;14764:1;14759:3;14755:11;14748:54;14830:2;14825:3;14821:12;14814:19;;14654:185;;;:::o;14848:400::-;;15026:85;15108:2;15103:3;15026:85;:::i;:::-;15019:92;;15144:66;15140:1;15135:3;15131:11;15124:87;15239:2;15234:3;15230:12;15223:19;;15012:236;;;:::o;15257:380::-;;15417:67;15481:2;15476:3;15417:67;:::i;:::-;15410:74;;15517:34;15513:1;15508:3;15504:11;15497:55;15586:13;15581:2;15576:3;15572:12;15565:35;15628:2;15623:3;15619:12;15612:19;;15403:234;;;:::o;15646:386::-;;15806:67;15870:2;15865:3;15806:67;:::i;:::-;15799:74;;15906:34;15902:1;15897:3;15893:11;15886:55;15975:19;15970:2;15965:3;15961:12;15954:41;16023:2;16018:3;16014:12;16007:19;;15792:240;;;:::o;16041:375::-;;16201:67;16265:2;16260:3;16201:67;:::i;:::-;16194:74;;16301:34;16297:1;16292:3;16288:11;16281:55;16370:8;16365:2;16360:3;16356:12;16349:30;16407:2;16402:3;16398:12;16391:19;;16187:229;;;:::o;16425:327::-;;16585:67;16649:2;16644:3;16585:67;:::i;:::-;16578:74;;16685:29;16681:1;16676:3;16672:11;16665:50;16743:2;16738:3;16734:12;16727:19;;16571:181;;;:::o;16761:378::-;;16921:67;16985:2;16980:3;16921:67;:::i;:::-;16914:74;;17021:34;17017:1;17012:3;17008:11;17001:55;17090:11;17085:2;17080:3;17076:12;17069:33;17130:2;17125:3;17121:12;17114:19;;16907:232;;;:::o;17148:319::-;;17308:67;17372:2;17367:3;17308:67;:::i;:::-;17301:74;;17408:21;17404:1;17399:3;17395:11;17388:42;17458:2;17453:3;17449:12;17442:19;;17294:173;;;:::o;17476:317::-;;17636:67;17700:2;17695:3;17636:67;:::i;:::-;17629:74;;17736:19;17732:1;17727:3;17723:11;17716:40;17784:2;17779:3;17775:12;17768:19;;17622:171;;;:::o;17802:374::-;;17962:67;18026:2;18021:3;17962:67;:::i;:::-;17955:74;;18062:34;18058:1;18053:3;18049:11;18042:55;18131:7;18126:2;18121:3;18117:12;18110:29;18167:2;18162:3;18158:12;18151:19;;17948:228;;;:::o;18185:387::-;;18345:67;18409:2;18404:3;18345:67;:::i;:::-;18338:74;;18445:34;18441:1;18436:3;18432:11;18425:55;18514:20;18509:2;18504:3;18500:12;18493:42;18563:2;18558:3;18554:12;18547:19;;18331:241;;;:::o;18581:370::-;;18741:67;18805:2;18800:3;18741:67;:::i;:::-;18734:74;;18841:34;18837:1;18832:3;18828:11;18821:55;18910:3;18905:2;18900:3;18896:12;18889:25;18942:2;18937:3;18933:12;18926:19;;18727:224;;;:::o;18960:372::-;;19120:67;19184:2;19179:3;19120:67;:::i;:::-;19113:74;;19220:34;19216:1;19211:3;19207:11;19200:55;19289:5;19284:2;19279:3;19275:12;19268:27;19323:2;19318:3;19314:12;19307:19;;19106:226;;;:::o;19341:332::-;;19501:67;19565:2;19560:3;19501:67;:::i;:::-;19494:74;;19601:34;19597:1;19592:3;19588:11;19581:55;19664:2;19659:3;19655:12;19648:19;;19487:186;;;:::o;19682:371::-;;19842:67;19906:2;19901:3;19842:67;:::i;:::-;19835:74;;19942:34;19938:1;19933:3;19929:11;19922:55;20011:4;20006:2;20001:3;19997:12;19990:26;20044:2;20039:3;20035:12;20028:19;;19828:225;;;:::o;20062:323::-;;20222:67;20286:2;20281:3;20222:67;:::i;:::-;20215:74;;20322:25;20318:1;20313:3;20309:11;20302:46;20376:2;20371:3;20367:12;20360:19;;20208:177;;;:::o;20394:325::-;;20554:67;20618:2;20613:3;20554:67;:::i;:::-;20547:74;;20654:27;20650:1;20645:3;20641:11;20634:48;20710:2;20705:3;20701:12;20694:19;;20540:179;;;:::o;20728:378::-;;20888:67;20952:2;20947:3;20888:67;:::i;:::-;20881:74;;20988:34;20984:1;20979:3;20975:11;20968:55;21057:11;21052:2;21047:3;21043:12;21036:33;21097:2;21092:3;21088:12;21081:19;;20874:232;;;:::o;21115:378::-;;21275:67;21339:2;21334:3;21275:67;:::i;:::-;21268:74;;21375:34;21371:1;21366:3;21362:11;21355:55;21444:11;21439:2;21434:3;21430:12;21423:33;21484:2;21479:3;21475:12;21468:19;;21261:232;;;:::o;21502:377::-;;21662:67;21726:2;21721:3;21662:67;:::i;:::-;21655:74;;21762:34;21758:1;21753:3;21749:11;21742:55;21831:10;21826:2;21821:3;21817:12;21810:32;21870:2;21865:3;21861:12;21854:19;;21648:231;;;:::o;21888:328::-;;22048:67;22112:2;22107:3;22048:67;:::i;:::-;22041:74;;22148:30;22144:1;22139:3;22135:11;22128:51;22207:2;22202:3;22198:12;22191:19;;22034:182;;;:::o;22225:313::-;;22385:67;22449:2;22444:3;22385:67;:::i;:::-;22378:74;;22485:15;22481:1;22476:3;22472:11;22465:36;22529:2;22524:3;22520:12;22513:19;;22371:167;;;:::o;22547:317::-;;22707:67;22771:2;22766:3;22707:67;:::i;:::-;22700:74;;22807:19;22803:1;22798:3;22794:11;22787:40;22855:2;22850:3;22846:12;22839:19;;22693:171;;;:::o;22873:326::-;;23033:67;23097:2;23092:3;23033:67;:::i;:::-;23026:74;;23133:28;23129:1;23124:3;23120:11;23113:49;23190:2;23185:3;23181:12;23174:19;;23019:180;;;:::o;23207:103::-;23280:24;23298:5;23280:24;:::i;:::-;23275:3;23268:37;23262:48;;:::o;23317:113::-;23400:24;23418:5;23400:24;:::i;:::-;23395:3;23388:37;23382:48;;:::o;23437:152::-;23538:45;23558:24;23576:5;23558:24;:::i;:::-;23538:45;:::i;:::-;23533:3;23526:58;23520:69;;:::o;23596:107::-;23675:22;23691:5;23675:22;:::i;:::-;23670:3;23663:35;23657:46;;:::o;23710:271::-;;23863:93;23952:3;23943:6;23863:93;:::i;:::-;23856:100;;23973:3;23966:10;;23844:137;;;;:::o;23988:704::-;;24217:92;24305:3;24296:6;24217:92;:::i;:::-;24331:2;24326:3;24322:12;24315:19;;24345:75;24416:3;24407:6;24345:75;:::i;:::-;24442:2;24437:3;24433:12;24426:19;;24456:75;24527:3;24518:6;24456:75;:::i;:::-;24553:2;24548:3;24544:12;24537:19;;24567:75;24638:3;24629:6;24567:75;:::i;:::-;24664:2;24659:3;24655:12;24648:19;;24684:3;24677:10;;24205:487;;;;;;;:::o;24699:520::-;;24935:148;25079:3;24935:148;:::i;:::-;24928:155;;25094:75;25165:3;25156:6;25094:75;:::i;:::-;25191:2;25186:3;25182:12;25175:19;;25211:3;25204:10;;24916:303;;;;:::o;25226:392::-;;25382:75;25453:3;25444:6;25382:75;:::i;:::-;25479:2;25474:3;25470:12;25463:19;;25493:75;25564:3;25555:6;25493:75;:::i;:::-;25590:2;25585:3;25581:12;25574:19;;25610:3;25603:10;;25370:248;;;;;:::o;25625:222::-;;25752:2;25741:9;25737:18;25729:26;;25766:71;25834:1;25823:9;25819:17;25810:6;25766:71;:::i;:::-;25723:124;;;;:::o;25854:1048::-;;26211:3;26200:9;26196:19;26188:27;;26226:71;26294:1;26283:9;26279:17;26270:6;26226:71;:::i;:::-;26308:72;26376:2;26365:9;26361:18;26352:6;26308:72;:::i;:::-;26428:9;26422:4;26418:20;26413:2;26402:9;26398:18;26391:48;26453:108;26556:4;26547:6;26453:108;:::i;:::-;26445:116;;26609:9;26603:4;26599:20;26594:2;26583:9;26579:18;26572:48;26634:108;26737:4;26728:6;26634:108;:::i;:::-;26626:116;;26791:9;26785:4;26781:20;26775:3;26764:9;26760:19;26753:49;26816:76;26887:4;26878:6;26816:76;:::i;:::-;26808:84;;26182:720;;;;;;;;:::o;26909:752::-;;27166:3;27155:9;27151:19;27143:27;;27181:71;27249:1;27238:9;27234:17;27225:6;27181:71;:::i;:::-;27263:72;27331:2;27320:9;27316:18;27307:6;27263:72;:::i;:::-;27346;27414:2;27403:9;27399:18;27390:6;27346:72;:::i;:::-;27429;27497:2;27486:9;27482:18;27473:6;27429:72;:::i;:::-;27550:9;27544:4;27540:20;27534:3;27523:9;27519:19;27512:49;27575:76;27646:4;27637:6;27575:76;:::i;:::-;27567:84;;27137:524;;;;;;;;:::o;27668:321::-;;27817:2;27806:9;27802:18;27794:26;;27831:71;27899:1;27888:9;27884:17;27875:6;27831:71;:::i;:::-;27913:66;27975:2;27964:9;27960:18;27951:6;27913:66;:::i;:::-;27788:201;;;;;:::o;27996:370::-;;28173:2;28162:9;28158:18;28150:26;;28223:9;28217:4;28213:20;28209:1;28198:9;28194:17;28187:47;28248:108;28351:4;28342:6;28248:108;:::i;:::-;28240:116;;28144:222;;;;:::o;28373:629::-;;28628:2;28617:9;28613:18;28605:26;;28678:9;28672:4;28668:20;28664:1;28653:9;28649:17;28642:47;28703:108;28806:4;28797:6;28703:108;:::i;:::-;28695:116;;28859:9;28853:4;28849:20;28844:2;28833:9;28829:18;28822:48;28884:108;28987:4;28978:6;28884:108;:::i;:::-;28876:116;;28599:403;;;;;:::o;29009:210::-;;29130:2;29119:9;29115:18;29107:26;;29144:65;29206:1;29195:9;29191:17;29182:6;29144:65;:::i;:::-;29101:118;;;;:::o;29226:222::-;;29353:2;29342:9;29338:18;29330:26;;29367:71;29435:1;29424:9;29420:17;29411:6;29367:71;:::i;:::-;29324:124;;;;:::o;29455:548::-;;29662:3;29651:9;29647:19;29639:27;;29677:71;29745:1;29734:9;29730:17;29721:6;29677:71;:::i;:::-;29759:68;29823:2;29812:9;29808:18;29799:6;29759:68;:::i;:::-;29838:72;29906:2;29895:9;29891:18;29882:6;29838:72;:::i;:::-;29921;29989:2;29978:9;29974:18;29965:6;29921:72;:::i;:::-;29633:370;;;;;;;:::o;30010:310::-;;30157:2;30146:9;30142:18;30134:26;;30207:9;30201:4;30197:20;30193:1;30182:9;30178:17;30171:47;30232:78;30305:4;30296:6;30232:78;:::i;:::-;30224:86;;30128:192;;;;:::o;30327:416::-;;30527:2;30516:9;30512:18;30504:26;;30577:9;30571:4;30567:20;30563:1;30552:9;30548:17;30541:47;30602:131;30728:4;30602:131;:::i;:::-;30594:139;;30498:245;;;:::o;30750:416::-;;30950:2;30939:9;30935:18;30927:26;;31000:9;30994:4;30990:20;30986:1;30975:9;30971:17;30964:47;31025:131;31151:4;31025:131;:::i;:::-;31017:139;;30921:245;;;:::o;31173:416::-;;31373:2;31362:9;31358:18;31350:26;;31423:9;31417:4;31413:20;31409:1;31398:9;31394:17;31387:47;31448:131;31574:4;31448:131;:::i;:::-;31440:139;;31344:245;;;:::o;31596:416::-;;31796:2;31785:9;31781:18;31773:26;;31846:9;31840:4;31836:20;31832:1;31821:9;31817:17;31810:47;31871:131;31997:4;31871:131;:::i;:::-;31863:139;;31767:245;;;:::o;32019:416::-;;32219:2;32208:9;32204:18;32196:26;;32269:9;32263:4;32259:20;32255:1;32244:9;32240:17;32233:47;32294:131;32420:4;32294:131;:::i;:::-;32286:139;;32190:245;;;:::o;32442:416::-;;32642:2;32631:9;32627:18;32619:26;;32692:9;32686:4;32682:20;32678:1;32667:9;32663:17;32656:47;32717:131;32843:4;32717:131;:::i;:::-;32709:139;;32613:245;;;:::o;32865:416::-;;33065:2;33054:9;33050:18;33042:26;;33115:9;33109:4;33105:20;33101:1;33090:9;33086:17;33079:47;33140:131;33266:4;33140:131;:::i;:::-;33132:139;;33036:245;;;:::o;33288:416::-;;33488:2;33477:9;33473:18;33465:26;;33538:9;33532:4;33528:20;33524:1;33513:9;33509:17;33502:47;33563:131;33689:4;33563:131;:::i;:::-;33555:139;;33459:245;;;:::o;33711:416::-;;33911:2;33900:9;33896:18;33888:26;;33961:9;33955:4;33951:20;33947:1;33936:9;33932:17;33925:47;33986:131;34112:4;33986:131;:::i;:::-;33978:139;;33882:245;;;:::o;34134:416::-;;34334:2;34323:9;34319:18;34311:26;;34384:9;34378:4;34374:20;34370:1;34359:9;34355:17;34348:47;34409:131;34535:4;34409:131;:::i;:::-;34401:139;;34305:245;;;:::o;34557:416::-;;34757:2;34746:9;34742:18;34734:26;;34807:9;34801:4;34797:20;34793:1;34782:9;34778:17;34771:47;34832:131;34958:4;34832:131;:::i;:::-;34824:139;;34728:245;;;:::o;34980:416::-;;35180:2;35169:9;35165:18;35157:26;;35230:9;35224:4;35220:20;35216:1;35205:9;35201:17;35194:47;35255:131;35381:4;35255:131;:::i;:::-;35247:139;;35151:245;;;:::o;35403:416::-;;35603:2;35592:9;35588:18;35580:26;;35653:9;35647:4;35643:20;35639:1;35628:9;35624:17;35617:47;35678:131;35804:4;35678:131;:::i;:::-;35670:139;;35574:245;;;:::o;35826:416::-;;36026:2;36015:9;36011:18;36003:26;;36076:9;36070:4;36066:20;36062:1;36051:9;36047:17;36040:47;36101:131;36227:4;36101:131;:::i;:::-;36093:139;;35997:245;;;:::o;36249:416::-;;36449:2;36438:9;36434:18;36426:26;;36499:9;36493:4;36489:20;36485:1;36474:9;36470:17;36463:47;36524:131;36650:4;36524:131;:::i;:::-;36516:139;;36420:245;;;:::o;36672:416::-;;36872:2;36861:9;36857:18;36849:26;;36922:9;36916:4;36912:20;36908:1;36897:9;36893:17;36886:47;36947:131;37073:4;36947:131;:::i;:::-;36939:139;;36843:245;;;:::o;37095:416::-;;37295:2;37284:9;37280:18;37272:26;;37345:9;37339:4;37335:20;37331:1;37320:9;37316:17;37309:47;37370:131;37496:4;37370:131;:::i;:::-;37362:139;;37266:245;;;:::o;37518:416::-;;37718:2;37707:9;37703:18;37695:26;;37768:9;37762:4;37758:20;37754:1;37743:9;37739:17;37732:47;37793:131;37919:4;37793:131;:::i;:::-;37785:139;;37689:245;;;:::o;37941:416::-;;38141:2;38130:9;38126:18;38118:26;;38191:9;38185:4;38181:20;38177:1;38166:9;38162:17;38155:47;38216:131;38342:4;38216:131;:::i;:::-;38208:139;;38112:245;;;:::o;38364:416::-;;38564:2;38553:9;38549:18;38541:26;;38614:9;38608:4;38604:20;38600:1;38589:9;38585:17;38578:47;38639:131;38765:4;38639:131;:::i;:::-;38631:139;;38535:245;;;:::o;38787:416::-;;38987:2;38976:9;38972:18;38964:26;;39037:9;39031:4;39027:20;39023:1;39012:9;39008:17;39001:47;39062:131;39188:4;39062:131;:::i;:::-;39054:139;;38958:245;;;:::o;39210:416::-;;39410:2;39399:9;39395:18;39387:26;;39460:9;39454:4;39450:20;39446:1;39435:9;39431:17;39424:47;39485:131;39611:4;39485:131;:::i;:::-;39477:139;;39381:245;;;:::o;39633:416::-;;39833:2;39822:9;39818:18;39810:26;;39883:9;39877:4;39873:20;39869:1;39858:9;39854:17;39847:47;39908:131;40034:4;39908:131;:::i;:::-;39900:139;;39804:245;;;:::o;40056:416::-;;40256:2;40245:9;40241:18;40233:26;;40306:9;40300:4;40296:20;40292:1;40281:9;40277:17;40270:47;40331:131;40457:4;40331:131;:::i;:::-;40323:139;;40227:245;;;:::o;40479:416::-;;40679:2;40668:9;40664:18;40656:26;;40729:9;40723:4;40719:20;40715:1;40704:9;40700:17;40693:47;40754:131;40880:4;40754:131;:::i;:::-;40746:139;;40650:245;;;:::o;40902:416::-;;41102:2;41091:9;41087:18;41079:26;;41152:9;41146:4;41142:20;41138:1;41127:9;41123:17;41116:47;41177:131;41303:4;41177:131;:::i;:::-;41169:139;;41073:245;;;:::o;41325:222::-;;41452:2;41441:9;41437:18;41429:26;;41466:71;41534:1;41523:9;41519:17;41510:6;41466:71;:::i;:::-;41423:124;;;;:::o;41554:333::-;;41709:2;41698:9;41694:18;41686:26;;41723:71;41791:1;41780:9;41776:17;41767:6;41723:71;:::i;:::-;41805:72;41873:2;41862:9;41858:18;41849:6;41805:72;:::i;:::-;41680:207;;;;;:::o;41894:256::-;;41956:2;41950:9;41940:19;;41994:4;41986:6;41982:17;42093:6;42081:10;42078:22;42057:18;42045:10;42042:34;42039:62;42036:2;;;42114:1;42111;42104:12;42036:2;42134:10;42130:2;42123:22;41934:216;;;;:::o;42157:304::-;;42316:18;42308:6;42305:30;42302:2;;;42348:1;42345;42338:12;42302:2;42383:4;42375:6;42371:17;42363:25;;42446:4;42440;42436:15;42428:23;;42239:222;;;:::o;42468:304::-;;42627:18;42619:6;42616:30;42613:2;;;42659:1;42656;42649:12;42613:2;42694:4;42686:6;42682:17;42674:25;;42757:4;42751;42747:15;42739:23;;42550:222;;;:::o;42779:321::-;;42922:18;42914:6;42911:30;42908:2;;;42954:1;42951;42944:12;42908:2;43021:4;43017:9;43010:4;43002:6;42998:17;42994:33;42986:41;;43085:4;43079;43075:15;43067:23;;42845:255;;;:::o;43107:322::-;;43251:18;43243:6;43240:30;43237:2;;;43283:1;43280;43273:12;43237:2;43350:4;43346:9;43339:4;43331:6;43327:17;43323:33;43315:41;;43414:4;43408;43404:15;43396:23;;43174:255;;;:::o;43436:151::-;;43522:3;43514:11;;43560:4;43555:3;43551:14;43543:22;;43508:79;;;:::o;43594:137::-;;43703:5;43697:12;43687:22;;43668:63;;;:::o;43738:121::-;;43831:5;43825:12;43815:22;;43796:63;;;:::o;43866:122::-;;43960:5;43954:12;43944:22;;43925:63;;;:::o;43995:108::-;;44093:4;44088:3;44084:14;44076:22;;44070:33;;;:::o;44111:178::-;;44241:6;44236:3;44229:19;44278:4;44273:3;44269:14;44254:29;;44222:67;;;;:::o;44298:162::-;;44412:6;44407:3;44400:19;44449:4;44444:3;44440:14;44425:29;;44393:67;;;;:::o;44469:144::-;;44604:3;44589:18;;44582:31;;;;:::o;44622:163::-;;44737:6;44732:3;44725:19;44774:4;44769:3;44765:14;44750:29;;44718:67;;;;:::o;44794:145::-;;44930:3;44915:18;;44908:31;;;;:::o;44947:91::-;;45009:24;45027:5;45009:24;:::i;:::-;44998:35;;44992:46;;;:::o;45045:85::-;;45118:5;45111:13;45104:21;45093:32;;45087:43;;;:::o;45137:72::-;;45199:5;45188:16;;45182:27;;;:::o;45216:144::-;;45288:66;45281:5;45277:78;45266:89;;45260:100;;;:::o;45367:121::-;;45440:42;45433:5;45429:54;45418:65;;45412:76;;;:::o;45495:72::-;;45557:5;45546:16;;45540:27;;;:::o;45574:81::-;;45645:4;45638:5;45634:16;45623:27;;45617:38;;;:::o;45662:155::-;;45758:54;45806:5;45758:54;:::i;:::-;45745:67;;45739:78;;;:::o;45824:125::-;;45920:24;45938:5;45920:24;:::i;:::-;45907:37;;45901:48;;;:::o;45957:145::-;46038:6;46033:3;46028;46015:30;46094:1;46085:6;46080:3;46076:16;46069:27;46008:94;;;:::o;46111:268::-;46176:1;46183:101;46197:6;46194:1;46191:13;46183:101;;;46273:1;46268:3;46264:11;46258:18;46254:1;46249:3;46245:11;46238:39;46219:2;46216:1;46212:10;46207:15;;46183:101;;;46299:6;46296:1;46293:13;46290:2;;;46364:1;46355:6;46350:3;46346:16;46339:27;46290:2;46160:219;;;;:::o;46387:95::-;;46451:26;46471:5;46451:26;:::i;:::-;46440:37;;46434:48;;;:::o;46489:74::-;;46553:5;46542:16;;46536:27;;;:::o;46570:89::-;;46634:20;46648:5;46634:20;:::i;:::-;46623:31;;46617:42;;;:::o;46666:74::-;;46730:5;46719:16;;46713:27;;;:::o;46747:97::-;;46835:2;46831:7;46826:2;46819:5;46815:14;46811:28;46801:38;;46795:49;;;:::o;46852:94::-;;46930:5;46926:2;46922:14;46900:36;;46894:52;;;:::o;46954:106::-;;47044:5;47039:3;47035:15;47013:37;;47007:53;;;:::o;47068:739::-;;47141:4;47123:16;47120:26;47117:2;;;47149:5;;47117:2;47183:1;47180;47177;47162:23;47201:34;47232:1;47226:8;47201:34;:::i;:::-;47258:10;47253:3;47250:19;47240:2;;47273:5;;;47240:2;47304;47298:9;47358:1;47340:16;47336:24;47333:1;47327:4;47312:49;47387:4;47381:11;47468:16;47461:4;47453:6;47449:17;47446:39;47420:18;47412:6;47409:30;47400:91;47397:2;;;47499:5;;;;;47397:2;47537:6;47531:4;47527:17;47569:3;47563:10;47592:18;47584:6;47581:30;47578:2;;;47614:5;;;;;;;47578:2;47658:6;47651:4;47646:3;47642:14;47638:27;47691:16;47685:4;47681:27;47676:3;47673:36;47670:2;;;47712:5;;;;;;;;47670:2;47756:29;47778:6;47756:29;:::i;:::-;47749:4;47744:3;47740:14;47736:50;47732:2;47725:62;47799:3;47792:10;;47111:696;;;;;;;;:::o;47814:117::-;47883:24;47901:5;47883:24;:::i;:::-;47876:5;47873:35;47863:2;;47922:1;47919;47912:12;47863:2;47857:74;:::o;47938:111::-;48004:21;48019:5;48004:21;:::i;:::-;47997:5;47994:32;47984:2;;48040:1;48037;48030:12;47984:2;47978:71;:::o;48056:117::-;48125:24;48143:5;48125:24;:::i;:::-;48118:5;48115:35;48105:2;;48164:1;48161;48154:12;48105:2;48099:74;:::o;48180:115::-;48248:23;48265:5;48248:23;:::i;:::-;48241:5;48238:34;48228:2;;48286:1;48283;48276:12;48228:2;48222:73;:::o;48302:117::-;48371:24;48389:5;48371:24;:::i;:::-;48364:5;48361:35;48351:2;;48410:1;48407;48400:12;48351:2;48345:74;:::o;48426:113::-;48493:22;48509:5;48493:22;:::i;:::-;48486:5;48483:33;48473:2;;48530:1;48527;48520:12;48473:2;48467:72;:::o
Swarm Source
ipfs://334ea3584f0b42603f23b1ee6cd5a1b3b9088ba94ea0e767981a21aec7113337
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.