Feature Tip: Add private address tag to any address under My Name Tag !
This token is reported to have been spammed to a large number of addresses. Please treat it with caution.
ERC-721
Overview
Max Total Supply
58,376 ERC-721 TOKEN*
Holders
23,259
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
0 ERC-721 TOKEN*Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BlvckParis
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-26 */ // SPDX-License-Identifier: MIT /** /$$$$$$$ /$$ /$$ /$$$$$$$ /$$ | $$__ $$| $$ | $$ | $$__ $$ |__/ | $$ \ $$| $$ /$$ /$$ /$$$$$$$| $$ /$$ | $$ \ $$ /$$$$$$ /$$$$$$ /$$ /$$$$$$$ | $$$$$$$ | $$| $$ /$$//$$_____/| $$ /$$/ | $$$$$$$/|____ $$ /$$__ $$| $$ /$$_____/ | $$__ $$| $$ \ $$/$$/| $$ | $$$$$$/ | $$____/ /$$$$$$$| $$ \__/| $$| $$$$$$ | $$ \ $$| $$ \ $$$/ | $$ | $$_ $$ | $$ /$$__ $$| $$ | $$ \____ $$ | $$$$$$$/| $$ \ $/ | $$$$$$$| $$ \ $$ | $$ | $$$$$$$| $$ | $$ /$$$$$$$/ |_______/ |__/ \_/ \_______/|__/ \__/ |__/ \_______/|__/ |__/|_______/ ___ _______ __ _______ _______ ___ ___ _______ _______ _______ _______ __ __ ___ _______ | | | || | | | | _ | | | | | | || || || || | | || | | | | | |_ _||__| | _____| | |_| | | | | | | ___|| ___|| _____||_ _|| |_| || | | ___| | | | | | |_____ | | | | | | | |___ | |___ | |_____ | | | || | | |___ | | | | |_____ | | | | |___ | | | ___|| ___||_____ | | | |_ _|| |___ | ___| ___ | | | | _____| | | _ | | || | | | | |___ _____| | | | | | | || |___ | | |___| |___| |_______| |__| |__| |_______||___| |___| |_______||_______| |___| |___| |_______||_______||___| */ pragma solidity ^0.8.9; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } /** * @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); } /** * @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); } /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function isContractOwner() public virtual returns (bool) { return (_owner == _msgSender()); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } abstract contract Target721 { function ownerOf(uint256 tokenId) public view virtual returns (address); } /** * @title Gutter Punks Flyer contract. * @author The Gutter Punks team. * * @notice Airdrops a flyer to Invisible Friends holders. * */ contract BlvckParis is Context, ERC165, IERC721, IERC721Metadata, Ownable { 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 from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; mapping(uint256 => bool) private _tokenBifurcated; string internal _baseTokenURI; string internal _contractURI; uint256 internal _totalSupply; uint256 internal MAX_TOKEN_ID; bool internal burnAirdrop = false; Target721 _target = Target721(0xED5AF388653567Af2F388E6224dC7C4b3241C544); constructor() { _name = "Blvck Paris"; _symbol = "BP"; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } function setTargetContract(address contractAddress) external onlyOwner { _target = Target721(contractAddress); } function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); uint256 balance = 0; for(uint256 i = 0;i <= MAX_TOKEN_ID;i++) { if(_ownerOf(i) == owner) { balance++; } } return balance; } function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _ownerOf(tokenId); require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } function _ownerOf(uint256 tokenId) internal view virtual returns (address) { address owner = _owners[tokenId]; if(owner == address(0) && !_tokenBifurcated[tokenId] && !burnAirdrop) { try _target.ownerOf(tokenId) returns (address result) { owner = result; } catch { owner = address(0); } } return owner; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function approve(address to, uint256 tokenId) public virtual override { address owner = ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); address approved = _tokenApprovals[tokenId]; return approved; } function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } 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); } function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } 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); } 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"); } function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0) || _target.ownerOf(tokenId) != address(0); } function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } function _mint(address to, uint256 tokenId) internal virtual { emit Transfer(address(0), to, tokenId); } function _burn(uint256 tokenId) internal virtual { address owner = ownerOf(tokenId); require(owner == _msgSender(), "Must own token to burn."); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); unchecked { if(!_tokenBifurcated[tokenId]) { _tokenBifurcated[tokenId] = true; } _totalSupply -= 1; } delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(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); unchecked { _owners[tokenId] = to; } emit Transfer(from, to, tokenId); } function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ownerOf(tokenId), to, tokenId); } function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} function setURI(string calldata baseURI) external onlyOwner { _baseTokenURI = baseURI; } function setBurnAirdrop(bool setBurn) external onlyOwner { burnAirdrop = setBurn; } function giftAirdrop(address[] calldata recipients) external onlyOwner { uint256 startingSupply = _totalSupply; // Update the total supply. _totalSupply = startingSupply + recipients.length; // Note: First token has ID #0. for (uint256 i = 0; i < recipients.length; i++) { _mint(recipients[i], startingSupply + i); } if((startingSupply + recipients.length - 1) > MAX_TOKEN_ID) { MAX_TOKEN_ID = (startingSupply + recipients.length - 1); } } function bifurcateToken(uint256 tokenId) external { address owner = ownerOf(tokenId); require(owner == _msgSender() || isContractOwner(), "Must own token to bifurcate."); _tokenBifurcated[tokenId] = true; unchecked { _owners[tokenId] = owner; } } function burn(uint256 tokenId) external { _burn(tokenId); } function emitTransfers(uint256[] calldata tokenId, address[] calldata from, address[] calldata to) external onlyOwner { require(tokenId.length == from.length && from.length == to.length, "Arrays do not match."); for(uint256 i = 0;i < tokenId.length;i++) { if(_owners[tokenId[i]] == address(0)) { emit Transfer(from[i], to[i], tokenId[i]); } } } function contractURI() external view returns (string memory) { return _contractURI; } function tokenURI(uint256 tokenId) public view override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); return _baseTokenURI; } function totalSupply() public view returns (uint256) { return _totalSupply; } } /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"bifurcateToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenId","type":"uint256[]"},{"internalType":"address[]","name":"from","type":"address[]"},{"internalType":"address[]","name":"to","type":"address[]"}],"name":"emitTransfers","outputs":[],"stateMutability":"nonpayable","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":"recipients","type":"address[]"}],"name":"giftAirdrop","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":[],"name":"isContractOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"setBurn","type":"bool"}],"name":"setBurnAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"setTargetContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600b60006101000a81548160ff02191690831515021790555073ed5af388653567af2f388e6224dc7c4b3241c544600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200008157600080fd5b50620000a2620000966200014460201b60201c565b6200014c60201b60201c565b6040518060400160405280600b81526020017f426c76636b20506172697300000000000000000000000000000000000000000081525060019080519060200190620000ef92919062000210565b506040518060400160405280600281526020017f4250000000000000000000000000000000000000000000000000000000000000815250600290805190602001906200013d92919062000210565b5062000324565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200021e90620002ef565b90600052602060002090601f0160209004810192826200024257600085556200028e565b82601f106200025d57805160ff19168380011785556200028e565b828001600101855582156200028e579182015b828111156200028d57825182559160200191906001019062000270565b5b5090506200029d9190620002a1565b5090565b5b80821115620002bc576000816000905550600101620002a2565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200030857607f821691505b6020821081036200031e576200031d620002c0565b5b50919050565b6136c580620003346000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806370a08231116100de578063b88d4fde11610097578063e8a3d48511610071578063e8a3d48514610457578063e985e9c514610475578063f0d6f8ef146104a5578063f2fde38b146104c15761018e565b8063b88d4fde146103ef578063c87b56dd1461040b578063df1e2f281461043b5761018e565b806370a082311461033f578063715018a61461036f5780637f7dcdbf146103795780638da5cb5b1461039757806395d89b41146103b5578063a22cb465146103d35761018e565b806318160ddd1161014b57806342966c681161012557806342966c68146102bb57806342d8c7d5146102d757806347fc822f146102f35780636352211e1461030f5761018e565b806318160ddd1461026557806323b872dd1461028357806342842e0e1461029f5761018e565b806301ffc9a71461019357806302fe5305146101c357806306fdde03146101df578063081812fc146101fd578063095ea7b31461022d57806317495dde14610249575b600080fd5b6101ad60048036038101906101a89190612308565b6104dd565b6040516101ba9190612350565b60405180910390f35b6101dd60048036038101906101d891906123d0565b6105bf565b005b6101e7610651565b6040516101f491906124b6565b60405180910390f35b6102176004803603810190610212919061250e565b6106e3565b604051610224919061257c565b60405180910390f35b610247600480360381019061024291906125c3565b61076e565b005b610263600480360381019061025e919061262f565b610885565b005b61026d61091e565b60405161027a919061266b565b60405180910390f35b61029d60048036038101906102989190612686565b610928565b005b6102b960048036038101906102b49190612686565b610988565b005b6102d560048036038101906102d0919061250e565b6109a8565b005b6102f160048036038101906102ec9190612785565b6109b4565b005b61030d60048036038101906103089190612839565b610bf6565b005b6103296004803603810190610324919061250e565b610cb6565b604051610336919061257c565b60405180910390f35b61035960048036038101906103549190612839565b610d3c565b604051610366919061266b565b60405180910390f35b610377610e20565b005b610381610ea8565b60405161038e9190612350565b60405180910390f35b61039f610f05565b6040516103ac919061257c565b60405180910390f35b6103bd610f2e565b6040516103ca91906124b6565b60405180910390f35b6103ed60048036038101906103e89190612866565b610fc0565b005b610409600480360381019061040491906129d6565b610fd6565b005b6104256004803603810190610420919061250e565b611038565b60405161043291906124b6565b60405180910390f35b61045560048036038101906104509190612a59565b611114565b005b61045f611255565b60405161046c91906124b6565b60405180910390f35b61048f600480360381019061048a9190612aa6565b6112e7565b60405161049c9190612350565b60405180910390f35b6104bf60048036038101906104ba919061250e565b61137b565b005b6104db60048036038101906104d69190612839565b61148e565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105a857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105b857506105b782611585565b5b9050919050565b6105c76115ef565b73ffffffffffffffffffffffffffffffffffffffff166105e5610f05565b73ffffffffffffffffffffffffffffffffffffffff161461063b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063290612b32565b60405180910390fd5b81816007919061064c9291906121f9565b505050565b60606001805461066090612b81565b80601f016020809104026020016040519081016040528092919081815260200182805461068c90612b81565b80156106d95780601f106106ae576101008083540402835291602001916106d9565b820191906000526020600020905b8154815290600101906020018083116106bc57829003601f168201915b5050505050905090565b60006106ee826115f7565b61072d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072490612c24565b60405180910390fd5b60006004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080915050919050565b600061077982610cb6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e090612cb6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108086115ef565b73ffffffffffffffffffffffffffffffffffffffff1614806108375750610836816108316115ef565b6112e7565b5b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086d90612d48565b60405180910390fd5b6108808383611736565b505050565b61088d6115ef565b73ffffffffffffffffffffffffffffffffffffffff166108ab610f05565b73ffffffffffffffffffffffffffffffffffffffff1614610901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f890612b32565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b6000600954905090565b6109396109336115ef565b826117ef565b610978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096f90612dda565b60405180910390fd5b6109838383836118cd565b505050565b6109a383838360405180602001604052806000815250610fd6565b505050565b6109b181611a7a565b50565b6109bc6115ef565b73ffffffffffffffffffffffffffffffffffffffff166109da610f05565b73ffffffffffffffffffffffffffffffffffffffff1614610a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2790612b32565b60405180910390fd5b8383905086869050148015610a4a57508181905084849050145b610a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8090612e46565b60405180910390fd5b60005b86869050811015610bed57600073ffffffffffffffffffffffffffffffffffffffff1660036000898985818110610ac657610ac5612e66565b5b90506020020135815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610bda57868682818110610b2a57610b29612e66565b5b90506020020135838383818110610b4457610b43612e66565b5b9050602002016020810190610b599190612839565b73ffffffffffffffffffffffffffffffffffffffff16868684818110610b8257610b81612e66565b5b9050602002016020810190610b979190612839565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b8080610be590612ec4565b915050610a8c565b50505050505050565b610bfe6115ef565b73ffffffffffffffffffffffffffffffffffffffff16610c1c610f05565b73ffffffffffffffffffffffffffffffffffffffff1614610c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6990612b32565b60405180910390fd5b80600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080610cc283611c0c565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a90612f7e565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da390613010565b60405180910390fd5b6000805b600a548111610e16578373ffffffffffffffffffffffffffffffffffffffff16610dd982611c0c565b73ffffffffffffffffffffffffffffffffffffffff1603610e03578180610dff90612ec4565b9250505b8080610e0e90612ec4565b915050610db0565b5080915050919050565b610e286115ef565b73ffffffffffffffffffffffffffffffffffffffff16610e46610f05565b73ffffffffffffffffffffffffffffffffffffffff1614610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9390612b32565b60405180910390fd5b610ea66000611d6e565b565b6000610eb26115ef565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054610f3d90612b81565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6990612b81565b8015610fb65780601f10610f8b57610100808354040283529160200191610fb6565b820191906000526020600020905b815481529060010190602001808311610f9957829003601f168201915b5050505050905090565b610fd2610fcb6115ef565b8383611e32565b5050565b610fe7610fe16115ef565b836117ef565b611026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101d90612dda565b60405180910390fd5b61103284848484611f9e565b50505050565b6060611043826115f7565b611082576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611079906130a2565b60405180910390fd5b6007805461108f90612b81565b80601f01602080910402602001604051908101604052809291908181526020018280546110bb90612b81565b80156111085780601f106110dd57610100808354040283529160200191611108565b820191906000526020600020905b8154815290600101906020018083116110eb57829003601f168201915b50505050509050919050565b61111c6115ef565b73ffffffffffffffffffffffffffffffffffffffff1661113a610f05565b73ffffffffffffffffffffffffffffffffffffffff1614611190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118790612b32565b60405180910390fd5b6000600954905082829050816111a691906130c2565b60098190555060005b83839050811015611209576111f68484838181106111d0576111cf612e66565b5b90506020020160208101906111e59190612839565b82846111f191906130c2565b611ffa565b808061120190612ec4565b9150506111af565b50600a546001848490508361121e91906130c2565b6112289190613118565b1115611250576001838390508261123f91906130c2565b6112499190613118565b600a819055505b505050565b60606008805461126490612b81565b80601f016020809104026020016040519081016040528092919081815260200182805461129090612b81565b80156112dd5780601f106112b2576101008083540402835291602001916112dd565b820191906000526020600020905b8154815290600101906020018083116112c057829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600061138682610cb6565b90506113906115ef565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806113cd57506113cc610ea8565b5b61140c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140390613198565b60405180910390fd5b60016006600084815260200190815260200160002060006101000a81548160ff021916908315150217905550806003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6114966115ef565b73ffffffffffffffffffffffffffffffffffffffff166114b4610f05565b73ffffffffffffffffffffffffffffffffffffffff161461150a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150190612b32565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611579576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115709061322a565b60405180910390fd5b61158281611d6e565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158061172f5750600073ffffffffffffffffffffffffffffffffffffffff16600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016116d5919061266b565b602060405180830381865afa1580156116f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611716919061325f565b73ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166117a983610cb6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006117fa826115f7565b611839576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611830906132fe565b60405180910390fd5b600061184483610cb6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806118b357508373ffffffffffffffffffffffffffffffffffffffff1661189b846106e3565b73ffffffffffffffffffffffffffffffffffffffff16145b806118c457506118c381856112e7565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166118ed82610cb6565b73ffffffffffffffffffffffffffffffffffffffff1614611943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193a90613390565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a990613422565b60405180910390fd5b6119bd83838361205a565b6119c8600082611736565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000611a8582610cb6565b9050611a8f6115ef565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af39061348e565b60405180910390fd5b611b088160008461205a565b611b13600083611736565b6006600083815260200190815260200160002060009054906101000a900460ff16611b655760016006600084815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60016009600082825403925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148015611c9f57506006600084815260200190815260200160002060009054906101000a900460ff16155b8015611cb85750600b60009054906101000a900460ff16155b15611d6557600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401611d18919061266b565b602060405180830381865afa925050508015611d5257506040513d601f19601f82011682018060405250810190611d4f919061325f565b60015b611d5f5760009050611d64565b809150505b5b80915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e97906134fa565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f919190612350565b60405180910390a3505050565b611fa98484846118cd565b611fb58484848461205f565b611ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611feb9061358c565b60405180910390fd5b50505050565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b60006120808473ffffffffffffffffffffffffffffffffffffffff166121e6565b156121d9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120a96115ef565b8786866040518563ffffffff1660e01b81526004016120cb9493929190613601565b6020604051808303816000875af192505050801561210757506040513d601f19601f820116820180604052508101906121049190613662565b60015b612189573d8060008114612137576040519150601f19603f3d011682016040523d82523d6000602084013e61213c565b606091505b506000815103612181576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121789061358c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506121de565b600190505b949350505050565b600080823b905060008111915050919050565b82805461220590612b81565b90600052602060002090601f016020900481019282612227576000855561226e565b82601f1061224057803560ff191683800117855561226e565b8280016001018555821561226e579182015b8281111561226d578235825591602001919060010190612252565b5b50905061227b919061227f565b5090565b5b80821115612298576000816000905550600101612280565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6122e5816122b0565b81146122f057600080fd5b50565b600081359050612302816122dc565b92915050565b60006020828403121561231e5761231d6122a6565b5b600061232c848285016122f3565b91505092915050565b60008115159050919050565b61234a81612335565b82525050565b60006020820190506123656000830184612341565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126123905761238f61236b565b5b8235905067ffffffffffffffff8111156123ad576123ac612370565b5b6020830191508360018202830111156123c9576123c8612375565b5b9250929050565b600080602083850312156123e7576123e66122a6565b5b600083013567ffffffffffffffff811115612405576124046122ab565b5b6124118582860161237a565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561245757808201518184015260208101905061243c565b83811115612466576000848401525b50505050565b6000601f19601f8301169050919050565b60006124888261241d565b6124928185612428565b93506124a2818560208601612439565b6124ab8161246c565b840191505092915050565b600060208201905081810360008301526124d0818461247d565b905092915050565b6000819050919050565b6124eb816124d8565b81146124f657600080fd5b50565b600081359050612508816124e2565b92915050565b600060208284031215612524576125236122a6565b5b6000612532848285016124f9565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125668261253b565b9050919050565b6125768161255b565b82525050565b6000602082019050612591600083018461256d565b92915050565b6125a08161255b565b81146125ab57600080fd5b50565b6000813590506125bd81612597565b92915050565b600080604083850312156125da576125d96122a6565b5b60006125e8858286016125ae565b92505060206125f9858286016124f9565b9150509250929050565b61260c81612335565b811461261757600080fd5b50565b60008135905061262981612603565b92915050565b600060208284031215612645576126446122a6565b5b60006126538482850161261a565b91505092915050565b612665816124d8565b82525050565b6000602082019050612680600083018461265c565b92915050565b60008060006060848603121561269f5761269e6122a6565b5b60006126ad868287016125ae565b93505060206126be868287016125ae565b92505060406126cf868287016124f9565b9150509250925092565b60008083601f8401126126ef576126ee61236b565b5b8235905067ffffffffffffffff81111561270c5761270b612370565b5b60208301915083602082028301111561272857612727612375565b5b9250929050565b60008083601f8401126127455761274461236b565b5b8235905067ffffffffffffffff81111561276257612761612370565b5b60208301915083602082028301111561277e5761277d612375565b5b9250929050565b600080600080600080606087890312156127a2576127a16122a6565b5b600087013567ffffffffffffffff8111156127c0576127bf6122ab565b5b6127cc89828a016126d9565b9650965050602087013567ffffffffffffffff8111156127ef576127ee6122ab565b5b6127fb89828a0161272f565b9450945050604087013567ffffffffffffffff81111561281e5761281d6122ab565b5b61282a89828a0161272f565b92509250509295509295509295565b60006020828403121561284f5761284e6122a6565b5b600061285d848285016125ae565b91505092915050565b6000806040838503121561287d5761287c6122a6565b5b600061288b858286016125ae565b925050602061289c8582860161261a565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6128e38261246c565b810181811067ffffffffffffffff82111715612902576129016128ab565b5b80604052505050565b600061291561229c565b905061292182826128da565b919050565b600067ffffffffffffffff821115612941576129406128ab565b5b61294a8261246c565b9050602081019050919050565b82818337600083830152505050565b600061297961297484612926565b61290b565b905082815260208101848484011115612995576129946128a6565b5b6129a0848285612957565b509392505050565b600082601f8301126129bd576129bc61236b565b5b81356129cd848260208601612966565b91505092915050565b600080600080608085870312156129f0576129ef6122a6565b5b60006129fe878288016125ae565b9450506020612a0f878288016125ae565b9350506040612a20878288016124f9565b925050606085013567ffffffffffffffff811115612a4157612a406122ab565b5b612a4d878288016129a8565b91505092959194509250565b60008060208385031215612a7057612a6f6122a6565b5b600083013567ffffffffffffffff811115612a8e57612a8d6122ab565b5b612a9a8582860161272f565b92509250509250929050565b60008060408385031215612abd57612abc6122a6565b5b6000612acb858286016125ae565b9250506020612adc858286016125ae565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612b1c602083612428565b9150612b2782612ae6565b602082019050919050565b60006020820190508181036000830152612b4b81612b0f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b9957607f821691505b602082108103612bac57612bab612b52565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612c0e602c83612428565b9150612c1982612bb2565b604082019050919050565b60006020820190508181036000830152612c3d81612c01565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612ca0602183612428565b9150612cab82612c44565b604082019050919050565b60006020820190508181036000830152612ccf81612c93565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612d32603883612428565b9150612d3d82612cd6565b604082019050919050565b60006020820190508181036000830152612d6181612d25565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000612dc4603183612428565b9150612dcf82612d68565b604082019050919050565b60006020820190508181036000830152612df381612db7565b9050919050565b7f41727261797320646f206e6f74206d617463682e000000000000000000000000600082015250565b6000612e30601483612428565b9150612e3b82612dfa565b602082019050919050565b60006020820190508181036000830152612e5f81612e23565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ecf826124d8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612f0157612f00612e95565b5b600182019050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000612f68602983612428565b9150612f7382612f0c565b604082019050919050565b60006020820190508181036000830152612f9781612f5b565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000612ffa602a83612428565b915061300582612f9e565b604082019050919050565b6000602082019050818103600083015261302981612fed565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b600061308c602f83612428565b915061309782613030565b604082019050919050565b600060208201905081810360008301526130bb8161307f565b9050919050565b60006130cd826124d8565b91506130d8836124d8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561310d5761310c612e95565b5b828201905092915050565b6000613123826124d8565b915061312e836124d8565b92508282101561314157613140612e95565b5b828203905092915050565b7f4d757374206f776e20746f6b656e20746f206269667572636174652e00000000600082015250565b6000613182601c83612428565b915061318d8261314c565b602082019050919050565b600060208201905081810360008301526131b181613175565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613214602683612428565b915061321f826131b8565b604082019050919050565b6000602082019050818103600083015261324381613207565b9050919050565b60008151905061325981612597565b92915050565b600060208284031215613275576132746122a6565b5b60006132838482850161324a565b91505092915050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006132e8602c83612428565b91506132f38261328c565b604082019050919050565b60006020820190508181036000830152613317816132db565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b600061337a602983612428565b91506133858261331e565b604082019050919050565b600060208201905081810360008301526133a98161336d565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061340c602483612428565b9150613417826133b0565b604082019050919050565b6000602082019050818103600083015261343b816133ff565b9050919050565b7f4d757374206f776e20746f6b656e20746f206275726e2e000000000000000000600082015250565b6000613478601783612428565b915061348382613442565b602082019050919050565b600060208201905081810360008301526134a78161346b565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006134e4601983612428565b91506134ef826134ae565b602082019050919050565b60006020820190508181036000830152613513816134d7565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613576603283612428565b91506135818261351a565b604082019050919050565b600060208201905081810360008301526135a581613569565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006135d3826135ac565b6135dd81856135b7565b93506135ed818560208601612439565b6135f68161246c565b840191505092915050565b6000608082019050613616600083018761256d565b613623602083018661256d565b613630604083018561265c565b818103606083015261364281846135c8565b905095945050505050565b60008151905061365c816122dc565b92915050565b600060208284031215613678576136776122a6565b5b60006136868482850161364d565b9150509291505056fea26469706673582212209b70f9b686a4c1e3cdf4664e82fcd1a76d98c594a9a3425a32e314f12145bab464736f6c634300080d0033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018e5760003560e01c806370a08231116100de578063b88d4fde11610097578063e8a3d48511610071578063e8a3d48514610457578063e985e9c514610475578063f0d6f8ef146104a5578063f2fde38b146104c15761018e565b8063b88d4fde146103ef578063c87b56dd1461040b578063df1e2f281461043b5761018e565b806370a082311461033f578063715018a61461036f5780637f7dcdbf146103795780638da5cb5b1461039757806395d89b41146103b5578063a22cb465146103d35761018e565b806318160ddd1161014b57806342966c681161012557806342966c68146102bb57806342d8c7d5146102d757806347fc822f146102f35780636352211e1461030f5761018e565b806318160ddd1461026557806323b872dd1461028357806342842e0e1461029f5761018e565b806301ffc9a71461019357806302fe5305146101c357806306fdde03146101df578063081812fc146101fd578063095ea7b31461022d57806317495dde14610249575b600080fd5b6101ad60048036038101906101a89190612308565b6104dd565b6040516101ba9190612350565b60405180910390f35b6101dd60048036038101906101d891906123d0565b6105bf565b005b6101e7610651565b6040516101f491906124b6565b60405180910390f35b6102176004803603810190610212919061250e565b6106e3565b604051610224919061257c565b60405180910390f35b610247600480360381019061024291906125c3565b61076e565b005b610263600480360381019061025e919061262f565b610885565b005b61026d61091e565b60405161027a919061266b565b60405180910390f35b61029d60048036038101906102989190612686565b610928565b005b6102b960048036038101906102b49190612686565b610988565b005b6102d560048036038101906102d0919061250e565b6109a8565b005b6102f160048036038101906102ec9190612785565b6109b4565b005b61030d60048036038101906103089190612839565b610bf6565b005b6103296004803603810190610324919061250e565b610cb6565b604051610336919061257c565b60405180910390f35b61035960048036038101906103549190612839565b610d3c565b604051610366919061266b565b60405180910390f35b610377610e20565b005b610381610ea8565b60405161038e9190612350565b60405180910390f35b61039f610f05565b6040516103ac919061257c565b60405180910390f35b6103bd610f2e565b6040516103ca91906124b6565b60405180910390f35b6103ed60048036038101906103e89190612866565b610fc0565b005b610409600480360381019061040491906129d6565b610fd6565b005b6104256004803603810190610420919061250e565b611038565b60405161043291906124b6565b60405180910390f35b61045560048036038101906104509190612a59565b611114565b005b61045f611255565b60405161046c91906124b6565b60405180910390f35b61048f600480360381019061048a9190612aa6565b6112e7565b60405161049c9190612350565b60405180910390f35b6104bf60048036038101906104ba919061250e565b61137b565b005b6104db60048036038101906104d69190612839565b61148e565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105a857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105b857506105b782611585565b5b9050919050565b6105c76115ef565b73ffffffffffffffffffffffffffffffffffffffff166105e5610f05565b73ffffffffffffffffffffffffffffffffffffffff161461063b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063290612b32565b60405180910390fd5b81816007919061064c9291906121f9565b505050565b60606001805461066090612b81565b80601f016020809104026020016040519081016040528092919081815260200182805461068c90612b81565b80156106d95780601f106106ae576101008083540402835291602001916106d9565b820191906000526020600020905b8154815290600101906020018083116106bc57829003601f168201915b5050505050905090565b60006106ee826115f7565b61072d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072490612c24565b60405180910390fd5b60006004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080915050919050565b600061077982610cb6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e090612cb6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108086115ef565b73ffffffffffffffffffffffffffffffffffffffff1614806108375750610836816108316115ef565b6112e7565b5b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086d90612d48565b60405180910390fd5b6108808383611736565b505050565b61088d6115ef565b73ffffffffffffffffffffffffffffffffffffffff166108ab610f05565b73ffffffffffffffffffffffffffffffffffffffff1614610901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f890612b32565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b6000600954905090565b6109396109336115ef565b826117ef565b610978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096f90612dda565b60405180910390fd5b6109838383836118cd565b505050565b6109a383838360405180602001604052806000815250610fd6565b505050565b6109b181611a7a565b50565b6109bc6115ef565b73ffffffffffffffffffffffffffffffffffffffff166109da610f05565b73ffffffffffffffffffffffffffffffffffffffff1614610a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2790612b32565b60405180910390fd5b8383905086869050148015610a4a57508181905084849050145b610a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8090612e46565b60405180910390fd5b60005b86869050811015610bed57600073ffffffffffffffffffffffffffffffffffffffff1660036000898985818110610ac657610ac5612e66565b5b90506020020135815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610bda57868682818110610b2a57610b29612e66565b5b90506020020135838383818110610b4457610b43612e66565b5b9050602002016020810190610b599190612839565b73ffffffffffffffffffffffffffffffffffffffff16868684818110610b8257610b81612e66565b5b9050602002016020810190610b979190612839565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b8080610be590612ec4565b915050610a8c565b50505050505050565b610bfe6115ef565b73ffffffffffffffffffffffffffffffffffffffff16610c1c610f05565b73ffffffffffffffffffffffffffffffffffffffff1614610c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6990612b32565b60405180910390fd5b80600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080610cc283611c0c565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a90612f7e565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da390613010565b60405180910390fd5b6000805b600a548111610e16578373ffffffffffffffffffffffffffffffffffffffff16610dd982611c0c565b73ffffffffffffffffffffffffffffffffffffffff1603610e03578180610dff90612ec4565b9250505b8080610e0e90612ec4565b915050610db0565b5080915050919050565b610e286115ef565b73ffffffffffffffffffffffffffffffffffffffff16610e46610f05565b73ffffffffffffffffffffffffffffffffffffffff1614610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9390612b32565b60405180910390fd5b610ea66000611d6e565b565b6000610eb26115ef565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054610f3d90612b81565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6990612b81565b8015610fb65780601f10610f8b57610100808354040283529160200191610fb6565b820191906000526020600020905b815481529060010190602001808311610f9957829003601f168201915b5050505050905090565b610fd2610fcb6115ef565b8383611e32565b5050565b610fe7610fe16115ef565b836117ef565b611026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101d90612dda565b60405180910390fd5b61103284848484611f9e565b50505050565b6060611043826115f7565b611082576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611079906130a2565b60405180910390fd5b6007805461108f90612b81565b80601f01602080910402602001604051908101604052809291908181526020018280546110bb90612b81565b80156111085780601f106110dd57610100808354040283529160200191611108565b820191906000526020600020905b8154815290600101906020018083116110eb57829003601f168201915b50505050509050919050565b61111c6115ef565b73ffffffffffffffffffffffffffffffffffffffff1661113a610f05565b73ffffffffffffffffffffffffffffffffffffffff1614611190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118790612b32565b60405180910390fd5b6000600954905082829050816111a691906130c2565b60098190555060005b83839050811015611209576111f68484838181106111d0576111cf612e66565b5b90506020020160208101906111e59190612839565b82846111f191906130c2565b611ffa565b808061120190612ec4565b9150506111af565b50600a546001848490508361121e91906130c2565b6112289190613118565b1115611250576001838390508261123f91906130c2565b6112499190613118565b600a819055505b505050565b60606008805461126490612b81565b80601f016020809104026020016040519081016040528092919081815260200182805461129090612b81565b80156112dd5780601f106112b2576101008083540402835291602001916112dd565b820191906000526020600020905b8154815290600101906020018083116112c057829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600061138682610cb6565b90506113906115ef565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806113cd57506113cc610ea8565b5b61140c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140390613198565b60405180910390fd5b60016006600084815260200190815260200160002060006101000a81548160ff021916908315150217905550806003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6114966115ef565b73ffffffffffffffffffffffffffffffffffffffff166114b4610f05565b73ffffffffffffffffffffffffffffffffffffffff161461150a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150190612b32565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611579576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115709061322a565b60405180910390fd5b61158281611d6e565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158061172f5750600073ffffffffffffffffffffffffffffffffffffffff16600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016116d5919061266b565b602060405180830381865afa1580156116f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611716919061325f565b73ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166117a983610cb6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006117fa826115f7565b611839576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611830906132fe565b60405180910390fd5b600061184483610cb6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806118b357508373ffffffffffffffffffffffffffffffffffffffff1661189b846106e3565b73ffffffffffffffffffffffffffffffffffffffff16145b806118c457506118c381856112e7565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166118ed82610cb6565b73ffffffffffffffffffffffffffffffffffffffff1614611943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193a90613390565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a990613422565b60405180910390fd5b6119bd83838361205a565b6119c8600082611736565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000611a8582610cb6565b9050611a8f6115ef565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af39061348e565b60405180910390fd5b611b088160008461205a565b611b13600083611736565b6006600083815260200190815260200160002060009054906101000a900460ff16611b655760016006600084815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60016009600082825403925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148015611c9f57506006600084815260200190815260200160002060009054906101000a900460ff16155b8015611cb85750600b60009054906101000a900460ff16155b15611d6557600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401611d18919061266b565b602060405180830381865afa925050508015611d5257506040513d601f19601f82011682018060405250810190611d4f919061325f565b60015b611d5f5760009050611d64565b809150505b5b80915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e97906134fa565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f919190612350565b60405180910390a3505050565b611fa98484846118cd565b611fb58484848461205f565b611ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611feb9061358c565b60405180910390fd5b50505050565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b60006120808473ffffffffffffffffffffffffffffffffffffffff166121e6565b156121d9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120a96115ef565b8786866040518563ffffffff1660e01b81526004016120cb9493929190613601565b6020604051808303816000875af192505050801561210757506040513d601f19601f820116820180604052508101906121049190613662565b60015b612189573d8060008114612137576040519150601f19603f3d011682016040523d82523d6000602084013e61213c565b606091505b506000815103612181576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121789061358c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506121de565b600190505b949350505050565b600080823b905060008111915050919050565b82805461220590612b81565b90600052602060002090601f016020900481019282612227576000855561226e565b82601f1061224057803560ff191683800117855561226e565b8280016001018555821561226e579182015b8281111561226d578235825591602001919060010190612252565b5b50905061227b919061227f565b5090565b5b80821115612298576000816000905550600101612280565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6122e5816122b0565b81146122f057600080fd5b50565b600081359050612302816122dc565b92915050565b60006020828403121561231e5761231d6122a6565b5b600061232c848285016122f3565b91505092915050565b60008115159050919050565b61234a81612335565b82525050565b60006020820190506123656000830184612341565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126123905761238f61236b565b5b8235905067ffffffffffffffff8111156123ad576123ac612370565b5b6020830191508360018202830111156123c9576123c8612375565b5b9250929050565b600080602083850312156123e7576123e66122a6565b5b600083013567ffffffffffffffff811115612405576124046122ab565b5b6124118582860161237a565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561245757808201518184015260208101905061243c565b83811115612466576000848401525b50505050565b6000601f19601f8301169050919050565b60006124888261241d565b6124928185612428565b93506124a2818560208601612439565b6124ab8161246c565b840191505092915050565b600060208201905081810360008301526124d0818461247d565b905092915050565b6000819050919050565b6124eb816124d8565b81146124f657600080fd5b50565b600081359050612508816124e2565b92915050565b600060208284031215612524576125236122a6565b5b6000612532848285016124f9565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125668261253b565b9050919050565b6125768161255b565b82525050565b6000602082019050612591600083018461256d565b92915050565b6125a08161255b565b81146125ab57600080fd5b50565b6000813590506125bd81612597565b92915050565b600080604083850312156125da576125d96122a6565b5b60006125e8858286016125ae565b92505060206125f9858286016124f9565b9150509250929050565b61260c81612335565b811461261757600080fd5b50565b60008135905061262981612603565b92915050565b600060208284031215612645576126446122a6565b5b60006126538482850161261a565b91505092915050565b612665816124d8565b82525050565b6000602082019050612680600083018461265c565b92915050565b60008060006060848603121561269f5761269e6122a6565b5b60006126ad868287016125ae565b93505060206126be868287016125ae565b92505060406126cf868287016124f9565b9150509250925092565b60008083601f8401126126ef576126ee61236b565b5b8235905067ffffffffffffffff81111561270c5761270b612370565b5b60208301915083602082028301111561272857612727612375565b5b9250929050565b60008083601f8401126127455761274461236b565b5b8235905067ffffffffffffffff81111561276257612761612370565b5b60208301915083602082028301111561277e5761277d612375565b5b9250929050565b600080600080600080606087890312156127a2576127a16122a6565b5b600087013567ffffffffffffffff8111156127c0576127bf6122ab565b5b6127cc89828a016126d9565b9650965050602087013567ffffffffffffffff8111156127ef576127ee6122ab565b5b6127fb89828a0161272f565b9450945050604087013567ffffffffffffffff81111561281e5761281d6122ab565b5b61282a89828a0161272f565b92509250509295509295509295565b60006020828403121561284f5761284e6122a6565b5b600061285d848285016125ae565b91505092915050565b6000806040838503121561287d5761287c6122a6565b5b600061288b858286016125ae565b925050602061289c8582860161261a565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6128e38261246c565b810181811067ffffffffffffffff82111715612902576129016128ab565b5b80604052505050565b600061291561229c565b905061292182826128da565b919050565b600067ffffffffffffffff821115612941576129406128ab565b5b61294a8261246c565b9050602081019050919050565b82818337600083830152505050565b600061297961297484612926565b61290b565b905082815260208101848484011115612995576129946128a6565b5b6129a0848285612957565b509392505050565b600082601f8301126129bd576129bc61236b565b5b81356129cd848260208601612966565b91505092915050565b600080600080608085870312156129f0576129ef6122a6565b5b60006129fe878288016125ae565b9450506020612a0f878288016125ae565b9350506040612a20878288016124f9565b925050606085013567ffffffffffffffff811115612a4157612a406122ab565b5b612a4d878288016129a8565b91505092959194509250565b60008060208385031215612a7057612a6f6122a6565b5b600083013567ffffffffffffffff811115612a8e57612a8d6122ab565b5b612a9a8582860161272f565b92509250509250929050565b60008060408385031215612abd57612abc6122a6565b5b6000612acb858286016125ae565b9250506020612adc858286016125ae565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612b1c602083612428565b9150612b2782612ae6565b602082019050919050565b60006020820190508181036000830152612b4b81612b0f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b9957607f821691505b602082108103612bac57612bab612b52565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612c0e602c83612428565b9150612c1982612bb2565b604082019050919050565b60006020820190508181036000830152612c3d81612c01565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612ca0602183612428565b9150612cab82612c44565b604082019050919050565b60006020820190508181036000830152612ccf81612c93565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612d32603883612428565b9150612d3d82612cd6565b604082019050919050565b60006020820190508181036000830152612d6181612d25565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000612dc4603183612428565b9150612dcf82612d68565b604082019050919050565b60006020820190508181036000830152612df381612db7565b9050919050565b7f41727261797320646f206e6f74206d617463682e000000000000000000000000600082015250565b6000612e30601483612428565b9150612e3b82612dfa565b602082019050919050565b60006020820190508181036000830152612e5f81612e23565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ecf826124d8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612f0157612f00612e95565b5b600182019050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000612f68602983612428565b9150612f7382612f0c565b604082019050919050565b60006020820190508181036000830152612f9781612f5b565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000612ffa602a83612428565b915061300582612f9e565b604082019050919050565b6000602082019050818103600083015261302981612fed565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b600061308c602f83612428565b915061309782613030565b604082019050919050565b600060208201905081810360008301526130bb8161307f565b9050919050565b60006130cd826124d8565b91506130d8836124d8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561310d5761310c612e95565b5b828201905092915050565b6000613123826124d8565b915061312e836124d8565b92508282101561314157613140612e95565b5b828203905092915050565b7f4d757374206f776e20746f6b656e20746f206269667572636174652e00000000600082015250565b6000613182601c83612428565b915061318d8261314c565b602082019050919050565b600060208201905081810360008301526131b181613175565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613214602683612428565b915061321f826131b8565b604082019050919050565b6000602082019050818103600083015261324381613207565b9050919050565b60008151905061325981612597565b92915050565b600060208284031215613275576132746122a6565b5b60006132838482850161324a565b91505092915050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006132e8602c83612428565b91506132f38261328c565b604082019050919050565b60006020820190508181036000830152613317816132db565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b600061337a602983612428565b91506133858261331e565b604082019050919050565b600060208201905081810360008301526133a98161336d565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061340c602483612428565b9150613417826133b0565b604082019050919050565b6000602082019050818103600083015261343b816133ff565b9050919050565b7f4d757374206f776e20746f6b656e20746f206275726e2e000000000000000000600082015250565b6000613478601783612428565b915061348382613442565b602082019050919050565b600060208201905081810360008301526134a78161346b565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006134e4601983612428565b91506134ef826134ae565b602082019050919050565b60006020820190508181036000830152613513816134d7565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613576603283612428565b91506135818261351a565b604082019050919050565b600060208201905081810360008301526135a581613569565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006135d3826135ac565b6135dd81856135b7565b93506135ed818560208601612439565b6135f68161246c565b840191505092915050565b6000608082019050613616600083018761256d565b613623602083018661256d565b613630604083018561265c565b818103606083015261364281846135c8565b905095945050505050565b60008151905061365c816122dc565b92915050565b600060208284031215613678576136776122a6565b5b60006136868482850161364d565b9150509291505056fea26469706673582212209b70f9b686a4c1e3cdf4664e82fcd1a76d98c594a9a3425a32e314f12145bab464736f6c634300080d0033
Deployed Bytecode Sourcemap
13069:10081:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14077:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21116:102;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15490:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16122:257;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15710:404;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21226:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23056:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16722:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17069:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22181:74;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22264:416;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14390:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14877:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14525:344;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11858:103;;;:::i;:::-;;11969:107;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11207:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15598:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16387:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17262:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22795:253;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21331:525;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22688:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16550:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21864:311;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12231:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14077:305;14179:4;14231:25;14216:40;;;:11;:40;;;;:105;;;;14288:33;14273:48;;;:11;:48;;;;14216:105;:158;;;;14338:36;14362:11;14338:23;:36::i;:::-;14216:158;14196:178;;14077:305;;;:::o;21116:102::-;11438:12;:10;:12::i;:::-;11427:23;;:7;:5;:7::i;:::-;:23;;;11419:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21203:7:::1;;21187:13;:23;;;;;;;:::i;:::-;;21116:102:::0;;:::o;15490:100::-;15544:13;15577:5;15570:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15490:100;:::o;16122:257::-;16198:7;16226:16;16234:7;16226;:16::i;:::-;16218:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16302:16;16321:15;:24;16337:7;16321:24;;;;;;;;;;;;;;;;;;;;;16302:43;;16363:8;16356:15;;;16122:257;;;:::o;15710:404::-;15791:13;15807:16;15815:7;15807;:16::i;:::-;15791:32;;15848:5;15842:11;;:2;:11;;;15834:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;15942:5;15926:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;15951:37;15968:5;15975:12;:10;:12::i;:::-;15951:16;:37::i;:::-;15926:62;15904:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;16085:21;16094:2;16098:7;16085:8;:21::i;:::-;15780:334;15710:404;;:::o;21226:97::-;11438:12;:10;:12::i;:::-;11427:23;;:7;:5;:7::i;:::-;:23;;;11419:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21308:7:::1;21294:11;;:21;;;;;;;;;;;;;;;;;;21226:97:::0;:::o;23056:91::-;23100:7;23127:12;;23120:19;;23056:91;:::o;16722:339::-;16917:41;16936:12;:10;:12::i;:::-;16950:7;16917:18;:41::i;:::-;16909:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;17025:28;17035:4;17041:2;17045:7;17025:9;:28::i;:::-;16722:339;;;:::o;17069:185::-;17207:39;17224:4;17230:2;17234:7;17207:39;;;;;;;;;;;;:16;:39::i;:::-;17069:185;;;:::o;22181:74::-;22233:14;22239:7;22233:5;:14::i;:::-;22181:74;:::o;22264:416::-;11438:12;:10;:12::i;:::-;11427:23;;:7;:5;:7::i;:::-;:23;;;11419:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22419:4:::1;;:11;;22401:7;;:14;;:29;:57;;;;;22449:2;;:9;;22434:4;;:11;;:24;22401:57;22393:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;22497:9;22493:180;22515:7;;:14;;22511:1;:18;22493:180;;;22584:1;22553:33;;:7;:19;22561:7;;22569:1;22561:10;;;;;;;:::i;:::-;;;;;;;;22553:19;;;;;;;;;;;;;;;;;;;;;:33;;::::0;22550:112:::1;;22636:7;;22644:1;22636:10;;;;;;;:::i;:::-;;;;;;;;22629:2;;22632:1;22629:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22611:36;;22620:4;;22625:1;22620:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22611:36;;;;;;;;;;;;22550:112;22530:3;;;;;:::i;:::-;;;;22493:180;;;;22264:416:::0;;;;;;:::o;14390:127::-;11438:12;:10;:12::i;:::-;11427:23;;:7;:5;:7::i;:::-;:23;;;11419:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14493:15:::1;14473:7;;:36;;;;;;;;;;;;;;;;;;14390:127:::0;:::o;14877:240::-;14949:7;14969:13;14985:17;14994:7;14985:8;:17::i;:::-;14969:33;;15038:1;15021:19;;:5;:19;;;15013:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;15104:5;15097:12;;;14877:240;;;:::o;14525:344::-;14597:7;14642:1;14625:19;;:5;:19;;;14617:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14702:15;14736:9;14732:105;14755:12;;14750:1;:17;14732:105;;14805:5;14790:20;;:11;14799:1;14790:8;:11::i;:::-;:20;;;14787:39;;14814:9;;;;;:::i;:::-;;;;14787:39;14768:3;;;;;:::i;:::-;;;;14732:105;;;;14854:7;14847:14;;;14525:344;;;:::o;11858:103::-;11438:12;:10;:12::i;:::-;11427:23;;:7;:5;:7::i;:::-;:23;;;11419:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11923:30:::1;11950:1;11923:18;:30::i;:::-;11858:103::o:0;11969:107::-;12020:4;12055:12;:10;:12::i;:::-;12045:22;;:6;;;;;;;;;;:22;;;12037:31;;11969:107;:::o;11207:87::-;11253:7;11280:6;;;;;;;;;;;11273:13;;11207:87;:::o;15598:104::-;15654:13;15687:7;15680:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15598:104;:::o;16387:155::-;16482:52;16501:12;:10;:12::i;:::-;16515:8;16525;16482:18;:52::i;:::-;16387:155;;:::o;17262:328::-;17437:41;17456:12;:10;:12::i;:::-;17470:7;17437:18;:41::i;:::-;17429:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;17543:39;17557:4;17563:2;17567:7;17576:5;17543:13;:39::i;:::-;17262:328;;;;:::o;22795:253::-;22860:13;22908:16;22916:7;22908;:16::i;:::-;22886:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;23027:13;23020:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22795:253;;;:::o;21331:525::-;11438:12;:10;:12::i;:::-;11427:23;;:7;:5;:7::i;:::-;:23;;;11419:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21413:22:::1;21438:12;;21413:37;;21532:10;;:17;;21515:14;:34;;;;:::i;:::-;21500:12;:49;;;;21608:9;21603:115;21627:10;;:17;;21623:1;:21;21603:115;;;21666:40;21672:10;;21683:1;21672:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;21704:1;21687:14;:18;;;;:::i;:::-;21666:5;:40::i;:::-;21646:3;;;;;:::i;:::-;;;;21603:115;;;;21774:12;;21769:1;21749:10;;:17;;21732:14;:34;;;;:::i;:::-;:38;;;;:::i;:::-;21731:55;21728:120;;;21843:1;21823:10;;:17;;21806:14;:34;;;;:::i;:::-;:38;;;;:::i;:::-;21790:12;:55;;;;21728:120;21402:454;21331:525:::0;;:::o;22688:99::-;22734:13;22767:12;22760:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22688:99;:::o;16550:164::-;16647:4;16671:18;:25;16690:5;16671:25;;;;;;;;;;;;;;;:35;16697:8;16671:35;;;;;;;;;;;;;;;;;;;;;;;;;16664:42;;16550:164;;;;:::o;21864:311::-;21926:13;21942:16;21950:7;21942;:16::i;:::-;21926:32;;21986:12;:10;:12::i;:::-;21977:21;;:5;:21;;;:42;;;;22002:17;:15;:17::i;:::-;21977:42;21969:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;22091:4;22063:16;:25;22080:7;22063:25;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;22151:5;22132:7;:16;22140:7;22132:16;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;21914:261;21864:311;:::o;12231:201::-;11438:12;:10;:12::i;:::-;11427:23;;:7;:5;:7::i;:::-;:23;;;11419:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12340:1:::1;12320:22;;:8;:22;;::::0;12312:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;12396:28;12415:8;12396:18;:28::i;:::-;12231:201:::0;:::o;10124:157::-;10209:4;10248:25;10233:40;;;:11;:40;;;;10226:47;;10124:157;;;:::o;2265:98::-;2318:7;2345:10;2338:17;;2265:98;:::o;17921:169::-;17986:4;18038:1;18010:30;;:7;:16;18018:7;18010:16;;;;;;;;;;;;;;;;;;;;;:30;;;;:72;;;;18080:1;18044:38;;:7;;;;;;;;;;;:15;;;18060:7;18044:24;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;;;;18010:72;18003:79;;17921:169;;;:::o;19675:167::-;19777:2;19750:15;:24;19766:7;19750:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;19826:7;19822:2;19795:39;;19804:16;19812:7;19804;:16::i;:::-;19795:39;;;;;;;;;;;;19675:167;;:::o;18098:341::-;18191:4;18216:16;18224:7;18216;:16::i;:::-;18208:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18292:13;18308:16;18316:7;18308;:16::i;:::-;18292:32;;18354:5;18343:16;;:7;:16;;;:51;;;;18387:7;18363:31;;:20;18375:7;18363:11;:20::i;:::-;:31;;;18343:51;:87;;;;18398:32;18415:5;18422:7;18398:16;:32::i;:::-;18343:87;18335:96;;;18098:341;;;;:::o;19113:554::-;19265:4;19245:24;;:16;19253:7;19245;:16::i;:::-;:24;;;19237:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;19348:1;19334:16;;:2;:16;;;19326:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;19404:39;19425:4;19431:2;19435:7;19404:20;:39::i;:::-;19508:29;19525:1;19529:7;19508:8;:29::i;:::-;19601:2;19582:7;:16;19590:7;19582:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;19651:7;19647:2;19632:27;;19641:4;19632:27;;;;;;;;;;;;19113:554;;;:::o;18573:532::-;18633:13;18649:16;18657:7;18649;:16::i;:::-;18633:32;;18693:12;:10;:12::i;:::-;18684:21;;:5;:21;;;18676:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;18746:48;18767:5;18782:1;18786:7;18746:20;:48::i;:::-;18835:29;18852:1;18856:7;18835:8;:29::i;:::-;18904:16;:25;18921:7;18904:25;;;;;;;;;;;;;;;;;;;;;18900:68;;18961:4;18933:16;:25;18950:7;18933:25;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;18900:68;18997:1;18981:12;;:17;;;;;;;;;;;19027:7;:16;19035:7;19027:16;;;;;;;;;;;;19020:23;;;;;;;;;;;19089:7;19085:1;19061:36;;19070:5;19061:36;;;;;;;;;;;;18622:483;18573:532;:::o;15125:357::-;15191:7;15211:13;15227:7;:16;15235:7;15227:16;;;;;;;;;;;;;;;;;;;;;15211:32;;15274:1;15257:19;;:5;:19;;;:49;;;;;15281:16;:25;15298:7;15281:25;;;;;;;;;;;;;;;;;;;;;15280:26;15257:49;:65;;;;;15311:11;;;;;;;;;;;15310:12;15257:65;15254:198;;;15342:7;;;;;;;;;;;:15;;;15358:7;15342:24;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;15338:103;;15436:1;15420:18;;15338:103;;;15402:6;15394:14;;15367:44;15338:103;15254:198;15469:5;15462:12;;;15125:357;;;:::o;12592:191::-;12666:16;12685:6;;;;;;;;;;;12666:25;;12711:8;12702:6;;:17;;;;;;;;;;;;;;;;;;12766:8;12735:40;;12756:8;12735:40;;;;;;;;;;;;12655:128;12592:191;:::o;19850:315::-;20005:8;19996:17;;:5;:17;;;19988:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;20092:8;20054:18;:25;20073:5;20054:25;;;;;;;;;;;;;;;:35;20080:8;20054:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20138:8;20116:41;;20131:5;20116:41;;;20148:8;20116:41;;;;;;:::i;:::-;;;;;;;;19850:315;;;:::o;17598:::-;17755:28;17765:4;17771:2;17775:7;17755:9;:28::i;:::-;17802:48;17825:4;17831:2;17835:7;17844:5;17802:22;:48::i;:::-;17794:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17598:315;;;;:::o;18447:118::-;18549:7;18545:2;18524:33;;18541:1;18524:33;;;;;;;;;;;;18447:118;;:::o;20980:126::-;;;;:::o;20173:799::-;20328:4;20349:15;:2;:13;;;:15::i;:::-;20345:620;;;20401:2;20385:36;;;20422:12;:10;:12::i;:::-;20436:4;20442:7;20451:5;20385:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;20381:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20644:1;20627:6;:13;:18;20623:272;;20670:60;;;;;;;;;;:::i;:::-;;;;;;;;20623:272;20845:6;20839:13;20830:6;20826:2;20822:15;20815:38;20381:529;20518:41;;;20508:51;;;:6;:51;;;;20501:58;;;;;20345:620;20949:4;20942:11;;20173:799;;;;;;;:::o;25824:387::-;25884:4;26092:12;26159:7;26147:20;26139:28;;26202:1;26195:4;:8;26188:15;;;25824:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:117::-;1627:1;1624;1617:12;1641:117;1750:1;1747;1740:12;1764:117;1873:1;1870;1863:12;1901:553;1959:8;1969:6;2019:3;2012:4;2004:6;2000:17;1996:27;1986:122;;2027:79;;:::i;:::-;1986:122;2140:6;2127:20;2117:30;;2170:18;2162:6;2159:30;2156:117;;;2192:79;;:::i;:::-;2156:117;2306:4;2298:6;2294:17;2282:29;;2360:3;2352:4;2344:6;2340:17;2330:8;2326:32;2323:41;2320:128;;;2367:79;;:::i;:::-;2320:128;1901:553;;;;;:::o;2460:529::-;2531:6;2539;2588:2;2576:9;2567:7;2563:23;2559:32;2556:119;;;2594:79;;:::i;:::-;2556:119;2742:1;2731:9;2727:17;2714:31;2772:18;2764:6;2761:30;2758:117;;;2794:79;;:::i;:::-;2758:117;2907:65;2964:7;2955:6;2944:9;2940:22;2907:65;:::i;:::-;2889:83;;;;2685:297;2460:529;;;;;:::o;2995:99::-;3047:6;3081:5;3075:12;3065:22;;2995:99;;;:::o;3100:169::-;3184:11;3218:6;3213:3;3206:19;3258:4;3253:3;3249:14;3234:29;;3100:169;;;;:::o;3275:307::-;3343:1;3353:113;3367:6;3364:1;3361:13;3353:113;;;3452:1;3447:3;3443:11;3437:18;3433:1;3428:3;3424:11;3417:39;3389:2;3386:1;3382:10;3377:15;;3353:113;;;3484:6;3481:1;3478:13;3475:101;;;3564:1;3555:6;3550:3;3546:16;3539:27;3475:101;3324:258;3275:307;;;:::o;3588:102::-;3629:6;3680:2;3676:7;3671:2;3664:5;3660:14;3656:28;3646:38;;3588:102;;;:::o;3696:364::-;3784:3;3812:39;3845:5;3812:39;:::i;:::-;3867:71;3931:6;3926:3;3867:71;:::i;:::-;3860:78;;3947:52;3992:6;3987:3;3980:4;3973:5;3969:16;3947:52;:::i;:::-;4024:29;4046:6;4024:29;:::i;:::-;4019:3;4015:39;4008:46;;3788:272;3696:364;;;;:::o;4066:313::-;4179:4;4217:2;4206:9;4202:18;4194:26;;4266:9;4260:4;4256:20;4252:1;4241:9;4237:17;4230:47;4294:78;4367:4;4358:6;4294:78;:::i;:::-;4286:86;;4066:313;;;;:::o;4385:77::-;4422:7;4451:5;4440:16;;4385:77;;;:::o;4468:122::-;4541:24;4559:5;4541:24;:::i;:::-;4534:5;4531:35;4521:63;;4580:1;4577;4570:12;4521:63;4468:122;:::o;4596:139::-;4642:5;4680:6;4667:20;4658:29;;4696:33;4723:5;4696:33;:::i;:::-;4596:139;;;;:::o;4741:329::-;4800:6;4849:2;4837:9;4828:7;4824:23;4820:32;4817:119;;;4855:79;;:::i;:::-;4817:119;4975:1;5000:53;5045:7;5036:6;5025:9;5021:22;5000:53;:::i;:::-;4990:63;;4946:117;4741:329;;;;:::o;5076:126::-;5113:7;5153:42;5146:5;5142:54;5131:65;;5076:126;;;:::o;5208:96::-;5245:7;5274:24;5292:5;5274:24;:::i;:::-;5263:35;;5208:96;;;:::o;5310:118::-;5397:24;5415:5;5397:24;:::i;:::-;5392:3;5385:37;5310:118;;:::o;5434:222::-;5527:4;5565:2;5554:9;5550:18;5542:26;;5578:71;5646:1;5635:9;5631:17;5622:6;5578:71;:::i;:::-;5434:222;;;;:::o;5662:122::-;5735:24;5753:5;5735:24;:::i;:::-;5728:5;5725:35;5715:63;;5774:1;5771;5764:12;5715:63;5662:122;:::o;5790:139::-;5836:5;5874:6;5861:20;5852:29;;5890:33;5917:5;5890:33;:::i;:::-;5790:139;;;;:::o;5935:474::-;6003:6;6011;6060:2;6048:9;6039:7;6035:23;6031:32;6028:119;;;6066:79;;:::i;:::-;6028:119;6186:1;6211:53;6256:7;6247:6;6236:9;6232:22;6211:53;:::i;:::-;6201:63;;6157:117;6313:2;6339:53;6384:7;6375:6;6364:9;6360:22;6339:53;:::i;:::-;6329:63;;6284:118;5935:474;;;;;:::o;6415:116::-;6485:21;6500:5;6485:21;:::i;:::-;6478:5;6475:32;6465:60;;6521:1;6518;6511:12;6465:60;6415:116;:::o;6537:133::-;6580:5;6618:6;6605:20;6596:29;;6634:30;6658:5;6634:30;:::i;:::-;6537:133;;;;:::o;6676:323::-;6732:6;6781:2;6769:9;6760:7;6756:23;6752:32;6749:119;;;6787:79;;:::i;:::-;6749:119;6907:1;6932:50;6974:7;6965:6;6954:9;6950:22;6932:50;:::i;:::-;6922:60;;6878:114;6676:323;;;;:::o;7005:118::-;7092:24;7110:5;7092:24;:::i;:::-;7087:3;7080:37;7005:118;;:::o;7129:222::-;7222:4;7260:2;7249:9;7245:18;7237:26;;7273:71;7341:1;7330:9;7326:17;7317:6;7273:71;:::i;:::-;7129:222;;;;:::o;7357:619::-;7434:6;7442;7450;7499:2;7487:9;7478:7;7474:23;7470:32;7467:119;;;7505:79;;:::i;:::-;7467:119;7625:1;7650:53;7695:7;7686:6;7675:9;7671:22;7650:53;:::i;:::-;7640:63;;7596:117;7752:2;7778:53;7823:7;7814:6;7803:9;7799:22;7778:53;:::i;:::-;7768:63;;7723:118;7880:2;7906:53;7951:7;7942:6;7931:9;7927:22;7906:53;:::i;:::-;7896:63;;7851:118;7357:619;;;;;:::o;7999:568::-;8072:8;8082:6;8132:3;8125:4;8117:6;8113:17;8109:27;8099:122;;8140:79;;:::i;:::-;8099:122;8253:6;8240:20;8230:30;;8283:18;8275:6;8272:30;8269:117;;;8305:79;;:::i;:::-;8269:117;8419:4;8411:6;8407:17;8395:29;;8473:3;8465:4;8457:6;8453:17;8443:8;8439:32;8436:41;8433:128;;;8480:79;;:::i;:::-;8433:128;7999:568;;;;;:::o;8590:::-;8663:8;8673:6;8723:3;8716:4;8708:6;8704:17;8700:27;8690:122;;8731:79;;:::i;:::-;8690:122;8844:6;8831:20;8821:30;;8874:18;8866:6;8863:30;8860:117;;;8896:79;;:::i;:::-;8860:117;9010:4;9002:6;8998:17;8986:29;;9064:3;9056:4;9048:6;9044:17;9034:8;9030:32;9027:41;9024:128;;;9071:79;;:::i;:::-;9024:128;8590:568;;;;;:::o;9164:1309::-;9322:6;9330;9338;9346;9354;9362;9411:2;9399:9;9390:7;9386:23;9382:32;9379:119;;;9417:79;;:::i;:::-;9379:119;9565:1;9554:9;9550:17;9537:31;9595:18;9587:6;9584:30;9581:117;;;9617:79;;:::i;:::-;9581:117;9730:80;9802:7;9793:6;9782:9;9778:22;9730:80;:::i;:::-;9712:98;;;;9508:312;9887:2;9876:9;9872:18;9859:32;9918:18;9910:6;9907:30;9904:117;;;9940:79;;:::i;:::-;9904:117;10053:80;10125:7;10116:6;10105:9;10101:22;10053:80;:::i;:::-;10035:98;;;;9830:313;10210:2;10199:9;10195:18;10182:32;10241:18;10233:6;10230:30;10227:117;;;10263:79;;:::i;:::-;10227:117;10376:80;10448:7;10439:6;10428:9;10424:22;10376:80;:::i;:::-;10358:98;;;;10153:313;9164:1309;;;;;;;;:::o;10479:329::-;10538:6;10587:2;10575:9;10566:7;10562:23;10558:32;10555:119;;;10593:79;;:::i;:::-;10555:119;10713:1;10738:53;10783:7;10774:6;10763:9;10759:22;10738:53;:::i;:::-;10728:63;;10684:117;10479:329;;;;:::o;10814:468::-;10879:6;10887;10936:2;10924:9;10915:7;10911:23;10907:32;10904:119;;;10942:79;;:::i;:::-;10904:119;11062:1;11087:53;11132:7;11123:6;11112:9;11108:22;11087:53;:::i;:::-;11077:63;;11033:117;11189:2;11215:50;11257:7;11248:6;11237:9;11233:22;11215:50;:::i;:::-;11205:60;;11160:115;10814:468;;;;;:::o;11288:117::-;11397:1;11394;11387:12;11411:180;11459:77;11456:1;11449:88;11556:4;11553:1;11546:15;11580:4;11577:1;11570:15;11597:281;11680:27;11702:4;11680:27;:::i;:::-;11672:6;11668:40;11810:6;11798:10;11795:22;11774:18;11762:10;11759:34;11756:62;11753:88;;;11821:18;;:::i;:::-;11753:88;11861:10;11857:2;11850:22;11640:238;11597:281;;:::o;11884:129::-;11918:6;11945:20;;:::i;:::-;11935:30;;11974:33;12002:4;11994:6;11974:33;:::i;:::-;11884:129;;;:::o;12019:307::-;12080:4;12170:18;12162:6;12159:30;12156:56;;;12192:18;;:::i;:::-;12156:56;12230:29;12252:6;12230:29;:::i;:::-;12222:37;;12314:4;12308;12304:15;12296:23;;12019:307;;;:::o;12332:154::-;12416:6;12411:3;12406;12393:30;12478:1;12469:6;12464:3;12460:16;12453:27;12332:154;;;:::o;12492:410::-;12569:5;12594:65;12610:48;12651:6;12610:48;:::i;:::-;12594:65;:::i;:::-;12585:74;;12682:6;12675:5;12668:21;12720:4;12713:5;12709:16;12758:3;12749:6;12744:3;12740:16;12737:25;12734:112;;;12765:79;;:::i;:::-;12734:112;12855:41;12889:6;12884:3;12879;12855:41;:::i;:::-;12575:327;12492:410;;;;;:::o;12921:338::-;12976:5;13025:3;13018:4;13010:6;13006:17;13002:27;12992:122;;13033:79;;:::i;:::-;12992:122;13150:6;13137:20;13175:78;13249:3;13241:6;13234:4;13226:6;13222:17;13175:78;:::i;:::-;13166:87;;12982:277;12921:338;;;;:::o;13265:943::-;13360:6;13368;13376;13384;13433:3;13421:9;13412:7;13408:23;13404:33;13401:120;;;13440:79;;:::i;:::-;13401:120;13560:1;13585:53;13630:7;13621:6;13610:9;13606:22;13585:53;:::i;:::-;13575:63;;13531:117;13687:2;13713:53;13758:7;13749:6;13738:9;13734:22;13713:53;:::i;:::-;13703:63;;13658:118;13815:2;13841:53;13886:7;13877:6;13866:9;13862:22;13841:53;:::i;:::-;13831:63;;13786:118;13971:2;13960:9;13956:18;13943:32;14002:18;13994:6;13991:30;13988:117;;;14024:79;;:::i;:::-;13988:117;14129:62;14183:7;14174:6;14163:9;14159:22;14129:62;:::i;:::-;14119:72;;13914:287;13265:943;;;;;;;:::o;14214:559::-;14300:6;14308;14357:2;14345:9;14336:7;14332:23;14328:32;14325:119;;;14363:79;;:::i;:::-;14325:119;14511:1;14500:9;14496:17;14483:31;14541:18;14533:6;14530:30;14527:117;;;14563:79;;:::i;:::-;14527:117;14676:80;14748:7;14739:6;14728:9;14724:22;14676:80;:::i;:::-;14658:98;;;;14454:312;14214:559;;;;;:::o;14779:474::-;14847:6;14855;14904:2;14892:9;14883:7;14879:23;14875:32;14872:119;;;14910:79;;:::i;:::-;14872:119;15030:1;15055:53;15100:7;15091:6;15080:9;15076:22;15055:53;:::i;:::-;15045:63;;15001:117;15157:2;15183:53;15228:7;15219:6;15208:9;15204:22;15183:53;:::i;:::-;15173:63;;15128:118;14779:474;;;;;:::o;15259:182::-;15399:34;15395:1;15387:6;15383:14;15376:58;15259:182;:::o;15447:366::-;15589:3;15610:67;15674:2;15669:3;15610:67;:::i;:::-;15603:74;;15686:93;15775:3;15686:93;:::i;:::-;15804:2;15799:3;15795:12;15788:19;;15447:366;;;:::o;15819:419::-;15985:4;16023:2;16012:9;16008:18;16000:26;;16072:9;16066:4;16062:20;16058:1;16047:9;16043:17;16036:47;16100:131;16226:4;16100:131;:::i;:::-;16092:139;;15819:419;;;:::o;16244:180::-;16292:77;16289:1;16282:88;16389:4;16386:1;16379:15;16413:4;16410:1;16403:15;16430:320;16474:6;16511:1;16505:4;16501:12;16491:22;;16558:1;16552:4;16548:12;16579:18;16569:81;;16635:4;16627:6;16623:17;16613:27;;16569:81;16697:2;16689:6;16686:14;16666:18;16663:38;16660:84;;16716:18;;:::i;:::-;16660:84;16481:269;16430:320;;;:::o;16756:231::-;16896:34;16892:1;16884:6;16880:14;16873:58;16965:14;16960:2;16952:6;16948:15;16941:39;16756:231;:::o;16993:366::-;17135:3;17156:67;17220:2;17215:3;17156:67;:::i;:::-;17149:74;;17232:93;17321:3;17232:93;:::i;:::-;17350:2;17345:3;17341:12;17334:19;;16993:366;;;:::o;17365:419::-;17531:4;17569:2;17558:9;17554:18;17546:26;;17618:9;17612:4;17608:20;17604:1;17593:9;17589:17;17582:47;17646:131;17772:4;17646:131;:::i;:::-;17638:139;;17365:419;;;:::o;17790:220::-;17930:34;17926:1;17918:6;17914:14;17907:58;17999:3;17994:2;17986:6;17982:15;17975:28;17790:220;:::o;18016:366::-;18158:3;18179:67;18243:2;18238:3;18179:67;:::i;:::-;18172:74;;18255:93;18344:3;18255:93;:::i;:::-;18373:2;18368:3;18364:12;18357:19;;18016:366;;;:::o;18388:419::-;18554:4;18592:2;18581:9;18577:18;18569:26;;18641:9;18635:4;18631:20;18627:1;18616:9;18612:17;18605:47;18669:131;18795:4;18669:131;:::i;:::-;18661:139;;18388:419;;;:::o;18813:243::-;18953:34;18949:1;18941:6;18937:14;18930:58;19022:26;19017:2;19009:6;19005:15;18998:51;18813:243;:::o;19062:366::-;19204:3;19225:67;19289:2;19284:3;19225:67;:::i;:::-;19218:74;;19301:93;19390:3;19301:93;:::i;:::-;19419:2;19414:3;19410:12;19403:19;;19062:366;;;:::o;19434:419::-;19600:4;19638:2;19627:9;19623:18;19615:26;;19687:9;19681:4;19677:20;19673:1;19662:9;19658:17;19651:47;19715:131;19841:4;19715:131;:::i;:::-;19707:139;;19434:419;;;:::o;19859:236::-;19999:34;19995:1;19987:6;19983:14;19976:58;20068:19;20063:2;20055:6;20051:15;20044:44;19859:236;:::o;20101:366::-;20243:3;20264:67;20328:2;20323:3;20264:67;:::i;:::-;20257:74;;20340:93;20429:3;20340:93;:::i;:::-;20458:2;20453:3;20449:12;20442:19;;20101:366;;;:::o;20473:419::-;20639:4;20677:2;20666:9;20662:18;20654:26;;20726:9;20720:4;20716:20;20712:1;20701:9;20697:17;20690:47;20754:131;20880:4;20754:131;:::i;:::-;20746:139;;20473:419;;;:::o;20898:170::-;21038:22;21034:1;21026:6;21022:14;21015:46;20898:170;:::o;21074:366::-;21216:3;21237:67;21301:2;21296:3;21237:67;:::i;:::-;21230:74;;21313:93;21402:3;21313:93;:::i;:::-;21431:2;21426:3;21422:12;21415:19;;21074:366;;;:::o;21446:419::-;21612:4;21650:2;21639:9;21635:18;21627:26;;21699:9;21693:4;21689:20;21685:1;21674:9;21670:17;21663:47;21727:131;21853:4;21727:131;:::i;:::-;21719:139;;21446:419;;;:::o;21871:180::-;21919:77;21916:1;21909:88;22016:4;22013:1;22006:15;22040:4;22037:1;22030:15;22057:180;22105:77;22102:1;22095:88;22202:4;22199:1;22192:15;22226:4;22223:1;22216:15;22243:233;22282:3;22305:24;22323:5;22305:24;:::i;:::-;22296:33;;22351:66;22344:5;22341:77;22338:103;;22421:18;;:::i;:::-;22338:103;22468:1;22461:5;22457:13;22450:20;;22243:233;;;:::o;22482:228::-;22622:34;22618:1;22610:6;22606:14;22599:58;22691:11;22686:2;22678:6;22674:15;22667:36;22482:228;:::o;22716:366::-;22858:3;22879:67;22943:2;22938:3;22879:67;:::i;:::-;22872:74;;22955:93;23044:3;22955:93;:::i;:::-;23073:2;23068:3;23064:12;23057:19;;22716:366;;;:::o;23088:419::-;23254:4;23292:2;23281:9;23277:18;23269:26;;23341:9;23335:4;23331:20;23327:1;23316:9;23312:17;23305:47;23369:131;23495:4;23369:131;:::i;:::-;23361:139;;23088:419;;;:::o;23513:229::-;23653:34;23649:1;23641:6;23637:14;23630:58;23722:12;23717:2;23709:6;23705:15;23698:37;23513:229;:::o;23748:366::-;23890:3;23911:67;23975:2;23970:3;23911:67;:::i;:::-;23904:74;;23987:93;24076:3;23987:93;:::i;:::-;24105:2;24100:3;24096:12;24089:19;;23748:366;;;:::o;24120:419::-;24286:4;24324:2;24313:9;24309:18;24301:26;;24373:9;24367:4;24363:20;24359:1;24348:9;24344:17;24337:47;24401:131;24527:4;24401:131;:::i;:::-;24393:139;;24120:419;;;:::o;24545:234::-;24685:34;24681:1;24673:6;24669:14;24662:58;24754:17;24749:2;24741:6;24737:15;24730:42;24545:234;:::o;24785:366::-;24927:3;24948:67;25012:2;25007:3;24948:67;:::i;:::-;24941:74;;25024:93;25113:3;25024:93;:::i;:::-;25142:2;25137:3;25133:12;25126:19;;24785:366;;;:::o;25157:419::-;25323:4;25361:2;25350:9;25346:18;25338:26;;25410:9;25404:4;25400:20;25396:1;25385:9;25381:17;25374:47;25438:131;25564:4;25438:131;:::i;:::-;25430:139;;25157:419;;;:::o;25582:305::-;25622:3;25641:20;25659:1;25641:20;:::i;:::-;25636:25;;25675:20;25693:1;25675:20;:::i;:::-;25670:25;;25829:1;25761:66;25757:74;25754:1;25751:81;25748:107;;;25835:18;;:::i;:::-;25748:107;25879:1;25876;25872:9;25865:16;;25582:305;;;;:::o;25893:191::-;25933:4;25953:20;25971:1;25953:20;:::i;:::-;25948:25;;25987:20;26005:1;25987:20;:::i;:::-;25982:25;;26026:1;26023;26020:8;26017:34;;;26031:18;;:::i;:::-;26017:34;26076:1;26073;26069:9;26061:17;;25893:191;;;;:::o;26090:178::-;26230:30;26226:1;26218:6;26214:14;26207:54;26090:178;:::o;26274:366::-;26416:3;26437:67;26501:2;26496:3;26437:67;:::i;:::-;26430:74;;26513:93;26602:3;26513:93;:::i;:::-;26631:2;26626:3;26622:12;26615:19;;26274:366;;;:::o;26646:419::-;26812:4;26850:2;26839:9;26835:18;26827:26;;26899:9;26893:4;26889:20;26885:1;26874:9;26870:17;26863:47;26927:131;27053:4;26927:131;:::i;:::-;26919:139;;26646:419;;;:::o;27071:225::-;27211:34;27207:1;27199:6;27195:14;27188:58;27280:8;27275:2;27267:6;27263:15;27256:33;27071:225;:::o;27302:366::-;27444:3;27465:67;27529:2;27524:3;27465:67;:::i;:::-;27458:74;;27541:93;27630:3;27541:93;:::i;:::-;27659:2;27654:3;27650:12;27643:19;;27302:366;;;:::o;27674:419::-;27840:4;27878:2;27867:9;27863:18;27855:26;;27927:9;27921:4;27917:20;27913:1;27902:9;27898:17;27891:47;27955:131;28081:4;27955:131;:::i;:::-;27947:139;;27674:419;;;:::o;28099:143::-;28156:5;28187:6;28181:13;28172:22;;28203:33;28230:5;28203:33;:::i;:::-;28099:143;;;;:::o;28248:351::-;28318:6;28367:2;28355:9;28346:7;28342:23;28338:32;28335:119;;;28373:79;;:::i;:::-;28335:119;28493:1;28518:64;28574:7;28565:6;28554:9;28550:22;28518:64;:::i;:::-;28508:74;;28464:128;28248:351;;;;:::o;28605:231::-;28745:34;28741:1;28733:6;28729:14;28722:58;28814:14;28809:2;28801:6;28797:15;28790:39;28605:231;:::o;28842:366::-;28984:3;29005:67;29069:2;29064:3;29005:67;:::i;:::-;28998:74;;29081:93;29170:3;29081:93;:::i;:::-;29199:2;29194:3;29190:12;29183:19;;28842:366;;;:::o;29214:419::-;29380:4;29418:2;29407:9;29403:18;29395:26;;29467:9;29461:4;29457:20;29453:1;29442:9;29438:17;29431:47;29495:131;29621:4;29495:131;:::i;:::-;29487:139;;29214:419;;;:::o;29639:228::-;29779:34;29775:1;29767:6;29763:14;29756:58;29848:11;29843:2;29835:6;29831:15;29824:36;29639:228;:::o;29873:366::-;30015:3;30036:67;30100:2;30095:3;30036:67;:::i;:::-;30029:74;;30112:93;30201:3;30112:93;:::i;:::-;30230:2;30225:3;30221:12;30214:19;;29873:366;;;:::o;30245:419::-;30411:4;30449:2;30438:9;30434:18;30426:26;;30498:9;30492:4;30488:20;30484:1;30473:9;30469:17;30462:47;30526:131;30652:4;30526:131;:::i;:::-;30518:139;;30245:419;;;:::o;30670:223::-;30810:34;30806:1;30798:6;30794:14;30787:58;30879:6;30874:2;30866:6;30862:15;30855:31;30670:223;:::o;30899:366::-;31041:3;31062:67;31126:2;31121:3;31062:67;:::i;:::-;31055:74;;31138:93;31227:3;31138:93;:::i;:::-;31256:2;31251:3;31247:12;31240:19;;30899:366;;;:::o;31271:419::-;31437:4;31475:2;31464:9;31460:18;31452:26;;31524:9;31518:4;31514:20;31510:1;31499:9;31495:17;31488:47;31552:131;31678:4;31552:131;:::i;:::-;31544:139;;31271:419;;;:::o;31696:173::-;31836:25;31832:1;31824:6;31820:14;31813:49;31696:173;:::o;31875:366::-;32017:3;32038:67;32102:2;32097:3;32038:67;:::i;:::-;32031:74;;32114:93;32203:3;32114:93;:::i;:::-;32232:2;32227:3;32223:12;32216:19;;31875:366;;;:::o;32247:419::-;32413:4;32451:2;32440:9;32436:18;32428:26;;32500:9;32494:4;32490:20;32486:1;32475:9;32471:17;32464:47;32528:131;32654:4;32528:131;:::i;:::-;32520:139;;32247:419;;;:::o;32672:175::-;32812:27;32808:1;32800:6;32796:14;32789:51;32672:175;:::o;32853:366::-;32995:3;33016:67;33080:2;33075:3;33016:67;:::i;:::-;33009:74;;33092:93;33181:3;33092:93;:::i;:::-;33210:2;33205:3;33201:12;33194:19;;32853:366;;;:::o;33225:419::-;33391:4;33429:2;33418:9;33414:18;33406:26;;33478:9;33472:4;33468:20;33464:1;33453:9;33449:17;33442:47;33506:131;33632:4;33506:131;:::i;:::-;33498:139;;33225:419;;;:::o;33650:237::-;33790:34;33786:1;33778:6;33774:14;33767:58;33859:20;33854:2;33846:6;33842:15;33835:45;33650:237;:::o;33893:366::-;34035:3;34056:67;34120:2;34115:3;34056:67;:::i;:::-;34049:74;;34132:93;34221:3;34132:93;:::i;:::-;34250:2;34245:3;34241:12;34234:19;;33893:366;;;:::o;34265:419::-;34431:4;34469:2;34458:9;34454:18;34446:26;;34518:9;34512:4;34508:20;34504:1;34493:9;34489:17;34482:47;34546:131;34672:4;34546:131;:::i;:::-;34538:139;;34265:419;;;:::o;34690:98::-;34741:6;34775:5;34769:12;34759:22;;34690:98;;;:::o;34794:168::-;34877:11;34911:6;34906:3;34899:19;34951:4;34946:3;34942:14;34927:29;;34794:168;;;;:::o;34968:360::-;35054:3;35082:38;35114:5;35082:38;:::i;:::-;35136:70;35199:6;35194:3;35136:70;:::i;:::-;35129:77;;35215:52;35260:6;35255:3;35248:4;35241:5;35237:16;35215:52;:::i;:::-;35292:29;35314:6;35292:29;:::i;:::-;35287:3;35283:39;35276:46;;35058:270;34968:360;;;;:::o;35334:640::-;35529:4;35567:3;35556:9;35552:19;35544:27;;35581:71;35649:1;35638:9;35634:17;35625:6;35581:71;:::i;:::-;35662:72;35730:2;35719:9;35715:18;35706:6;35662:72;:::i;:::-;35744;35812:2;35801:9;35797:18;35788:6;35744:72;:::i;:::-;35863:9;35857:4;35853:20;35848:2;35837:9;35833:18;35826:48;35891:76;35962:4;35953:6;35891:76;:::i;:::-;35883:84;;35334:640;;;;;;;:::o;35980:141::-;36036:5;36067:6;36061:13;36052:22;;36083:32;36109:5;36083:32;:::i;:::-;35980:141;;;;:::o;36127:349::-;36196:6;36245:2;36233:9;36224:7;36220:23;36216:32;36213:119;;;36251:79;;:::i;:::-;36213:119;36371:1;36396:63;36451:7;36442:6;36431:9;36427:22;36396:63;:::i;:::-;36386:73;;36342:127;36127:349;;;;:::o
Swarm Source
ipfs://9b70f9b686a4c1e3cdf4664e82fcd1a76d98c594a9a3425a32e314f12145bab4
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.