ERC-721
Overview
Max Total Supply
10,000 DPGU
Holders
223
Total Transfers
-
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
VoiceStreetNoWhiteListNftContract
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-28 */ pragma solidity >=0.4.22 <0.9.0; pragma experimental ABIEncoderV2; /** * @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); } interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } struct TokenMeta { uint256 id; string name; string uri; string hash; uint256 soldTimes; address minter; } abstract contract IVoiceStreetNft { function totalSupply() public virtual view returns(uint256); function tokenMeta(uint256 _tokenId) public virtual view returns (TokenMeta memory); function setTokenAsset(uint256 _tokenId, string memory _uri, string memory _hash, address _minter) public virtual; function increaseSoldTimes(uint256 _tokenId) public virtual; function getSoldTimes(uint256 _tokenId) public virtual view returns(uint256); } abstract contract ISaleContract { function sale(uint256 tokenId, uint256[] memory _settings, address[] memory _addrs) public virtual; function offload(uint256 tokenId) public virtual; } contract VoiceStreetNoWhiteListNftContract is IVoiceStreetNft, Context, ERC165, IERC721, IERC721Metadata, Ownable { using Address for address; using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private _tokenIds; mapping (uint256 => TokenMeta) public tokenOnChainMeta; uint256 private max_supply = 10000; uint256 private current_supply = 0; uint256 private current_sold = 0; string private baseURI; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) internal _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; uint public price; uint public buy_limit_per_address = 10; uint public sell_begin_time = 0; constructor() { _name = "Daffy Panda Ganging Up"; _symbol = "DPGU"; setBaseURI("https://www.vsnft.org/token/"); } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setMaxSupply(uint _value) public onlyOwner { max_supply = _value; } function setNames(string memory name_, string memory symbol_) public onlyOwner { _name = name_; _symbol = symbol_; } function totalSupply() public override view returns(uint256) { return max_supply; } function supportsInterface(bytes4 interfaceId) public view override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } function ownerOf(uint256 tokenId) public view override returns (address) { address tokenOwner = _owners[tokenId]; return tokenOwner == address(0) ? owner() : tokenOwner; } function name() public view override returns (string memory) { return _name; } function symbol() public view override returns (string memory) { return _symbol; } function tokenURI(uint256 tokenId) public view override returns (string memory) { return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } function approve(address to, uint256 tokenId) public override { address owner = ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } function isApprovedForAll(address owner, address operator) public view override returns (bool) { return _operatorApprovals[owner][operator]; } function transferFrom( address from, address to, uint256 tokenId ) public override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } function _exists(uint256 tokenId) internal view returns (bool) { return tokenId <= current_supply; } function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } function _safeMint(address to, uint256 tokenId) internal { _safeMint(to, tokenId, ""); } function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal { _mint(to, tokenId, true); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } function _mint(address to, uint256 tokenId, bool emitting) internal { require(to != address(0), "ERC721: mint to the zero address"); require(_owners[tokenId] == address(0), "ERC721: token already minted"); _balances[to] += 1; _owners[tokenId] = to; if (emitting) { emit Transfer(address(0), to, tokenId); } } function _transfer( address from, address to, uint256 tokenId ) internal { address tokenOwner = _owners[tokenId]; if (tokenOwner == address(0)) { require(from == owner(), "can only mint from contract owner"); _mint(from, tokenId, true); } require(ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } function _approve(address to, uint256 tokenId) internal { _tokenApprovals[tokenId] = to; emit Approval(ownerOf(tokenId), to, tokenId); } function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } function tokenMeta(uint256 _tokenId) public override view returns (TokenMeta memory) { return tokenOnChainMeta[_tokenId]; } function mintAndPricing(uint256 _num, uint256 _price, uint256 _limit, uint256 _time) public onlyOwner { uint supply = SafeMath.add(current_supply, _num); current_supply = supply; price = _price; buy_limit_per_address = _limit; sell_begin_time = _time; } function setTokenAsset(uint256 _tokenId, string memory _uri, string memory _hash, address _minter) public override onlyOwner { require(_exists(_tokenId), "Vsnft_setTokenAsset_notoken"); TokenMeta storage meta = tokenOnChainMeta[_tokenId]; meta.uri = _uri; meta.hash = _hash; meta.minter = _minter; tokenOnChainMeta[_tokenId] = meta; } function setSale(uint256 _tokenId, address _contractAddr, uint256[] memory _settings, address[] memory _addrs) public { require(_exists(_tokenId), "Vsnft_setTokenAsset_notoken"); address sender = _msgSender(); require(owner() == sender || ownerOf(_tokenId) == sender, "Invalid_Owner"); ISaleContract _contract = ISaleContract(_contractAddr); _contract.sale(_tokenId, _settings, _addrs); _transfer(sender, _contractAddr, _tokenId); } function increaseSoldTimes(uint256 /* _tokenId */) public override { } function getSoldTimes(uint256 _tokenId) public override view returns(uint256) { TokenMeta memory meta = tokenOnChainMeta[_tokenId]; return meta.soldTimes; } function buy(uint amount, uint adv_time) public payable { require(block.timestamp >= SafeMath.sub(sell_begin_time, adv_time), "Purchase_Not_Enabled"); require(SafeMath.add(balanceOf(msg.sender), amount) <= buy_limit_per_address, "Exceed_Purchase_Limit"); uint requiredValue = SafeMath.mul(amount, price); require(msg.value >= requiredValue, "Not_Enough_Payment"); require(current_supply >= SafeMath.add(current_sold, amount), "Not_Enough_Stock"); for (uint i = 0; i < amount; ++i) { _tokenIds.increment(); uint256 newItemId = _tokenIds.current(); _mint(msg.sender, newItemId, true); TokenMeta memory meta = TokenMeta( newItemId, "", "", "", 1, owner()); tokenOnChainMeta[newItemId] = meta; } current_sold = SafeMath.add(current_sold, amount); } function withdraw() public onlyOwner { uint balance = address(this).balance; Address.sendValue(payable(owner()), balance); } function stockAvailable(address account) public view returns (uint, uint, uint) { return (current_supply, current_sold, balanceOf(account)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"adv_time","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"buy_limit_per_address","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getSoldTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"increaseSoldTimes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_num","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_limit","type":"uint256"},{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"mintAndPricing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sell_begin_time","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"name":"setNames","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_contractAddr","type":"address"},{"internalType":"uint256[]","name":"_settings","type":"uint256[]"},{"internalType":"address[]","name":"_addrs","type":"address[]"}],"name":"setSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"string","name":"_hash","type":"string"},{"internalType":"address","name":"_minter","type":"address"}],"name":"setTokenAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"stockAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"_tokenId","type":"uint256"}],"name":"tokenMeta","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"uri","type":"string"},{"internalType":"string","name":"hash","type":"string"},{"internalType":"uint256","name":"soldTimes","type":"uint256"},{"internalType":"address","name":"minter","type":"address"}],"internalType":"struct TokenMeta","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenOnChainMeta","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"uri","type":"string"},{"internalType":"string","name":"hash","type":"string"},{"internalType":"uint256","name":"soldTimes","type":"uint256"},{"internalType":"address","name":"minter","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405261271060035560006004556000600555600a600e556000600f553480156200002b57600080fd5b506200003733620000f1565b6040805180820190915260168082527f44616666792050616e64612047616e67696e672055700000000000000000000060209092019182526200007d91600791620001b9565b50604080518082019091526004808252634450475560e01b6020909201918252620000ab91600891620001b9565b5060408051808201909152601c81527f68747470733a2f2f7777772e76736e66742e6f72672f746f6b656e2f000000006020820152620000eb9062000141565b6200029c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314620001a05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b8051620001b5906006906020840190620001b9565b5050565b828054620001c7906200025f565b90600052602060002090601f016020900481019282620001eb576000855562000236565b82601f106200020657805160ff191683800117855562000236565b8280016001018555821562000236579182015b828111156200023657825182559160200191906001019062000219565b506200024492915062000248565b5090565b5b8082111562000244576000815560010162000249565b600181811c908216806200027457607f821691505b602082108114156200029657634e487b7160e01b600052602260045260246000fd5b50919050565b612d8680620002ac6000396000f3fe6080604052600436106101ee5760003560e01c80636e24b49f1161010d57806395d89b41116100a0578063c87b56dd1161006f578063c87b56dd1461059c578063d6febde8146105bc578063e985e9c5146105cf578063f2fde38b14610618578063fe9080611461063857600080fd5b806395d89b4114610531578063a035b1fe14610546578063a22cb4651461055c578063b88d4fde1461057c57600080fd5b80637208616e116100dc5780637208616e146104ab5780638da5cb5b146104dd57806391491cfd146104fb57806391a3008b1461051157600080fd5b80636e24b49f146104365780636f8b44b01461045657806370a0823114610476578063715018a61461049657600080fd5b806323b872dd116101855780634fceba4d116101545780634fceba4d146103b657806355f804b3146103d65780635af94e7c146103f65780636352211e1461041657600080fd5b806323b872dd1461034b5780633ccfd60b1461036b57806342842e0e14610380578063482f11f3146103a057600080fd5b8063095ea7b3116101c1578063095ea7b3146102a45780630ae7a310146102c457806318160ddd146102f1578063234973601461031057600080fd5b806301ffc9a7146101f3578063030778001461022857806306fdde031461024a578063081812fc1461026c575b600080fd5b3480156101ff57600080fd5b5061021361020e366004612570565b610656565b60405190151581526020015b60405180910390f35b34801561023457600080fd5b5061024861024336600461265c565b6106a8565b005b34801561025657600080fd5b5061025f6107ec565b60405161021f919061292a565b34801561027857600080fd5b5061028c610287366004612643565b61087e565b6040516001600160a01b03909116815260200161021f565b3480156102b057600080fd5b506102486102bf366004612546565b610909565b3480156102d057600080fd5b506102e46102df366004612643565b610a1f565b60405161021f9190612a15565b3480156102fd57600080fd5b506003545b60405190815260200161021f565b34801561031c57600080fd5b5061033061032b366004612404565b610c63565b6040805193845260208401929092529082015260600161021f565b34801561035757600080fd5b50610248610366366004612452565b610c84565b34801561037757600080fd5b50610248610cb5565b34801561038c57600080fd5b5061024861039b366004612452565b610cfb565b3480156103ac57600080fd5b50610302600e5481565b3480156103c257600080fd5b506102486103d13660046125df565b610d16565b3480156103e257600080fd5b506102486103f13660046125aa565b610d67565b34801561040257600080fd5b5061024861041136600461272c565b610da8565b34801561042257600080fd5b5061028c610431366004612643565b610f2e565b34801561044257600080fd5b506102486104513660046127cc565b610f66565b34801561046257600080fd5b50610248610471366004612643565b610fb1565b34801561048257600080fd5b50610302610491366004612404565b610fe0565b3480156104a257600080fd5b50610248611067565b3480156104b757600080fd5b506104cb6104c6366004612643565b61109d565b60405161021f96959493929190612b32565b3480156104e957600080fd5b506000546001600160a01b031661028c565b34801561050757600080fd5b50610302600f5481565b34801561051d57600080fd5b5061030261052c366004612643565b611274565b34801561053d57600080fd5b5061025f611476565b34801561055257600080fd5b50610302600d5481565b34801561056857600080fd5b5061024861057736600461250a565b611485565b34801561058857600080fd5b5061024861059736600461248e565b61154a565b3480156105a857600080fd5b5061025f6105b7366004612643565b611582565b6102486105ca3660046127aa565b6115e0565b3480156105db57600080fd5b506102136105ea36600461241f565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205460ff1690565b34801561062457600080fd5b50610248610633366004612404565b6118a1565b34801561064457600080fd5b50610248610653366004612643565b50565b60006001600160e01b031982166380ac58cd60e01b148061068757506001600160e01b03198216635b5e139f60e01b145b806106a257506301ffc9a760e01b6001600160e01b03198316145b92915050565b6106b484600454101590565b6107055760405162461bcd60e51b815260206004820152601b60248201527f56736e66745f736574546f6b656e41737365745f6e6f746f6b656e000000000060448201526064015b60405180910390fd5b60005433906001600160a01b03168114806107395750806001600160a01b031661072e86610f2e565b6001600160a01b0316145b6107755760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b22fa7bbb732b960991b60448201526064016106fc565b60405163b8d006b960e01b815284906001600160a01b0382169063b8d006b9906107a790899088908890600401612aa3565b600060405180830381600087803b1580156107c157600080fd5b505af11580156107d5573d6000803e3d6000fd5b505050506107e4828688611939565b505050505050565b6060600780546107fb90612c78565b80601f016020809104026020016040519081016040528092919081815260200182805461082790612c78565b80156108745780601f1061084957610100808354040283529160200191610874565b820191906000526020600020905b81548152906001019060200180831161085757829003601f168201915b5050505050905090565b600061088c82600454101590565b6108ed5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106fc565b506000908152600b60205260409020546001600160a01b031690565b600061091482610f2e565b9050806001600160a01b0316836001600160a01b031614156109825760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016106fc565b336001600160a01b038216148061099e575061099e81336105ea565b610a105760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016106fc565b610a1a8383611b6a565b505050565b610a616040518060c00160405280600081526020016060815260200160608152602001606081526020016000815260200160006001600160a01b031681525090565b600260008381526020019081526020016000206040518060c001604052908160008201548152602001600182018054610a9990612c78565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac590612c78565b8015610b125780601f10610ae757610100808354040283529160200191610b12565b820191906000526020600020905b815481529060010190602001808311610af557829003601f168201915b50505050508152602001600282018054610b2b90612c78565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5790612c78565b8015610ba45780601f10610b7957610100808354040283529160200191610ba4565b820191906000526020600020905b815481529060010190602001808311610b8757829003601f168201915b50505050508152602001600382018054610bbd90612c78565b80601f0160208091040260200160405190810160405280929190818152602001828054610be990612c78565b8015610c365780601f10610c0b57610100808354040283529160200191610c36565b820191906000526020600020905b815481529060010190602001808311610c1957829003601f168201915b5050509183525050600482015460208201526005909101546001600160a01b031660409091015292915050565b6000806000600454600554610c7786610fe0565b9250925092509193909250565b610c8e3382611bd8565b610caa5760405162461bcd60e51b81526004016106fc906129c4565b610a1a838383611939565b6000546001600160a01b03163314610cdf5760405162461bcd60e51b81526004016106fc9061298f565b47610653610cf56000546001600160a01b031690565b82611cc5565b610a1a8383836040518060200160405280600081525061154a565b6000546001600160a01b03163314610d405760405162461bcd60e51b81526004016106fc9061298f565b8151610d539060079060208501906121e3565b508051610a1a9060089060208401906121e3565b6000546001600160a01b03163314610d915760405162461bcd60e51b81526004016106fc9061298f565b8051610da49060069060208401906121e3565b5050565b6000546001600160a01b03163314610dd25760405162461bcd60e51b81526004016106fc9061298f565b610dde84600454101590565b610e2a5760405162461bcd60e51b815260206004820152601b60248201527f56736e66745f736574546f6b656e41737365745f6e6f746f6b656e000000000060448201526064016106fc565b600084815260026020818152604090922085519092610e4f92840191908701906121e3565b508251610e6590600383019060208601906121e3565b506005810180546001600160a01b0319166001600160a01b0384161790556000858152600260205260409020815481556001808301805484939283019190610eac90612c78565b610eb7929190612267565b506002820181600201908054610ecc90612c78565b610ed7929190612267565b506003820181600301908054610eec90612c78565b610ef7929190612267565b5060048281015490820155600591820154910180546001600160a01b0319166001600160a01b039092169190911790555050505050565b6000818152600960205260408120546001600160a01b03168015610f525780610f5f565b6000546001600160a01b03165b9392505050565b6000546001600160a01b03163314610f905760405162461bcd60e51b81526004016106fc9061298f565b6000610f9e60045486611dde565b60045550600d92909255600e55600f5550565b6000546001600160a01b03163314610fdb5760405162461bcd60e51b81526004016106fc9061298f565b600355565b60006001600160a01b03821661104b5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016106fc565b506001600160a01b03166000908152600a602052604090205490565b6000546001600160a01b031633146110915760405162461bcd60e51b81526004016106fc9061298f565b61109b6000611dea565b565b600260205260009081526040902080546001820180549192916110bf90612c78565b80601f01602080910402602001604051908101604052809291908181526020018280546110eb90612c78565b80156111385780601f1061110d57610100808354040283529160200191611138565b820191906000526020600020905b81548152906001019060200180831161111b57829003601f168201915b50505050509080600201805461114d90612c78565b80601f016020809104026020016040519081016040528092919081815260200182805461117990612c78565b80156111c65780601f1061119b576101008083540402835291602001916111c6565b820191906000526020600020905b8154815290600101906020018083116111a957829003601f168201915b5050505050908060030180546111db90612c78565b80601f016020809104026020016040519081016040528092919081815260200182805461120790612c78565b80156112545780601f1061122957610100808354040283529160200191611254565b820191906000526020600020905b81548152906001019060200180831161123757829003601f168201915b5050505060048301546005909301549192916001600160a01b0316905086565b6000818152600260209081526040808320815160c08101909252805482526001810180548594840191906112a790612c78565b80601f01602080910402602001604051908101604052809291908181526020018280546112d390612c78565b80156113205780601f106112f557610100808354040283529160200191611320565b820191906000526020600020905b81548152906001019060200180831161130357829003601f168201915b5050505050815260200160028201805461133990612c78565b80601f016020809104026020016040519081016040528092919081815260200182805461136590612c78565b80156113b25780601f10611387576101008083540402835291602001916113b2565b820191906000526020600020905b81548152906001019060200180831161139557829003601f168201915b505050505081526020016003820180546113cb90612c78565b80601f01602080910402602001604051908101604052809291908181526020018280546113f790612c78565b80156114445780601f1061141957610100808354040283529160200191611444565b820191906000526020600020905b81548152906001019060200180831161142757829003601f168201915b5050509183525050600482015460208201526005909101546001600160a01b0316604090910152608001519392505050565b6060600880546107fb90612c78565b6001600160a01b0382163314156114de5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106fc565b336000818152600c602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6115543383611bd8565b6115705760405162461bcd60e51b81526004016106fc906129c4565b61157c84848484611e3a565b50505050565b606060006006805461159390612c78565b9050116115af57604051806020016040528060008152506106a2565b60066115ba83611e6d565b6040516020016115cb929190612846565b60405160208183030381529060405292915050565b6115ec600f5482611f6b565b4210156116325760405162461bcd60e51b8152602060048201526014602482015273141d5c98da185cd957d39bdd17d15b98589b195960621b60448201526064016106fc565b600e5461164761164133610fe0565b84611dde565b111561168d5760405162461bcd60e51b8152602060048201526015602482015274115e18d9595917d41d5c98da185cd957d31a5b5a5d605a1b60448201526064016106fc565b600061169b83600d54611f77565b9050803410156116e25760405162461bcd60e51b8152602060048201526012602482015271139bdd17d15b9bdd59da17d4185e5b595b9d60721b60448201526064016106fc565b6116ee60055484611dde565b60045410156117325760405162461bcd60e51b815260206004820152601060248201526f4e6f745f456e6f7567685f53746f636b60801b60448201526064016106fc565b60005b8381101561188c5761174b600180546001019055565b600061175660015490565b905061176433826001611f83565b60006040518060c00160405280838152602001604051806020016040528060008152508152602001604051806020016040528060008152508152602001604051806020016040528060008152508152602001600181526020016117cf6000546001600160a01b031690565b6001600160a01b031690526000838152600260209081526040909120825181558183015180519394508493919261180e926001850192909101906121e3565b506040820151805161182a9160028401916020909101906121e3565b50606082015180516118469160038401916020909101906121e3565b506080820151600482015560a090910151600590910180546001600160a01b0319166001600160a01b0390921691909117905550611885905081612cb3565b9050611735565b5061189960055484611dde565b600555505050565b6000546001600160a01b031633146118cb5760405162461bcd60e51b81526004016106fc9061298f565b6001600160a01b0381166119305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106fc565b61065381611dea565b6000818152600960205260409020546001600160a01b0316806119c9576000546001600160a01b038581169116146119bd5760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c79206d696e742066726f6d20636f6e7472616374206f776e656044820152603960f91b60648201526084016106fc565b6119c984836001611f83565b836001600160a01b03166119dc83610f2e565b6001600160a01b031614611a445760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016106fc565b6001600160a01b038316611aa65760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106fc565b611ab1600083611b6a565b6001600160a01b0384166000908152600a60205260408120805460019290611ada908490612c35565b90915550506001600160a01b0383166000908152600a60205260408120805460019290611b08908490612bea565b909155505060008281526009602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a450505050565b6000818152600b6020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611b9f82610f2e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611be682600454101590565b611c475760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106fc565b6000611c5283610f2e565b9050806001600160a01b0316846001600160a01b03161480611c8d5750836001600160a01b0316611c828461087e565b6001600160a01b0316145b80611cbd57506001600160a01b038082166000908152600c602090815260408083209388168352929052205460ff165b949350505050565b80471015611d155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016106fc565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611d62576040519150601f19603f3d011682016040523d82523d6000602084013e611d67565b606091505b5050905080610a1a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016106fc565b6000610f5f8284612bea565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611e45848484611939565b611e51848484846120d6565b61157c5760405162461bcd60e51b81526004016106fc9061293d565b606081611e915750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611ebb5780611ea581612cb3565b9150611eb49050600a83612c02565b9150611e95565b60008167ffffffffffffffff811115611ed657611ed6612d24565b6040519080825280601f01601f191660200182016040528015611f00576020820181803683370190505b5090505b8415611cbd57611f15600183612c35565b9150611f22600a86612cce565b611f2d906030612bea565b60f81b818381518110611f4257611f42612d0e565b60200101906001600160f81b031916908160001a905350611f64600a86612c02565b9450611f04565b6000610f5f8284612c35565b6000610f5f8284612c16565b6001600160a01b038316611fd95760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106fc565b6000828152600960205260409020546001600160a01b03161561203e5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106fc565b6001600160a01b0383166000908152600a60205260408120805460019290612067908490612bea565b9091555050600082815260096020526040902080546001600160a01b0319166001600160a01b0385161790558015610a1a5760405182906001600160a01b038516906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4505050565b60006001600160a01b0384163b156121d857604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061211a9033908990889088906004016128ed565b602060405180830381600087803b15801561213457600080fd5b505af1925050508015612164575060408051601f3d908101601f191682019092526121619181019061258d565b60015b6121be573d808015612192576040519150601f19603f3d011682016040523d82523d6000602084013e612197565b606091505b5080516121b65760405162461bcd60e51b81526004016106fc9061293d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611cbd565b506001949350505050565b8280546121ef90612c78565b90600052602060002090601f0160209004810192826122115760008555612257565b82601f1061222a57805160ff1916838001178555612257565b82800160010185558215612257579182015b8281111561225757825182559160200191906001019061223c565b506122639291506122e2565b5090565b82805461227390612c78565b90600052602060002090601f0160209004810192826122955760008555612257565b82601f106122a65780548555612257565b8280016001018555821561225757600052602060002091601f016020900482015b828111156122575782548255916001019190600101906122c7565b5b8082111561226357600081556001016122e3565b600067ffffffffffffffff83111561231157612311612d24565b612324601f8401601f1916602001612b95565b905082815283838301111561233857600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461236657600080fd5b919050565b600082601f83011261237c57600080fd5b8135602061239161238c83612bc6565b612b95565b80838252828201915082860187848660051b89010111156123b157600080fd5b60005b858110156123d7576123c58261234f565b845292840192908401906001016123b4565b5090979650505050505050565b600082601f8301126123f557600080fd5b610f5f838335602085016122f7565b60006020828403121561241657600080fd5b610f5f8261234f565b6000806040838503121561243257600080fd5b61243b8361234f565b91506124496020840161234f565b90509250929050565b60008060006060848603121561246757600080fd5b6124708461234f565b925061247e6020850161234f565b9150604084013590509250925092565b600080600080608085870312156124a457600080fd5b6124ad8561234f565b93506124bb6020860161234f565b925060408501359150606085013567ffffffffffffffff8111156124de57600080fd5b8501601f810187136124ef57600080fd5b6124fe878235602084016122f7565b91505092959194509250565b6000806040838503121561251d57600080fd5b6125268361234f565b91506020830135801515811461253b57600080fd5b809150509250929050565b6000806040838503121561255957600080fd5b6125628361234f565b946020939093013593505050565b60006020828403121561258257600080fd5b8135610f5f81612d3a565b60006020828403121561259f57600080fd5b8151610f5f81612d3a565b6000602082840312156125bc57600080fd5b813567ffffffffffffffff8111156125d357600080fd5b611cbd848285016123e4565b600080604083850312156125f257600080fd5b823567ffffffffffffffff8082111561260a57600080fd5b612616868387016123e4565b9350602085013591508082111561262c57600080fd5b50612639858286016123e4565b9150509250929050565b60006020828403121561265557600080fd5b5035919050565b6000806000806080858703121561267257600080fd5b84359350602061268381870161234f565b9350604086013567ffffffffffffffff808211156126a057600080fd5b818801915088601f8301126126b457600080fd5b81356126c261238c82612bc6565b8082825285820191508585018c878560051b88010111156126e257600080fd5b600095505b838610156127055780358352600195909501949186019186016126e7565b5096505050606088013592508083111561271e57600080fd5b50506124fe8782880161236b565b6000806000806080858703121561274257600080fd5b84359350602085013567ffffffffffffffff8082111561276157600080fd5b61276d888389016123e4565b9450604087013591508082111561278357600080fd5b50612790878288016123e4565b92505061279f6060860161234f565b905092959194509250565b600080604083850312156127bd57600080fd5b50508035926020909101359150565b600080600080608085870312156127e257600080fd5b5050823594602084013594506040840135936060013592509050565b60008151808452612816816020860160208601612c4c565b601f01601f19169290920160200192915050565b6000815161283c818560208601612c4c565b9290920192915050565b600080845481600182811c91508083168061286257607f831692505b602080841082141561288257634e487b7160e01b86526022600452602486fd5b81801561289657600181146128a7576128d4565b60ff198616895284890196506128d4565b60008b81526020902060005b868110156128cc5781548b8201529085019083016128b3565b505084890196505b5050505050506128e4818561282a565b95945050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612920908301846127fe565b9695505050505050565b602081526000610f5f60208301846127fe565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208152815160208201526000602083015160c06040840152612a3b60e08401826127fe565b90506040840151601f1980858403016060860152612a5983836127fe565b9250606086015191508085840301608086015250612a7782826127fe565b608086015160a086810191909152909501516001600160a01b031660c090940193909352509192915050565b6000606082018583526020606081850152818651808452608086019150828801935060005b81811015612ae457845183529383019391830191600101612ac8565b50508481036040860152855180825290820192508186019060005b81811015612b245782516001600160a01b031685529383019391830191600101612aff565b509298975050505050505050565b86815260c060208201526000612b4b60c08301886127fe565b8281036040840152612b5d81886127fe565b90508281036060840152612b7181876127fe565b608084019590955250506001600160a01b039190911660a090910152949350505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715612bbe57612bbe612d24565b604052919050565b600067ffffffffffffffff821115612be057612be0612d24565b5060051b60200190565b60008219821115612bfd57612bfd612ce2565b500190565b600082612c1157612c11612cf8565b500490565b6000816000190483118215151615612c3057612c30612ce2565b500290565b600082821015612c4757612c47612ce2565b500390565b60005b83811015612c67578181015183820152602001612c4f565b8381111561157c5750506000910152565b600181811c90821680612c8c57607f821691505b60208210811415612cad57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612cc757612cc7612ce2565b5060010190565b600082612cdd57612cdd612cf8565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461065357600080fdfea264697066735822122003163321acb9a1c0738a6e635ab06676036a7f84b666de61d7ceb88334c89af864736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101ee5760003560e01c80636e24b49f1161010d57806395d89b41116100a0578063c87b56dd1161006f578063c87b56dd1461059c578063d6febde8146105bc578063e985e9c5146105cf578063f2fde38b14610618578063fe9080611461063857600080fd5b806395d89b4114610531578063a035b1fe14610546578063a22cb4651461055c578063b88d4fde1461057c57600080fd5b80637208616e116100dc5780637208616e146104ab5780638da5cb5b146104dd57806391491cfd146104fb57806391a3008b1461051157600080fd5b80636e24b49f146104365780636f8b44b01461045657806370a0823114610476578063715018a61461049657600080fd5b806323b872dd116101855780634fceba4d116101545780634fceba4d146103b657806355f804b3146103d65780635af94e7c146103f65780636352211e1461041657600080fd5b806323b872dd1461034b5780633ccfd60b1461036b57806342842e0e14610380578063482f11f3146103a057600080fd5b8063095ea7b3116101c1578063095ea7b3146102a45780630ae7a310146102c457806318160ddd146102f1578063234973601461031057600080fd5b806301ffc9a7146101f3578063030778001461022857806306fdde031461024a578063081812fc1461026c575b600080fd5b3480156101ff57600080fd5b5061021361020e366004612570565b610656565b60405190151581526020015b60405180910390f35b34801561023457600080fd5b5061024861024336600461265c565b6106a8565b005b34801561025657600080fd5b5061025f6107ec565b60405161021f919061292a565b34801561027857600080fd5b5061028c610287366004612643565b61087e565b6040516001600160a01b03909116815260200161021f565b3480156102b057600080fd5b506102486102bf366004612546565b610909565b3480156102d057600080fd5b506102e46102df366004612643565b610a1f565b60405161021f9190612a15565b3480156102fd57600080fd5b506003545b60405190815260200161021f565b34801561031c57600080fd5b5061033061032b366004612404565b610c63565b6040805193845260208401929092529082015260600161021f565b34801561035757600080fd5b50610248610366366004612452565b610c84565b34801561037757600080fd5b50610248610cb5565b34801561038c57600080fd5b5061024861039b366004612452565b610cfb565b3480156103ac57600080fd5b50610302600e5481565b3480156103c257600080fd5b506102486103d13660046125df565b610d16565b3480156103e257600080fd5b506102486103f13660046125aa565b610d67565b34801561040257600080fd5b5061024861041136600461272c565b610da8565b34801561042257600080fd5b5061028c610431366004612643565b610f2e565b34801561044257600080fd5b506102486104513660046127cc565b610f66565b34801561046257600080fd5b50610248610471366004612643565b610fb1565b34801561048257600080fd5b50610302610491366004612404565b610fe0565b3480156104a257600080fd5b50610248611067565b3480156104b757600080fd5b506104cb6104c6366004612643565b61109d565b60405161021f96959493929190612b32565b3480156104e957600080fd5b506000546001600160a01b031661028c565b34801561050757600080fd5b50610302600f5481565b34801561051d57600080fd5b5061030261052c366004612643565b611274565b34801561053d57600080fd5b5061025f611476565b34801561055257600080fd5b50610302600d5481565b34801561056857600080fd5b5061024861057736600461250a565b611485565b34801561058857600080fd5b5061024861059736600461248e565b61154a565b3480156105a857600080fd5b5061025f6105b7366004612643565b611582565b6102486105ca3660046127aa565b6115e0565b3480156105db57600080fd5b506102136105ea36600461241f565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205460ff1690565b34801561062457600080fd5b50610248610633366004612404565b6118a1565b34801561064457600080fd5b50610248610653366004612643565b50565b60006001600160e01b031982166380ac58cd60e01b148061068757506001600160e01b03198216635b5e139f60e01b145b806106a257506301ffc9a760e01b6001600160e01b03198316145b92915050565b6106b484600454101590565b6107055760405162461bcd60e51b815260206004820152601b60248201527f56736e66745f736574546f6b656e41737365745f6e6f746f6b656e000000000060448201526064015b60405180910390fd5b60005433906001600160a01b03168114806107395750806001600160a01b031661072e86610f2e565b6001600160a01b0316145b6107755760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b22fa7bbb732b960991b60448201526064016106fc565b60405163b8d006b960e01b815284906001600160a01b0382169063b8d006b9906107a790899088908890600401612aa3565b600060405180830381600087803b1580156107c157600080fd5b505af11580156107d5573d6000803e3d6000fd5b505050506107e4828688611939565b505050505050565b6060600780546107fb90612c78565b80601f016020809104026020016040519081016040528092919081815260200182805461082790612c78565b80156108745780601f1061084957610100808354040283529160200191610874565b820191906000526020600020905b81548152906001019060200180831161085757829003601f168201915b5050505050905090565b600061088c82600454101590565b6108ed5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106fc565b506000908152600b60205260409020546001600160a01b031690565b600061091482610f2e565b9050806001600160a01b0316836001600160a01b031614156109825760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016106fc565b336001600160a01b038216148061099e575061099e81336105ea565b610a105760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016106fc565b610a1a8383611b6a565b505050565b610a616040518060c00160405280600081526020016060815260200160608152602001606081526020016000815260200160006001600160a01b031681525090565b600260008381526020019081526020016000206040518060c001604052908160008201548152602001600182018054610a9990612c78565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac590612c78565b8015610b125780601f10610ae757610100808354040283529160200191610b12565b820191906000526020600020905b815481529060010190602001808311610af557829003601f168201915b50505050508152602001600282018054610b2b90612c78565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5790612c78565b8015610ba45780601f10610b7957610100808354040283529160200191610ba4565b820191906000526020600020905b815481529060010190602001808311610b8757829003601f168201915b50505050508152602001600382018054610bbd90612c78565b80601f0160208091040260200160405190810160405280929190818152602001828054610be990612c78565b8015610c365780601f10610c0b57610100808354040283529160200191610c36565b820191906000526020600020905b815481529060010190602001808311610c1957829003601f168201915b5050509183525050600482015460208201526005909101546001600160a01b031660409091015292915050565b6000806000600454600554610c7786610fe0565b9250925092509193909250565b610c8e3382611bd8565b610caa5760405162461bcd60e51b81526004016106fc906129c4565b610a1a838383611939565b6000546001600160a01b03163314610cdf5760405162461bcd60e51b81526004016106fc9061298f565b47610653610cf56000546001600160a01b031690565b82611cc5565b610a1a8383836040518060200160405280600081525061154a565b6000546001600160a01b03163314610d405760405162461bcd60e51b81526004016106fc9061298f565b8151610d539060079060208501906121e3565b508051610a1a9060089060208401906121e3565b6000546001600160a01b03163314610d915760405162461bcd60e51b81526004016106fc9061298f565b8051610da49060069060208401906121e3565b5050565b6000546001600160a01b03163314610dd25760405162461bcd60e51b81526004016106fc9061298f565b610dde84600454101590565b610e2a5760405162461bcd60e51b815260206004820152601b60248201527f56736e66745f736574546f6b656e41737365745f6e6f746f6b656e000000000060448201526064016106fc565b600084815260026020818152604090922085519092610e4f92840191908701906121e3565b508251610e6590600383019060208601906121e3565b506005810180546001600160a01b0319166001600160a01b0384161790556000858152600260205260409020815481556001808301805484939283019190610eac90612c78565b610eb7929190612267565b506002820181600201908054610ecc90612c78565b610ed7929190612267565b506003820181600301908054610eec90612c78565b610ef7929190612267565b5060048281015490820155600591820154910180546001600160a01b0319166001600160a01b039092169190911790555050505050565b6000818152600960205260408120546001600160a01b03168015610f525780610f5f565b6000546001600160a01b03165b9392505050565b6000546001600160a01b03163314610f905760405162461bcd60e51b81526004016106fc9061298f565b6000610f9e60045486611dde565b60045550600d92909255600e55600f5550565b6000546001600160a01b03163314610fdb5760405162461bcd60e51b81526004016106fc9061298f565b600355565b60006001600160a01b03821661104b5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016106fc565b506001600160a01b03166000908152600a602052604090205490565b6000546001600160a01b031633146110915760405162461bcd60e51b81526004016106fc9061298f565b61109b6000611dea565b565b600260205260009081526040902080546001820180549192916110bf90612c78565b80601f01602080910402602001604051908101604052809291908181526020018280546110eb90612c78565b80156111385780601f1061110d57610100808354040283529160200191611138565b820191906000526020600020905b81548152906001019060200180831161111b57829003601f168201915b50505050509080600201805461114d90612c78565b80601f016020809104026020016040519081016040528092919081815260200182805461117990612c78565b80156111c65780601f1061119b576101008083540402835291602001916111c6565b820191906000526020600020905b8154815290600101906020018083116111a957829003601f168201915b5050505050908060030180546111db90612c78565b80601f016020809104026020016040519081016040528092919081815260200182805461120790612c78565b80156112545780601f1061122957610100808354040283529160200191611254565b820191906000526020600020905b81548152906001019060200180831161123757829003601f168201915b5050505060048301546005909301549192916001600160a01b0316905086565b6000818152600260209081526040808320815160c08101909252805482526001810180548594840191906112a790612c78565b80601f01602080910402602001604051908101604052809291908181526020018280546112d390612c78565b80156113205780601f106112f557610100808354040283529160200191611320565b820191906000526020600020905b81548152906001019060200180831161130357829003601f168201915b5050505050815260200160028201805461133990612c78565b80601f016020809104026020016040519081016040528092919081815260200182805461136590612c78565b80156113b25780601f10611387576101008083540402835291602001916113b2565b820191906000526020600020905b81548152906001019060200180831161139557829003601f168201915b505050505081526020016003820180546113cb90612c78565b80601f01602080910402602001604051908101604052809291908181526020018280546113f790612c78565b80156114445780601f1061141957610100808354040283529160200191611444565b820191906000526020600020905b81548152906001019060200180831161142757829003601f168201915b5050509183525050600482015460208201526005909101546001600160a01b0316604090910152608001519392505050565b6060600880546107fb90612c78565b6001600160a01b0382163314156114de5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106fc565b336000818152600c602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6115543383611bd8565b6115705760405162461bcd60e51b81526004016106fc906129c4565b61157c84848484611e3a565b50505050565b606060006006805461159390612c78565b9050116115af57604051806020016040528060008152506106a2565b60066115ba83611e6d565b6040516020016115cb929190612846565b60405160208183030381529060405292915050565b6115ec600f5482611f6b565b4210156116325760405162461bcd60e51b8152602060048201526014602482015273141d5c98da185cd957d39bdd17d15b98589b195960621b60448201526064016106fc565b600e5461164761164133610fe0565b84611dde565b111561168d5760405162461bcd60e51b8152602060048201526015602482015274115e18d9595917d41d5c98da185cd957d31a5b5a5d605a1b60448201526064016106fc565b600061169b83600d54611f77565b9050803410156116e25760405162461bcd60e51b8152602060048201526012602482015271139bdd17d15b9bdd59da17d4185e5b595b9d60721b60448201526064016106fc565b6116ee60055484611dde565b60045410156117325760405162461bcd60e51b815260206004820152601060248201526f4e6f745f456e6f7567685f53746f636b60801b60448201526064016106fc565b60005b8381101561188c5761174b600180546001019055565b600061175660015490565b905061176433826001611f83565b60006040518060c00160405280838152602001604051806020016040528060008152508152602001604051806020016040528060008152508152602001604051806020016040528060008152508152602001600181526020016117cf6000546001600160a01b031690565b6001600160a01b031690526000838152600260209081526040909120825181558183015180519394508493919261180e926001850192909101906121e3565b506040820151805161182a9160028401916020909101906121e3565b50606082015180516118469160038401916020909101906121e3565b506080820151600482015560a090910151600590910180546001600160a01b0319166001600160a01b0390921691909117905550611885905081612cb3565b9050611735565b5061189960055484611dde565b600555505050565b6000546001600160a01b031633146118cb5760405162461bcd60e51b81526004016106fc9061298f565b6001600160a01b0381166119305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106fc565b61065381611dea565b6000818152600960205260409020546001600160a01b0316806119c9576000546001600160a01b038581169116146119bd5760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c79206d696e742066726f6d20636f6e7472616374206f776e656044820152603960f91b60648201526084016106fc565b6119c984836001611f83565b836001600160a01b03166119dc83610f2e565b6001600160a01b031614611a445760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016106fc565b6001600160a01b038316611aa65760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106fc565b611ab1600083611b6a565b6001600160a01b0384166000908152600a60205260408120805460019290611ada908490612c35565b90915550506001600160a01b0383166000908152600a60205260408120805460019290611b08908490612bea565b909155505060008281526009602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a450505050565b6000818152600b6020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611b9f82610f2e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611be682600454101590565b611c475760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106fc565b6000611c5283610f2e565b9050806001600160a01b0316846001600160a01b03161480611c8d5750836001600160a01b0316611c828461087e565b6001600160a01b0316145b80611cbd57506001600160a01b038082166000908152600c602090815260408083209388168352929052205460ff165b949350505050565b80471015611d155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016106fc565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611d62576040519150601f19603f3d011682016040523d82523d6000602084013e611d67565b606091505b5050905080610a1a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016106fc565b6000610f5f8284612bea565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611e45848484611939565b611e51848484846120d6565b61157c5760405162461bcd60e51b81526004016106fc9061293d565b606081611e915750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611ebb5780611ea581612cb3565b9150611eb49050600a83612c02565b9150611e95565b60008167ffffffffffffffff811115611ed657611ed6612d24565b6040519080825280601f01601f191660200182016040528015611f00576020820181803683370190505b5090505b8415611cbd57611f15600183612c35565b9150611f22600a86612cce565b611f2d906030612bea565b60f81b818381518110611f4257611f42612d0e565b60200101906001600160f81b031916908160001a905350611f64600a86612c02565b9450611f04565b6000610f5f8284612c35565b6000610f5f8284612c16565b6001600160a01b038316611fd95760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106fc565b6000828152600960205260409020546001600160a01b03161561203e5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106fc565b6001600160a01b0383166000908152600a60205260408120805460019290612067908490612bea565b9091555050600082815260096020526040902080546001600160a01b0319166001600160a01b0385161790558015610a1a5760405182906001600160a01b038516906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4505050565b60006001600160a01b0384163b156121d857604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061211a9033908990889088906004016128ed565b602060405180830381600087803b15801561213457600080fd5b505af1925050508015612164575060408051601f3d908101601f191682019092526121619181019061258d565b60015b6121be573d808015612192576040519150601f19603f3d011682016040523d82523d6000602084013e612197565b606091505b5080516121b65760405162461bcd60e51b81526004016106fc9061293d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611cbd565b506001949350505050565b8280546121ef90612c78565b90600052602060002090601f0160209004810192826122115760008555612257565b82601f1061222a57805160ff1916838001178555612257565b82800160010185558215612257579182015b8281111561225757825182559160200191906001019061223c565b506122639291506122e2565b5090565b82805461227390612c78565b90600052602060002090601f0160209004810192826122955760008555612257565b82601f106122a65780548555612257565b8280016001018555821561225757600052602060002091601f016020900482015b828111156122575782548255916001019190600101906122c7565b5b8082111561226357600081556001016122e3565b600067ffffffffffffffff83111561231157612311612d24565b612324601f8401601f1916602001612b95565b905082815283838301111561233857600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461236657600080fd5b919050565b600082601f83011261237c57600080fd5b8135602061239161238c83612bc6565b612b95565b80838252828201915082860187848660051b89010111156123b157600080fd5b60005b858110156123d7576123c58261234f565b845292840192908401906001016123b4565b5090979650505050505050565b600082601f8301126123f557600080fd5b610f5f838335602085016122f7565b60006020828403121561241657600080fd5b610f5f8261234f565b6000806040838503121561243257600080fd5b61243b8361234f565b91506124496020840161234f565b90509250929050565b60008060006060848603121561246757600080fd5b6124708461234f565b925061247e6020850161234f565b9150604084013590509250925092565b600080600080608085870312156124a457600080fd5b6124ad8561234f565b93506124bb6020860161234f565b925060408501359150606085013567ffffffffffffffff8111156124de57600080fd5b8501601f810187136124ef57600080fd5b6124fe878235602084016122f7565b91505092959194509250565b6000806040838503121561251d57600080fd5b6125268361234f565b91506020830135801515811461253b57600080fd5b809150509250929050565b6000806040838503121561255957600080fd5b6125628361234f565b946020939093013593505050565b60006020828403121561258257600080fd5b8135610f5f81612d3a565b60006020828403121561259f57600080fd5b8151610f5f81612d3a565b6000602082840312156125bc57600080fd5b813567ffffffffffffffff8111156125d357600080fd5b611cbd848285016123e4565b600080604083850312156125f257600080fd5b823567ffffffffffffffff8082111561260a57600080fd5b612616868387016123e4565b9350602085013591508082111561262c57600080fd5b50612639858286016123e4565b9150509250929050565b60006020828403121561265557600080fd5b5035919050565b6000806000806080858703121561267257600080fd5b84359350602061268381870161234f565b9350604086013567ffffffffffffffff808211156126a057600080fd5b818801915088601f8301126126b457600080fd5b81356126c261238c82612bc6565b8082825285820191508585018c878560051b88010111156126e257600080fd5b600095505b838610156127055780358352600195909501949186019186016126e7565b5096505050606088013592508083111561271e57600080fd5b50506124fe8782880161236b565b6000806000806080858703121561274257600080fd5b84359350602085013567ffffffffffffffff8082111561276157600080fd5b61276d888389016123e4565b9450604087013591508082111561278357600080fd5b50612790878288016123e4565b92505061279f6060860161234f565b905092959194509250565b600080604083850312156127bd57600080fd5b50508035926020909101359150565b600080600080608085870312156127e257600080fd5b5050823594602084013594506040840135936060013592509050565b60008151808452612816816020860160208601612c4c565b601f01601f19169290920160200192915050565b6000815161283c818560208601612c4c565b9290920192915050565b600080845481600182811c91508083168061286257607f831692505b602080841082141561288257634e487b7160e01b86526022600452602486fd5b81801561289657600181146128a7576128d4565b60ff198616895284890196506128d4565b60008b81526020902060005b868110156128cc5781548b8201529085019083016128b3565b505084890196505b5050505050506128e4818561282a565b95945050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612920908301846127fe565b9695505050505050565b602081526000610f5f60208301846127fe565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208152815160208201526000602083015160c06040840152612a3b60e08401826127fe565b90506040840151601f1980858403016060860152612a5983836127fe565b9250606086015191508085840301608086015250612a7782826127fe565b608086015160a086810191909152909501516001600160a01b031660c090940193909352509192915050565b6000606082018583526020606081850152818651808452608086019150828801935060005b81811015612ae457845183529383019391830191600101612ac8565b50508481036040860152855180825290820192508186019060005b81811015612b245782516001600160a01b031685529383019391830191600101612aff565b509298975050505050505050565b86815260c060208201526000612b4b60c08301886127fe565b8281036040840152612b5d81886127fe565b90508281036060840152612b7181876127fe565b608084019590955250506001600160a01b039190911660a090910152949350505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715612bbe57612bbe612d24565b604052919050565b600067ffffffffffffffff821115612be057612be0612d24565b5060051b60200190565b60008219821115612bfd57612bfd612ce2565b500190565b600082612c1157612c11612cf8565b500490565b6000816000190483118215151615612c3057612c30612ce2565b500290565b600082821015612c4757612c47612ce2565b500390565b60005b83811015612c67578181015183820152602001612c4f565b8381111561157c5750506000910152565b600181811c90821680612c8c57607f821691505b60208210811415612cad57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612cc757612cc7612ce2565b5060010190565b600082612cdd57612cdd612cf8565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461065357600080fdfea264697066735822122003163321acb9a1c0738a6e635ab06676036a7f84b666de61d7ceb88334c89af864736f6c63430008070033
Deployed Bytecode Sourcemap
29380:11095:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31136:297;;;;;;;;;;-1:-1:-1;31136:297:0;;;;;:::i;:::-;;:::i;:::-;;;10486:14:1;;10479:22;10461:41;;10449:2;10434:18;31136:297:0;;;;;;;;38373:504;;;;;;;;;;-1:-1:-1;38373:504:0;;;;;:::i;:::-;;:::i;:::-;;31851:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;32659:213::-;;;;;;;;;;-1:-1:-1;32659:213:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;9784:32:1;;;9766:51;;9754:2;9739:18;32659:213:0;9620:203:1;32255:396:0;;;;;;;;;;-1:-1:-1;32255:396:0;;;;;:::i;:::-;;:::i;37514:137::-;;;;;;;;;;-1:-1:-1;37514:137:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;31031:97::-;;;;;;;;;;-1:-1:-1;31110:10:0;;31031:97;;;20695:25:1;;;20683:2;20668:18;31031:97:0;20549:177:1;40316:156:0;;;;;;;;;;-1:-1:-1;40316:156:0;;;;;:::i;:::-;;:::i;:::-;;;;22977:25:1;;;23033:2;23018:18;;23011:34;;;;23061:18;;;23054:34;22965:2;22950:18;40316:156:0;22775:319:1;33339:331:0;;;;;;;;;;-1:-1:-1;33339:331:0;;;;;:::i;:::-;;:::i;40161:147::-;;;;;;;;;;;;;:::i;33678:177::-;;;;;;;;;;-1:-1:-1;33678:177:0;;;;;:::i;:::-;;:::i;30429:38::-;;;;;;;;;;;;;;;;30884:139;;;;;;;;;;-1:-1:-1;30884:139:0;;;;;:::i;:::-;;:::i;30674:104::-;;;;;;;;;;-1:-1:-1;30674:104:0;;;;;:::i;:::-;;:::i;37972:393::-;;;;;;;;;;-1:-1:-1;37972:393:0;;;;;:::i;:::-;;:::i;31649:194::-;;;;;;;;;;-1:-1:-1;31649:194:0;;;;;:::i;:::-;;:::i;37659:305::-;;;;;;;;;;-1:-1:-1;37659:305:0;;;;;:::i;:::-;;:::i;30786:90::-;;;;;;;;;;-1:-1:-1;30786:90:0;;;;;:::i;:::-;;:::i;31441:200::-;;;;;;;;;;-1:-1:-1;31441:200:0;;;;;:::i;:::-;;:::i;21219:94::-;;;;;;;;;;;;;:::i;29650:54::-;;;;;;;;;;-1:-1:-1;29650:54:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;20568:87::-;;;;;;;;;;-1:-1:-1;20614:7:0;20641:6;-1:-1:-1;;;;;20641:6:0;20568:87;;30476:31;;;;;;;;;;;;;;;;38968:179;;;;;;;;;;-1:-1:-1;38968:179:0;;;;;:::i;:::-;;:::i;31951:96::-;;;;;;;;;;;;;:::i;30403:17::-;;;;;;;;;;;;;;;;32880:287;;;;;;;;;;-1:-1:-1;32880:287:0;;;;;:::i;:::-;;:::i;33863:320::-;;;;;;;;;;-1:-1:-1;33863:320:0;;;;;:::i;:::-;;:::i;32055:192::-;;;;;;;;;;-1:-1:-1;32055:192:0;;;;;:::i;:::-;;:::i;39155:998::-;;;;;;:::i;:::-;;:::i;33175:156::-;;;;;;;;;;-1:-1:-1;33175:156:0;;;;;:::i;:::-;-1:-1:-1;;;;;33288:25:0;;;33264:4;33288:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;33175:156;21468:192;;;;;;;;;;-1:-1:-1;21468:192:0;;;;;:::i;:::-;;:::i;38885:75::-;;;;;;;;;;-1:-1:-1;38885:75:0;;;;;:::i;:::-;40198:110:::1;40161:147:::0;31136:297;31230:4;-1:-1:-1;;;;;;31267:40:0;;-1:-1:-1;;;31267:40:0;;:105;;-1:-1:-1;;;;;;;31324:48:0;;-1:-1:-1;;;31324:48:0;31267:105;:158;;;-1:-1:-1;;;;;;;;;;19603:40:0;;;31389:36;31247:178;31136:297;-1:-1:-1;;31136:297:0:o;38373:504::-;38510:17;38518:8;34598:14;;-1:-1:-1;34587:25:0;;34506:114;38510:17;38502:57;;;;-1:-1:-1;;;38502:57:0;;18248:2:1;38502:57:0;;;18230:21:1;18287:2;18267:18;;;18260:30;18326:29;18306:18;;;18299:57;18373:18;;38502:57:0;;;;;;;;;38570:14;20641:6;15353:10;;-1:-1:-1;;;;;20641:6:0;38618:17;;;:48;;;38660:6;-1:-1:-1;;;;;38639:27:0;:17;38647:8;38639:7;:17::i;:::-;-1:-1:-1;;;;;38639:27:0;;38618:48;38610:74;;;;-1:-1:-1;;;38610:74:0;;17504:2:1;38610:74:0;;;17486:21:1;17543:2;17523:18;;;17516:30;-1:-1:-1;;;17562:18:1;;;17555:43;17615:18;;38610:74:0;17302:337:1;38610:74:0;38770:43;;-1:-1:-1;;;38770:43:0;;38745:13;;-1:-1:-1;;;;;38770:14:0;;;;;:43;;38785:8;;38795:9;;38806:6;;38770:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38827:42;38837:6;38845:13;38860:8;38827:9;:42::i;:::-;38491:386;;38373:504;;;;:::o;31851:92::-;31897:13;31930:5;31923:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31851:92;:::o;32659:213::-;32727:7;32755:16;32763:7;34598:14;;-1:-1:-1;34587:25:0;;34506:114;32755:16;32747:73;;;;-1:-1:-1;;;32747:73:0;;15975:2:1;32747:73:0;;;15957:21:1;16014:2;15994:18;;;15987:30;16053:34;16033:18;;;16026:62;-1:-1:-1;;;16104:18:1;;;16097:42;16156:19;;32747:73:0;15773:408:1;32747:73:0;-1:-1:-1;32840:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;32840:24:0;;32659:213::o;32255:396::-;32328:13;32344:16;32352:7;32344;:16::i;:::-;32328:32;;32385:5;-1:-1:-1;;;;;32379:11:0;:2;-1:-1:-1;;;;;32379:11:0;;;32371:57;;;;-1:-1:-1;;;32371:57:0;;17846:2:1;32371:57:0;;;17828:21:1;17885:2;17865:18;;;17858:30;17924:34;17904:18;;;17897:62;-1:-1:-1;;;17975:18:1;;;17968:31;18016:19;;32371:57:0;17644:397:1;32371:57:0;15353:10;-1:-1:-1;;;;;32463:21:0;;;;:62;;-1:-1:-1;32488:37:0;32505:5;15353:10;33175:156;:::i;32488:37::-;32441:168;;;;-1:-1:-1;;;32441:168:0;;14428:2:1;32441:168:0;;;14410:21:1;14467:2;14447:18;;;14440:30;14506:34;14486:18;;;14479:62;14577:26;14557:18;;;14550:54;14621:19;;32441:168:0;14226:420:1;32441:168:0;32622:21;32631:2;32635:7;32622:8;:21::i;:::-;32317:334;32255:396;;:::o;37514:137::-;37581:16;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37581:16:0;37617;:26;37634:8;37617:26;;;;;;;;;;;37610:33;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37610:33:0;;;-1:-1:-1;;37610:33:0;;;;;;;;;;;;;-1:-1:-1;;;;;37610:33:0;;;;;;;37514:137;-1:-1:-1;;37514:137:0:o;40316:156::-;40378:4;40384;40390;40415:14;;40431:12;;40445:18;40455:7;40445:9;:18::i;:::-;40407:57;;;;;;40316:156;;;;;:::o;33339:331::-;33526:41;15353:10;33559:7;33526:18;:41::i;:::-;33518:103;;;;-1:-1:-1;;;33518:103:0;;;;;;;:::i;:::-;33634:28;33644:4;33650:2;33654:7;33634:9;:28::i;40161:147::-;20614:7;20641:6;-1:-1:-1;;;;;20641:6:0;15353:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;40224:21:::1;40256:44;40282:7;20614::::0;20641:6;-1:-1:-1;;;;;20641:6:0;;20568:87;40282:7:::1;40292;40256:17;:44::i;33678:177::-:0;33808:39;33825:4;33831:2;33835:7;33808:39;;;;;;;;;;;;:16;:39::i;30884:139::-;20614:7;20641:6;-1:-1:-1;;;;;20641:6:0;15353:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;30974:13;;::::1;::::0;:5:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;30998:17:0;;::::1;::::0;:7:::1;::::0;:17:::1;::::0;::::1;::::0;::::1;:::i;30674:104::-:0;20614:7;20641:6;-1:-1:-1;;;;;20641:6:0;15353:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;30749:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;30674:104:::0;:::o;37972:393::-;20614:7;20641:6;-1:-1:-1;;;;;20641:6:0;15353:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;38116:17:::1;38124:8;34598:14:::0;;-1:-1:-1;34587:25:0;;34506:114;38116:17:::1;38108:57;;;::::0;-1:-1:-1;;;38108:57:0;;18248:2:1;38108:57:0::1;::::0;::::1;18230:21:1::0;18287:2;18267:18;;;18260:30;18326:29;18306:18;;;18299:57;18373:18;;38108:57:0::1;18046:351:1::0;38108:57:0::1;38176:22;38201:26:::0;;;:16:::1;:26;::::0;;;;;;;38238:15;;38201:26;;38238:15:::1;::::0;:8;::::1;::::0;:15;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;38264:17:0;;::::1;::::0;:9:::1;::::0;::::1;::::0;:17:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;38292:11:0::1;::::0;::::1;:21:::0;;-1:-1:-1;;;;;;38292:21:0::1;-1:-1:-1::0;;;;;38292:21:0;::::1;;::::0;;-1:-1:-1;38324:26:0;;;:16:::1;:26;::::0;;;;:33;;;;-1:-1:-1;38324:33:0;;::::1;::::0;;38292:11;;38324:26;:33;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;-1:-1:-1::0;38324:33:0::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;38324:33:0::1;-1:-1:-1::0;;;;;38324:33:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;37972:393:0:o;31649:194::-;31713:7;31754:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31754:16:0;31788:24;;:47;;31825:10;31788:47;;;20614:7;20641:6;-1:-1:-1;;;;;20641:6:0;31815:7;31781:54;31649:194;-1:-1:-1;;;31649:194:0:o;37659:305::-;20614:7;20641:6;-1:-1:-1;;;;;20641:6:0;15353:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;37772:11:::1;37786:34;37799:14;;37815:4;37786:12;:34::i;:::-;37833:14;:23:::0;-1:-1:-1;37867:5:0::1;:14:::0;;;;37892:21:::1;:30:::0;37933:15:::1;:23:::0;-1:-1:-1;37659:305:0:o;30786:90::-;20614:7;20641:6;-1:-1:-1;;;;;20641:6:0;15353:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;30849:10:::1;:19:::0;30786:90::o;31441:200::-;31505:7;-1:-1:-1;;;;;31533:19:0;;31525:74;;;;-1:-1:-1;;;31525:74:0;;14853:2:1;31525:74:0;;;14835:21:1;14892:2;14872:18;;;14865:30;14931:34;14911:18;;;14904:62;-1:-1:-1;;;14982:18:1;;;14975:40;15032:19;;31525:74:0;14651:406:1;31525:74:0;-1:-1:-1;;;;;;31617:16:0;;;;;:9;:16;;;;;;;31441:200::o;21219:94::-;20614:7;20641:6;-1:-1:-1;;;;;20641:6:0;15353:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;21284:21:::1;21302:1;21284:9;:21::i;:::-;21219:94::o:0;29650:54::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;29650:54:0;;;;;;;;;;;;-1:-1:-1;;;;;29650:54:0;;-1:-1:-1;29650:54:0;:::o;38968:179::-;39037:7;39081:26;;;:16;:26;;;;;;;;39057:50;;;;;;;;;;;;;;;;;39037:7;;39057:50;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39057:50:0;;;-1:-1:-1;;39057:50:0;;;;;;;;;;;;;-1:-1:-1;;;;;39057:50:0;;;;;;39125:14;;;;38968:179;-1:-1:-1;;;38968:179:0:o;31951:96::-;31999:13;32032:7;32025:14;;;;;:::i;32880:287::-;-1:-1:-1;;;;;32975:24:0;;15353:10;32975:24;;32967:62;;;;-1:-1:-1;;;32967:62:0;;12527:2:1;32967:62:0;;;12509:21:1;12566:2;12546:18;;;12539:30;12605:27;12585:18;;;12578:55;12650:18;;32967:62:0;12325:349:1;32967:62:0;15353:10;33042:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;33042:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;33042:53:0;;;;;;;;;;33111:48;;10461:41:1;;;33042:42:0;;15353:10;33111:48;;10434:18:1;33111:48:0;;;;;;;32880:287;;:::o;33863:320::-;34030:41;15353:10;34063:7;34030:18;:41::i;:::-;34022:103;;;;-1:-1:-1;;;34022:103:0;;;;;;;:::i;:::-;34136:39;34150:4;34156:2;34160:7;34169:5;34136:13;:39::i;:::-;33863:320;;;;:::o;32055:192::-;32120:13;32177:1;32159:7;32153:21;;;;;:::i;:::-;;;:25;:86;;;;;;;;;;;;;;;;;32205:7;32214:18;:7;:16;:18::i;:::-;32188:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32146:93;32055:192;-1:-1:-1;;32055:192:0:o;39155:998::-;39249:39;39262:15;;39279:8;39249:12;:39::i;:::-;39230:15;:58;;39222:91;;;;-1:-1:-1;;;39222:91:0;;14079:2:1;39222:91:0;;;14061:21:1;14118:2;14098:18;;;14091:30;-1:-1:-1;;;14137:18:1;;;14130:50;14197:18;;39222:91:0;13877:344:1;39222:91:0;39379:21;;39332:43;39345:21;39355:10;39345:9;:21::i;:::-;39368:6;39332:12;:43::i;:::-;:68;;39324:102;;;;-1:-1:-1;;;39324:102:0;;15625:2:1;39324:102:0;;;15607:21:1;15664:2;15644:18;;;15637:30;-1:-1:-1;;;15683:18:1;;;15676:51;15744:18;;39324:102:0;15423:345:1;39324:102:0;39437:18;39458:27;39471:6;39479:5;;39458:12;:27::i;:::-;39437:48;;39517:13;39504:9;:26;;39496:57;;;;-1:-1:-1;;;39496:57:0;;19022:2:1;39496:57:0;;;19004:21:1;19061:2;19041:18;;;19034:30;-1:-1:-1;;;19080:18:1;;;19073:48;19138:18;;39496:57:0;18820:342:1;39496:57:0;39590:34;39603:12;;39617:6;39590:12;:34::i;:::-;39572:14;;:52;;39564:81;;;;-1:-1:-1;;;39564:81:0;;17159:2:1;39564:81:0;;;17141:21:1;17198:2;17178:18;;;17171:30;-1:-1:-1;;;17217:18:1;;;17210:46;17273:18;;39564:81:0;16957:340:1;39564:81:0;39663:6;39658:426;39679:6;39675:1;:10;39658:426;;;39707:21;:9;18414:19;;18432:1;18414:19;;;18325:127;39707:21;39743:17;39763:19;:9;18295:14;;18203:114;39763:19;39743:39;;39797:34;39803:10;39815:9;39826:4;39797:5;:34::i;:::-;39848:21;39872:149;;;;;;;;39900:9;39872:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39993:1;39872:149;;;;40013:7;20614;20641:6;-1:-1:-1;;;;;20641:6:0;;20568:87;40013:7;-1:-1:-1;;;;;39872:149:0;;;40038:27;;;;:16;:27;;;;;;;;:34;;;;;;;;;;39848:173;;-1:-1:-1;39848:173:0;;40038:27;;:34;;;;;;;;;;;:::i;:::-;-1:-1:-1;40038:34:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;40038:34:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;40038:34:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40038:34:0;-1:-1:-1;;;;;40038:34:0;;;;;;;;;-1:-1:-1;39687:3:0;;-1:-1:-1;39687:3:0;;:::i;:::-;;;39658:426;;;;40111:34;40124:12;;40138:6;40111:12;:34::i;:::-;40096:12;:49;-1:-1:-1;;;39155:998:0:o;21468:192::-;20614:7;20641:6;-1:-1:-1;;;;;20641:6:0;15353:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21557:22:0;::::1;21549:73;;;::::0;-1:-1:-1;;;21549:73:0;;11358:2:1;21549:73:0::1;::::0;::::1;11340:21:1::0;11397:2;11377:18;;;11370:30;11436:34;11416:18;;;11409:62;-1:-1:-1;;;11487:18:1;;;11480:36;11533:19;;21549:73:0::1;11156:402:1::0;21549:73:0::1;21633:19;21643:8;21633:9;:19::i;35798:730::-:0;35914:18;35935:16;;;:7;:16;;;;;;-1:-1:-1;;;;;35935:16:0;35966:24;35962:159;;20614:7;20641:6;-1:-1:-1;;;;;36015:15:0;;;20641:6;;36015:15;36007:61;;;;-1:-1:-1;;;36007:61:0;;19369:2:1;36007:61:0;;;19351:21:1;19408:2;19388:18;;;19381:30;19447:34;19427:18;;;19420:62;-1:-1:-1;;;19498:18:1;;;19491:31;19539:19;;36007:61:0;19167:397:1;36007:61:0;36083:26;36089:4;36095:7;36104:4;36083:5;:26::i;:::-;36161:4;-1:-1:-1;;;;;36141:24:0;:16;36149:7;36141;:16::i;:::-;-1:-1:-1;;;;;36141:24:0;;36133:78;;;;-1:-1:-1;;;36133:78:0;;16749:2:1;36133:78:0;;;16731:21:1;16788:2;16768:18;;;16761:30;16827:34;16807:18;;;16800:62;-1:-1:-1;;;16878:18:1;;;16871:39;16927:19;;36133:78:0;16547:405:1;36133:78:0;-1:-1:-1;;;;;36230:16:0;;36222:65;;;;-1:-1:-1;;;36222:65:0;;12122:2:1;36222:65:0;;;12104:21:1;12161:2;12141:18;;;12134:30;12200:34;12180:18;;;12173:62;-1:-1:-1;;;12251:18:1;;;12244:34;12295:19;;36222:65:0;11920:400:1;36222:65:0;36352:29;36369:1;36373:7;36352:8;:29::i;:::-;-1:-1:-1;;;;;36394:15:0;;;;;;:9;:15;;;;;:20;;36413:1;;36394:15;:20;;36413:1;;36394:20;:::i;:::-;;;;-1:-1:-1;;;;;;;36425:13:0;;;;;;:9;:13;;;;;:18;;36442:1;;36425:13;:18;;36442:1;;36425:18;:::i;:::-;;;;-1:-1:-1;;36454:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;36454:21:0;-1:-1:-1;;;;;36454:21:0;;;;;;;;;36493:27;;36454:16;;36493:27;;;;;;;35903:625;35798:730;;;:::o;36536:159::-;36603:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;36603:29:0;-1:-1:-1;;;;;36603:29:0;;;;;;;;:24;;36657:16;36603:24;36657:7;:16::i;:::-;-1:-1:-1;;;;;36648:39:0;;;;;;;;;;;36536:159;;:::o;34628:333::-;34713:4;34738:16;34746:7;34598:14;;-1:-1:-1;34587:25:0;;34506:114;34738:16;34730:73;;;;-1:-1:-1;;;34730:73:0;;13666:2:1;34730:73:0;;;13648:21:1;13705:2;13685:18;;;13678:30;13744:34;13724:18;;;13717:62;-1:-1:-1;;;13795:18:1;;;13788:42;13847:19;;34730:73:0;13464:408:1;34730:73:0;34814:13;34830:16;34838:7;34830;:16::i;:::-;34814:32;;34876:5;-1:-1:-1;;;;;34865:16:0;:7;-1:-1:-1;;;;;34865:16:0;;:51;;;;34909:7;-1:-1:-1;;;;;34885:31:0;:20;34897:7;34885:11;:20::i;:::-;-1:-1:-1;;;;;34885:31:0;;34865:51;:87;;;-1:-1:-1;;;;;;33288:25:0;;;33264:4;33288:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;34920:32;34857:96;34628:333;-1:-1:-1;;;;34628:333:0:o;8942:317::-;9057:6;9032:21;:31;;9024:73;;;;-1:-1:-1;;;9024:73:0;;13308:2:1;9024:73:0;;;13290:21:1;13347:2;13327:18;;;13320:30;13386:31;13366:18;;;13359:59;13435:18;;9024:73:0;13106:353:1;9024:73:0;9111:12;9129:9;-1:-1:-1;;;;;9129:14:0;9151:6;9129:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9110:52;;;9181:7;9173:78;;;;-1:-1:-1;;;9173:78:0;;12881:2:1;9173:78:0;;;12863:21:1;12920:2;12900:18;;;12893:30;12959:34;12939:18;;;12932:62;13030:28;13010:18;;;13003:56;13076:19;;9173:78:0;12679:422:1;24394:98:0;24452:7;24479:5;24483:1;24479;:5;:::i;21668:173::-;21724:16;21743:6;;-1:-1:-1;;;;;21760:17:0;;;-1:-1:-1;;;;;;21760:17:0;;;;;;21793:40;;21743:6;;;;;;;21793:40;;21724:16;21793:40;21713:128;21668:173;:::o;34191:307::-;34340:28;34350:4;34356:2;34360:7;34340:9;:28::i;:::-;34387:48;34410:4;34416:2;34420:7;34429:5;34387:22;:48::i;:::-;34379:111;;;;-1:-1:-1;;;34379:111:0;;;;;;;:::i;15713:723::-;15769:13;15990:10;15986:53;;-1:-1:-1;;16017:10:0;;;;;;;;;;;;-1:-1:-1;;;16017:10:0;;;;;15713:723::o;15986:53::-;16064:5;16049:12;16105:78;16112:9;;16105:78;;16138:8;;;;:::i;:::-;;-1:-1:-1;16161:10:0;;-1:-1:-1;16169:2:0;16161:10;;:::i;:::-;;;16105:78;;;16193:19;16225:6;16215:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16215:17:0;;16193:39;;16243:154;16250:10;;16243:154;;16277:11;16287:1;16277:11;;:::i;:::-;;-1:-1:-1;16346:10:0;16354:2;16346:5;:10;:::i;:::-;16333:24;;:2;:24;:::i;:::-;16320:39;;16303:6;16310;16303:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;16303:56:0;;;;;;;;-1:-1:-1;16374:11:0;16383:2;16374:11;;:::i;:::-;;;16243:154;;24775:98;24833:7;24860:5;24864:1;24860;:5;:::i;25132:98::-;25190:7;25217:5;25221:1;25217;:5;:::i;35406:384::-;-1:-1:-1;;;;;35493:16:0;;35485:61;;;;-1:-1:-1;;;35485:61:0;;15264:2:1;35485:61:0;;;15246:21:1;;;15283:18;;;15276:30;15342:34;15322:18;;;15315:62;15394:18;;35485:61:0;15062:356:1;35485:61:0;35593:1;35565:16;;;:7;:16;;;;;;-1:-1:-1;;;;;35565:16:0;:30;35557:71;;;;-1:-1:-1;;;35557:71:0;;11765:2:1;35557:71:0;;;11747:21:1;11804:2;11784:18;;;11777:30;11843;11823:18;;;11816:58;11891:18;;35557:71:0;11563:352:1;35557:71:0;-1:-1:-1;;;;;35641:13:0;;;;;;:9;:13;;;;;:18;;35658:1;;35641:13;:18;;35658:1;;35641:18;:::i;:::-;;;;-1:-1:-1;;35670:16:0;;;;:7;:16;;;;;:21;;-1:-1:-1;;;;;;35670:21:0;-1:-1:-1;;;;;35670:21:0;;;;;35704:79;;;;35738:33;;35763:7;;-1:-1:-1;;;;;35738:33:0;;;35755:1;;35738:33;;35755:1;;35738:33;35406:384;;;:::o;36703:803::-;36858:4;-1:-1:-1;;;;;36879:13:0;;7943:20;7991:8;36875:624;;36915:72;;-1:-1:-1;;;36915:72:0;;-1:-1:-1;;;;;36915:36:0;;;;;:72;;15353:10;;36966:4;;36972:7;;36981:5;;36915:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36915:72:0;;;;;;;;-1:-1:-1;;36915:72:0;;;;;;;;;;;;:::i;:::-;;;36911:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37161:13:0;;37157:272;;37204:60;;-1:-1:-1;;;37204:60:0;;;;;;;:::i;37157:272::-;37379:6;37373:13;37364:6;37360:2;37356:15;37349:38;36911:533;-1:-1:-1;;;;;;37038:55:0;-1:-1:-1;;;37038:55:0;;-1:-1:-1;37031:62:0;;36875:624;-1:-1:-1;37483:4:0;36703:803;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:70;;588:1;585;578:12;522:70;425:173;;;:::o;603:679::-;657:5;710:3;703:4;695:6;691:17;687:27;677:55;;728:1;725;718:12;677:55;764:6;751:20;790:4;814:60;830:43;870:2;830:43;:::i;:::-;814:60;:::i;:::-;896:3;920:2;915:3;908:15;948:2;943:3;939:12;932:19;;983:2;975:6;971:15;1035:3;1030:2;1024;1021:1;1017:10;1009:6;1005:23;1001:32;998:41;995:61;;;1052:1;1049;1042:12;995:61;1074:1;1084:169;1098:2;1095:1;1092:9;1084:169;;;1155:23;1174:3;1155:23;:::i;:::-;1143:36;;1199:12;;;;1231;;;;1116:1;1109:9;1084:169;;;-1:-1:-1;1271:5:1;;603:679;-1:-1:-1;;;;;;;603:679:1:o;1287:221::-;1330:5;1383:3;1376:4;1368:6;1364:17;1360:27;1350:55;;1401:1;1398;1391:12;1350:55;1423:79;1498:3;1489:6;1476:20;1469:4;1461:6;1457:17;1423:79;:::i;1513:186::-;1572:6;1625:2;1613:9;1604:7;1600:23;1596:32;1593:52;;;1641:1;1638;1631:12;1593:52;1664:29;1683:9;1664:29;:::i;1704:260::-;1772:6;1780;1833:2;1821:9;1812:7;1808:23;1804:32;1801:52;;;1849:1;1846;1839:12;1801:52;1872:29;1891:9;1872:29;:::i;:::-;1862:39;;1920:38;1954:2;1943:9;1939:18;1920:38;:::i;:::-;1910:48;;1704:260;;;;;:::o;1969:328::-;2046:6;2054;2062;2115:2;2103:9;2094:7;2090:23;2086:32;2083:52;;;2131:1;2128;2121:12;2083:52;2154:29;2173:9;2154:29;:::i;:::-;2144:39;;2202:38;2236:2;2225:9;2221:18;2202:38;:::i;:::-;2192:48;;2287:2;2276:9;2272:18;2259:32;2249:42;;1969:328;;;;;:::o;2302:666::-;2397:6;2405;2413;2421;2474:3;2462:9;2453:7;2449:23;2445:33;2442:53;;;2491:1;2488;2481:12;2442:53;2514:29;2533:9;2514:29;:::i;:::-;2504:39;;2562:38;2596:2;2585:9;2581:18;2562:38;:::i;:::-;2552:48;;2647:2;2636:9;2632:18;2619:32;2609:42;;2702:2;2691:9;2687:18;2674:32;2729:18;2721:6;2718:30;2715:50;;;2761:1;2758;2751:12;2715:50;2784:22;;2837:4;2829:13;;2825:27;-1:-1:-1;2815:55:1;;2866:1;2863;2856:12;2815:55;2889:73;2954:7;2949:2;2936:16;2931:2;2927;2923:11;2889:73;:::i;:::-;2879:83;;;2302:666;;;;;;;:::o;2973:347::-;3038:6;3046;3099:2;3087:9;3078:7;3074:23;3070:32;3067:52;;;3115:1;3112;3105:12;3067:52;3138:29;3157:9;3138:29;:::i;:::-;3128:39;;3217:2;3206:9;3202:18;3189:32;3264:5;3257:13;3250:21;3243:5;3240:32;3230:60;;3286:1;3283;3276:12;3230:60;3309:5;3299:15;;;2973:347;;;;;:::o;3325:254::-;3393:6;3401;3454:2;3442:9;3433:7;3429:23;3425:32;3422:52;;;3470:1;3467;3460:12;3422:52;3493:29;3512:9;3493:29;:::i;:::-;3483:39;3569:2;3554:18;;;;3541:32;;-1:-1:-1;;;3325:254:1:o;3584:245::-;3642:6;3695:2;3683:9;3674:7;3670:23;3666:32;3663:52;;;3711:1;3708;3701:12;3663:52;3750:9;3737:23;3769:30;3793:5;3769:30;:::i;3834:249::-;3903:6;3956:2;3944:9;3935:7;3931:23;3927:32;3924:52;;;3972:1;3969;3962:12;3924:52;4004:9;3998:16;4023:30;4047:5;4023:30;:::i;4088:322::-;4157:6;4210:2;4198:9;4189:7;4185:23;4181:32;4178:52;;;4226:1;4223;4216:12;4178:52;4266:9;4253:23;4299:18;4291:6;4288:30;4285:50;;;4331:1;4328;4321:12;4285:50;4354;4396:7;4387:6;4376:9;4372:22;4354:50;:::i;4415:543::-;4503:6;4511;4564:2;4552:9;4543:7;4539:23;4535:32;4532:52;;;4580:1;4577;4570:12;4532:52;4620:9;4607:23;4649:18;4690:2;4682:6;4679:14;4676:34;;;4706:1;4703;4696:12;4676:34;4729:50;4771:7;4762:6;4751:9;4747:22;4729:50;:::i;:::-;4719:60;;4832:2;4821:9;4817:18;4804:32;4788:48;;4861:2;4851:8;4848:16;4845:36;;;4877:1;4874;4867:12;4845:36;;4900:52;4944:7;4933:8;4922:9;4918:24;4900:52;:::i;:::-;4890:62;;;4415:543;;;;;:::o;4963:180::-;5022:6;5075:2;5063:9;5054:7;5050:23;5046:32;5043:52;;;5091:1;5088;5081:12;5043:52;-1:-1:-1;5114:23:1;;4963:180;-1:-1:-1;4963:180:1:o;5148:1292::-;5284:6;5292;5300;5308;5361:3;5349:9;5340:7;5336:23;5332:33;5329:53;;;5378:1;5375;5368:12;5329:53;5414:9;5401:23;5391:33;;5443:2;5464:38;5498:2;5487:9;5483:18;5464:38;:::i;:::-;5454:48;;5553:2;5542:9;5538:18;5525:32;5576:18;5617:2;5609:6;5606:14;5603:34;;;5633:1;5630;5623:12;5603:34;5671:6;5660:9;5656:22;5646:32;;5716:7;5709:4;5705:2;5701:13;5697:27;5687:55;;5738:1;5735;5728:12;5687:55;5774:2;5761:16;5797:60;5813:43;5853:2;5813:43;:::i;5797:60::-;5879:3;5903:2;5898:3;5891:15;5931:2;5926:3;5922:12;5915:19;;5962:2;5958;5954:11;6010:7;6005:2;5999;5996:1;5992:10;5988:2;5984:19;5980:28;5977:41;5974:61;;;6031:1;6028;6021:12;5974:61;6053:1;6044:10;;6063:163;6077:2;6074:1;6071:9;6063:163;;;6134:17;;6122:30;;6095:1;6088:9;;;;;6172:12;;;;6204;;6063:163;;;-1:-1:-1;6245:5:1;-1:-1:-1;;;6303:2:1;6288:18;;6275:32;;-1:-1:-1;6319:16:1;;;6316:36;;;6348:1;6345;6338:12;6316:36;;;6371:63;6426:7;6415:8;6404:9;6400:24;6371:63;:::i;6445:686::-;6551:6;6559;6567;6575;6628:3;6616:9;6607:7;6603:23;6599:33;6596:53;;;6645:1;6642;6635:12;6596:53;6681:9;6668:23;6658:33;;6742:2;6731:9;6727:18;6714:32;6765:18;6806:2;6798:6;6795:14;6792:34;;;6822:1;6819;6812:12;6792:34;6845:50;6887:7;6878:6;6867:9;6863:22;6845:50;:::i;:::-;6835:60;;6948:2;6937:9;6933:18;6920:32;6904:48;;6977:2;6967:8;6964:16;6961:36;;;6993:1;6990;6983:12;6961:36;;7016:52;7060:7;7049:8;7038:9;7034:24;7016:52;:::i;:::-;7006:62;;;7087:38;7121:2;7110:9;7106:18;7087:38;:::i;:::-;7077:48;;6445:686;;;;;;;:::o;7136:248::-;7204:6;7212;7265:2;7253:9;7244:7;7240:23;7236:32;7233:52;;;7281:1;7278;7271:12;7233:52;-1:-1:-1;;7304:23:1;;;7374:2;7359:18;;;7346:32;;-1:-1:-1;7136:248:1:o;7389:385::-;7475:6;7483;7491;7499;7552:3;7540:9;7531:7;7527:23;7523:33;7520:53;;;7569:1;7566;7559:12;7520:53;-1:-1:-1;;7592:23:1;;;7662:2;7647:18;;7634:32;;-1:-1:-1;7713:2:1;7698:18;;7685:32;;7764:2;7749:18;7736:32;;-1:-1:-1;7389:385:1;-1:-1:-1;7389:385:1:o;7779:257::-;7820:3;7858:5;7852:12;7885:6;7880:3;7873:19;7901:63;7957:6;7950:4;7945:3;7941:14;7934:4;7927:5;7923:16;7901:63;:::i;:::-;8018:2;7997:15;-1:-1:-1;;7993:29:1;7984:39;;;;8025:4;7980:50;;7779:257;-1:-1:-1;;7779:257:1:o;8041:185::-;8083:3;8121:5;8115:12;8136:52;8181:6;8176:3;8169:4;8162:5;8158:16;8136:52;:::i;:::-;8204:16;;;;;8041:185;-1:-1:-1;;8041:185:1:o;8231:1174::-;8407:3;8436:1;8469:6;8463:13;8499:3;8521:1;8549:9;8545:2;8541:18;8531:28;;8609:2;8598:9;8594:18;8631;8621:61;;8675:4;8667:6;8663:17;8653:27;;8621:61;8701:2;8749;8741:6;8738:14;8718:18;8715:38;8712:165;;;-1:-1:-1;;;8776:33:1;;8832:4;8829:1;8822:15;8862:4;8783:3;8850:17;8712:165;8893:18;8920:104;;;;9038:1;9033:320;;;;8886:467;;8920:104;-1:-1:-1;;8953:24:1;;8941:37;;8998:16;;;;-1:-1:-1;8920:104:1;;9033:320;23640:1;23633:14;;;23677:4;23664:18;;9128:1;9142:165;9156:6;9153:1;9150:13;9142:165;;;9234:14;;9221:11;;;9214:35;9277:16;;;;9171:10;;9142:165;;;9146:3;;9336:6;9331:3;9327:16;9320:23;;8886:467;;;;;;;9369:30;9395:3;9387:6;9369:30;:::i;:::-;9362:37;8231:1174;-1:-1:-1;;;;;8231:1174:1:o;9828:488::-;-1:-1:-1;;;;;10097:15:1;;;10079:34;;10149:15;;10144:2;10129:18;;10122:43;10196:2;10181:18;;10174:34;;;10244:3;10239:2;10224:18;;10217:31;;;10022:4;;10265:45;;10290:19;;10282:6;10265:45;:::i;:::-;10257:53;9828:488;-1:-1:-1;;;;;;9828:488:1:o;10513:219::-;10662:2;10651:9;10644:21;10625:4;10682:44;10722:2;10711:9;10707:18;10699:6;10682:44;:::i;10737:414::-;10939:2;10921:21;;;10978:2;10958:18;;;10951:30;11017:34;11012:2;10997:18;;10990:62;-1:-1:-1;;;11083:2:1;11068:18;;11061:48;11141:3;11126:19;;10737:414::o;16186:356::-;16388:2;16370:21;;;16407:18;;;16400:30;16466:34;16461:2;16446:18;;16439:62;16533:2;16518:18;;16186:356::o;18402:413::-;18604:2;18586:21;;;18643:2;18623:18;;;18616:30;18682:34;18677:2;18662:18;;18655:62;-1:-1:-1;;;18748:2:1;18733:18;;18726:47;18805:3;18790:19;;18402:413::o;19569:975::-;19752:2;19741:9;19734:21;19797:6;19791:13;19786:2;19775:9;19771:18;19764:41;19715:4;19852:2;19844:6;19840:15;19834:22;19892:4;19887:2;19876:9;19872:18;19865:32;19920:51;19966:3;19955:9;19951:19;19937:12;19920:51;:::i;:::-;19906:65;;20020:2;20012:6;20008:15;20002:22;20047:2;20043:7;20114:2;20102:9;20094:6;20090:22;20086:31;20081:2;20070:9;20066:18;20059:59;20141:40;20174:6;20158:14;20141:40;:::i;:::-;20127:54;;20230:2;20222:6;20218:15;20212:22;20190:44;;20299:2;20287:9;20279:6;20275:22;20271:31;20265:3;20254:9;20250:19;20243:60;;20326:40;20359:6;20343:14;20326:40;:::i;:::-;20421:3;20409:16;;20403:23;20397:3;20382:19;;;20375:52;;;;20475:16;;;20469:23;-1:-1:-1;;;;;20465:49:1;20458:4;20443:20;;;20436:79;;;;-1:-1:-1;20312:54:1;;19569:975;-1:-1:-1;;19569:975:1:o;20731:1248::-;20979:4;21027:2;21016:9;21012:18;21057:6;21046:9;21039:25;21083:2;21121;21116;21105:9;21101:18;21094:30;21144:6;21179;21173:13;21210:6;21202;21195:22;21248:3;21237:9;21233:19;21226:26;;21287:2;21279:6;21275:15;21261:29;;21308:1;21318:169;21332:6;21329:1;21326:13;21318:169;;;21393:13;;21381:26;;21462:15;;;;21427:12;;;;21354:1;21347:9;21318:169;;;-1:-1:-1;;21523:19:1;;;21518:2;21503:18;;21496:47;21593:13;;21615:21;;;21654:12;;;;-1:-1:-1;21691:15:1;;;;21726:1;21736:215;21752:8;21747:3;21744:17;21736:215;;;21825:15;;-1:-1:-1;;;;;21821:41:1;21807:56;;21885:14;;;;21924:17;;;;21859:1;21771:11;21736:215;;;-1:-1:-1;21968:5:1;;20731:1248;-1:-1:-1;;;;;;;;20731:1248:1:o;21984:786::-;22313:6;22302:9;22295:25;22356:3;22351:2;22340:9;22336:18;22329:31;22276:4;22383:45;22423:3;22412:9;22408:19;22400:6;22383:45;:::i;:::-;22476:9;22468:6;22464:22;22459:2;22448:9;22444:18;22437:50;22510:32;22535:6;22527;22510:32;:::i;:::-;22496:46;;22590:9;22582:6;22578:22;22573:2;22562:9;22558:18;22551:50;22618:32;22643:6;22635;22618:32;:::i;:::-;22681:3;22666:19;;22659:35;;;;-1:-1:-1;;;;;;;22731:32:1;;;;22751:3;22710:19;;;22703:61;22610:40;21984:786;-1:-1:-1;;;;21984:786:1:o;23099:275::-;23170:2;23164:9;23235:2;23216:13;;-1:-1:-1;;23212:27:1;23200:40;;23270:18;23255:34;;23291:22;;;23252:62;23249:88;;;23317:18;;:::i;:::-;23353:2;23346:22;23099:275;;-1:-1:-1;23099:275:1:o;23379:183::-;23439:4;23472:18;23464:6;23461:30;23458:56;;;23494:18;;:::i;:::-;-1:-1:-1;23539:1:1;23535:14;23551:4;23531:25;;23379:183::o;23693:128::-;23733:3;23764:1;23760:6;23757:1;23754:13;23751:39;;;23770:18;;:::i;:::-;-1:-1:-1;23806:9:1;;23693:128::o;23826:120::-;23866:1;23892;23882:35;;23897:18;;:::i;:::-;-1:-1:-1;23931:9:1;;23826:120::o;23951:168::-;23991:7;24057:1;24053;24049:6;24045:14;24042:1;24039:21;24034:1;24027:9;24020:17;24016:45;24013:71;;;24064:18;;:::i;:::-;-1:-1:-1;24104:9:1;;23951:168::o;24124:125::-;24164:4;24192:1;24189;24186:8;24183:34;;;24197:18;;:::i;:::-;-1:-1:-1;24234:9:1;;24124:125::o;24254:258::-;24326:1;24336:113;24350:6;24347:1;24344:13;24336:113;;;24426:11;;;24420:18;24407:11;;;24400:39;24372:2;24365:10;24336:113;;;24467:6;24464:1;24461:13;24458:48;;;-1:-1:-1;;24502:1:1;24484:16;;24477:27;24254:258::o;24517:380::-;24596:1;24592:12;;;;24639;;;24660:61;;24714:4;24706:6;24702:17;24692:27;;24660:61;24767:2;24759:6;24756:14;24736:18;24733:38;24730:161;;;24813:10;24808:3;24804:20;24801:1;24794:31;24848:4;24845:1;24838:15;24876:4;24873:1;24866:15;24730:161;;24517:380;;;:::o;24902:135::-;24941:3;-1:-1:-1;;24962:17:1;;24959:43;;;24982:18;;:::i;:::-;-1:-1:-1;25029:1:1;25018:13;;24902:135::o;25042:112::-;25074:1;25100;25090:35;;25105:18;;:::i;:::-;-1:-1:-1;25139:9:1;;25042:112::o;25159:127::-;25220:10;25215:3;25211:20;25208:1;25201:31;25251:4;25248:1;25241:15;25275:4;25272:1;25265:15;25291:127;25352:10;25347:3;25343:20;25340:1;25333:31;25383:4;25380:1;25373:15;25407:4;25404:1;25397:15;25423:127;25484:10;25479:3;25475:20;25472:1;25465:31;25515:4;25512:1;25505:15;25539:4;25536:1;25529:15;25555:127;25616:10;25611:3;25607:20;25604:1;25597:31;25647:4;25644:1;25637:15;25671:4;25668:1;25661:15;25687:131;-1:-1:-1;;;;;;25761:32:1;;25751:43;;25741:71;;25808:1;25805;25798:12
Swarm Source
ipfs://03163321acb9a1c0738a6e635ab06676036a7f84b666de61d7ceb88334c89af8
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.