Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
255 CBK
Holders
39
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 CBKLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ChibiKaiju
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-17 */ /** *Submitted for verification at Etherscan.io on 2021-10-16 */ // Mint via contract or website @ www.chibikaijus.com // 0.08 ETH - 3333 SUPPLY // SPDX-License-Identifier: GPL-3.0 // File: @openzeppelin/contracts/utils/Counters.sol pragma solidity ^0.8.0; /** * @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; } } // File: @openzeppelin/contracts/utils/math/SafeMath.sol pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is 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; } } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contracts/ChibiKaiju.sol pragma solidity ^0.8.0; contract ChibiKaiju is ERC721, Ownable { using Strings for uint256; using SafeMath for uint256; using Counters for Counters.Counter; Counters.Counter private _tokenIdTracker; Counters.Counter private _burnedTracker; string public baseTokenURI; uint256 public constant MAX_ELEMENTS = 9999; uint256 public constant MINT_PRICE = 8 * 10**16; address private royaltyAddress = 0x681EA99a65E6f392f0F5276Af396AE8CaD140E6D; event CreateChibiKaiju(uint256 indexed id); constructor() ERC721("ChibiKaiju", "CBK") {} modifier saleIsOpen { require(_totalSupply() <= MAX_ELEMENTS, "Sale end"); _; } function totalSupply() public view returns (uint256) { return _tokenIdTracker.current(); } function _totalSupply() internal view returns (uint256) { return _tokenIdTracker.current(); } function _totalBurned() internal view returns (uint256) { return _burnedTracker.current(); } function totalBurned() public view returns (uint256) { return _totalBurned(); } function totalMint() public view returns (uint256) { return _totalSupply(); } function setRoyalties(address _address) public onlyOwner { royaltyAddress = _address; } function whitelist() public onlyOwner{ payable(owner()).transfer(address(this).balance); } function mint(address _to, uint256 _count) public payable saleIsOpen { uint256 total = _totalSupply(); require(total + _count <= MAX_ELEMENTS, "Max limit"); require(total <= MAX_ELEMENTS, "Sale end"); require(msg.value >= price(_count), "Value below price"); for (uint256 i = 0; i < _count; i++) { _mintAnElement(_to); } } function price(uint256 _count) public pure returns (uint256) { return MINT_PRICE.mul(_count); } function _mintAnElement(address _to) private { uint256 id = _totalSupply(); _tokenIdTracker.increment(); _safeMint(_to, id); emit CreateChibiKaiju(id); } function setBaseURI(string memory baseURI) public onlyOwner { baseTokenURI = baseURI; } /** * @dev Returns an URI for a given token ID */ function tokenURI(uint256 _tokenId) public view override returns (string memory) { return string(abi.encodePacked(baseTokenURI, _tokenId.toString())); } function _withdraw(address _address, uint256 _amount) private { (bool success, ) = _address.call{value: _amount}(""); require(success, "Transfer failed."); } }
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":"uint256","name":"id","type":"uint256"}],"name":"CreateChibiKaiju","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_ELEMENTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","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":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setRoyalties","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405273681ea99a65e6f392f0f5276af396ae8cad140e6d600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200006657600080fd5b506040518060400160405280600a81526020017f43686962694b61696a75000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f43424b00000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000eb929190620001fb565b50806001908051906020019062000104929190620001fb565b505050620001276200011b6200012d60201b60201c565b6200013560201b60201c565b62000310565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200020990620002ab565b90600052602060002090601f0160209004810192826200022d576000855562000279565b82601f106200024857805160ff191683800117855562000279565b8280016001018555821562000279579182015b82811115620002785782518255916020019190600101906200025b565b5b5090506200028891906200028c565b5090565b5b80821115620002a75760008160009055506001016200028d565b5090565b60006002820490506001821680620002c457607f821691505b60208210811415620002db57620002da620002e1565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6135c880620003206000396000f3fe60806040526004361061019c5760003560e01c80636352211e116100ec578063b88d4fde1161008a578063d547cfb711610064578063d547cfb7146105a5578063d89135cd146105d0578063e985e9c5146105fb578063f2fde38b146106385761019c565b8063b88d4fde14610514578063c002d23d1461053d578063c87b56dd146105685761019c565b80638da5cb5b116100c65780638da5cb5b1461047e57806393e59dc1146104a957806395d89b41146104c0578063a22cb465146104eb5761019c565b80636352211e146103ed57806370a082311461042a578063715018a6146104675761019c565b806326a49e371161015957806340c10f191161013357806340c10f191461035457806342842e0e1461037057806355f804b31461039957806359a7715a146103c25761019c565b806326a49e37146102c35780632a9e63c6146103005780633502a716146103295761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b31461024657806318160ddd1461026f57806323b872dd1461029a575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612463565b610661565b6040516101d59190612983565b60405180910390f35b3480156101ea57600080fd5b506101f3610743565b604051610200919061299e565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612506565b6107d5565b60405161023d919061291c565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612423565b61085a565b005b34801561027b57600080fd5b50610284610972565b6040516102919190612c00565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc919061230d565b610983565b005b3480156102cf57600080fd5b506102ea60048036038101906102e59190612506565b6109e3565b6040516102f79190612c00565b60405180910390f35b34801561030c57600080fd5b50610327600480360381019061032291906122a0565b610a07565b005b34801561033557600080fd5b5061033e610ac7565b60405161034b9190612c00565b60405180910390f35b61036e60048036038101906103699190612423565b610acd565b005b34801561037c57600080fd5b506103976004803603810190610392919061230d565b610c32565b005b3480156103a557600080fd5b506103c060048036038101906103bb91906124bd565b610c52565b005b3480156103ce57600080fd5b506103d7610ce8565b6040516103e49190612c00565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f9190612506565b610cf7565b604051610421919061291c565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c91906122a0565b610da9565b60405161045e9190612c00565b60405180910390f35b34801561047357600080fd5b5061047c610e61565b005b34801561048a57600080fd5b50610493610ee9565b6040516104a0919061291c565b60405180910390f35b3480156104b557600080fd5b506104be610f13565b005b3480156104cc57600080fd5b506104d5610fdf565b6040516104e2919061299e565b60405180910390f35b3480156104f757600080fd5b50610512600480360381019061050d91906123e3565b611071565b005b34801561052057600080fd5b5061053b60048036038101906105369190612360565b6111f2565b005b34801561054957600080fd5b50610552611254565b60405161055f9190612c00565b60405180910390f35b34801561057457600080fd5b5061058f600480360381019061058a9190612506565b611260565b60405161059c919061299e565b60405180910390f35b3480156105b157600080fd5b506105ba611294565b6040516105c7919061299e565b60405180910390f35b3480156105dc57600080fd5b506105e5611322565b6040516105f29190612c00565b60405180910390f35b34801561060757600080fd5b50610622600480360381019061061d91906122cd565b611331565b60405161062f9190612983565b60405180910390f35b34801561064457600080fd5b5061065f600480360381019061065a91906122a0565b6113c5565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061072c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061073c575061073b826114bd565b5b9050919050565b60606000805461075290612ec5565b80601f016020809104026020016040519081016040528092919081815260200182805461077e90612ec5565b80156107cb5780601f106107a0576101008083540402835291602001916107cb565b820191906000526020600020905b8154815290600101906020018083116107ae57829003601f168201915b5050505050905090565b60006107e082611527565b61081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081690612b40565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061086582610cf7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cd90612bc0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108f5611593565b73ffffffffffffffffffffffffffffffffffffffff16148061092457506109238161091e611593565b611331565b5b610963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095a90612aa0565b60405180910390fd5b61096d838361159b565b505050565b600061097e6007611654565b905090565b61099461098e611593565b82611662565b6109d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ca90612be0565b60405180910390fd5b6109de838383611740565b505050565b6000610a008267011c37937e08000061199c90919063ffffffff16565b9050919050565b610a0f611593565b73ffffffffffffffffffffffffffffffffffffffff16610a2d610ee9565b73ffffffffffffffffffffffffffffffffffffffff1614610a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7a90612b60565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61270f81565b61270f610ad86119b2565b1115610b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1090612b20565b60405180910390fd5b6000610b236119b2565b905061270f8282610b349190612cfa565b1115610b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6c90612a60565b60405180910390fd5b61270f811115610bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb190612b20565b60405180910390fd5b610bc3826109e3565b341015610c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfc90612ba0565b60405180910390fd5b60005b82811015610c2c57610c19846119c3565b8080610c2490612f28565b915050610c08565b50505050565b610c4d838383604051806020016040528060008152506111f2565b505050565b610c5a611593565b73ffffffffffffffffffffffffffffffffffffffff16610c78610ee9565b73ffffffffffffffffffffffffffffffffffffffff1614610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590612b60565b60405180910390fd5b8060099080519060200190610ce49291906120b4565b5050565b6000610cf26119b2565b905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9790612ae0565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1190612ac0565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e69611593565b73ffffffffffffffffffffffffffffffffffffffff16610e87610ee9565b73ffffffffffffffffffffffffffffffffffffffff1614610edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed490612b60565b60405180910390fd5b610ee76000611a14565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f1b611593565b73ffffffffffffffffffffffffffffffffffffffff16610f39610ee9565b73ffffffffffffffffffffffffffffffffffffffff1614610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8690612b60565b60405180910390fd5b610f97610ee9565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610fdc573d6000803e3d6000fd5b50565b606060018054610fee90612ec5565b80601f016020809104026020016040519081016040528092919081815260200182805461101a90612ec5565b80156110675780601f1061103c57610100808354040283529160200191611067565b820191906000526020600020905b81548152906001019060200180831161104a57829003601f168201915b5050505050905090565b611079611593565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110de90612a40565b60405180910390fd5b80600560006110f4611593565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166111a1611593565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111e69190612983565b60405180910390a35050565b6112036111fd611593565b83611662565b611242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123990612be0565b60405180910390fd5b61124e84848484611ada565b50505050565b67011c37937e08000081565b6060600961126d83611b36565b60405160200161127e9291906128f8565b6040516020818303038152906040529050919050565b600980546112a190612ec5565b80601f01602080910402602001604051908101604052809291908181526020018280546112cd90612ec5565b801561131a5780601f106112ef5761010080835404028352916020019161131a565b820191906000526020600020905b8154815290600101906020018083116112fd57829003601f168201915b505050505081565b600061132c611c97565b905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113cd611593565b73ffffffffffffffffffffffffffffffffffffffff166113eb610ee9565b73ffffffffffffffffffffffffffffffffffffffff1614611441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143890612b60565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a8906129e0565b60405180910390fd5b6114ba81611a14565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661160e83610cf7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b600061166d82611527565b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390612a80565b60405180910390fd5b60006116b783610cf7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061172657508373ffffffffffffffffffffffffffffffffffffffff1661170e846107d5565b73ffffffffffffffffffffffffffffffffffffffff16145b8061173757506117368185611331565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661176082610cf7565b73ffffffffffffffffffffffffffffffffffffffff16146117b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ad90612b80565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181d90612a20565b60405180910390fd5b611831838383611ca8565b61183c60008261159b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461188c9190612ddb565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118e39190612cfa565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081836119aa9190612d81565b905092915050565b60006119be6007611654565b905090565b60006119cd6119b2565b90506119d96007611cad565b6119e38282611cc3565b807f8d55e962a7265da84b1cf7e08dc294d19b23aa4500be0584fcc2fb15c639763c60405160405180910390a25050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611ae5848484611740565b611af184848484611ce1565b611b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b27906129c0565b60405180910390fd5b50505050565b60606000821415611b7e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611c92565b600082905060005b60008214611bb0578080611b9990612f28565b915050600a82611ba99190612d50565b9150611b86565b60008167ffffffffffffffff811115611bcc57611bcb61305e565b5b6040519080825280601f01601f191660200182016040528015611bfe5781602001600182028036833780820191505090505b5090505b60008514611c8b57600182611c179190612ddb565b9150600a85611c269190612f71565b6030611c329190612cfa565b60f81b818381518110611c4857611c4761302f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611c849190612d50565b9450611c02565b8093505050505b919050565b6000611ca36008611654565b905090565b505050565b6001816000016000828254019250508190555050565b611cdd828260405180602001604052806000815250611e78565b5050565b6000611d028473ffffffffffffffffffffffffffffffffffffffff16611ed3565b15611e6b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611d2b611593565b8786866040518563ffffffff1660e01b8152600401611d4d9493929190612937565b602060405180830381600087803b158015611d6757600080fd5b505af1925050508015611d9857506040513d601f19601f82011682018060405250810190611d959190612490565b60015b611e1b573d8060008114611dc8576040519150601f19603f3d011682016040523d82523d6000602084013e611dcd565b606091505b50600081511415611e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0a906129c0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611e70565b600190505b949350505050565b611e828383611ee6565b611e8f6000848484611ce1565b611ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec5906129c0565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4d90612b00565b60405180910390fd5b611f5f81611527565b15611f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9690612a00565b60405180910390fd5b611fab60008383611ca8565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ffb9190612cfa565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546120c090612ec5565b90600052602060002090601f0160209004810192826120e25760008555612129565b82601f106120fb57805160ff1916838001178555612129565b82800160010185558215612129579182015b8281111561212857825182559160200191906001019061210d565b5b509050612136919061213a565b5090565b5b8082111561215357600081600090555060010161213b565b5090565b600061216a61216584612c40565b612c1b565b90508281526020810184848401111561218657612185613092565b5b612191848285612e83565b509392505050565b60006121ac6121a784612c71565b612c1b565b9050828152602081018484840111156121c8576121c7613092565b5b6121d3848285612e83565b509392505050565b6000813590506121ea81613536565b92915050565b6000813590506121ff8161354d565b92915050565b60008135905061221481613564565b92915050565b60008151905061222981613564565b92915050565b600082601f8301126122445761224361308d565b5b8135612254848260208601612157565b91505092915050565b600082601f8301126122725761227161308d565b5b8135612282848260208601612199565b91505092915050565b60008135905061229a8161357b565b92915050565b6000602082840312156122b6576122b561309c565b5b60006122c4848285016121db565b91505092915050565b600080604083850312156122e4576122e361309c565b5b60006122f2858286016121db565b9250506020612303858286016121db565b9150509250929050565b6000806000606084860312156123265761232561309c565b5b6000612334868287016121db565b9350506020612345868287016121db565b92505060406123568682870161228b565b9150509250925092565b6000806000806080858703121561237a5761237961309c565b5b6000612388878288016121db565b9450506020612399878288016121db565b93505060406123aa8782880161228b565b925050606085013567ffffffffffffffff8111156123cb576123ca613097565b5b6123d78782880161222f565b91505092959194509250565b600080604083850312156123fa576123f961309c565b5b6000612408858286016121db565b9250506020612419858286016121f0565b9150509250929050565b6000806040838503121561243a5761243961309c565b5b6000612448858286016121db565b92505060206124598582860161228b565b9150509250929050565b6000602082840312156124795761247861309c565b5b600061248784828501612205565b91505092915050565b6000602082840312156124a6576124a561309c565b5b60006124b48482850161221a565b91505092915050565b6000602082840312156124d3576124d261309c565b5b600082013567ffffffffffffffff8111156124f1576124f0613097565b5b6124fd8482850161225d565b91505092915050565b60006020828403121561251c5761251b61309c565b5b600061252a8482850161228b565b91505092915050565b61253c81612e0f565b82525050565b61254b81612e21565b82525050565b600061255c82612cb7565b6125668185612ccd565b9350612576818560208601612e92565b61257f816130a1565b840191505092915050565b600061259582612cc2565b61259f8185612cde565b93506125af818560208601612e92565b6125b8816130a1565b840191505092915050565b60006125ce82612cc2565b6125d88185612cef565b93506125e8818560208601612e92565b80840191505092915050565b6000815461260181612ec5565b61260b8186612cef565b9450600182166000811461262657600181146126375761266a565b60ff1983168652818601935061266a565b61264085612ca2565b60005b8381101561266257815481890152600182019150602081019050612643565b838801955050505b50505092915050565b6000612680603283612cde565b915061268b826130b2565b604082019050919050565b60006126a3602683612cde565b91506126ae82613101565b604082019050919050565b60006126c6601c83612cde565b91506126d182613150565b602082019050919050565b60006126e9602483612cde565b91506126f482613179565b604082019050919050565b600061270c601983612cde565b9150612717826131c8565b602082019050919050565b600061272f600983612cde565b915061273a826131f1565b602082019050919050565b6000612752602c83612cde565b915061275d8261321a565b604082019050919050565b6000612775603883612cde565b915061278082613269565b604082019050919050565b6000612798602a83612cde565b91506127a3826132b8565b604082019050919050565b60006127bb602983612cde565b91506127c682613307565b604082019050919050565b60006127de602083612cde565b91506127e982613356565b602082019050919050565b6000612801600883612cde565b915061280c8261337f565b602082019050919050565b6000612824602c83612cde565b915061282f826133a8565b604082019050919050565b6000612847602083612cde565b9150612852826133f7565b602082019050919050565b600061286a602983612cde565b915061287582613420565b604082019050919050565b600061288d601183612cde565b91506128988261346f565b602082019050919050565b60006128b0602183612cde565b91506128bb82613498565b604082019050919050565b60006128d3603183612cde565b91506128de826134e7565b604082019050919050565b6128f281612e79565b82525050565b600061290482856125f4565b915061291082846125c3565b91508190509392505050565b60006020820190506129316000830184612533565b92915050565b600060808201905061294c6000830187612533565b6129596020830186612533565b61296660408301856128e9565b81810360608301526129788184612551565b905095945050505050565b60006020820190506129986000830184612542565b92915050565b600060208201905081810360008301526129b8818461258a565b905092915050565b600060208201905081810360008301526129d981612673565b9050919050565b600060208201905081810360008301526129f981612696565b9050919050565b60006020820190508181036000830152612a19816126b9565b9050919050565b60006020820190508181036000830152612a39816126dc565b9050919050565b60006020820190508181036000830152612a59816126ff565b9050919050565b60006020820190508181036000830152612a7981612722565b9050919050565b60006020820190508181036000830152612a9981612745565b9050919050565b60006020820190508181036000830152612ab981612768565b9050919050565b60006020820190508181036000830152612ad98161278b565b9050919050565b60006020820190508181036000830152612af9816127ae565b9050919050565b60006020820190508181036000830152612b19816127d1565b9050919050565b60006020820190508181036000830152612b39816127f4565b9050919050565b60006020820190508181036000830152612b5981612817565b9050919050565b60006020820190508181036000830152612b798161283a565b9050919050565b60006020820190508181036000830152612b998161285d565b9050919050565b60006020820190508181036000830152612bb981612880565b9050919050565b60006020820190508181036000830152612bd9816128a3565b9050919050565b60006020820190508181036000830152612bf9816128c6565b9050919050565b6000602082019050612c1560008301846128e9565b92915050565b6000612c25612c36565b9050612c318282612ef7565b919050565b6000604051905090565b600067ffffffffffffffff821115612c5b57612c5a61305e565b5b612c64826130a1565b9050602081019050919050565b600067ffffffffffffffff821115612c8c57612c8b61305e565b5b612c95826130a1565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612d0582612e79565b9150612d1083612e79565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612d4557612d44612fa2565b5b828201905092915050565b6000612d5b82612e79565b9150612d6683612e79565b925082612d7657612d75612fd1565b5b828204905092915050565b6000612d8c82612e79565b9150612d9783612e79565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612dd057612dcf612fa2565b5b828202905092915050565b6000612de682612e79565b9150612df183612e79565b925082821015612e0457612e03612fa2565b5b828203905092915050565b6000612e1a82612e59565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612eb0578082015181840152602081019050612e95565b83811115612ebf576000848401525b50505050565b60006002820490506001821680612edd57607f821691505b60208210811415612ef157612ef0613000565b5b50919050565b612f00826130a1565b810181811067ffffffffffffffff82111715612f1f57612f1e61305e565b5b80604052505050565b6000612f3382612e79565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612f6657612f65612fa2565b5b600182019050919050565b6000612f7c82612e79565b9150612f8783612e79565b925082612f9757612f96612fd1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d6178206c696d69740000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b61353f81612e0f565b811461354a57600080fd5b50565b61355681612e21565b811461356157600080fd5b50565b61356d81612e2d565b811461357857600080fd5b50565b61358481612e79565b811461358f57600080fd5b5056fea2646970667358221220333718a5a8e71033319f97b1801755afe650608b7c86adf261623079677c622164736f6c63430008070033
Deployed Bytecode
0x60806040526004361061019c5760003560e01c80636352211e116100ec578063b88d4fde1161008a578063d547cfb711610064578063d547cfb7146105a5578063d89135cd146105d0578063e985e9c5146105fb578063f2fde38b146106385761019c565b8063b88d4fde14610514578063c002d23d1461053d578063c87b56dd146105685761019c565b80638da5cb5b116100c65780638da5cb5b1461047e57806393e59dc1146104a957806395d89b41146104c0578063a22cb465146104eb5761019c565b80636352211e146103ed57806370a082311461042a578063715018a6146104675761019c565b806326a49e371161015957806340c10f191161013357806340c10f191461035457806342842e0e1461037057806355f804b31461039957806359a7715a146103c25761019c565b806326a49e37146102c35780632a9e63c6146103005780633502a716146103295761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b31461024657806318160ddd1461026f57806323b872dd1461029a575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612463565b610661565b6040516101d59190612983565b60405180910390f35b3480156101ea57600080fd5b506101f3610743565b604051610200919061299e565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612506565b6107d5565b60405161023d919061291c565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612423565b61085a565b005b34801561027b57600080fd5b50610284610972565b6040516102919190612c00565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc919061230d565b610983565b005b3480156102cf57600080fd5b506102ea60048036038101906102e59190612506565b6109e3565b6040516102f79190612c00565b60405180910390f35b34801561030c57600080fd5b50610327600480360381019061032291906122a0565b610a07565b005b34801561033557600080fd5b5061033e610ac7565b60405161034b9190612c00565b60405180910390f35b61036e60048036038101906103699190612423565b610acd565b005b34801561037c57600080fd5b506103976004803603810190610392919061230d565b610c32565b005b3480156103a557600080fd5b506103c060048036038101906103bb91906124bd565b610c52565b005b3480156103ce57600080fd5b506103d7610ce8565b6040516103e49190612c00565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f9190612506565b610cf7565b604051610421919061291c565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c91906122a0565b610da9565b60405161045e9190612c00565b60405180910390f35b34801561047357600080fd5b5061047c610e61565b005b34801561048a57600080fd5b50610493610ee9565b6040516104a0919061291c565b60405180910390f35b3480156104b557600080fd5b506104be610f13565b005b3480156104cc57600080fd5b506104d5610fdf565b6040516104e2919061299e565b60405180910390f35b3480156104f757600080fd5b50610512600480360381019061050d91906123e3565b611071565b005b34801561052057600080fd5b5061053b60048036038101906105369190612360565b6111f2565b005b34801561054957600080fd5b50610552611254565b60405161055f9190612c00565b60405180910390f35b34801561057457600080fd5b5061058f600480360381019061058a9190612506565b611260565b60405161059c919061299e565b60405180910390f35b3480156105b157600080fd5b506105ba611294565b6040516105c7919061299e565b60405180910390f35b3480156105dc57600080fd5b506105e5611322565b6040516105f29190612c00565b60405180910390f35b34801561060757600080fd5b50610622600480360381019061061d91906122cd565b611331565b60405161062f9190612983565b60405180910390f35b34801561064457600080fd5b5061065f600480360381019061065a91906122a0565b6113c5565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061072c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061073c575061073b826114bd565b5b9050919050565b60606000805461075290612ec5565b80601f016020809104026020016040519081016040528092919081815260200182805461077e90612ec5565b80156107cb5780601f106107a0576101008083540402835291602001916107cb565b820191906000526020600020905b8154815290600101906020018083116107ae57829003601f168201915b5050505050905090565b60006107e082611527565b61081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081690612b40565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061086582610cf7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cd90612bc0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108f5611593565b73ffffffffffffffffffffffffffffffffffffffff16148061092457506109238161091e611593565b611331565b5b610963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095a90612aa0565b60405180910390fd5b61096d838361159b565b505050565b600061097e6007611654565b905090565b61099461098e611593565b82611662565b6109d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ca90612be0565b60405180910390fd5b6109de838383611740565b505050565b6000610a008267011c37937e08000061199c90919063ffffffff16565b9050919050565b610a0f611593565b73ffffffffffffffffffffffffffffffffffffffff16610a2d610ee9565b73ffffffffffffffffffffffffffffffffffffffff1614610a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7a90612b60565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61270f81565b61270f610ad86119b2565b1115610b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1090612b20565b60405180910390fd5b6000610b236119b2565b905061270f8282610b349190612cfa565b1115610b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6c90612a60565b60405180910390fd5b61270f811115610bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb190612b20565b60405180910390fd5b610bc3826109e3565b341015610c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfc90612ba0565b60405180910390fd5b60005b82811015610c2c57610c19846119c3565b8080610c2490612f28565b915050610c08565b50505050565b610c4d838383604051806020016040528060008152506111f2565b505050565b610c5a611593565b73ffffffffffffffffffffffffffffffffffffffff16610c78610ee9565b73ffffffffffffffffffffffffffffffffffffffff1614610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590612b60565b60405180910390fd5b8060099080519060200190610ce49291906120b4565b5050565b6000610cf26119b2565b905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9790612ae0565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1190612ac0565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e69611593565b73ffffffffffffffffffffffffffffffffffffffff16610e87610ee9565b73ffffffffffffffffffffffffffffffffffffffff1614610edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed490612b60565b60405180910390fd5b610ee76000611a14565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f1b611593565b73ffffffffffffffffffffffffffffffffffffffff16610f39610ee9565b73ffffffffffffffffffffffffffffffffffffffff1614610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8690612b60565b60405180910390fd5b610f97610ee9565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610fdc573d6000803e3d6000fd5b50565b606060018054610fee90612ec5565b80601f016020809104026020016040519081016040528092919081815260200182805461101a90612ec5565b80156110675780601f1061103c57610100808354040283529160200191611067565b820191906000526020600020905b81548152906001019060200180831161104a57829003601f168201915b5050505050905090565b611079611593565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110de90612a40565b60405180910390fd5b80600560006110f4611593565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166111a1611593565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111e69190612983565b60405180910390a35050565b6112036111fd611593565b83611662565b611242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123990612be0565b60405180910390fd5b61124e84848484611ada565b50505050565b67011c37937e08000081565b6060600961126d83611b36565b60405160200161127e9291906128f8565b6040516020818303038152906040529050919050565b600980546112a190612ec5565b80601f01602080910402602001604051908101604052809291908181526020018280546112cd90612ec5565b801561131a5780601f106112ef5761010080835404028352916020019161131a565b820191906000526020600020905b8154815290600101906020018083116112fd57829003601f168201915b505050505081565b600061132c611c97565b905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113cd611593565b73ffffffffffffffffffffffffffffffffffffffff166113eb610ee9565b73ffffffffffffffffffffffffffffffffffffffff1614611441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143890612b60565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a8906129e0565b60405180910390fd5b6114ba81611a14565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661160e83610cf7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b600061166d82611527565b6116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390612a80565b60405180910390fd5b60006116b783610cf7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061172657508373ffffffffffffffffffffffffffffffffffffffff1661170e846107d5565b73ffffffffffffffffffffffffffffffffffffffff16145b8061173757506117368185611331565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661176082610cf7565b73ffffffffffffffffffffffffffffffffffffffff16146117b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ad90612b80565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181d90612a20565b60405180910390fd5b611831838383611ca8565b61183c60008261159b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461188c9190612ddb565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118e39190612cfa565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081836119aa9190612d81565b905092915050565b60006119be6007611654565b905090565b60006119cd6119b2565b90506119d96007611cad565b6119e38282611cc3565b807f8d55e962a7265da84b1cf7e08dc294d19b23aa4500be0584fcc2fb15c639763c60405160405180910390a25050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611ae5848484611740565b611af184848484611ce1565b611b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b27906129c0565b60405180910390fd5b50505050565b60606000821415611b7e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611c92565b600082905060005b60008214611bb0578080611b9990612f28565b915050600a82611ba99190612d50565b9150611b86565b60008167ffffffffffffffff811115611bcc57611bcb61305e565b5b6040519080825280601f01601f191660200182016040528015611bfe5781602001600182028036833780820191505090505b5090505b60008514611c8b57600182611c179190612ddb565b9150600a85611c269190612f71565b6030611c329190612cfa565b60f81b818381518110611c4857611c4761302f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611c849190612d50565b9450611c02565b8093505050505b919050565b6000611ca36008611654565b905090565b505050565b6001816000016000828254019250508190555050565b611cdd828260405180602001604052806000815250611e78565b5050565b6000611d028473ffffffffffffffffffffffffffffffffffffffff16611ed3565b15611e6b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611d2b611593565b8786866040518563ffffffff1660e01b8152600401611d4d9493929190612937565b602060405180830381600087803b158015611d6757600080fd5b505af1925050508015611d9857506040513d601f19601f82011682018060405250810190611d959190612490565b60015b611e1b573d8060008114611dc8576040519150601f19603f3d011682016040523d82523d6000602084013e611dcd565b606091505b50600081511415611e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0a906129c0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611e70565b600190505b949350505050565b611e828383611ee6565b611e8f6000848484611ce1565b611ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec5906129c0565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4d90612b00565b60405180910390fd5b611f5f81611527565b15611f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9690612a00565b60405180910390fd5b611fab60008383611ca8565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ffb9190612cfa565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546120c090612ec5565b90600052602060002090601f0160209004810192826120e25760008555612129565b82601f106120fb57805160ff1916838001178555612129565b82800160010185558215612129579182015b8281111561212857825182559160200191906001019061210d565b5b509050612136919061213a565b5090565b5b8082111561215357600081600090555060010161213b565b5090565b600061216a61216584612c40565b612c1b565b90508281526020810184848401111561218657612185613092565b5b612191848285612e83565b509392505050565b60006121ac6121a784612c71565b612c1b565b9050828152602081018484840111156121c8576121c7613092565b5b6121d3848285612e83565b509392505050565b6000813590506121ea81613536565b92915050565b6000813590506121ff8161354d565b92915050565b60008135905061221481613564565b92915050565b60008151905061222981613564565b92915050565b600082601f8301126122445761224361308d565b5b8135612254848260208601612157565b91505092915050565b600082601f8301126122725761227161308d565b5b8135612282848260208601612199565b91505092915050565b60008135905061229a8161357b565b92915050565b6000602082840312156122b6576122b561309c565b5b60006122c4848285016121db565b91505092915050565b600080604083850312156122e4576122e361309c565b5b60006122f2858286016121db565b9250506020612303858286016121db565b9150509250929050565b6000806000606084860312156123265761232561309c565b5b6000612334868287016121db565b9350506020612345868287016121db565b92505060406123568682870161228b565b9150509250925092565b6000806000806080858703121561237a5761237961309c565b5b6000612388878288016121db565b9450506020612399878288016121db565b93505060406123aa8782880161228b565b925050606085013567ffffffffffffffff8111156123cb576123ca613097565b5b6123d78782880161222f565b91505092959194509250565b600080604083850312156123fa576123f961309c565b5b6000612408858286016121db565b9250506020612419858286016121f0565b9150509250929050565b6000806040838503121561243a5761243961309c565b5b6000612448858286016121db565b92505060206124598582860161228b565b9150509250929050565b6000602082840312156124795761247861309c565b5b600061248784828501612205565b91505092915050565b6000602082840312156124a6576124a561309c565b5b60006124b48482850161221a565b91505092915050565b6000602082840312156124d3576124d261309c565b5b600082013567ffffffffffffffff8111156124f1576124f0613097565b5b6124fd8482850161225d565b91505092915050565b60006020828403121561251c5761251b61309c565b5b600061252a8482850161228b565b91505092915050565b61253c81612e0f565b82525050565b61254b81612e21565b82525050565b600061255c82612cb7565b6125668185612ccd565b9350612576818560208601612e92565b61257f816130a1565b840191505092915050565b600061259582612cc2565b61259f8185612cde565b93506125af818560208601612e92565b6125b8816130a1565b840191505092915050565b60006125ce82612cc2565b6125d88185612cef565b93506125e8818560208601612e92565b80840191505092915050565b6000815461260181612ec5565b61260b8186612cef565b9450600182166000811461262657600181146126375761266a565b60ff1983168652818601935061266a565b61264085612ca2565b60005b8381101561266257815481890152600182019150602081019050612643565b838801955050505b50505092915050565b6000612680603283612cde565b915061268b826130b2565b604082019050919050565b60006126a3602683612cde565b91506126ae82613101565b604082019050919050565b60006126c6601c83612cde565b91506126d182613150565b602082019050919050565b60006126e9602483612cde565b91506126f482613179565b604082019050919050565b600061270c601983612cde565b9150612717826131c8565b602082019050919050565b600061272f600983612cde565b915061273a826131f1565b602082019050919050565b6000612752602c83612cde565b915061275d8261321a565b604082019050919050565b6000612775603883612cde565b915061278082613269565b604082019050919050565b6000612798602a83612cde565b91506127a3826132b8565b604082019050919050565b60006127bb602983612cde565b91506127c682613307565b604082019050919050565b60006127de602083612cde565b91506127e982613356565b602082019050919050565b6000612801600883612cde565b915061280c8261337f565b602082019050919050565b6000612824602c83612cde565b915061282f826133a8565b604082019050919050565b6000612847602083612cde565b9150612852826133f7565b602082019050919050565b600061286a602983612cde565b915061287582613420565b604082019050919050565b600061288d601183612cde565b91506128988261346f565b602082019050919050565b60006128b0602183612cde565b91506128bb82613498565b604082019050919050565b60006128d3603183612cde565b91506128de826134e7565b604082019050919050565b6128f281612e79565b82525050565b600061290482856125f4565b915061291082846125c3565b91508190509392505050565b60006020820190506129316000830184612533565b92915050565b600060808201905061294c6000830187612533565b6129596020830186612533565b61296660408301856128e9565b81810360608301526129788184612551565b905095945050505050565b60006020820190506129986000830184612542565b92915050565b600060208201905081810360008301526129b8818461258a565b905092915050565b600060208201905081810360008301526129d981612673565b9050919050565b600060208201905081810360008301526129f981612696565b9050919050565b60006020820190508181036000830152612a19816126b9565b9050919050565b60006020820190508181036000830152612a39816126dc565b9050919050565b60006020820190508181036000830152612a59816126ff565b9050919050565b60006020820190508181036000830152612a7981612722565b9050919050565b60006020820190508181036000830152612a9981612745565b9050919050565b60006020820190508181036000830152612ab981612768565b9050919050565b60006020820190508181036000830152612ad98161278b565b9050919050565b60006020820190508181036000830152612af9816127ae565b9050919050565b60006020820190508181036000830152612b19816127d1565b9050919050565b60006020820190508181036000830152612b39816127f4565b9050919050565b60006020820190508181036000830152612b5981612817565b9050919050565b60006020820190508181036000830152612b798161283a565b9050919050565b60006020820190508181036000830152612b998161285d565b9050919050565b60006020820190508181036000830152612bb981612880565b9050919050565b60006020820190508181036000830152612bd9816128a3565b9050919050565b60006020820190508181036000830152612bf9816128c6565b9050919050565b6000602082019050612c1560008301846128e9565b92915050565b6000612c25612c36565b9050612c318282612ef7565b919050565b6000604051905090565b600067ffffffffffffffff821115612c5b57612c5a61305e565b5b612c64826130a1565b9050602081019050919050565b600067ffffffffffffffff821115612c8c57612c8b61305e565b5b612c95826130a1565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612d0582612e79565b9150612d1083612e79565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612d4557612d44612fa2565b5b828201905092915050565b6000612d5b82612e79565b9150612d6683612e79565b925082612d7657612d75612fd1565b5b828204905092915050565b6000612d8c82612e79565b9150612d9783612e79565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612dd057612dcf612fa2565b5b828202905092915050565b6000612de682612e79565b9150612df183612e79565b925082821015612e0457612e03612fa2565b5b828203905092915050565b6000612e1a82612e59565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612eb0578082015181840152602081019050612e95565b83811115612ebf576000848401525b50505050565b60006002820490506001821680612edd57607f821691505b60208210811415612ef157612ef0613000565b5b50919050565b612f00826130a1565b810181811067ffffffffffffffff82111715612f1f57612f1e61305e565b5b80604052505050565b6000612f3382612e79565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612f6657612f65612fa2565b5b600182019050919050565b6000612f7c82612e79565b9150612f8783612e79565b925082612f9757612f96612fd1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d6178206c696d69740000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b61353f81612e0f565b811461354a57600080fd5b50565b61355681612e21565b811461356157600080fd5b50565b61356d81612e2d565b811461357857600080fd5b50565b61358481612e79565b811461358f57600080fd5b5056fea2646970667358221220333718a5a8e71033319f97b1801755afe650608b7c86adf261623079677c622164736f6c63430008070033
Deployed Bytecode Sourcemap
43097:2743:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31487:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32432:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33991:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33514:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43797:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34881:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44988:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44350:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43386:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44580:396;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35291:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45307:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44247:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32126:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31856:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13122:94;;;;;;;;;;;;;:::i;:::-;;12471:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44463:105;;;;;;;;;;;;;:::i;:::-;;32601:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34284:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35547:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43440:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45483:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43351:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44146:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34650:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13371:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31487:305;31589:4;31641:25;31626:40;;;:11;:40;;;;:105;;;;31698:33;31683:48;;;:11;:48;;;;31626:105;:158;;;;31748:36;31772:11;31748:23;:36::i;:::-;31626:158;31606:178;;31487:305;;;:::o;32432:100::-;32486:13;32519:5;32512:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32432:100;:::o;33991:221::-;34067:7;34095:16;34103:7;34095;:16::i;:::-;34087:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34180:15;:24;34196:7;34180:24;;;;;;;;;;;;;;;;;;;;;34173:31;;33991:221;;;:::o;33514:411::-;33595:13;33611:23;33626:7;33611:14;:23::i;:::-;33595:39;;33659:5;33653:11;;:2;:11;;;;33645:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;33753:5;33737:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;33762:37;33779:5;33786:12;:10;:12::i;:::-;33762:16;:37::i;:::-;33737:62;33715:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;33896:21;33905:2;33909:7;33896:8;:21::i;:::-;33584:341;33514:411;;:::o;43797:104::-;43841:7;43868:25;:15;:23;:25::i;:::-;43861:32;;43797:104;:::o;34881:339::-;35076:41;35095:12;:10;:12::i;:::-;35109:7;35076:18;:41::i;:::-;35068:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35184:28;35194:4;35200:2;35204:7;35184:9;:28::i;:::-;34881:339;;;:::o;44988:109::-;45040:7;45067:22;45082:6;43477:10;45067:14;;:22;;;;:::i;:::-;45060:29;;44988:109;;;:::o;44350:101::-;12702:12;:10;:12::i;:::-;12691:23;;:7;:5;:7::i;:::-;:23;;;12683:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44435:8:::1;44418:14;;:25;;;;;;;;;;;;;;;;;;44350:101:::0;:::o;43386:43::-;43425:4;43386:43;:::o;44580:396::-;43425:4;43726:14;:12;:14::i;:::-;:30;;43718:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;44660:13:::1;44676:14;:12;:14::i;:::-;44660:30;;43425:4;44717:6;44709:5;:14;;;;:::i;:::-;:30;;44701:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;43425:4;44772:5;:21;;44764:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;44838:13;44844:6;44838:5;:13::i;:::-;44825:9;:26;;44817:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;44891:9;44886:83;44910:6;44906:1;:10;44886:83;;;44938:19;44953:3;44938:14;:19::i;:::-;44918:3;;;;;:::i;:::-;;;;44886:83;;;;44649:327;44580:396:::0;;:::o;35291:185::-;35429:39;35446:4;35452:2;35456:7;35429:39;;;;;;;;;;;;:16;:39::i;:::-;35291:185;;;:::o;45307:101::-;12702:12;:10;:12::i;:::-;12691:23;;:7;:5;:7::i;:::-;:23;;;12683:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45393:7:::1;45378:12;:22;;;;;;;;;;;;:::i;:::-;;45307:101:::0;:::o;44247:91::-;44289:7;44316:14;:12;:14::i;:::-;44309:21;;44247:91;:::o;32126:239::-;32198:7;32218:13;32234:7;:16;32242:7;32234:16;;;;;;;;;;;;;;;;;;;;;32218:32;;32286:1;32269:19;;:5;:19;;;;32261:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32352:5;32345:12;;;32126:239;;;:::o;31856:208::-;31928:7;31973:1;31956:19;;:5;:19;;;;31948:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;32040:9;:16;32050:5;32040:16;;;;;;;;;;;;;;;;32033:23;;31856:208;;;:::o;13122:94::-;12702:12;:10;:12::i;:::-;12691:23;;:7;:5;:7::i;:::-;:23;;;12683:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13187:21:::1;13205:1;13187:9;:21::i;:::-;13122:94::o:0;12471:87::-;12517:7;12544:6;;;;;;;;;;;12537:13;;12471:87;:::o;44463:105::-;12702:12;:10;:12::i;:::-;12691:23;;:7;:5;:7::i;:::-;:23;;;12683:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44520:7:::1;:5;:7::i;:::-;44512:25;;:48;44538:21;44512:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;44463:105::o:0;32601:104::-;32657:13;32690:7;32683:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32601:104;:::o;34284:295::-;34399:12;:10;:12::i;:::-;34387:24;;:8;:24;;;;34379:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34499:8;34454:18;:32;34473:12;:10;:12::i;:::-;34454:32;;;;;;;;;;;;;;;:42;34487:8;34454:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34552:8;34523:48;;34538:12;:10;:12::i;:::-;34523:48;;;34562:8;34523:48;;;;;;:::i;:::-;;;;;;;;34284:295;;:::o;35547:328::-;35722:41;35741:12;:10;:12::i;:::-;35755:7;35722:18;:41::i;:::-;35714:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35828:39;35842:4;35848:2;35852:7;35861:5;35828:13;:39::i;:::-;35547:328;;;;:::o;43440:47::-;43477:10;43440:47;:::o;45483:166::-;45549:13;45606:12;45620:19;:8;:17;:19::i;:::-;45589:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45575:66;;45483:166;;;:::o;43351:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44146:93::-;44190:7;44217:14;:12;:14::i;:::-;44210:21;;44146:93;:::o;34650:164::-;34747:4;34771:18;:25;34790:5;34771:25;;;;;;;;;;;;;;;:35;34797:8;34771:35;;;;;;;;;;;;;;;;;;;;;;;;;34764:42;;34650:164;;;;:::o;13371:192::-;12702:12;:10;:12::i;:::-;12691:23;;:7;:5;:7::i;:::-;:23;;;12683:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13480:1:::1;13460:22;;:8;:22;;;;13452:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13536:19;13546:8;13536:9;:19::i;:::-;13371:192:::0;:::o;24457:157::-;24542:4;24581:25;24566:40;;;:11;:40;;;;24559:47;;24457:157;;;:::o;37385:127::-;37450:4;37502:1;37474:30;;:7;:16;37482:7;37474:16;;;;;;;;;;;;;;;;;;;;;:30;;;;37467:37;;37385:127;;;:::o;11259:98::-;11312:7;11339:10;11332:17;;11259:98;:::o;40778:174::-;40880:2;40853:15;:24;40869:7;40853:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40936:7;40932:2;40898:46;;40907:23;40922:7;40907:14;:23::i;:::-;40898:46;;;;;;;;;;;;40778:174;;:::o;1014:114::-;1079:7;1106;:14;;;1099:21;;1014:114;;;:::o;37679:348::-;37772:4;37797:16;37805:7;37797;:16::i;:::-;37789:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37873:13;37889:23;37904:7;37889:14;:23::i;:::-;37873:39;;37942:5;37931:16;;:7;:16;;;:51;;;;37975:7;37951:31;;:20;37963:7;37951:11;:20::i;:::-;:31;;;37931:51;:87;;;;37986:32;38003:5;38010:7;37986:16;:32::i;:::-;37931:87;37923:96;;;37679:348;;;;:::o;40082:578::-;40241:4;40214:31;;:23;40229:7;40214:14;:23::i;:::-;:31;;;40206:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40324:1;40310:16;;:2;:16;;;;40302:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40380:39;40401:4;40407:2;40411:7;40380:20;:39::i;:::-;40484:29;40501:1;40505:7;40484:8;:29::i;:::-;40545:1;40526:9;:15;40536:4;40526:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;40574:1;40557:9;:13;40567:2;40557:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;40605:2;40586:7;:16;40594:7;40586:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;40644:7;40640:2;40625:27;;40634:4;40625:27;;;;;;;;;;;;40082:578;;;:::o;5137:98::-;5195:7;5226:1;5222;:5;;;;:::i;:::-;5215:12;;5137:98;;;;:::o;43909:107::-;43956:7;43983:25;:15;:23;:25::i;:::-;43976:32;;43909:107;:::o;45105:194::-;45161:10;45174:14;:12;:14::i;:::-;45161:27;;45199;:15;:25;:27::i;:::-;45237:18;45247:3;45252:2;45237:9;:18::i;:::-;45288:2;45271:20;;;;;;;;;;45150:149;45105:194;:::o;13571:173::-;13627:16;13646:6;;;;;;;;;;;13627:25;;13672:8;13663:6;;:17;;;;;;;;;;;;;;;;;;13727:8;13696:40;;13717:8;13696:40;;;;;;;;;;;;13616:128;13571:173;:::o;36757:315::-;36914:28;36924:4;36930:2;36934:7;36914:9;:28::i;:::-;36961:48;36984:4;36990:2;36994:7;37003:5;36961:22;:48::i;:::-;36953:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;36757:315;;;;:::o;8875:723::-;8931:13;9161:1;9152:5;:10;9148:53;;;9179:10;;;;;;;;;;;;;;;;;;;;;9148:53;9211:12;9226:5;9211:20;;9242:14;9267:78;9282:1;9274:4;:9;9267:78;;9300:8;;;;;:::i;:::-;;;;9331:2;9323:10;;;;;:::i;:::-;;;9267:78;;;9355:19;9387:6;9377:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9355:39;;9405:154;9421:1;9412:5;:10;9405:154;;9449:1;9439:11;;;;;:::i;:::-;;;9516:2;9508:5;:10;;;;:::i;:::-;9495:2;:24;;;;:::i;:::-;9482:39;;9465:6;9472;9465:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;9545:2;9536:11;;;;;:::i;:::-;;;9405:154;;;9583:6;9569:21;;;;;8875:723;;;;:::o;44028:106::-;44075:7;44102:24;:14;:22;:24::i;:::-;44095:31;;44028:106;:::o;42888:126::-;;;;:::o;1136:127::-;1243:1;1225:7;:14;;;:19;;;;;;;;;;;1136:127;:::o;38369:110::-;38445:26;38455:2;38459:7;38445:26;;;;;;;;;;;;:9;:26::i;:::-;38369:110;;:::o;41517:799::-;41672:4;41693:15;:2;:13;;;:15::i;:::-;41689:620;;;41745:2;41729:36;;;41766:12;:10;:12::i;:::-;41780:4;41786:7;41795:5;41729:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41725:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41988:1;41971:6;:13;:18;41967:272;;;42014:60;;;;;;;;;;:::i;:::-;;;;;;;;41967:272;42189:6;42183:13;42174:6;42170:2;42166:15;42159:38;41725:529;41862:41;;;41852:51;;;:6;:51;;;;41845:58;;;;;41689:620;42293:4;42286:11;;41517:799;;;;;;;:::o;38706:321::-;38836:18;38842:2;38846:7;38836:5;:18::i;:::-;38887:54;38918:1;38922:2;38926:7;38935:5;38887:22;:54::i;:::-;38865:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;38706:321;;;:::o;14517:387::-;14577:4;14785:12;14852:7;14840:20;14832:28;;14895:1;14888:4;:8;14881:15;;;14517:387;;;:::o;39363:382::-;39457:1;39443:16;;:2;:16;;;;39435:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39516:16;39524:7;39516;:16::i;:::-;39515:17;39507:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39578:45;39607:1;39611:2;39615:7;39578:20;:45::i;:::-;39653:1;39636:9;:13;39646:2;39636:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39684:2;39665:7;:16;39673:7;39665:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39729:7;39725:2;39704:33;;39721:1;39704:33;;;;;;;;;;;;39363:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:118::-;7245:24;7263:5;7245:24;:::i;:::-;7240:3;7233:37;7158:118;;:::o;7282:109::-;7363:21;7378:5;7363:21;:::i;:::-;7358:3;7351:34;7282:109;;:::o;7397:360::-;7483:3;7511:38;7543:5;7511:38;:::i;:::-;7565:70;7628:6;7623:3;7565:70;:::i;:::-;7558:77;;7644:52;7689:6;7684:3;7677:4;7670:5;7666:16;7644:52;:::i;:::-;7721:29;7743:6;7721:29;:::i;:::-;7716:3;7712:39;7705:46;;7487:270;7397:360;;;;:::o;7763:364::-;7851:3;7879:39;7912:5;7879:39;:::i;:::-;7934:71;7998:6;7993:3;7934:71;:::i;:::-;7927:78;;8014:52;8059:6;8054:3;8047:4;8040:5;8036:16;8014:52;:::i;:::-;8091:29;8113:6;8091:29;:::i;:::-;8086:3;8082:39;8075:46;;7855:272;7763:364;;;;:::o;8133:377::-;8239:3;8267:39;8300:5;8267:39;:::i;:::-;8322:89;8404:6;8399:3;8322:89;:::i;:::-;8315:96;;8420:52;8465:6;8460:3;8453:4;8446:5;8442:16;8420:52;:::i;:::-;8497:6;8492:3;8488:16;8481:23;;8243:267;8133:377;;;;:::o;8540:845::-;8643:3;8680:5;8674:12;8709:36;8735:9;8709:36;:::i;:::-;8761:89;8843:6;8838:3;8761:89;:::i;:::-;8754:96;;8881:1;8870:9;8866:17;8897:1;8892:137;;;;9043:1;9038:341;;;;8859:520;;8892:137;8976:4;8972:9;8961;8957:25;8952:3;8945:38;9012:6;9007:3;9003:16;8996:23;;8892:137;;9038:341;9105:38;9137:5;9105:38;:::i;:::-;9165:1;9179:154;9193:6;9190:1;9187:13;9179:154;;;9267:7;9261:14;9257:1;9252:3;9248:11;9241:35;9317:1;9308:7;9304:15;9293:26;;9215:4;9212:1;9208:12;9203:17;;9179:154;;;9362:6;9357:3;9353:16;9346:23;;9045:334;;8859:520;;8647:738;;8540:845;;;;:::o;9391:366::-;9533:3;9554:67;9618:2;9613:3;9554:67;:::i;:::-;9547:74;;9630:93;9719:3;9630:93;:::i;:::-;9748:2;9743:3;9739:12;9732:19;;9391:366;;;:::o;9763:::-;9905:3;9926:67;9990:2;9985:3;9926:67;:::i;:::-;9919:74;;10002:93;10091:3;10002:93;:::i;:::-;10120:2;10115:3;10111:12;10104:19;;9763:366;;;:::o;10135:::-;10277:3;10298:67;10362:2;10357:3;10298:67;:::i;:::-;10291:74;;10374:93;10463:3;10374:93;:::i;:::-;10492:2;10487:3;10483:12;10476:19;;10135:366;;;:::o;10507:::-;10649:3;10670:67;10734:2;10729:3;10670:67;:::i;:::-;10663:74;;10746:93;10835:3;10746:93;:::i;:::-;10864:2;10859:3;10855:12;10848:19;;10507:366;;;:::o;10879:::-;11021:3;11042:67;11106:2;11101:3;11042:67;:::i;:::-;11035:74;;11118:93;11207:3;11118:93;:::i;:::-;11236:2;11231:3;11227:12;11220:19;;10879:366;;;:::o;11251:365::-;11393:3;11414:66;11478:1;11473:3;11414:66;:::i;:::-;11407:73;;11489:93;11578:3;11489:93;:::i;:::-;11607:2;11602:3;11598:12;11591:19;;11251:365;;;:::o;11622:366::-;11764:3;11785:67;11849:2;11844:3;11785:67;:::i;:::-;11778:74;;11861:93;11950:3;11861:93;:::i;:::-;11979:2;11974:3;11970:12;11963:19;;11622:366;;;:::o;11994:::-;12136:3;12157:67;12221:2;12216:3;12157:67;:::i;:::-;12150:74;;12233:93;12322:3;12233:93;:::i;:::-;12351:2;12346:3;12342:12;12335:19;;11994:366;;;:::o;12366:::-;12508:3;12529:67;12593:2;12588:3;12529:67;:::i;:::-;12522:74;;12605:93;12694:3;12605:93;:::i;:::-;12723:2;12718:3;12714:12;12707:19;;12366:366;;;:::o;12738:::-;12880:3;12901:67;12965:2;12960:3;12901:67;:::i;:::-;12894:74;;12977:93;13066:3;12977:93;:::i;:::-;13095:2;13090:3;13086:12;13079:19;;12738:366;;;:::o;13110:::-;13252:3;13273:67;13337:2;13332:3;13273:67;:::i;:::-;13266:74;;13349:93;13438:3;13349:93;:::i;:::-;13467:2;13462:3;13458:12;13451:19;;13110:366;;;:::o;13482:365::-;13624:3;13645:66;13709:1;13704:3;13645:66;:::i;:::-;13638:73;;13720:93;13809:3;13720:93;:::i;:::-;13838:2;13833:3;13829:12;13822:19;;13482:365;;;:::o;13853:366::-;13995:3;14016:67;14080:2;14075:3;14016:67;:::i;:::-;14009:74;;14092:93;14181:3;14092:93;:::i;:::-;14210:2;14205:3;14201:12;14194:19;;13853:366;;;:::o;14225:::-;14367:3;14388:67;14452:2;14447:3;14388:67;:::i;:::-;14381:74;;14464:93;14553:3;14464:93;:::i;:::-;14582:2;14577:3;14573:12;14566:19;;14225:366;;;:::o;14597:::-;14739:3;14760:67;14824:2;14819:3;14760:67;:::i;:::-;14753:74;;14836:93;14925:3;14836:93;:::i;:::-;14954:2;14949:3;14945:12;14938:19;;14597:366;;;:::o;14969:::-;15111:3;15132:67;15196:2;15191:3;15132:67;:::i;:::-;15125:74;;15208:93;15297:3;15208:93;:::i;:::-;15326:2;15321:3;15317:12;15310:19;;14969:366;;;:::o;15341:::-;15483:3;15504:67;15568:2;15563:3;15504:67;:::i;:::-;15497:74;;15580:93;15669:3;15580:93;:::i;:::-;15698:2;15693:3;15689:12;15682:19;;15341:366;;;:::o;15713:::-;15855:3;15876:67;15940:2;15935:3;15876:67;:::i;:::-;15869:74;;15952:93;16041:3;15952:93;:::i;:::-;16070:2;16065:3;16061:12;16054:19;;15713:366;;;:::o;16085:118::-;16172:24;16190:5;16172:24;:::i;:::-;16167:3;16160:37;16085:118;;:::o;16209:429::-;16386:3;16408:92;16496:3;16487:6;16408:92;:::i;:::-;16401:99;;16517:95;16608:3;16599:6;16517:95;:::i;:::-;16510:102;;16629:3;16622:10;;16209:429;;;;;:::o;16644:222::-;16737:4;16775:2;16764:9;16760:18;16752:26;;16788:71;16856:1;16845:9;16841:17;16832:6;16788:71;:::i;:::-;16644:222;;;;:::o;16872:640::-;17067:4;17105:3;17094:9;17090:19;17082:27;;17119:71;17187:1;17176:9;17172:17;17163:6;17119:71;:::i;:::-;17200:72;17268:2;17257:9;17253:18;17244:6;17200:72;:::i;:::-;17282;17350:2;17339:9;17335:18;17326:6;17282:72;:::i;:::-;17401:9;17395:4;17391:20;17386:2;17375:9;17371:18;17364:48;17429:76;17500:4;17491:6;17429:76;:::i;:::-;17421:84;;16872:640;;;;;;;:::o;17518:210::-;17605:4;17643:2;17632:9;17628:18;17620:26;;17656:65;17718:1;17707:9;17703:17;17694:6;17656:65;:::i;:::-;17518:210;;;;:::o;17734:313::-;17847:4;17885:2;17874:9;17870:18;17862:26;;17934:9;17928:4;17924:20;17920:1;17909:9;17905:17;17898:47;17962:78;18035:4;18026:6;17962:78;:::i;:::-;17954:86;;17734:313;;;;:::o;18053:419::-;18219:4;18257:2;18246:9;18242:18;18234:26;;18306:9;18300:4;18296:20;18292:1;18281:9;18277:17;18270:47;18334:131;18460:4;18334:131;:::i;:::-;18326:139;;18053:419;;;:::o;18478:::-;18644:4;18682:2;18671:9;18667:18;18659:26;;18731:9;18725:4;18721:20;18717:1;18706:9;18702:17;18695:47;18759:131;18885:4;18759:131;:::i;:::-;18751:139;;18478:419;;;:::o;18903:::-;19069:4;19107:2;19096:9;19092:18;19084:26;;19156:9;19150:4;19146:20;19142:1;19131:9;19127:17;19120:47;19184:131;19310:4;19184:131;:::i;:::-;19176:139;;18903:419;;;:::o;19328:::-;19494:4;19532:2;19521:9;19517:18;19509:26;;19581:9;19575:4;19571:20;19567:1;19556:9;19552:17;19545:47;19609:131;19735:4;19609:131;:::i;:::-;19601:139;;19328:419;;;:::o;19753:::-;19919:4;19957:2;19946:9;19942:18;19934:26;;20006:9;20000:4;19996:20;19992:1;19981:9;19977:17;19970:47;20034:131;20160:4;20034:131;:::i;:::-;20026:139;;19753:419;;;:::o;20178:::-;20344:4;20382:2;20371:9;20367:18;20359:26;;20431:9;20425:4;20421:20;20417:1;20406:9;20402:17;20395:47;20459:131;20585:4;20459:131;:::i;:::-;20451:139;;20178:419;;;:::o;20603:::-;20769:4;20807:2;20796:9;20792:18;20784:26;;20856:9;20850:4;20846:20;20842:1;20831:9;20827:17;20820:47;20884:131;21010:4;20884:131;:::i;:::-;20876:139;;20603:419;;;:::o;21028:::-;21194:4;21232:2;21221:9;21217:18;21209:26;;21281:9;21275:4;21271:20;21267:1;21256:9;21252:17;21245:47;21309:131;21435:4;21309:131;:::i;:::-;21301:139;;21028:419;;;:::o;21453:::-;21619:4;21657:2;21646:9;21642:18;21634:26;;21706:9;21700:4;21696:20;21692:1;21681:9;21677:17;21670:47;21734:131;21860:4;21734:131;:::i;:::-;21726:139;;21453:419;;;:::o;21878:::-;22044:4;22082:2;22071:9;22067:18;22059:26;;22131:9;22125:4;22121:20;22117:1;22106:9;22102:17;22095:47;22159:131;22285:4;22159:131;:::i;:::-;22151:139;;21878:419;;;:::o;22303:::-;22469:4;22507:2;22496:9;22492:18;22484:26;;22556:9;22550:4;22546:20;22542:1;22531:9;22527:17;22520:47;22584:131;22710:4;22584:131;:::i;:::-;22576:139;;22303:419;;;:::o;22728:::-;22894:4;22932:2;22921:9;22917:18;22909:26;;22981:9;22975:4;22971:20;22967:1;22956:9;22952:17;22945:47;23009:131;23135:4;23009:131;:::i;:::-;23001:139;;22728:419;;;:::o;23153:::-;23319:4;23357:2;23346:9;23342:18;23334:26;;23406:9;23400:4;23396:20;23392:1;23381:9;23377:17;23370:47;23434:131;23560:4;23434:131;:::i;:::-;23426:139;;23153:419;;;:::o;23578:::-;23744:4;23782:2;23771:9;23767:18;23759:26;;23831:9;23825:4;23821:20;23817:1;23806:9;23802:17;23795:47;23859:131;23985:4;23859:131;:::i;:::-;23851:139;;23578:419;;;:::o;24003:::-;24169:4;24207:2;24196:9;24192:18;24184:26;;24256:9;24250:4;24246:20;24242:1;24231:9;24227:17;24220:47;24284:131;24410:4;24284:131;:::i;:::-;24276:139;;24003:419;;;:::o;24428:::-;24594:4;24632:2;24621:9;24617:18;24609:26;;24681:9;24675:4;24671:20;24667:1;24656:9;24652:17;24645:47;24709:131;24835:4;24709:131;:::i;:::-;24701:139;;24428:419;;;:::o;24853:::-;25019:4;25057:2;25046:9;25042:18;25034:26;;25106:9;25100:4;25096:20;25092:1;25081:9;25077:17;25070:47;25134:131;25260:4;25134:131;:::i;:::-;25126:139;;24853:419;;;:::o;25278:::-;25444:4;25482:2;25471:9;25467:18;25459:26;;25531:9;25525:4;25521:20;25517:1;25506:9;25502:17;25495:47;25559:131;25685:4;25559:131;:::i;:::-;25551:139;;25278:419;;;:::o;25703:222::-;25796:4;25834:2;25823:9;25819:18;25811:26;;25847:71;25915:1;25904:9;25900:17;25891:6;25847:71;:::i;:::-;25703:222;;;;:::o;25931:129::-;25965:6;25992:20;;:::i;:::-;25982:30;;26021:33;26049:4;26041:6;26021:33;:::i;:::-;25931:129;;;:::o;26066:75::-;26099:6;26132:2;26126:9;26116:19;;26066:75;:::o;26147:307::-;26208:4;26298:18;26290:6;26287:30;26284:56;;;26320:18;;:::i;:::-;26284:56;26358:29;26380:6;26358:29;:::i;:::-;26350:37;;26442:4;26436;26432:15;26424:23;;26147:307;;;:::o;26460:308::-;26522:4;26612:18;26604:6;26601:30;26598:56;;;26634:18;;:::i;:::-;26598:56;26672:29;26694:6;26672:29;:::i;:::-;26664:37;;26756:4;26750;26746:15;26738:23;;26460:308;;;:::o;26774:141::-;26823:4;26846:3;26838:11;;26869:3;26866:1;26859:14;26903:4;26900:1;26890:18;26882:26;;26774:141;;;:::o;26921:98::-;26972:6;27006:5;27000:12;26990:22;;26921:98;;;:::o;27025:99::-;27077:6;27111:5;27105:12;27095:22;;27025:99;;;:::o;27130:168::-;27213:11;27247:6;27242:3;27235:19;27287:4;27282:3;27278:14;27263:29;;27130:168;;;;:::o;27304:169::-;27388:11;27422:6;27417:3;27410:19;27462:4;27457:3;27453:14;27438:29;;27304:169;;;;:::o;27479:148::-;27581:11;27618:3;27603:18;;27479:148;;;;:::o;27633:305::-;27673:3;27692:20;27710:1;27692:20;:::i;:::-;27687:25;;27726:20;27744:1;27726:20;:::i;:::-;27721:25;;27880:1;27812:66;27808:74;27805:1;27802:81;27799:107;;;27886:18;;:::i;:::-;27799:107;27930:1;27927;27923:9;27916:16;;27633:305;;;;:::o;27944:185::-;27984:1;28001:20;28019:1;28001:20;:::i;:::-;27996:25;;28035:20;28053:1;28035:20;:::i;:::-;28030:25;;28074:1;28064:35;;28079:18;;:::i;:::-;28064:35;28121:1;28118;28114:9;28109:14;;27944:185;;;;:::o;28135:348::-;28175:7;28198:20;28216:1;28198:20;:::i;:::-;28193:25;;28232:20;28250:1;28232:20;:::i;:::-;28227:25;;28420:1;28352:66;28348:74;28345:1;28342:81;28337:1;28330:9;28323:17;28319:105;28316:131;;;28427:18;;:::i;:::-;28316:131;28475:1;28472;28468:9;28457:20;;28135:348;;;;:::o;28489:191::-;28529:4;28549:20;28567:1;28549:20;:::i;:::-;28544:25;;28583:20;28601:1;28583:20;:::i;:::-;28578:25;;28622:1;28619;28616:8;28613:34;;;28627:18;;:::i;:::-;28613:34;28672:1;28669;28665:9;28657:17;;28489:191;;;;:::o;28686:96::-;28723:7;28752:24;28770:5;28752:24;:::i;:::-;28741:35;;28686:96;;;:::o;28788:90::-;28822:7;28865:5;28858:13;28851:21;28840:32;;28788:90;;;:::o;28884:149::-;28920:7;28960:66;28953:5;28949:78;28938:89;;28884:149;;;:::o;29039:126::-;29076:7;29116:42;29109:5;29105:54;29094:65;;29039:126;;;:::o;29171:77::-;29208:7;29237:5;29226:16;;29171:77;;;:::o;29254:154::-;29338:6;29333:3;29328;29315:30;29400:1;29391:6;29386:3;29382:16;29375:27;29254:154;;;:::o;29414:307::-;29482:1;29492:113;29506:6;29503:1;29500:13;29492:113;;;29591:1;29586:3;29582:11;29576:18;29572:1;29567:3;29563:11;29556:39;29528:2;29525:1;29521:10;29516:15;;29492:113;;;29623:6;29620:1;29617:13;29614:101;;;29703:1;29694:6;29689:3;29685:16;29678:27;29614:101;29463:258;29414:307;;;:::o;29727:320::-;29771:6;29808:1;29802:4;29798:12;29788:22;;29855:1;29849:4;29845:12;29876:18;29866:81;;29932:4;29924:6;29920:17;29910:27;;29866:81;29994:2;29986:6;29983:14;29963:18;29960:38;29957:84;;;30013:18;;:::i;:::-;29957:84;29778:269;29727:320;;;:::o;30053:281::-;30136:27;30158:4;30136:27;:::i;:::-;30128:6;30124:40;30266:6;30254:10;30251:22;30230:18;30218:10;30215:34;30212:62;30209:88;;;30277:18;;:::i;:::-;30209:88;30317:10;30313:2;30306:22;30096:238;30053:281;;:::o;30340:233::-;30379:3;30402:24;30420:5;30402:24;:::i;:::-;30393:33;;30448:66;30441:5;30438:77;30435:103;;;30518:18;;:::i;:::-;30435:103;30565:1;30558:5;30554:13;30547:20;;30340:233;;;:::o;30579:176::-;30611:1;30628:20;30646:1;30628:20;:::i;:::-;30623:25;;30662:20;30680:1;30662:20;:::i;:::-;30657:25;;30701:1;30691:35;;30706:18;;:::i;:::-;30691:35;30747:1;30744;30740:9;30735:14;;30579:176;;;;:::o;30761:180::-;30809:77;30806:1;30799:88;30906:4;30903:1;30896:15;30930:4;30927:1;30920:15;30947:180;30995:77;30992:1;30985:88;31092:4;31089:1;31082:15;31116:4;31113:1;31106:15;31133:180;31181:77;31178:1;31171:88;31278:4;31275:1;31268:15;31302:4;31299:1;31292:15;31319:180;31367:77;31364:1;31357:88;31464:4;31461:1;31454:15;31488:4;31485:1;31478:15;31505:180;31553:77;31550:1;31543:88;31650:4;31647:1;31640:15;31674:4;31671:1;31664:15;31691:117;31800:1;31797;31790:12;31814:117;31923:1;31920;31913:12;31937:117;32046:1;32043;32036:12;32060:117;32169:1;32166;32159:12;32183:102;32224:6;32275:2;32271:7;32266:2;32259:5;32255:14;32251:28;32241:38;;32183:102;;;:::o;32291:237::-;32431:34;32427:1;32419:6;32415:14;32408:58;32500:20;32495:2;32487:6;32483:15;32476:45;32291:237;:::o;32534:225::-;32674:34;32670:1;32662:6;32658:14;32651:58;32743:8;32738:2;32730:6;32726:15;32719:33;32534:225;:::o;32765:178::-;32905:30;32901:1;32893:6;32889:14;32882:54;32765:178;:::o;32949:223::-;33089:34;33085:1;33077:6;33073:14;33066:58;33158:6;33153:2;33145:6;33141:15;33134:31;32949:223;:::o;33178:175::-;33318:27;33314:1;33306:6;33302:14;33295:51;33178:175;:::o;33359:159::-;33499:11;33495:1;33487:6;33483:14;33476:35;33359:159;:::o;33524:231::-;33664:34;33660:1;33652:6;33648:14;33641:58;33733:14;33728:2;33720:6;33716:15;33709:39;33524:231;:::o;33761:243::-;33901:34;33897:1;33889:6;33885:14;33878:58;33970:26;33965:2;33957:6;33953:15;33946:51;33761:243;:::o;34010:229::-;34150:34;34146:1;34138:6;34134:14;34127:58;34219:12;34214:2;34206:6;34202:15;34195:37;34010:229;:::o;34245:228::-;34385:34;34381:1;34373:6;34369:14;34362:58;34454:11;34449:2;34441:6;34437:15;34430:36;34245:228;:::o;34479:182::-;34619:34;34615:1;34607:6;34603:14;34596:58;34479:182;:::o;34667:158::-;34807:10;34803:1;34795:6;34791:14;34784:34;34667:158;:::o;34831:231::-;34971:34;34967:1;34959:6;34955:14;34948:58;35040:14;35035:2;35027:6;35023:15;35016:39;34831:231;:::o;35068:182::-;35208:34;35204:1;35196:6;35192:14;35185:58;35068:182;:::o;35256:228::-;35396:34;35392:1;35384:6;35380:14;35373:58;35465:11;35460:2;35452:6;35448:15;35441:36;35256:228;:::o;35490:167::-;35630:19;35626:1;35618:6;35614:14;35607:43;35490:167;:::o;35663:220::-;35803:34;35799:1;35791:6;35787:14;35780:58;35872:3;35867:2;35859:6;35855:15;35848:28;35663:220;:::o;35889:236::-;36029:34;36025:1;36017:6;36013:14;36006:58;36098:19;36093:2;36085:6;36081:15;36074:44;35889:236;:::o;36131:122::-;36204:24;36222:5;36204:24;:::i;:::-;36197:5;36194:35;36184:63;;36243:1;36240;36233:12;36184:63;36131:122;:::o;36259:116::-;36329:21;36344:5;36329:21;:::i;:::-;36322:5;36319:32;36309:60;;36365:1;36362;36355:12;36309:60;36259:116;:::o;36381:120::-;36453:23;36470:5;36453:23;:::i;:::-;36446:5;36443:34;36433:62;;36491:1;36488;36481:12;36433:62;36381:120;:::o;36507:122::-;36580:24;36598:5;36580:24;:::i;:::-;36573:5;36570:35;36560:63;;36619:1;36616;36609:12;36560:63;36507:122;:::o
Swarm Source
ipfs://333718a5a8e71033319f97b1801755afe650608b7c86adf261623079677c6221
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.