ERC-721
Overview
Max Total Supply
5
Holders
3
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Bullrun
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-04-26 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } 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; } } 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; } pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } 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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } 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; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } 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); } 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); } pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } 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 { 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}. */ /** * @dev See {IERC721Metadata-symbol}. */ /** * @dev See {IERC721Metadata-tokenURI}. */ /** * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden * in child contracts. */ /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual { _mint(to, tokenId); require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { // solhint-disable-next-line no-inline-assembly 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` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { } } 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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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. */ } pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } pragma solidity ^0.8.0; contract Bullrun is ERC721Enumerable, Ownable { using Strings for uint256; string _baseTokenURI; uint256 private _reserved = 42; uint256 private _price = 0.1 ether; // withdraw addresses address t1 = 0x45f1FAbF4a349d3DC525c4CB26E024Be76f8dDaC; // 420 Bullruns in total constructor() ERC721("Bullrun", "BULL") { // team gets the first 2 Bullruns _safeMint( t1, 0); _safeMint( t1, 1); } function mint(uint256 num) public payable { uint256 supply = totalSupply(); require( num < 30, "You can mint a maximum of 30 Bullruns" ); require( supply + num < 420 - _reserved, "Exceeds maximum Bullrun supply" ); require( msg.value >= _price * num, "Ether sent is not correct" ); for(uint256 i; i < num; i++){ _safeMint( msg.sender, supply + i ); } } function giveAway(address _to, uint256 _amount) external onlyOwner() { require( _amount <= _reserved, "Exceeds reserved Bullrun supply" ); uint256 supply = totalSupply(); for(uint256 i; i < _amount; i++){ _safeMint( _to, supply + i ); } _reserved -= _amount; } function withdrawAll() public payable onlyOwner { uint256 _each = address(this).balance; require(payable(t1).send(_each)); } fallback() external payable { } receive() external payable { } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"giveAway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","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":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052602a600c5567016345785d8a0000600d557345f1fabf4a349d3dc525c4cb26e024be76f8ddac600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200007757600080fd5b506040518060400160405280600781526020017f42756c6c72756e000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f42554c4c000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000fc92919062000c29565b5080600190805190602001906200011592919062000c29565b50505060006200012a6200023960201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620001fe600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006200024160201b60201c565b62000233600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200024160201b60201c565b62001274565b600033905090565b620002638282604051806020016040528060008152506200026760201b60201c565b5050565b620002798383620002d560201b60201c565b6200028e6000848484620004bb60201b60201c565b620002d0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002c79062000e75565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000348576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200033f9062000edb565b60405180910390fd5b62000359816200067560201b60201c565b156200039c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003939062000e97565b60405180910390fd5b620003b060008383620006e160201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000402919062000f2a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620004e98473ffffffffffffffffffffffffffffffffffffffff166200082860201b62000f231760201c565b1562000668578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200051b6200023960201b60201c565b8786866040518563ffffffff1660e01b81526004016200053f949392919062000e21565b602060405180830381600087803b1580156200055a57600080fd5b505af19250505080156200058e57506040513d601f19601f820116820180604052508101906200058b919062000cf0565b60015b62000617573d8060008114620005c1576040519150601f19603f3d011682016040523d82523d6000602084013e620005c6565b606091505b506000815114156200060f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006069062000e75565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506200066d565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b620006f98383836200083b60201b62000f361760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620007465762000740816200084060201b60201c565b6200078e565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146200078d576200078c83826200088960201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620007db57620007d58162000a0660201b60201c565b62000823565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620008225762000821828262000ae260201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001620008a38462000b6e60201b620008941760201c565b620008af919062000f87565b905060006007600084815260200190815260200160002054905081811462000995576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000a1c919062000f87565b905060006009600084815260200190815260200160002054905060006008838154811062000a4f5762000a4e62001125565b5b90600052602060002001549050806008838154811062000a745762000a7362001125565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000ac65762000ac5620010f6565b5b6001900381819060005260206000200160009055905550505050565b600062000afa8362000b6e60201b620008941760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000be2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bd99062000eb9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000c379062001062565b90600052602060002090601f01602090048101928262000c5b576000855562000ca7565b82601f1062000c7657805160ff191683800117855562000ca7565b8280016001018555821562000ca7579182015b8281111562000ca657825182559160200191906001019062000c89565b5b50905062000cb6919062000cba565b5090565b5b8082111562000cd557600081600090555060010162000cbb565b5090565b60008151905062000cea816200125a565b92915050565b60006020828403121562000d095762000d0862001154565b5b600062000d198482850162000cd9565b91505092915050565b62000d2d8162000fc2565b82525050565b600062000d408262000efd565b62000d4c818562000f08565b935062000d5e8185602086016200102c565b62000d698162001159565b840191505092915050565b600062000d8360328362000f19565b915062000d90826200116a565b604082019050919050565b600062000daa601c8362000f19565b915062000db782620011b9565b602082019050919050565b600062000dd1602a8362000f19565b915062000dde82620011e2565b604082019050919050565b600062000df860208362000f19565b915062000e058262001231565b602082019050919050565b62000e1b8162001022565b82525050565b600060808201905062000e38600083018762000d22565b62000e47602083018662000d22565b62000e56604083018562000e10565b818103606083015262000e6a818462000d33565b905095945050505050565b6000602082019050818103600083015262000e908162000d74565b9050919050565b6000602082019050818103600083015262000eb28162000d9b565b9050919050565b6000602082019050818103600083015262000ed48162000dc2565b9050919050565b6000602082019050818103600083015262000ef68162000de9565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000f378262001022565b915062000f448362001022565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f7c5762000f7b62001098565b5b828201905092915050565b600062000f948262001022565b915062000fa18362001022565b92508282101562000fb75762000fb662001098565b5b828203905092915050565b600062000fcf8262001002565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200104c5780820151818401526020810190506200102f565b838111156200105c576000848401525b50505050565b600060028204905060018216806200107b57607f821691505b60208210811415620010925762001091620010c7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b620012658162000fd6565b81146200127157600080fd5b50565b612fd080620012846000396000f3fe6080604052600436106101025760003560e01c80636352211e11610095578063a0712d6811610064578063a0712d6814610354578063a22cb46514610370578063b88d4fde14610399578063ca800144146103c2578063e985e9c5146103eb57610109565b80636352211e146102a557806370a08231146102e2578063853828b61461031f5780638da5cb5b1461032957610109565b806323b872dd116100d157806323b872dd146101d95780632f745c591461020257806342842e0e1461023f5780634f6ccce71461026857610109565b806301ffc9a71461010b578063081812fc14610148578063095ea7b31461018557806318160ddd146101ae57610109565b3661010957005b005b34801561011757600080fd5b50610132600480360381019061012d9190611fde565b610428565b60405161013f91906123ee565b60405180910390f35b34801561015457600080fd5b5061016f600480360381019061016a9190612038565b6104a2565b60405161017c9190612387565b60405180910390f35b34801561019157600080fd5b506101ac60048036038101906101a79190611f9e565b610527565b005b3480156101ba57600080fd5b506101c361063f565b6040516101d09190612689565b60405180910390f35b3480156101e557600080fd5b5061020060048036038101906101fb9190611e88565b61064c565b005b34801561020e57600080fd5b5061022960048036038101906102249190611f9e565b6106ac565b6040516102369190612689565b60405180910390f35b34801561024b57600080fd5b5061026660048036038101906102619190611e88565b610751565b005b34801561027457600080fd5b5061028f600480360381019061028a9190612038565b610771565b60405161029c9190612689565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c79190612038565b6107e2565b6040516102d99190612387565b60405180910390f35b3480156102ee57600080fd5b5061030960048036038101906103049190611e1b565b610894565b6040516103169190612689565b60405180910390f35b61032761094c565b005b34801561033557600080fd5b5061033e610a30565b60405161034b9190612387565b60405180910390f35b61036e60048036038101906103699190612038565b610a5a565b005b34801561037c57600080fd5b5061039760048036038101906103929190611f5e565b610b8d565b005b3480156103a557600080fd5b506103c060048036038101906103bb9190611edb565b610d0e565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190611f9e565b610d70565b005b3480156103f757600080fd5b50610412600480360381019061040d9190611e48565b610e8f565b60405161041f91906123ee565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061049b575061049a82610f3b565b5b9050919050565b60006104ad8261101d565b6104ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e390612569565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610532826107e2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059a906125c9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166105c2611089565b73ffffffffffffffffffffffffffffffffffffffff1614806105f157506105f0816105eb611089565b610e8f565b5b610630576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610627906124c9565b60405180910390fd5b61063a8383611091565b505050565b6000600880549050905090565b61065d610657611089565b8261114a565b61069c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069390612629565b60405180910390fd5b6106a7838383611228565b505050565b60006106b783610894565b82106106f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ef90612409565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61076c83838360405180602001604052806000815250610d0e565b505050565b600061077b61063f565b82106107bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b390612649565b60405180910390fd5b600882815481106107d0576107cf612999565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561088b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088290612509565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fc906124e9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610954611089565b73ffffffffffffffffffffffffffffffffffffffff16610972610a30565b73ffffffffffffffffffffffffffffffffffffffff16146109c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bf90612589565b60405180910390fd5b6000479050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050610a2d57600080fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610a6461063f565b9050601e8210610aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa090612549565b60405180910390fd5b600c546101a4610ab991906127d7565b8282610ac59190612727565b10610b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afc90612609565b60405180910390fd5b81600d54610b13919061277d565b341015610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c906125e9565b60405180910390fd5b60005b82811015610b8857610b75338284610b709190612727565b611484565b8080610b80906128f2565b915050610b58565b505050565b610b95611089565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfa90612489565b60405180910390fd5b8060056000610c10611089565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610cbd611089565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610d0291906123ee565b60405180910390a35050565b610d1f610d19611089565b8361114a565b610d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5590612629565b60405180910390fd5b610d6a848484846114a2565b50505050565b610d78611089565b73ffffffffffffffffffffffffffffffffffffffff16610d96610a30565b73ffffffffffffffffffffffffffffffffffffffff1614610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de390612589565b60405180910390fd5b600c54811115610e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2890612669565b60405180910390fd5b6000610e3b61063f565b905060005b82811015610e7057610e5d848284610e589190612727565b611484565b8080610e68906128f2565b915050610e40565b5081600c6000828254610e8391906127d7565b92505081905550505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061100657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806110165750611015826114fe565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611104836107e2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006111558261101d565b611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118b906124a9565b60405180910390fd5b600061119f836107e2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061120e57508373ffffffffffffffffffffffffffffffffffffffff166111f6846104a2565b73ffffffffffffffffffffffffffffffffffffffff16145b8061121f575061121e8185610e8f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611248826107e2565b73ffffffffffffffffffffffffffffffffffffffff161461129e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611295906125a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561130e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130590612469565b60405180910390fd5b611319838383611568565b611324600082611091565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461137491906127d7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113cb9190612727565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61149e82826040518060200160405280600081525061167c565b5050565b6114ad848484611228565b6114b9848484846116d7565b6114f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ef90612429565b60405180910390fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611573838383610f36565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115b6576115b18161186e565b6115f5565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146115f4576115f383826118b7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116385761163381611a24565b611677565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611676576116758282611af5565b5b5b505050565b6116868383611b74565b61169360008484846116d7565b6116d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c990612429565b60405180910390fd5b505050565b60006116f88473ffffffffffffffffffffffffffffffffffffffff16610f23565b15611861578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611721611089565b8786866040518563ffffffff1660e01b815260040161174394939291906123a2565b602060405180830381600087803b15801561175d57600080fd5b505af192505050801561178e57506040513d601f19601f8201168201806040525081019061178b919061200b565b60015b611811573d80600081146117be576040519150601f19603f3d011682016040523d82523d6000602084013e6117c3565b606091505b50600081511415611809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180090612429565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611866565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016118c484610894565b6118ce91906127d7565b90506000600760008481526020019081526020016000205490508181146119b3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050611a3891906127d7565b9050600060096000848152602001908152602001600020549050600060088381548110611a6857611a67612999565b5b906000526020600020015490508060088381548110611a8a57611a89612999565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480611ad957611ad861296a565b5b6001900381819060005260206000200160009055905550505050565b6000611b0083610894565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90612529565b60405180910390fd5b611bed8161101d565b15611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2490612449565b60405180910390fd5b611c3960008383611568565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c899190612727565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000611d55611d50846126c9565b6126a4565b905082815260208101848484011115611d7157611d706129fc565b5b611d7c84828561287f565b509392505050565b600081359050611d9381612f3e565b92915050565b600081359050611da881612f55565b92915050565b600081359050611dbd81612f6c565b92915050565b600081519050611dd281612f6c565b92915050565b600082601f830112611ded57611dec6129f7565b5b8135611dfd848260208601611d42565b91505092915050565b600081359050611e1581612f83565b92915050565b600060208284031215611e3157611e30612a06565b5b6000611e3f84828501611d84565b91505092915050565b60008060408385031215611e5f57611e5e612a06565b5b6000611e6d85828601611d84565b9250506020611e7e85828601611d84565b9150509250929050565b600080600060608486031215611ea157611ea0612a06565b5b6000611eaf86828701611d84565b9350506020611ec086828701611d84565b9250506040611ed186828701611e06565b9150509250925092565b60008060008060808587031215611ef557611ef4612a06565b5b6000611f0387828801611d84565b9450506020611f1487828801611d84565b9350506040611f2587828801611e06565b925050606085013567ffffffffffffffff811115611f4657611f45612a01565b5b611f5287828801611dd8565b91505092959194509250565b60008060408385031215611f7557611f74612a06565b5b6000611f8385828601611d84565b9250506020611f9485828601611d99565b9150509250929050565b60008060408385031215611fb557611fb4612a06565b5b6000611fc385828601611d84565b9250506020611fd485828601611e06565b9150509250929050565b600060208284031215611ff457611ff3612a06565b5b600061200284828501611dae565b91505092915050565b60006020828403121561202157612020612a06565b5b600061202f84828501611dc3565b91505092915050565b60006020828403121561204e5761204d612a06565b5b600061205c84828501611e06565b91505092915050565b61206e8161280b565b82525050565b61207d8161281d565b82525050565b600061208e826126fa565b6120988185612705565b93506120a881856020860161288e565b6120b181612a0b565b840191505092915050565b60006120c9602b83612716565b91506120d482612a1c565b604082019050919050565b60006120ec603283612716565b91506120f782612a6b565b604082019050919050565b600061210f601c83612716565b915061211a82612aba565b602082019050919050565b6000612132602483612716565b915061213d82612ae3565b604082019050919050565b6000612155601983612716565b915061216082612b32565b602082019050919050565b6000612178602c83612716565b915061218382612b5b565b604082019050919050565b600061219b603883612716565b91506121a682612baa565b604082019050919050565b60006121be602a83612716565b91506121c982612bf9565b604082019050919050565b60006121e1602983612716565b91506121ec82612c48565b604082019050919050565b6000612204602083612716565b915061220f82612c97565b602082019050919050565b6000612227602583612716565b915061223282612cc0565b604082019050919050565b600061224a602c83612716565b915061225582612d0f565b604082019050919050565b600061226d602083612716565b915061227882612d5e565b602082019050919050565b6000612290602983612716565b915061229b82612d87565b604082019050919050565b60006122b3602183612716565b91506122be82612dd6565b604082019050919050565b60006122d6601983612716565b91506122e182612e25565b602082019050919050565b60006122f9601e83612716565b915061230482612e4e565b602082019050919050565b600061231c603183612716565b915061232782612e77565b604082019050919050565b600061233f602c83612716565b915061234a82612ec6565b604082019050919050565b6000612362601f83612716565b915061236d82612f15565b602082019050919050565b61238181612875565b82525050565b600060208201905061239c6000830184612065565b92915050565b60006080820190506123b76000830187612065565b6123c46020830186612065565b6123d16040830185612378565b81810360608301526123e38184612083565b905095945050505050565b60006020820190506124036000830184612074565b92915050565b60006020820190508181036000830152612422816120bc565b9050919050565b60006020820190508181036000830152612442816120df565b9050919050565b6000602082019050818103600083015261246281612102565b9050919050565b6000602082019050818103600083015261248281612125565b9050919050565b600060208201905081810360008301526124a281612148565b9050919050565b600060208201905081810360008301526124c28161216b565b9050919050565b600060208201905081810360008301526124e28161218e565b9050919050565b60006020820190508181036000830152612502816121b1565b9050919050565b60006020820190508181036000830152612522816121d4565b9050919050565b60006020820190508181036000830152612542816121f7565b9050919050565b600060208201905081810360008301526125628161221a565b9050919050565b600060208201905081810360008301526125828161223d565b9050919050565b600060208201905081810360008301526125a281612260565b9050919050565b600060208201905081810360008301526125c281612283565b9050919050565b600060208201905081810360008301526125e2816122a6565b9050919050565b60006020820190508181036000830152612602816122c9565b9050919050565b60006020820190508181036000830152612622816122ec565b9050919050565b600060208201905081810360008301526126428161230f565b9050919050565b6000602082019050818103600083015261266281612332565b9050919050565b6000602082019050818103600083015261268281612355565b9050919050565b600060208201905061269e6000830184612378565b92915050565b60006126ae6126bf565b90506126ba82826128c1565b919050565b6000604051905090565b600067ffffffffffffffff8211156126e4576126e36129c8565b5b6126ed82612a0b565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061273282612875565b915061273d83612875565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127725761277161293b565b5b828201905092915050565b600061278882612875565b915061279383612875565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156127cc576127cb61293b565b5b828202905092915050565b60006127e282612875565b91506127ed83612875565b925082821015612800576127ff61293b565b5b828203905092915050565b600061281682612855565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156128ac578082015181840152602081019050612891565b838111156128bb576000848401525b50505050565b6128ca82612a0b565b810181811067ffffffffffffffff821117156128e9576128e86129c8565b5b80604052505050565b60006128fd82612875565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156129305761292f61293b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f596f752063616e206d696e742061206d6178696d756d206f662033302042756c60008201527f6c72756e73000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45746865722073656e74206973206e6f7420636f727265637400000000000000600082015250565b7f45786365656473206d6178696d756d2042756c6c72756e20737570706c790000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f457863656564732072657365727665642042756c6c72756e20737570706c7900600082015250565b612f478161280b565b8114612f5257600080fd5b50565b612f5e8161281d565b8114612f6957600080fd5b50565b612f7581612829565b8114612f8057600080fd5b50565b612f8c81612875565b8114612f9757600080fd5b5056fea26469706673582212204c82826af2629e712c89810df609d832791fe8e55be189333e1200b3ba3944f464736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101025760003560e01c80636352211e11610095578063a0712d6811610064578063a0712d6814610354578063a22cb46514610370578063b88d4fde14610399578063ca800144146103c2578063e985e9c5146103eb57610109565b80636352211e146102a557806370a08231146102e2578063853828b61461031f5780638da5cb5b1461032957610109565b806323b872dd116100d157806323b872dd146101d95780632f745c591461020257806342842e0e1461023f5780634f6ccce71461026857610109565b806301ffc9a71461010b578063081812fc14610148578063095ea7b31461018557806318160ddd146101ae57610109565b3661010957005b005b34801561011757600080fd5b50610132600480360381019061012d9190611fde565b610428565b60405161013f91906123ee565b60405180910390f35b34801561015457600080fd5b5061016f600480360381019061016a9190612038565b6104a2565b60405161017c9190612387565b60405180910390f35b34801561019157600080fd5b506101ac60048036038101906101a79190611f9e565b610527565b005b3480156101ba57600080fd5b506101c361063f565b6040516101d09190612689565b60405180910390f35b3480156101e557600080fd5b5061020060048036038101906101fb9190611e88565b61064c565b005b34801561020e57600080fd5b5061022960048036038101906102249190611f9e565b6106ac565b6040516102369190612689565b60405180910390f35b34801561024b57600080fd5b5061026660048036038101906102619190611e88565b610751565b005b34801561027457600080fd5b5061028f600480360381019061028a9190612038565b610771565b60405161029c9190612689565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c79190612038565b6107e2565b6040516102d99190612387565b60405180910390f35b3480156102ee57600080fd5b5061030960048036038101906103049190611e1b565b610894565b6040516103169190612689565b60405180910390f35b61032761094c565b005b34801561033557600080fd5b5061033e610a30565b60405161034b9190612387565b60405180910390f35b61036e60048036038101906103699190612038565b610a5a565b005b34801561037c57600080fd5b5061039760048036038101906103929190611f5e565b610b8d565b005b3480156103a557600080fd5b506103c060048036038101906103bb9190611edb565b610d0e565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190611f9e565b610d70565b005b3480156103f757600080fd5b50610412600480360381019061040d9190611e48565b610e8f565b60405161041f91906123ee565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061049b575061049a82610f3b565b5b9050919050565b60006104ad8261101d565b6104ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e390612569565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610532826107e2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059a906125c9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166105c2611089565b73ffffffffffffffffffffffffffffffffffffffff1614806105f157506105f0816105eb611089565b610e8f565b5b610630576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610627906124c9565b60405180910390fd5b61063a8383611091565b505050565b6000600880549050905090565b61065d610657611089565b8261114a565b61069c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069390612629565b60405180910390fd5b6106a7838383611228565b505050565b60006106b783610894565b82106106f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ef90612409565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61076c83838360405180602001604052806000815250610d0e565b505050565b600061077b61063f565b82106107bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b390612649565b60405180910390fd5b600882815481106107d0576107cf612999565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561088b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088290612509565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fc906124e9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610954611089565b73ffffffffffffffffffffffffffffffffffffffff16610972610a30565b73ffffffffffffffffffffffffffffffffffffffff16146109c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bf90612589565b60405180910390fd5b6000479050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050610a2d57600080fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610a6461063f565b9050601e8210610aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa090612549565b60405180910390fd5b600c546101a4610ab991906127d7565b8282610ac59190612727565b10610b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afc90612609565b60405180910390fd5b81600d54610b13919061277d565b341015610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c906125e9565b60405180910390fd5b60005b82811015610b8857610b75338284610b709190612727565b611484565b8080610b80906128f2565b915050610b58565b505050565b610b95611089565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfa90612489565b60405180910390fd5b8060056000610c10611089565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610cbd611089565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610d0291906123ee565b60405180910390a35050565b610d1f610d19611089565b8361114a565b610d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5590612629565b60405180910390fd5b610d6a848484846114a2565b50505050565b610d78611089565b73ffffffffffffffffffffffffffffffffffffffff16610d96610a30565b73ffffffffffffffffffffffffffffffffffffffff1614610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de390612589565b60405180910390fd5b600c54811115610e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2890612669565b60405180910390fd5b6000610e3b61063f565b905060005b82811015610e7057610e5d848284610e589190612727565b611484565b8080610e68906128f2565b915050610e40565b5081600c6000828254610e8391906127d7565b92505081905550505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061100657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806110165750611015826114fe565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611104836107e2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006111558261101d565b611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118b906124a9565b60405180910390fd5b600061119f836107e2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061120e57508373ffffffffffffffffffffffffffffffffffffffff166111f6846104a2565b73ffffffffffffffffffffffffffffffffffffffff16145b8061121f575061121e8185610e8f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611248826107e2565b73ffffffffffffffffffffffffffffffffffffffff161461129e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611295906125a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561130e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130590612469565b60405180910390fd5b611319838383611568565b611324600082611091565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461137491906127d7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113cb9190612727565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61149e82826040518060200160405280600081525061167c565b5050565b6114ad848484611228565b6114b9848484846116d7565b6114f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ef90612429565b60405180910390fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611573838383610f36565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115b6576115b18161186e565b6115f5565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146115f4576115f383826118b7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116385761163381611a24565b611677565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611676576116758282611af5565b5b5b505050565b6116868383611b74565b61169360008484846116d7565b6116d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c990612429565b60405180910390fd5b505050565b60006116f88473ffffffffffffffffffffffffffffffffffffffff16610f23565b15611861578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611721611089565b8786866040518563ffffffff1660e01b815260040161174394939291906123a2565b602060405180830381600087803b15801561175d57600080fd5b505af192505050801561178e57506040513d601f19601f8201168201806040525081019061178b919061200b565b60015b611811573d80600081146117be576040519150601f19603f3d011682016040523d82523d6000602084013e6117c3565b606091505b50600081511415611809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180090612429565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611866565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016118c484610894565b6118ce91906127d7565b90506000600760008481526020019081526020016000205490508181146119b3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050611a3891906127d7565b9050600060096000848152602001908152602001600020549050600060088381548110611a6857611a67612999565b5b906000526020600020015490508060088381548110611a8a57611a89612999565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480611ad957611ad861296a565b5b6001900381819060005260206000200160009055905550505050565b6000611b0083610894565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90612529565b60405180910390fd5b611bed8161101d565b15611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2490612449565b60405180910390fd5b611c3960008383611568565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c899190612727565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000611d55611d50846126c9565b6126a4565b905082815260208101848484011115611d7157611d706129fc565b5b611d7c84828561287f565b509392505050565b600081359050611d9381612f3e565b92915050565b600081359050611da881612f55565b92915050565b600081359050611dbd81612f6c565b92915050565b600081519050611dd281612f6c565b92915050565b600082601f830112611ded57611dec6129f7565b5b8135611dfd848260208601611d42565b91505092915050565b600081359050611e1581612f83565b92915050565b600060208284031215611e3157611e30612a06565b5b6000611e3f84828501611d84565b91505092915050565b60008060408385031215611e5f57611e5e612a06565b5b6000611e6d85828601611d84565b9250506020611e7e85828601611d84565b9150509250929050565b600080600060608486031215611ea157611ea0612a06565b5b6000611eaf86828701611d84565b9350506020611ec086828701611d84565b9250506040611ed186828701611e06565b9150509250925092565b60008060008060808587031215611ef557611ef4612a06565b5b6000611f0387828801611d84565b9450506020611f1487828801611d84565b9350506040611f2587828801611e06565b925050606085013567ffffffffffffffff811115611f4657611f45612a01565b5b611f5287828801611dd8565b91505092959194509250565b60008060408385031215611f7557611f74612a06565b5b6000611f8385828601611d84565b9250506020611f9485828601611d99565b9150509250929050565b60008060408385031215611fb557611fb4612a06565b5b6000611fc385828601611d84565b9250506020611fd485828601611e06565b9150509250929050565b600060208284031215611ff457611ff3612a06565b5b600061200284828501611dae565b91505092915050565b60006020828403121561202157612020612a06565b5b600061202f84828501611dc3565b91505092915050565b60006020828403121561204e5761204d612a06565b5b600061205c84828501611e06565b91505092915050565b61206e8161280b565b82525050565b61207d8161281d565b82525050565b600061208e826126fa565b6120988185612705565b93506120a881856020860161288e565b6120b181612a0b565b840191505092915050565b60006120c9602b83612716565b91506120d482612a1c565b604082019050919050565b60006120ec603283612716565b91506120f782612a6b565b604082019050919050565b600061210f601c83612716565b915061211a82612aba565b602082019050919050565b6000612132602483612716565b915061213d82612ae3565b604082019050919050565b6000612155601983612716565b915061216082612b32565b602082019050919050565b6000612178602c83612716565b915061218382612b5b565b604082019050919050565b600061219b603883612716565b91506121a682612baa565b604082019050919050565b60006121be602a83612716565b91506121c982612bf9565b604082019050919050565b60006121e1602983612716565b91506121ec82612c48565b604082019050919050565b6000612204602083612716565b915061220f82612c97565b602082019050919050565b6000612227602583612716565b915061223282612cc0565b604082019050919050565b600061224a602c83612716565b915061225582612d0f565b604082019050919050565b600061226d602083612716565b915061227882612d5e565b602082019050919050565b6000612290602983612716565b915061229b82612d87565b604082019050919050565b60006122b3602183612716565b91506122be82612dd6565b604082019050919050565b60006122d6601983612716565b91506122e182612e25565b602082019050919050565b60006122f9601e83612716565b915061230482612e4e565b602082019050919050565b600061231c603183612716565b915061232782612e77565b604082019050919050565b600061233f602c83612716565b915061234a82612ec6565b604082019050919050565b6000612362601f83612716565b915061236d82612f15565b602082019050919050565b61238181612875565b82525050565b600060208201905061239c6000830184612065565b92915050565b60006080820190506123b76000830187612065565b6123c46020830186612065565b6123d16040830185612378565b81810360608301526123e38184612083565b905095945050505050565b60006020820190506124036000830184612074565b92915050565b60006020820190508181036000830152612422816120bc565b9050919050565b60006020820190508181036000830152612442816120df565b9050919050565b6000602082019050818103600083015261246281612102565b9050919050565b6000602082019050818103600083015261248281612125565b9050919050565b600060208201905081810360008301526124a281612148565b9050919050565b600060208201905081810360008301526124c28161216b565b9050919050565b600060208201905081810360008301526124e28161218e565b9050919050565b60006020820190508181036000830152612502816121b1565b9050919050565b60006020820190508181036000830152612522816121d4565b9050919050565b60006020820190508181036000830152612542816121f7565b9050919050565b600060208201905081810360008301526125628161221a565b9050919050565b600060208201905081810360008301526125828161223d565b9050919050565b600060208201905081810360008301526125a281612260565b9050919050565b600060208201905081810360008301526125c281612283565b9050919050565b600060208201905081810360008301526125e2816122a6565b9050919050565b60006020820190508181036000830152612602816122c9565b9050919050565b60006020820190508181036000830152612622816122ec565b9050919050565b600060208201905081810360008301526126428161230f565b9050919050565b6000602082019050818103600083015261266281612332565b9050919050565b6000602082019050818103600083015261268281612355565b9050919050565b600060208201905061269e6000830184612378565b92915050565b60006126ae6126bf565b90506126ba82826128c1565b919050565b6000604051905090565b600067ffffffffffffffff8211156126e4576126e36129c8565b5b6126ed82612a0b565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061273282612875565b915061273d83612875565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127725761277161293b565b5b828201905092915050565b600061278882612875565b915061279383612875565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156127cc576127cb61293b565b5b828202905092915050565b60006127e282612875565b91506127ed83612875565b925082821015612800576127ff61293b565b5b828203905092915050565b600061281682612855565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156128ac578082015181840152602081019050612891565b838111156128bb576000848401525b50505050565b6128ca82612a0b565b810181811067ffffffffffffffff821117156128e9576128e86129c8565b5b80604052505050565b60006128fd82612875565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156129305761292f61293b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f596f752063616e206d696e742061206d6178696d756d206f662033302042756c60008201527f6c72756e73000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45746865722073656e74206973206e6f7420636f727265637400000000000000600082015250565b7f45786365656473206d6178696d756d2042756c6c72756e20737570706c790000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f457863656564732072657365727665642042756c6c72756e20737570706c7900600082015250565b612f478161280b565b8114612f5257600080fd5b50565b612f5e8161281d565b8114612f6957600080fd5b50565b612f7581612829565b8114612f8057600080fd5b50565b612f8c81612875565b8114612f9757600080fd5b5056fea26469706673582212204c82826af2629e712c89810df609d832791fe8e55be189333e1200b3ba3944f464736f6c63430008070033
Deployed Bytecode Sourcemap
40797:1534:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34643:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22698:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22235:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35296:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23588:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34964:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23964:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35486:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21601:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21331:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42096:147;;;:::i;:::-;;33145:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41275:474;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22991:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24186:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41761:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23357:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34643:237;34745:4;34784:35;34769:50;;;:11;:50;;;;:103;;;;34836:36;34860:11;34836:23;:36::i;:::-;34769:103;34762:110;;34643:237;;;:::o;22698:221::-;22774:7;22802:16;22810:7;22802;:16::i;:::-;22794:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22887:15;:24;22903:7;22887:24;;;;;;;;;;;;;;;;;;;;;22880:31;;22698:221;;;:::o;22235:397::-;22316:13;22332:23;22347:7;22332:14;:23::i;:::-;22316:39;;22380:5;22374:11;;:2;:11;;;;22366:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22460:5;22444:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22469:37;22486:5;22493:12;:10;:12::i;:::-;22469:16;:37::i;:::-;22444:62;22436:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;22603:21;22612:2;22616:7;22603:8;:21::i;:::-;22305:327;22235:397;;:::o;35296:113::-;35357:7;35384:10;:17;;;;35377:24;;35296:113;:::o;23588:305::-;23749:41;23768:12;:10;:12::i;:::-;23782:7;23749:18;:41::i;:::-;23741:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23857:28;23867:4;23873:2;23877:7;23857:9;:28::i;:::-;23588:305;;;:::o;34964:256::-;35061:7;35097:23;35114:5;35097:16;:23::i;:::-;35089:5;:31;35081:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35186:12;:19;35199:5;35186:19;;;;;;;;;;;;;;;:26;35206:5;35186:26;;;;;;;;;;;;35179:33;;34964:256;;;;:::o;23964:151::-;24068:39;24085:4;24091:2;24095:7;24068:39;;;;;;;;;;;;:16;:39::i;:::-;23964:151;;;:::o;35486:233::-;35561:7;35597:30;:28;:30::i;:::-;35589:5;:38;35581:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35694:10;35705:5;35694:17;;;;;;;;:::i;:::-;;;;;;;;;;35687:24;;35486:233;;;:::o;21601:239::-;21673:7;21693:13;21709:7;:16;21717:7;21709:16;;;;;;;;;;;;;;;;;;;;;21693:32;;21761:1;21744:19;;:5;:19;;;;21736:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21827:5;21820:12;;;21601:239;;;:::o;21331:208::-;21403:7;21448:1;21431:19;;:5;:19;;;;21423:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21515:9;:16;21525:5;21515:16;;;;;;;;;;;;;;;;21508:23;;21331:208;;;:::o;42096:147::-;33376:12;:10;:12::i;:::-;33365:23;;:7;:5;:7::i;:::-;:23;;;33357:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42155:13:::1;42171:21;42155:37;;42219:2;;;;;;;;;;;42211:16;;:23;42228:5;42211:23;;;;;;;;;;;;;;;;;;;;;;;42203:32;;;::::0;::::1;;42144:99;42096:147::o:0;33145:87::-;33191:7;33218:6;;;;;;;;;;;33211:13;;33145:87;:::o;41275:474::-;41328:14;41345:13;:11;:13::i;:::-;41328:30;;41384:2;41378:3;:8;41369:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;41499:9;;41493:3;:15;;;;:::i;:::-;41487:3;41478:6;:12;;;;:::i;:::-;:30;41469:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;41593:3;41584:6;;:12;;;;:::i;:::-;41571:9;:25;;41562:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;41656:9;41652:90;41671:3;41667:1;:7;41652:90;;;41695:35;41706:10;41727:1;41718:6;:10;;;;:::i;:::-;41695:9;:35::i;:::-;41676:3;;;;;:::i;:::-;;;;41652:90;;;;41317:432;41275:474;:::o;22991:295::-;23106:12;:10;:12::i;:::-;23094:24;;:8;:24;;;;23086:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23206:8;23161:18;:32;23180:12;:10;:12::i;:::-;23161:32;;;;;;;;;;;;;;;:42;23194:8;23161:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23259:8;23230:48;;23245:12;:10;:12::i;:::-;23230:48;;;23269:8;23230:48;;;;;;:::i;:::-;;;;;;;;22991:295;;:::o;24186:285::-;24318:41;24337:12;:10;:12::i;:::-;24351:7;24318:18;:41::i;:::-;24310:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24424:39;24438:4;24444:2;24448:7;24457:5;24424:13;:39::i;:::-;24186:285;;;;:::o;41761:327::-;33376:12;:10;:12::i;:::-;33365:23;;:7;:5;:7::i;:::-;:23;;;33357:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41861:9:::1;;41850:7;:20;;41841:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;41920:14;41937:13;:11;:13::i;:::-;41920:30;;41965:9;41961:87;41980:7;41976:1;:11;41961:87;;;42008:28;42019:3;42033:1;42024:6;:10;;;;:::i;:::-;42008:9;:28::i;:::-;41989:3;;;;;:::i;:::-;;;;41961:87;;;;42073:7;42060:9;;:20;;;;;;;:::i;:::-;;;;;;;;41830:258;41761:327:::0;;:::o;23357:164::-;23454:4;23478:18;:25;23497:5;23478:25;;;;;;;;;;;;;;;:35;23504:8;23478:35;;;;;;;;;;;;;;;;;;;;;;;;;23471:42;;23357:164;;;;:::o;10065:422::-;10125:4;10333:12;10444:7;10432:20;10424:28;;10478:1;10471:4;:8;10464:15;;;10065:422;;;:::o;32010:93::-;;;;:::o;20975:292::-;21077:4;21116:25;21101:40;;;:11;:40;;;;:105;;;;21173:33;21158:48;;;:11;:48;;;;21101:105;:158;;;;21223:36;21247:11;21223:23;:36::i;:::-;21101:158;21094:165;;20975:292;;;:::o;25938:127::-;26003:4;26055:1;26027:30;;:7;:16;26035:7;26027:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26020:37;;25938:127;;;:::o;9009:98::-;9062:7;9089:10;9082:17;;9009:98;:::o;29815:174::-;29917:2;29890:15;:24;29906:7;29890:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29973:7;29969:2;29935:46;;29944:23;29959:7;29944:14;:23::i;:::-;29935:46;;;;;;;;;;;;29815:174;;:::o;26232:348::-;26325:4;26350:16;26358:7;26350;:16::i;:::-;26342:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26426:13;26442:23;26457:7;26442:14;:23::i;:::-;26426:39;;26495:5;26484:16;;:7;:16;;;:51;;;;26528:7;26504:31;;:20;26516:7;26504:11;:20::i;:::-;:31;;;26484:51;:87;;;;26539:32;26556:5;26563:7;26539:16;:32::i;:::-;26484:87;26476:96;;;26232:348;;;;:::o;29153:544::-;29278:4;29251:31;;:23;29266:7;29251:14;:23::i;:::-;:31;;;29243:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29361:1;29347:16;;:2;:16;;;;29339:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29417:39;29438:4;29444:2;29448:7;29417:20;:39::i;:::-;29521:29;29538:1;29542:7;29521:8;:29::i;:::-;29582:1;29563:9;:15;29573:4;29563:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29611:1;29594:9;:13;29604:2;29594:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29642:2;29623:7;:16;29631:7;29623:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29681:7;29677:2;29662:27;;29671:4;29662:27;;;;;;;;;;;;29153:544;;;:::o;26922:110::-;26998:26;27008:2;27012:7;26998:26;;;;;;;;;;;;:9;:26::i;:::-;26922:110;;:::o;25353:272::-;25467:28;25477:4;25483:2;25487:7;25467:9;:28::i;:::-;25514:48;25537:4;25543:2;25547:7;25556:5;25514:22;:48::i;:::-;25506:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25353:272;;;;:::o;1537:157::-;1622:4;1661:25;1646:40;;;:11;:40;;;;1639:47;;1537:157;;;:::o;36332:555::-;36442:45;36469:4;36475:2;36479:7;36442:26;:45::i;:::-;36520:1;36504:18;;:4;:18;;;36500:187;;;36539:40;36571:7;36539:31;:40::i;:::-;36500:187;;;36609:2;36601:10;;:4;:10;;;36597:90;;36628:47;36661:4;36667:7;36628:32;:47::i;:::-;36597:90;36500:187;36715:1;36701:16;;:2;:16;;;36697:183;;;36734:45;36771:7;36734:36;:45::i;:::-;36697:183;;;36807:4;36801:10;;:2;:10;;;36797:83;;36828:40;36856:2;36860:7;36828:27;:40::i;:::-;36797:83;36697:183;36332:555;;;:::o;27259:250::-;27355:18;27361:2;27365:7;27355:5;:18::i;:::-;27392:54;27423:1;27427:2;27431:7;27440:5;27392:22;:54::i;:::-;27384:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;27259:250;;;:::o;30554:843::-;30675:4;30701:15;:2;:13;;;:15::i;:::-;30697:693;;;30753:2;30737:36;;;30774:12;:10;:12::i;:::-;30788:4;30794:7;30803:5;30737:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30733:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31000:1;30983:6;:13;:18;30979:341;;;31026:60;;;;;;;;;;:::i;:::-;;;;;;;;30979:341;31270:6;31264:13;31255:6;31251:2;31247:15;31240:38;30733:602;30870:45;;;30860:55;;;:6;:55;;;;30853:62;;;;;30697:693;31374:4;31367:11;;30554:843;;;;;;;:::o;37610:164::-;37714:10;:17;;;;37687:15;:24;37703:7;37687:24;;;;;;;;;;;:44;;;;37742:10;37758:7;37742:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37610:164;:::o;38401:988::-;38667:22;38717:1;38692:22;38709:4;38692:16;:22::i;:::-;:26;;;;:::i;:::-;38667:51;;38729:18;38750:17;:26;38768:7;38750:26;;;;;;;;;;;;38729:47;;38897:14;38883:10;:28;38879:328;;38928:19;38950:12;:18;38963:4;38950:18;;;;;;;;;;;;;;;:34;38969:14;38950:34;;;;;;;;;;;;38928:56;;39034:11;39001:12;:18;39014:4;39001:18;;;;;;;;;;;;;;;:30;39020:10;39001:30;;;;;;;;;;;:44;;;;39151:10;39118:17;:30;39136:11;39118:30;;;;;;;;;;;:43;;;;38913:294;38879:328;39303:17;:26;39321:7;39303:26;;;;;;;;;;;39296:33;;;39347:12;:18;39360:4;39347:18;;;;;;;;;;;;;;;:34;39366:14;39347:34;;;;;;;;;;;39340:41;;;38482:907;;38401:988;;:::o;39684:1079::-;39937:22;39982:1;39962:10;:17;;;;:21;;;;:::i;:::-;39937:46;;39994:18;40015:15;:24;40031:7;40015:24;;;;;;;;;;;;39994:45;;40366:19;40388:10;40399:14;40388:26;;;;;;;;:::i;:::-;;;;;;;;;;40366:48;;40452:11;40427:10;40438;40427:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40563:10;40532:15;:28;40548:11;40532:28;;;;;;;;;;;:41;;;;40704:15;:24;40720:7;40704:24;;;;;;;;;;;40697:31;;;40739:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39755:1008;;;39684:1079;:::o;37188:221::-;37273:14;37290:20;37307:2;37290:16;:20::i;:::-;37273:37;;37348:7;37321:12;:16;37334:2;37321:16;;;;;;;;;;;;;;;:24;37338:6;37321:24;;;;;;;;;;;:34;;;;37395:6;37366:17;:26;37384:7;37366:26;;;;;;;;;;;:35;;;;37262:147;37188:221;;:::o;27845:382::-;27939:1;27925:16;;:2;:16;;;;27917:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27998:16;28006:7;27998;:16::i;:::-;27997:17;27989:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28060:45;28089:1;28093:2;28097:7;28060:20;:45::i;:::-;28135:1;28118:9;:13;28128:2;28118:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28166:2;28147:7;:16;28155:7;28147:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28211:7;28207:2;28186:33;;28203:1;28186:33;;;;;;;;;;;;27845:382;;:::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:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1354:139::-;1400:5;1438:6;1425:20;1416:29;;1454:33;1481:5;1454:33;:::i;:::-;1354:139;;;;:::o;1499:329::-;1558:6;1607:2;1595:9;1586:7;1582:23;1578:32;1575:119;;;1613:79;;:::i;:::-;1575:119;1733:1;1758:53;1803:7;1794:6;1783:9;1779:22;1758:53;:::i;:::-;1748:63;;1704:117;1499:329;;;;:::o;1834:474::-;1902:6;1910;1959:2;1947:9;1938:7;1934:23;1930:32;1927:119;;;1965:79;;:::i;:::-;1927:119;2085:1;2110:53;2155:7;2146:6;2135:9;2131:22;2110:53;:::i;:::-;2100:63;;2056:117;2212:2;2238:53;2283:7;2274:6;2263:9;2259:22;2238:53;:::i;:::-;2228:63;;2183:118;1834:474;;;;;:::o;2314:619::-;2391:6;2399;2407;2456:2;2444:9;2435:7;2431:23;2427:32;2424:119;;;2462:79;;:::i;:::-;2424:119;2582:1;2607:53;2652:7;2643:6;2632:9;2628:22;2607:53;:::i;:::-;2597:63;;2553:117;2709:2;2735:53;2780:7;2771:6;2760:9;2756:22;2735:53;:::i;:::-;2725:63;;2680:118;2837:2;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2808:118;2314:619;;;;;:::o;2939:943::-;3034:6;3042;3050;3058;3107:3;3095:9;3086:7;3082:23;3078:33;3075:120;;;3114:79;;:::i;:::-;3075:120;3234:1;3259:53;3304:7;3295:6;3284:9;3280:22;3259:53;:::i;:::-;3249:63;;3205:117;3361:2;3387:53;3432:7;3423:6;3412:9;3408:22;3387:53;:::i;:::-;3377:63;;3332:118;3489:2;3515:53;3560:7;3551:6;3540:9;3536:22;3515:53;:::i;:::-;3505:63;;3460:118;3645:2;3634:9;3630:18;3617:32;3676:18;3668:6;3665:30;3662:117;;;3698:79;;:::i;:::-;3662:117;3803:62;3857:7;3848:6;3837:9;3833:22;3803:62;:::i;:::-;3793:72;;3588:287;2939:943;;;;;;;:::o;3888:468::-;3953:6;3961;4010:2;3998:9;3989:7;3985:23;3981:32;3978:119;;;4016:79;;:::i;:::-;3978:119;4136:1;4161:53;4206:7;4197:6;4186:9;4182:22;4161:53;:::i;:::-;4151:63;;4107:117;4263:2;4289:50;4331:7;4322:6;4311:9;4307:22;4289:50;:::i;:::-;4279:60;;4234:115;3888:468;;;;;:::o;4362:474::-;4430:6;4438;4487:2;4475:9;4466:7;4462:23;4458:32;4455:119;;;4493:79;;:::i;:::-;4455:119;4613:1;4638:53;4683:7;4674:6;4663:9;4659:22;4638:53;:::i;:::-;4628:63;;4584:117;4740:2;4766:53;4811:7;4802:6;4791:9;4787:22;4766:53;:::i;:::-;4756:63;;4711:118;4362:474;;;;;:::o;4842:327::-;4900:6;4949:2;4937:9;4928:7;4924:23;4920:32;4917:119;;;4955:79;;:::i;:::-;4917:119;5075:1;5100:52;5144:7;5135:6;5124:9;5120:22;5100:52;:::i;:::-;5090:62;;5046:116;4842:327;;;;:::o;5175:349::-;5244:6;5293:2;5281:9;5272:7;5268:23;5264:32;5261:119;;;5299:79;;:::i;:::-;5261:119;5419:1;5444:63;5499:7;5490:6;5479:9;5475:22;5444:63;:::i;:::-;5434:73;;5390:127;5175:349;;;;:::o;5530:329::-;5589:6;5638:2;5626:9;5617:7;5613:23;5609:32;5606:119;;;5644:79;;:::i;:::-;5606:119;5764:1;5789:53;5834:7;5825:6;5814:9;5810:22;5789:53;:::i;:::-;5779:63;;5735:117;5530:329;;;;:::o;5865:118::-;5952:24;5970:5;5952:24;:::i;:::-;5947:3;5940:37;5865:118;;:::o;5989:109::-;6070:21;6085:5;6070:21;:::i;:::-;6065:3;6058:34;5989:109;;:::o;6104:360::-;6190:3;6218:38;6250:5;6218:38;:::i;:::-;6272:70;6335:6;6330:3;6272:70;:::i;:::-;6265:77;;6351:52;6396:6;6391:3;6384:4;6377:5;6373:16;6351:52;:::i;:::-;6428:29;6450:6;6428:29;:::i;:::-;6423:3;6419:39;6412:46;;6194:270;6104:360;;;;:::o;6470:366::-;6612:3;6633:67;6697:2;6692:3;6633:67;:::i;:::-;6626:74;;6709:93;6798:3;6709:93;:::i;:::-;6827:2;6822:3;6818:12;6811:19;;6470:366;;;:::o;6842:::-;6984:3;7005:67;7069:2;7064:3;7005:67;:::i;:::-;6998:74;;7081:93;7170:3;7081:93;:::i;:::-;7199:2;7194:3;7190:12;7183:19;;6842:366;;;:::o;7214:::-;7356:3;7377:67;7441:2;7436:3;7377:67;:::i;:::-;7370:74;;7453:93;7542:3;7453:93;:::i;:::-;7571:2;7566:3;7562:12;7555:19;;7214:366;;;:::o;7586:::-;7728:3;7749:67;7813:2;7808:3;7749:67;:::i;:::-;7742:74;;7825:93;7914:3;7825:93;:::i;:::-;7943:2;7938:3;7934:12;7927:19;;7586:366;;;:::o;7958:::-;8100:3;8121:67;8185:2;8180:3;8121:67;:::i;:::-;8114:74;;8197:93;8286:3;8197:93;:::i;:::-;8315:2;8310:3;8306:12;8299:19;;7958:366;;;:::o;8330:::-;8472:3;8493:67;8557:2;8552:3;8493:67;:::i;:::-;8486:74;;8569:93;8658:3;8569:93;:::i;:::-;8687:2;8682:3;8678:12;8671:19;;8330:366;;;:::o;8702:::-;8844:3;8865:67;8929:2;8924:3;8865:67;:::i;:::-;8858:74;;8941:93;9030:3;8941:93;:::i;:::-;9059:2;9054:3;9050:12;9043:19;;8702:366;;;:::o;9074:::-;9216:3;9237:67;9301:2;9296:3;9237:67;:::i;:::-;9230:74;;9313:93;9402:3;9313:93;:::i;:::-;9431:2;9426:3;9422:12;9415:19;;9074:366;;;:::o;9446:::-;9588:3;9609:67;9673:2;9668:3;9609:67;:::i;:::-;9602:74;;9685:93;9774:3;9685:93;:::i;:::-;9803:2;9798:3;9794:12;9787:19;;9446:366;;;:::o;9818:::-;9960:3;9981:67;10045:2;10040:3;9981:67;:::i;:::-;9974:74;;10057:93;10146:3;10057:93;:::i;:::-;10175:2;10170:3;10166:12;10159:19;;9818:366;;;:::o;10190:::-;10332:3;10353:67;10417:2;10412:3;10353:67;:::i;:::-;10346:74;;10429:93;10518:3;10429:93;:::i;:::-;10547:2;10542:3;10538:12;10531:19;;10190:366;;;:::o;10562:::-;10704:3;10725:67;10789:2;10784:3;10725:67;:::i;:::-;10718:74;;10801:93;10890:3;10801:93;:::i;:::-;10919:2;10914:3;10910:12;10903:19;;10562:366;;;:::o;10934:::-;11076:3;11097:67;11161:2;11156:3;11097:67;:::i;:::-;11090:74;;11173:93;11262:3;11173:93;:::i;:::-;11291:2;11286:3;11282:12;11275:19;;10934:366;;;:::o;11306:::-;11448:3;11469:67;11533:2;11528:3;11469:67;:::i;:::-;11462:74;;11545:93;11634:3;11545:93;:::i;:::-;11663:2;11658:3;11654:12;11647:19;;11306:366;;;:::o;11678:::-;11820:3;11841:67;11905:2;11900:3;11841:67;:::i;:::-;11834:74;;11917:93;12006:3;11917:93;:::i;:::-;12035:2;12030:3;12026:12;12019:19;;11678:366;;;:::o;12050:::-;12192:3;12213:67;12277:2;12272:3;12213:67;:::i;:::-;12206:74;;12289:93;12378:3;12289:93;:::i;:::-;12407:2;12402:3;12398:12;12391:19;;12050:366;;;:::o;12422:::-;12564:3;12585:67;12649:2;12644:3;12585:67;:::i;:::-;12578:74;;12661:93;12750:3;12661:93;:::i;:::-;12779:2;12774:3;12770:12;12763:19;;12422:366;;;:::o;12794:::-;12936:3;12957:67;13021:2;13016:3;12957:67;:::i;:::-;12950:74;;13033:93;13122:3;13033:93;:::i;:::-;13151:2;13146:3;13142:12;13135:19;;12794:366;;;:::o;13166:::-;13308:3;13329:67;13393:2;13388:3;13329:67;:::i;:::-;13322:74;;13405:93;13494:3;13405:93;:::i;:::-;13523:2;13518:3;13514:12;13507:19;;13166:366;;;:::o;13538:::-;13680:3;13701:67;13765:2;13760:3;13701:67;:::i;:::-;13694:74;;13777:93;13866:3;13777:93;:::i;:::-;13895:2;13890:3;13886:12;13879:19;;13538:366;;;:::o;13910:118::-;13997:24;14015:5;13997:24;:::i;:::-;13992:3;13985:37;13910:118;;:::o;14034:222::-;14127:4;14165:2;14154:9;14150:18;14142:26;;14178:71;14246:1;14235:9;14231:17;14222:6;14178:71;:::i;:::-;14034:222;;;;:::o;14262:640::-;14457:4;14495:3;14484:9;14480:19;14472:27;;14509:71;14577:1;14566:9;14562:17;14553:6;14509:71;:::i;:::-;14590:72;14658:2;14647:9;14643:18;14634:6;14590:72;:::i;:::-;14672;14740:2;14729:9;14725:18;14716:6;14672:72;:::i;:::-;14791:9;14785:4;14781:20;14776:2;14765:9;14761:18;14754:48;14819:76;14890:4;14881:6;14819:76;:::i;:::-;14811:84;;14262:640;;;;;;;:::o;14908:210::-;14995:4;15033:2;15022:9;15018:18;15010:26;;15046:65;15108:1;15097:9;15093:17;15084:6;15046:65;:::i;:::-;14908:210;;;;:::o;15124:419::-;15290:4;15328:2;15317:9;15313:18;15305:26;;15377:9;15371:4;15367:20;15363:1;15352:9;15348:17;15341:47;15405:131;15531:4;15405:131;:::i;:::-;15397:139;;15124:419;;;:::o;15549:::-;15715:4;15753:2;15742:9;15738:18;15730:26;;15802:9;15796:4;15792:20;15788:1;15777:9;15773:17;15766:47;15830:131;15956:4;15830:131;:::i;:::-;15822:139;;15549:419;;;:::o;15974:::-;16140:4;16178:2;16167:9;16163:18;16155:26;;16227:9;16221:4;16217:20;16213:1;16202:9;16198:17;16191:47;16255:131;16381:4;16255:131;:::i;:::-;16247:139;;15974:419;;;:::o;16399:::-;16565:4;16603:2;16592:9;16588:18;16580:26;;16652:9;16646:4;16642:20;16638:1;16627:9;16623:17;16616:47;16680:131;16806:4;16680:131;:::i;:::-;16672:139;;16399:419;;;:::o;16824:::-;16990:4;17028:2;17017:9;17013:18;17005:26;;17077:9;17071:4;17067:20;17063:1;17052:9;17048:17;17041:47;17105:131;17231:4;17105:131;:::i;:::-;17097:139;;16824:419;;;:::o;17249:::-;17415:4;17453:2;17442:9;17438:18;17430:26;;17502:9;17496:4;17492:20;17488:1;17477:9;17473:17;17466:47;17530:131;17656:4;17530:131;:::i;:::-;17522:139;;17249:419;;;:::o;17674:::-;17840:4;17878:2;17867:9;17863:18;17855:26;;17927:9;17921:4;17917:20;17913:1;17902:9;17898:17;17891:47;17955:131;18081:4;17955:131;:::i;:::-;17947:139;;17674:419;;;:::o;18099:::-;18265:4;18303:2;18292:9;18288:18;18280:26;;18352:9;18346:4;18342:20;18338:1;18327:9;18323:17;18316:47;18380:131;18506:4;18380:131;:::i;:::-;18372:139;;18099:419;;;:::o;18524:::-;18690:4;18728:2;18717:9;18713:18;18705:26;;18777:9;18771:4;18767:20;18763:1;18752:9;18748:17;18741:47;18805:131;18931:4;18805:131;:::i;:::-;18797:139;;18524:419;;;:::o;18949:::-;19115:4;19153:2;19142:9;19138:18;19130:26;;19202:9;19196:4;19192:20;19188:1;19177:9;19173:17;19166:47;19230:131;19356:4;19230:131;:::i;:::-;19222:139;;18949:419;;;:::o;19374:::-;19540:4;19578:2;19567:9;19563:18;19555:26;;19627:9;19621:4;19617:20;19613:1;19602:9;19598:17;19591:47;19655:131;19781:4;19655:131;:::i;:::-;19647:139;;19374:419;;;:::o;19799:::-;19965:4;20003:2;19992:9;19988:18;19980:26;;20052:9;20046:4;20042:20;20038:1;20027:9;20023:17;20016:47;20080:131;20206:4;20080:131;:::i;:::-;20072:139;;19799:419;;;:::o;20224:::-;20390:4;20428:2;20417:9;20413:18;20405:26;;20477:9;20471:4;20467:20;20463:1;20452:9;20448:17;20441:47;20505:131;20631:4;20505:131;:::i;:::-;20497:139;;20224:419;;;:::o;20649:::-;20815:4;20853:2;20842:9;20838:18;20830:26;;20902:9;20896:4;20892:20;20888:1;20877:9;20873:17;20866:47;20930:131;21056:4;20930:131;:::i;:::-;20922:139;;20649:419;;;:::o;21074:::-;21240:4;21278:2;21267:9;21263:18;21255:26;;21327:9;21321:4;21317:20;21313:1;21302:9;21298:17;21291:47;21355:131;21481:4;21355:131;:::i;:::-;21347:139;;21074:419;;;:::o;21499:::-;21665:4;21703:2;21692:9;21688:18;21680:26;;21752:9;21746:4;21742:20;21738:1;21727:9;21723:17;21716:47;21780:131;21906:4;21780:131;:::i;:::-;21772:139;;21499:419;;;:::o;21924:::-;22090:4;22128:2;22117:9;22113:18;22105:26;;22177:9;22171:4;22167:20;22163:1;22152:9;22148:17;22141:47;22205:131;22331:4;22205:131;:::i;:::-;22197:139;;21924:419;;;:::o;22349:::-;22515:4;22553:2;22542:9;22538:18;22530:26;;22602:9;22596:4;22592:20;22588:1;22577:9;22573:17;22566:47;22630:131;22756:4;22630:131;:::i;:::-;22622:139;;22349:419;;;:::o;22774:::-;22940:4;22978:2;22967:9;22963:18;22955:26;;23027:9;23021:4;23017:20;23013:1;23002:9;22998:17;22991:47;23055:131;23181:4;23055:131;:::i;:::-;23047:139;;22774:419;;;:::o;23199:::-;23365:4;23403:2;23392:9;23388:18;23380:26;;23452:9;23446:4;23442:20;23438:1;23427:9;23423:17;23416:47;23480:131;23606:4;23480:131;:::i;:::-;23472:139;;23199:419;;;:::o;23624:222::-;23717:4;23755:2;23744:9;23740:18;23732:26;;23768:71;23836:1;23825:9;23821:17;23812:6;23768:71;:::i;:::-;23624:222;;;;:::o;23852:129::-;23886:6;23913:20;;:::i;:::-;23903:30;;23942:33;23970:4;23962:6;23942:33;:::i;:::-;23852:129;;;:::o;23987:75::-;24020:6;24053:2;24047:9;24037:19;;23987:75;:::o;24068:307::-;24129:4;24219:18;24211:6;24208:30;24205:56;;;24241:18;;:::i;:::-;24205:56;24279:29;24301:6;24279:29;:::i;:::-;24271:37;;24363:4;24357;24353:15;24345:23;;24068:307;;;:::o;24381:98::-;24432:6;24466:5;24460:12;24450:22;;24381:98;;;:::o;24485:168::-;24568:11;24602:6;24597:3;24590:19;24642:4;24637:3;24633:14;24618:29;;24485:168;;;;:::o;24659:169::-;24743:11;24777:6;24772:3;24765:19;24817:4;24812:3;24808:14;24793:29;;24659:169;;;;:::o;24834:305::-;24874:3;24893:20;24911:1;24893:20;:::i;:::-;24888:25;;24927:20;24945:1;24927:20;:::i;:::-;24922:25;;25081:1;25013:66;25009:74;25006:1;25003:81;25000:107;;;25087:18;;:::i;:::-;25000:107;25131:1;25128;25124:9;25117:16;;24834:305;;;;:::o;25145:348::-;25185:7;25208:20;25226:1;25208:20;:::i;:::-;25203:25;;25242:20;25260:1;25242:20;:::i;:::-;25237:25;;25430:1;25362:66;25358:74;25355:1;25352:81;25347:1;25340:9;25333:17;25329:105;25326:131;;;25437:18;;:::i;:::-;25326:131;25485:1;25482;25478:9;25467:20;;25145:348;;;;:::o;25499:191::-;25539:4;25559:20;25577:1;25559:20;:::i;:::-;25554:25;;25593:20;25611:1;25593:20;:::i;:::-;25588:25;;25632:1;25629;25626:8;25623:34;;;25637:18;;:::i;:::-;25623:34;25682:1;25679;25675:9;25667:17;;25499:191;;;;:::o;25696:96::-;25733:7;25762:24;25780:5;25762:24;:::i;:::-;25751:35;;25696:96;;;:::o;25798:90::-;25832:7;25875:5;25868:13;25861:21;25850:32;;25798:90;;;:::o;25894:149::-;25930:7;25970:66;25963:5;25959:78;25948:89;;25894:149;;;:::o;26049:126::-;26086:7;26126:42;26119:5;26115:54;26104:65;;26049:126;;;:::o;26181:77::-;26218:7;26247:5;26236:16;;26181:77;;;:::o;26264:154::-;26348:6;26343:3;26338;26325:30;26410:1;26401:6;26396:3;26392:16;26385:27;26264:154;;;:::o;26424:307::-;26492:1;26502:113;26516:6;26513:1;26510:13;26502:113;;;26601:1;26596:3;26592:11;26586:18;26582:1;26577:3;26573:11;26566:39;26538:2;26535:1;26531:10;26526:15;;26502:113;;;26633:6;26630:1;26627:13;26624:101;;;26713:1;26704:6;26699:3;26695:16;26688:27;26624:101;26473:258;26424:307;;;:::o;26737:281::-;26820:27;26842:4;26820:27;:::i;:::-;26812:6;26808:40;26950:6;26938:10;26935:22;26914:18;26902:10;26899:34;26896:62;26893:88;;;26961:18;;:::i;:::-;26893:88;27001:10;26997:2;26990:22;26780:238;26737:281;;:::o;27024:233::-;27063:3;27086:24;27104:5;27086:24;:::i;:::-;27077:33;;27132:66;27125:5;27122:77;27119:103;;;27202:18;;:::i;:::-;27119:103;27249:1;27242:5;27238:13;27231:20;;27024:233;;;:::o;27263:180::-;27311:77;27308:1;27301:88;27408:4;27405:1;27398:15;27432:4;27429:1;27422:15;27449:180;27497:77;27494:1;27487:88;27594:4;27591:1;27584:15;27618:4;27615:1;27608:15;27635:180;27683:77;27680:1;27673:88;27780:4;27777:1;27770:15;27804:4;27801:1;27794:15;27821:180;27869:77;27866:1;27859:88;27966:4;27963:1;27956:15;27990:4;27987:1;27980:15;28007:117;28116:1;28113;28106:12;28130:117;28239:1;28236;28229:12;28253:117;28362:1;28359;28352:12;28376:117;28485:1;28482;28475:12;28499:102;28540:6;28591:2;28587:7;28582:2;28575:5;28571:14;28567:28;28557:38;;28499:102;;;:::o;28607:230::-;28747:34;28743:1;28735:6;28731:14;28724:58;28816:13;28811:2;28803:6;28799:15;28792:38;28607:230;:::o;28843:237::-;28983:34;28979:1;28971:6;28967:14;28960:58;29052:20;29047:2;29039:6;29035:15;29028:45;28843:237;:::o;29086:178::-;29226:30;29222:1;29214:6;29210:14;29203:54;29086:178;:::o;29270:223::-;29410:34;29406:1;29398:6;29394:14;29387:58;29479:6;29474:2;29466:6;29462:15;29455:31;29270:223;:::o;29499:175::-;29639:27;29635:1;29627:6;29623:14;29616:51;29499:175;:::o;29680:231::-;29820:34;29816:1;29808:6;29804:14;29797:58;29889:14;29884:2;29876:6;29872:15;29865:39;29680:231;:::o;29917:243::-;30057:34;30053:1;30045:6;30041:14;30034:58;30126:26;30121:2;30113:6;30109:15;30102:51;29917:243;:::o;30166:229::-;30306:34;30302:1;30294:6;30290:14;30283:58;30375:12;30370:2;30362:6;30358:15;30351:37;30166:229;:::o;30401:228::-;30541:34;30537:1;30529:6;30525:14;30518:58;30610:11;30605:2;30597:6;30593:15;30586:36;30401:228;:::o;30635:182::-;30775:34;30771:1;30763:6;30759:14;30752:58;30635:182;:::o;30823:224::-;30963:34;30959:1;30951:6;30947:14;30940:58;31032:7;31027:2;31019:6;31015:15;31008:32;30823:224;:::o;31053:231::-;31193:34;31189:1;31181:6;31177:14;31170:58;31262:14;31257:2;31249:6;31245:15;31238:39;31053:231;:::o;31290:182::-;31430:34;31426:1;31418:6;31414:14;31407:58;31290:182;:::o;31478:228::-;31618:34;31614:1;31606:6;31602:14;31595:58;31687:11;31682:2;31674:6;31670:15;31663:36;31478:228;:::o;31712:220::-;31852:34;31848:1;31840:6;31836:14;31829:58;31921:3;31916:2;31908:6;31904:15;31897:28;31712:220;:::o;31938:175::-;32078:27;32074:1;32066:6;32062:14;32055:51;31938:175;:::o;32119:180::-;32259:32;32255:1;32247:6;32243:14;32236:56;32119:180;:::o;32305:236::-;32445:34;32441:1;32433:6;32429:14;32422:58;32514:19;32509:2;32501:6;32497:15;32490:44;32305:236;:::o;32547:231::-;32687:34;32683:1;32675:6;32671:14;32664:58;32756:14;32751:2;32743:6;32739:15;32732:39;32547:231;:::o;32784:181::-;32924:33;32920:1;32912:6;32908:14;32901:57;32784:181;:::o;32971:122::-;33044:24;33062:5;33044:24;:::i;:::-;33037:5;33034:35;33024:63;;33083:1;33080;33073:12;33024:63;32971:122;:::o;33099:116::-;33169:21;33184:5;33169:21;:::i;:::-;33162:5;33159:32;33149:60;;33205:1;33202;33195:12;33149:60;33099:116;:::o;33221:120::-;33293:23;33310:5;33293:23;:::i;:::-;33286:5;33283:34;33273:62;;33331:1;33328;33321:12;33273:62;33221:120;:::o;33347:122::-;33420:24;33438:5;33420:24;:::i;:::-;33413:5;33410:35;33400:63;;33459:1;33456;33449:12;33400:63;33347:122;:::o
Swarm Source
ipfs://4c82826af2629e712c89810df609d832791fe8e55be189333e1200b3ba3944f4
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.