Overview
ETH Balance
0.0167 ETH
Eth Value
$53.87 (@ $3,225.59/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 42 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer From | 14744138 | 919 days ago | IN | 0 ETH | 0.004191 | ||||
Set Approved Bur... | 14742925 | 919 days ago | IN | 0 ETH | 0.00233745 | ||||
Withdraw | 14739353 | 920 days ago | IN | 0 ETH | 0.00196565 | ||||
Set Sale State | 14739351 | 920 days ago | IN | 0 ETH | 0.00057868 | ||||
Mint Five | 14738159 | 920 days ago | IN | 0.175 ETH | 0.01114074 | ||||
Mint Five | 14730343 | 921 days ago | IN | 0.175 ETH | 0.03583047 | ||||
Mint One | 14725332 | 922 days ago | IN | 0.06 ETH | 0.00464108 | ||||
Mint One | 14724286 | 922 days ago | IN | 0.06 ETH | 0.00825958 | ||||
Transfer From | 14718304 | 923 days ago | IN | 0 ETH | 0.00993082 | ||||
Transfer From | 14718251 | 923 days ago | IN | 0 ETH | 0.01179676 | ||||
Mint Three | 14718203 | 923 days ago | IN | 0.1425 ETH | 0.03515389 | ||||
Mint One | 14716532 | 923 days ago | IN | 0.06 ETH | 0.00460149 | ||||
Mint One | 14716046 | 923 days ago | IN | 0.06 ETH | 0.00450388 | ||||
Mint One | 14704775 | 925 days ago | IN | 0.06 ETH | 0.01064096 | ||||
Mint One | 14701376 | 926 days ago | IN | 0.06 ETH | 0.00876747 | ||||
Mint One | 14699839 | 926 days ago | IN | 0.06 ETH | 0.01394358 | ||||
Mint One | 14699238 | 926 days ago | IN | 0.06 ETH | 0.01126619 | ||||
Mint One | 14674399 | 930 days ago | IN | 0.06 ETH | 0.01179666 | ||||
Mint Five | 14665745 | 931 days ago | IN | 0.175 ETH | 0.01534408 | ||||
Mint Three | 14660472 | 932 days ago | IN | 0.1425 ETH | 0.01363173 | ||||
Mint One | 14655438 | 933 days ago | IN | 0.06 ETH | 0.01026045 | ||||
Mint Five | 14650353 | 934 days ago | IN | 0.175 ETH | 0.01727799 | ||||
Mint Five | 14643195 | 935 days ago | IN | 0.175 ETH | 0.01391443 | ||||
Mint Five | 14640263 | 935 days ago | IN | 0.175 ETH | 0.01389515 | ||||
Mint Five | 14639891 | 935 days ago | IN | 0.175 ETH | 0.01896897 |
Loading...
Loading
Contract Name:
PDSReserved
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC721.sol"; import "./Ownable.sol"; import "./ERC721Enumerable.sol"; contract PDSReserved is ERC721, ERC721Enumerable, Ownable { bool public saleIsActive = false; string private _baseURIextended; address PDSWallet = 0x4C53E1DF995Aefec0d3723fCaFE9edffD4CC5Bcf; address HatchlingzWallet = 0x44D4C4C2197F69aA276c74037f2ce6ebBC5e489E; uint PDSPay = 70; //will be divided by 100 and leave some room for infinite division uint HatchlingzPay = 295; //will be divided by 1000 uint256 public constant MAX_SUPPLY = 1000; uint256 public constant PRICE_FOR_ONE = 0.06 ether; uint256 public constant PRICE_FOR_THREE = 0.1425 ether; uint256 public constant PRICE_FOR_FIVE = 0.175 ether; mapping(address => bool) public approvedBurnAddresses; constructor() ERC721("PDS Reserved", "PDSR") { } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } function setBaseURI(string memory baseURI_) external onlyOwner() { _baseURIextended = baseURI_; } function _baseURI() internal view virtual override returns (string memory) { return _baseURIextended; } function reserve(uint256 n) public onlyOwner { uint supply = totalSupply(); uint i; for (i = 0; i < n; i++) { _safeMint(msg.sender, supply + i); } } function setSaleState(bool newState) public onlyOwner { saleIsActive = newState; } function mintOne() public payable { uint256 ts = totalSupply(); require(saleIsActive, "Sale must be active to mint tokens"); require(ts + 1 <= MAX_SUPPLY, "Purchase would exceed max tokens"); require(PRICE_FOR_ONE <= msg.value, "Ether value sent is not correct"); _safeMint(msg.sender, ts); } function mintThree() public payable { uint256 ts = totalSupply(); require(saleIsActive, "Sale must be active to mint tokens"); require(ts + 3 <= MAX_SUPPLY, "Purchase would exceed max tokens"); require(PRICE_FOR_THREE <= msg.value, "Ether value sent is not correct"); for (uint256 i = 0; i < 3; ++i) { _safeMint(msg.sender, ts + i); } } function mintFive() public payable { uint256 ts = totalSupply(); require(saleIsActive, "Sale must be active to mint tokens"); require(ts + 5 <= MAX_SUPPLY, "Purchase would exceed max tokens"); require(PRICE_FOR_FIVE <= msg.value, "Ether value sent is not correct"); for (uint256 i = 0; i < 5; ++i) { _safeMint(msg.sender, ts + i); } } function burn(address from, uint256 tokenId) public { require(approvedBurnAddresses[msg.sender], "Not approved to burn"); require( from == ownerOf(tokenId), "You need to be the owner of the token to burn it"); _burn( tokenId); } function isAddressApprovedToBurn (address check) external view returns (bool){ return approvedBurnAddresses[check]; } function setApprovedBurnAddresses (address burnApprovedAddress, bool newState) public onlyOwner { approvedBurnAddresses[burnApprovedAddress] = newState; } function withdraw() public onlyOwner { uint balance = address(this).balance; uint PDSPayout = balance*PDSPay/100; uint hatchlingzPayout = balance*HatchlingzPay/1000; payable(PDSWallet).transfer(PDSPayout); payable(HatchlingzWallet).transfer(hatchlingzPayout); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI)) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ 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); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; import "./ERC721.sol"; import "./IERC721Enumerable.sol"; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "./Context.sol"; /** * @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)); } /** * @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); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
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":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_FOR_FIVE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_FOR_ONE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_FOR_THREE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"approvedBurnAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","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":"check","type":"address"}],"name":"isAddressApprovedToBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintFive","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintOne","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintThree","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"n","type":"uint256"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"burnApprovedAddress","type":"address"},{"internalType":"bool","name":"newState","type":"bool"}],"name":"setApprovedBurnAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newState","type":"bool"}],"name":"setSaleState","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600a60146101000a81548160ff021916908315150217905550734c53e1df995aefec0d3723fcafe9edffd4cc5bcf600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507344d4c4c2197f69aa276c74037f2ce6ebbc5e489e600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506046600e55610127600f55348015620000e157600080fd5b506040518060400160405280600c81526020017f50445320526573657276656400000000000000000000000000000000000000008152506040518060400160405280600481526020017f504453520000000000000000000000000000000000000000000000000000000081525081600090805190602001906200016692919062000276565b5080600190805190602001906200017f92919062000276565b505050620001a262000196620001a860201b60201c565b620001b060201b60201c565b6200038b565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002849062000326565b90600052602060002090601f016020900481019282620002a85760008555620002f4565b82601f10620002c357805160ff1916838001178555620002f4565b82800160010185558215620002f4579182015b82811115620002f3578251825591602001919060010190620002d6565b5b50905062000303919062000307565b5090565b5b808211156200032257600081600090555060010162000308565b5090565b600060028204905060018216806200033f57607f821691505b602082108114156200035657620003556200035c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6144d8806200039b6000396000f3fe6080604052600436106102045760003560e01c80636352211e11610118578063b88d4fde116100a0578063eb8d24441161006f578063eb8d244414610716578063f2fde38b14610741578063fbd024611461076a578063fdb70f78146107a7578063fdc01bf2146107d257610204565b8063b88d4fde1461064a578063c4e3709514610673578063c87b56dd1461069c578063e985e9c5146106d957610204565b80638da5cb5b116100e75780638da5cb5b1461056557806395d89b41146105905780639dc29fac146105bb578063a22cb465146105e4578063b8313af61461060d57610204565b80636352211e146104ab57806370a08231146104e8578063715018a614610525578063819b25ba1461053c57610204565b806318160ddd1161019b5780633ccfd60b1161016a5780633ccfd60b146103fb57806342842e0e146104125780634f6ccce71461043b57806355f804b3146104785780635aa9e2a8146104a157610204565b806318160ddd1461033f57806323b872dd1461036a5780632f745c591461039357806332cb6b0c146103d057610204565b8063095ea7b3116101d7578063095ea7b3146102b85780630c0c8be2146102e15780630ced86371461030c578063167175501461031657610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc1461027157806309327fac146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b919061313c565b6107fd565b60405161023d919061367f565b60405180910390f35b34801561025257600080fd5b5061025b61080f565b604051610268919061369a565b60405180910390f35b34801561027d57600080fd5b50610298600480360381019061029391906131df565b6108a1565b6040516102a59190613618565b60405180910390f35b6102b6610926565b005b3480156102c457600080fd5b506102df60048036038101906102da91906130cf565b610a53565b005b3480156102ed57600080fd5b506102f6610b6b565b604051610303919061399c565b60405180910390f35b610314610b77565b005b34801561032257600080fd5b5061033d6004803603810190610338919061308f565b610c7a565b005b34801561034b57600080fd5b50610354610d51565b604051610361919061399c565b60405180910390f35b34801561037657600080fd5b50610391600480360381019061038c9190612fb9565b610d5e565b005b34801561039f57600080fd5b506103ba60048036038101906103b591906130cf565b610dbe565b6040516103c7919061399c565b60405180910390f35b3480156103dc57600080fd5b506103e5610e63565b6040516103f2919061399c565b60405180910390f35b34801561040757600080fd5b50610410610e69565b005b34801561041e57600080fd5b5061043960048036038101906104349190612fb9565b610ffe565b005b34801561044757600080fd5b50610462600480360381019061045d91906131df565b61101e565b60405161046f919061399c565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190613196565b61108f565b005b6104a9611125565b005b3480156104b757600080fd5b506104d260048036038101906104cd91906131df565b611252565b6040516104df9190613618565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a9190612f4c565b611304565b60405161051c919061399c565b60405180910390f35b34801561053157600080fd5b5061053a6113bc565b005b34801561054857600080fd5b50610563600480360381019061055e91906131df565b611444565b005b34801561057157600080fd5b5061057a611504565b6040516105879190613618565b60405180910390f35b34801561059c57600080fd5b506105a561152e565b6040516105b2919061369a565b60405180910390f35b3480156105c757600080fd5b506105e260048036038101906105dd91906130cf565b6115c0565b005b3480156105f057600080fd5b5061060b6004803603810190610606919061308f565b6116cf565b005b34801561061957600080fd5b50610634600480360381019061062f9190612f4c565b6116e5565b604051610641919061367f565b60405180910390f35b34801561065657600080fd5b50610671600480360381019061066c919061300c565b611705565b005b34801561067f57600080fd5b5061069a6004803603810190610695919061310f565b611767565b005b3480156106a857600080fd5b506106c360048036038101906106be91906131df565b611800565b6040516106d0919061369a565b60405180910390f35b3480156106e557600080fd5b5061070060048036038101906106fb9190612f79565b61189d565b60405161070d919061367f565b60405180910390f35b34801561072257600080fd5b5061072b611931565b604051610738919061367f565b60405180910390f35b34801561074d57600080fd5b5061076860048036038101906107639190612f4c565b611944565b005b34801561077657600080fd5b50610791600480360381019061078c9190612f4c565b611a3c565b60405161079e919061367f565b60405180910390f35b3480156107b357600080fd5b506107bc611a92565b6040516107c9919061399c565b60405180910390f35b3480156107de57600080fd5b506107e7611a9e565b6040516107f4919061399c565b60405180910390f35b600061080882611aa9565b9050919050565b60606000805461081e90613c4c565b80601f016020809104026020016040519081016040528092919081815260200182805461084a90613c4c565b80156108975780601f1061086c57610100808354040283529160200191610897565b820191906000526020600020905b81548152906001019060200180831161087a57829003601f168201915b5050505050905090565b60006108ac82611b23565b6108eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e29061389c565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610930610d51565b9050600a60149054906101000a900460ff16610981576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610978906138fc565b60405180910390fd5b6103e86005826109919190613a81565b11156109d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c99061371c565b60405180910390fd5b3467026db992a3b180001115610a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a14906137bc565b60405180910390fd5b60005b6005811015610a4f57610a3e338284610a399190613a81565b611b8f565b80610a4890613caf565b9050610a20565b5050565b6000610a5e82611252565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac69061391c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aee611bad565b73ffffffffffffffffffffffffffffffffffffffff161480610b1d5750610b1c81610b17611bad565b61189d565b5b610b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b539061381c565b60405180910390fd5b610b668383611bb5565b505050565b67026db992a3b1800081565b6000610b81610d51565b9050600a60149054906101000a900460ff16610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc9906138fc565b60405180910390fd5b6103e8600182610be29190613a81565b1115610c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1a9061371c565b60405180910390fd5b3466d529ae9e8600001115610c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c64906137bc565b60405180910390fd5b610c773382611b8f565b50565b610c82611bad565b73ffffffffffffffffffffffffffffffffffffffff16610ca0611504565b73ffffffffffffffffffffffffffffffffffffffff1614610cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ced906138bc565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600880549050905090565b610d6f610d69611bad565b82611c6e565b610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da59061393c565b60405180910390fd5b610db9838383611d4c565b505050565b6000610dc983611304565b8210610e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e01906136bc565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6103e881565b610e71611bad565b73ffffffffffffffffffffffffffffffffffffffff16610e8f611504565b73ffffffffffffffffffffffffffffffffffffffff1614610ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edc906138bc565b60405180910390fd5b600047905060006064600e5483610efc9190613b08565b610f069190613ad7565b905060006103e8600f5484610f1b9190613b08565b610f259190613ad7565b9050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015610f8f573d6000803e3d6000fd5b50600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ff8573d6000803e3d6000fd5b50505050565b61101983838360405180602001604052806000815250611705565b505050565b6000611028610d51565b8210611069576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110609061395c565b60405180910390fd5b6008828154811061107d5761107c613db4565b5b90600052602060002001549050919050565b611097611bad565b73ffffffffffffffffffffffffffffffffffffffff166110b5611504565b73ffffffffffffffffffffffffffffffffffffffff161461110b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611102906138bc565b60405180910390fd5b80600b9080519060200190611121929190612d60565b5050565b600061112f610d51565b9050600a60149054906101000a900460ff16611180576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611177906138fc565b60405180910390fd5b6103e86003826111909190613a81565b11156111d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c89061371c565b60405180910390fd5b346701fa42feb87e4000111561121c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611213906137bc565b60405180910390fd5b60005b600381101561124e5761123d3382846112389190613a81565b611b8f565b8061124790613caf565b905061121f565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f29061385c565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136c9061383c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113c4611bad565b73ffffffffffffffffffffffffffffffffffffffff166113e2611504565b73ffffffffffffffffffffffffffffffffffffffff1614611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f906138bc565b60405180910390fd5b6114426000611fb3565b565b61144c611bad565b73ffffffffffffffffffffffffffffffffffffffff1661146a611504565b73ffffffffffffffffffffffffffffffffffffffff16146114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b7906138bc565b60405180910390fd5b60006114ca610d51565b905060005b828110156114ff576114ec3382846114e79190613a81565b611b8f565b80806114f790613caf565b9150506114cf565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461153d90613c4c565b80601f016020809104026020016040519081016040528092919081815260200182805461156990613c4c565b80156115b65780601f1061158b576101008083540402835291602001916115b6565b820191906000526020600020905b81548152906001019060200180831161159957829003601f168201915b5050505050905090565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661164c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116439061397c565b60405180910390fd5b61165581611252565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146116c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b9906137fc565b60405180910390fd5b6116cb81612079565b5050565b6116e16116da611bad565b8383612196565b5050565b60106020528060005260406000206000915054906101000a900460ff1681565b611716611710611bad565b83611c6e565b611755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174c9061393c565b60405180910390fd5b61176184848484612303565b50505050565b61176f611bad565b73ffffffffffffffffffffffffffffffffffffffff1661178d611504565b73ffffffffffffffffffffffffffffffffffffffff16146117e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117da906138bc565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b606061180b82611b23565b61184a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611841906138dc565b60405180910390fd5b600061185461235f565b905060008151116118745760405180602001604052806000815250611895565b806040516020016118859190613601565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600a60149054906101000a900460ff1681565b61194c611bad565b73ffffffffffffffffffffffffffffffffffffffff1661196a611504565b73ffffffffffffffffffffffffffffffffffffffff16146119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b7906138bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a27906136fc565b60405180910390fd5b611a3981611fb3565b50565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6701fa42feb87e400081565b66d529ae9e86000081565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611b1c5750611b1b826123f1565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b611ba98282604051806020016040528060008152506124d3565b5050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611c2883611252565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611c7982611b23565b611cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caf906137dc565b60405180910390fd5b6000611cc383611252565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d055750611d04818561189d565b5b80611d4357508373ffffffffffffffffffffffffffffffffffffffff16611d2b846108a1565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d6c82611252565b73ffffffffffffffffffffffffffffffffffffffff1614611dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db99061373c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e299061377c565b60405180910390fd5b611e3d83838361252e565b611e48600082611bb5565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e989190613b62565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611eef9190613a81565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611fae83838361253e565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061208482611252565b90506120928160008461252e565b61209d600083611bb5565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120ed9190613b62565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121928160008461253e565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fc9061379c565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122f6919061367f565b60405180910390a3505050565b61230e848484611d4c565b61231a84848484612543565b612359576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612350906136dc565b60405180910390fd5b50505050565b6060600b805461236e90613c4c565b80601f016020809104026020016040519081016040528092919081815260200182805461239a90613c4c565b80156123e75780601f106123bc576101008083540402835291602001916123e7565b820191906000526020600020905b8154815290600101906020018083116123ca57829003601f168201915b5050505050905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124bc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806124cc57506124cb826126da565b5b9050919050565b6124dd8383612744565b6124ea6000848484612543565b612529576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612520906136dc565b60405180910390fd5b505050565b61253983838361291e565b505050565b505050565b60006125648473ffffffffffffffffffffffffffffffffffffffff16612a32565b156126cd578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261258d611bad565b8786866040518563ffffffff1660e01b81526004016125af9493929190613633565b602060405180830381600087803b1580156125c957600080fd5b505af19250505080156125fa57506040513d601f19601f820116820180604052508101906125f79190613169565b60015b61267d573d806000811461262a576040519150601f19603f3d011682016040523d82523d6000602084013e61262f565b606091505b50600081511415612675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266c906136dc565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506126d2565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ab9061387c565b60405180910390fd5b6127bd81611b23565b156127fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f49061375c565b60405180910390fd5b6128096000838361252e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128599190613a81565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461291a6000838361253e565b5050565b612929838383612a55565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561296c5761296781612a5a565b6129ab565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146129aa576129a98382612aa3565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129ee576129e981612c10565b612a2d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a2c57612a2b8282612ce1565b5b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612ab084611304565b612aba9190613b62565b9050600060076000848152602001908152602001600020549050818114612b9f576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612c249190613b62565b9050600060096000848152602001908152602001600020549050600060088381548110612c5457612c53613db4565b5b906000526020600020015490508060088381548110612c7657612c75613db4565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612cc557612cc4613d85565b5b6001900381819060005260206000200160009055905550505050565b6000612cec83611304565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054612d6c90613c4c565b90600052602060002090601f016020900481019282612d8e5760008555612dd5565b82601f10612da757805160ff1916838001178555612dd5565b82800160010185558215612dd5579182015b82811115612dd4578251825591602001919060010190612db9565b5b509050612de29190612de6565b5090565b5b80821115612dff576000816000905550600101612de7565b5090565b6000612e16612e11846139dc565b6139b7565b905082815260208101848484011115612e3257612e31613e17565b5b612e3d848285613c0a565b509392505050565b6000612e58612e5384613a0d565b6139b7565b905082815260208101848484011115612e7457612e73613e17565b5b612e7f848285613c0a565b509392505050565b600081359050612e9681614446565b92915050565b600081359050612eab8161445d565b92915050565b600081359050612ec081614474565b92915050565b600081519050612ed581614474565b92915050565b600082601f830112612ef057612eef613e12565b5b8135612f00848260208601612e03565b91505092915050565b600082601f830112612f1e57612f1d613e12565b5b8135612f2e848260208601612e45565b91505092915050565b600081359050612f468161448b565b92915050565b600060208284031215612f6257612f61613e21565b5b6000612f7084828501612e87565b91505092915050565b60008060408385031215612f9057612f8f613e21565b5b6000612f9e85828601612e87565b9250506020612faf85828601612e87565b9150509250929050565b600080600060608486031215612fd257612fd1613e21565b5b6000612fe086828701612e87565b9350506020612ff186828701612e87565b925050604061300286828701612f37565b9150509250925092565b6000806000806080858703121561302657613025613e21565b5b600061303487828801612e87565b945050602061304587828801612e87565b935050604061305687828801612f37565b925050606085013567ffffffffffffffff81111561307757613076613e1c565b5b61308387828801612edb565b91505092959194509250565b600080604083850312156130a6576130a5613e21565b5b60006130b485828601612e87565b92505060206130c585828601612e9c565b9150509250929050565b600080604083850312156130e6576130e5613e21565b5b60006130f485828601612e87565b925050602061310585828601612f37565b9150509250929050565b60006020828403121561312557613124613e21565b5b600061313384828501612e9c565b91505092915050565b60006020828403121561315257613151613e21565b5b600061316084828501612eb1565b91505092915050565b60006020828403121561317f5761317e613e21565b5b600061318d84828501612ec6565b91505092915050565b6000602082840312156131ac576131ab613e21565b5b600082013567ffffffffffffffff8111156131ca576131c9613e1c565b5b6131d684828501612f09565b91505092915050565b6000602082840312156131f5576131f4613e21565b5b600061320384828501612f37565b91505092915050565b61321581613b96565b82525050565b61322481613ba8565b82525050565b600061323582613a3e565b61323f8185613a54565b935061324f818560208601613c19565b61325881613e26565b840191505092915050565b600061326e82613a49565b6132788185613a65565b9350613288818560208601613c19565b61329181613e26565b840191505092915050565b60006132a782613a49565b6132b18185613a76565b93506132c1818560208601613c19565b80840191505092915050565b60006132da602b83613a65565b91506132e582613e37565b604082019050919050565b60006132fd603283613a65565b915061330882613e86565b604082019050919050565b6000613320602683613a65565b915061332b82613ed5565b604082019050919050565b6000613343602083613a65565b915061334e82613f24565b602082019050919050565b6000613366602583613a65565b915061337182613f4d565b604082019050919050565b6000613389601c83613a65565b915061339482613f9c565b602082019050919050565b60006133ac602483613a65565b91506133b782613fc5565b604082019050919050565b60006133cf601983613a65565b91506133da82614014565b602082019050919050565b60006133f2601f83613a65565b91506133fd8261403d565b602082019050919050565b6000613415602c83613a65565b915061342082614066565b604082019050919050565b6000613438603083613a65565b9150613443826140b5565b604082019050919050565b600061345b603883613a65565b915061346682614104565b604082019050919050565b600061347e602a83613a65565b915061348982614153565b604082019050919050565b60006134a1602983613a65565b91506134ac826141a2565b604082019050919050565b60006134c4602083613a65565b91506134cf826141f1565b602082019050919050565b60006134e7602c83613a65565b91506134f28261421a565b604082019050919050565b600061350a602083613a65565b915061351582614269565b602082019050919050565b600061352d602f83613a65565b915061353882614292565b604082019050919050565b6000613550602283613a65565b915061355b826142e1565b604082019050919050565b6000613573602183613a65565b915061357e82614330565b604082019050919050565b6000613596603183613a65565b91506135a18261437f565b604082019050919050565b60006135b9602c83613a65565b91506135c4826143ce565b604082019050919050565b60006135dc601483613a65565b91506135e78261441d565b602082019050919050565b6135fb81613c00565b82525050565b600061360d828461329c565b915081905092915050565b600060208201905061362d600083018461320c565b92915050565b6000608082019050613648600083018761320c565b613655602083018661320c565b61366260408301856135f2565b8181036060830152613674818461322a565b905095945050505050565b6000602082019050613694600083018461321b565b92915050565b600060208201905081810360008301526136b48184613263565b905092915050565b600060208201905081810360008301526136d5816132cd565b9050919050565b600060208201905081810360008301526136f5816132f0565b9050919050565b6000602082019050818103600083015261371581613313565b9050919050565b6000602082019050818103600083015261373581613336565b9050919050565b6000602082019050818103600083015261375581613359565b9050919050565b600060208201905081810360008301526137758161337c565b9050919050565b600060208201905081810360008301526137958161339f565b9050919050565b600060208201905081810360008301526137b5816133c2565b9050919050565b600060208201905081810360008301526137d5816133e5565b9050919050565b600060208201905081810360008301526137f581613408565b9050919050565b600060208201905081810360008301526138158161342b565b9050919050565b600060208201905081810360008301526138358161344e565b9050919050565b6000602082019050818103600083015261385581613471565b9050919050565b6000602082019050818103600083015261387581613494565b9050919050565b60006020820190508181036000830152613895816134b7565b9050919050565b600060208201905081810360008301526138b5816134da565b9050919050565b600060208201905081810360008301526138d5816134fd565b9050919050565b600060208201905081810360008301526138f581613520565b9050919050565b6000602082019050818103600083015261391581613543565b9050919050565b6000602082019050818103600083015261393581613566565b9050919050565b6000602082019050818103600083015261395581613589565b9050919050565b60006020820190508181036000830152613975816135ac565b9050919050565b60006020820190508181036000830152613995816135cf565b9050919050565b60006020820190506139b160008301846135f2565b92915050565b60006139c16139d2565b90506139cd8282613c7e565b919050565b6000604051905090565b600067ffffffffffffffff8211156139f7576139f6613de3565b5b613a0082613e26565b9050602081019050919050565b600067ffffffffffffffff821115613a2857613a27613de3565b5b613a3182613e26565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613a8c82613c00565b9150613a9783613c00565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613acc57613acb613cf8565b5b828201905092915050565b6000613ae282613c00565b9150613aed83613c00565b925082613afd57613afc613d27565b5b828204905092915050565b6000613b1382613c00565b9150613b1e83613c00565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b5757613b56613cf8565b5b828202905092915050565b6000613b6d82613c00565b9150613b7883613c00565b925082821015613b8b57613b8a613cf8565b5b828203905092915050565b6000613ba182613be0565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613c37578082015181840152602081019050613c1c565b83811115613c46576000848401525b50505050565b60006002820490506001821680613c6457607f821691505b60208210811415613c7857613c77613d56565b5b50919050565b613c8782613e26565b810181811067ffffffffffffffff82111715613ca657613ca5613de3565b5b80604052505050565b6000613cba82613c00565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ced57613cec613cf8565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820746f6b656e73600082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f596f75206e65656420746f20626520746865206f776e6572206f66207468652060008201527f746f6b656e20746f206275726e20697400000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f53616c65206d7573742062652061637469766520746f206d696e7420746f6b6560008201527f6e73000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f7420617070726f76656420746f206275726e000000000000000000000000600082015250565b61444f81613b96565b811461445a57600080fd5b50565b61446681613ba8565b811461447157600080fd5b50565b61447d81613bb4565b811461448857600080fd5b50565b61449481613c00565b811461449f57600080fd5b5056fea2646970667358221220ca8bd062143fcbf6028af6848a3f634e36df404efbfb1e3c9ffd179e245e23e564736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102045760003560e01c80636352211e11610118578063b88d4fde116100a0578063eb8d24441161006f578063eb8d244414610716578063f2fde38b14610741578063fbd024611461076a578063fdb70f78146107a7578063fdc01bf2146107d257610204565b8063b88d4fde1461064a578063c4e3709514610673578063c87b56dd1461069c578063e985e9c5146106d957610204565b80638da5cb5b116100e75780638da5cb5b1461056557806395d89b41146105905780639dc29fac146105bb578063a22cb465146105e4578063b8313af61461060d57610204565b80636352211e146104ab57806370a08231146104e8578063715018a614610525578063819b25ba1461053c57610204565b806318160ddd1161019b5780633ccfd60b1161016a5780633ccfd60b146103fb57806342842e0e146104125780634f6ccce71461043b57806355f804b3146104785780635aa9e2a8146104a157610204565b806318160ddd1461033f57806323b872dd1461036a5780632f745c591461039357806332cb6b0c146103d057610204565b8063095ea7b3116101d7578063095ea7b3146102b85780630c0c8be2146102e15780630ced86371461030c578063167175501461031657610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc1461027157806309327fac146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b919061313c565b6107fd565b60405161023d919061367f565b60405180910390f35b34801561025257600080fd5b5061025b61080f565b604051610268919061369a565b60405180910390f35b34801561027d57600080fd5b50610298600480360381019061029391906131df565b6108a1565b6040516102a59190613618565b60405180910390f35b6102b6610926565b005b3480156102c457600080fd5b506102df60048036038101906102da91906130cf565b610a53565b005b3480156102ed57600080fd5b506102f6610b6b565b604051610303919061399c565b60405180910390f35b610314610b77565b005b34801561032257600080fd5b5061033d6004803603810190610338919061308f565b610c7a565b005b34801561034b57600080fd5b50610354610d51565b604051610361919061399c565b60405180910390f35b34801561037657600080fd5b50610391600480360381019061038c9190612fb9565b610d5e565b005b34801561039f57600080fd5b506103ba60048036038101906103b591906130cf565b610dbe565b6040516103c7919061399c565b60405180910390f35b3480156103dc57600080fd5b506103e5610e63565b6040516103f2919061399c565b60405180910390f35b34801561040757600080fd5b50610410610e69565b005b34801561041e57600080fd5b5061043960048036038101906104349190612fb9565b610ffe565b005b34801561044757600080fd5b50610462600480360381019061045d91906131df565b61101e565b60405161046f919061399c565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190613196565b61108f565b005b6104a9611125565b005b3480156104b757600080fd5b506104d260048036038101906104cd91906131df565b611252565b6040516104df9190613618565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a9190612f4c565b611304565b60405161051c919061399c565b60405180910390f35b34801561053157600080fd5b5061053a6113bc565b005b34801561054857600080fd5b50610563600480360381019061055e91906131df565b611444565b005b34801561057157600080fd5b5061057a611504565b6040516105879190613618565b60405180910390f35b34801561059c57600080fd5b506105a561152e565b6040516105b2919061369a565b60405180910390f35b3480156105c757600080fd5b506105e260048036038101906105dd91906130cf565b6115c0565b005b3480156105f057600080fd5b5061060b6004803603810190610606919061308f565b6116cf565b005b34801561061957600080fd5b50610634600480360381019061062f9190612f4c565b6116e5565b604051610641919061367f565b60405180910390f35b34801561065657600080fd5b50610671600480360381019061066c919061300c565b611705565b005b34801561067f57600080fd5b5061069a6004803603810190610695919061310f565b611767565b005b3480156106a857600080fd5b506106c360048036038101906106be91906131df565b611800565b6040516106d0919061369a565b60405180910390f35b3480156106e557600080fd5b5061070060048036038101906106fb9190612f79565b61189d565b60405161070d919061367f565b60405180910390f35b34801561072257600080fd5b5061072b611931565b604051610738919061367f565b60405180910390f35b34801561074d57600080fd5b5061076860048036038101906107639190612f4c565b611944565b005b34801561077657600080fd5b50610791600480360381019061078c9190612f4c565b611a3c565b60405161079e919061367f565b60405180910390f35b3480156107b357600080fd5b506107bc611a92565b6040516107c9919061399c565b60405180910390f35b3480156107de57600080fd5b506107e7611a9e565b6040516107f4919061399c565b60405180910390f35b600061080882611aa9565b9050919050565b60606000805461081e90613c4c565b80601f016020809104026020016040519081016040528092919081815260200182805461084a90613c4c565b80156108975780601f1061086c57610100808354040283529160200191610897565b820191906000526020600020905b81548152906001019060200180831161087a57829003601f168201915b5050505050905090565b60006108ac82611b23565b6108eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e29061389c565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610930610d51565b9050600a60149054906101000a900460ff16610981576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610978906138fc565b60405180910390fd5b6103e86005826109919190613a81565b11156109d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c99061371c565b60405180910390fd5b3467026db992a3b180001115610a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a14906137bc565b60405180910390fd5b60005b6005811015610a4f57610a3e338284610a399190613a81565b611b8f565b80610a4890613caf565b9050610a20565b5050565b6000610a5e82611252565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac69061391c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aee611bad565b73ffffffffffffffffffffffffffffffffffffffff161480610b1d5750610b1c81610b17611bad565b61189d565b5b610b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b539061381c565b60405180910390fd5b610b668383611bb5565b505050565b67026db992a3b1800081565b6000610b81610d51565b9050600a60149054906101000a900460ff16610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc9906138fc565b60405180910390fd5b6103e8600182610be29190613a81565b1115610c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1a9061371c565b60405180910390fd5b3466d529ae9e8600001115610c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c64906137bc565b60405180910390fd5b610c773382611b8f565b50565b610c82611bad565b73ffffffffffffffffffffffffffffffffffffffff16610ca0611504565b73ffffffffffffffffffffffffffffffffffffffff1614610cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ced906138bc565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600880549050905090565b610d6f610d69611bad565b82611c6e565b610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da59061393c565b60405180910390fd5b610db9838383611d4c565b505050565b6000610dc983611304565b8210610e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e01906136bc565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6103e881565b610e71611bad565b73ffffffffffffffffffffffffffffffffffffffff16610e8f611504565b73ffffffffffffffffffffffffffffffffffffffff1614610ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edc906138bc565b60405180910390fd5b600047905060006064600e5483610efc9190613b08565b610f069190613ad7565b905060006103e8600f5484610f1b9190613b08565b610f259190613ad7565b9050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015610f8f573d6000803e3d6000fd5b50600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ff8573d6000803e3d6000fd5b50505050565b61101983838360405180602001604052806000815250611705565b505050565b6000611028610d51565b8210611069576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110609061395c565b60405180910390fd5b6008828154811061107d5761107c613db4565b5b90600052602060002001549050919050565b611097611bad565b73ffffffffffffffffffffffffffffffffffffffff166110b5611504565b73ffffffffffffffffffffffffffffffffffffffff161461110b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611102906138bc565b60405180910390fd5b80600b9080519060200190611121929190612d60565b5050565b600061112f610d51565b9050600a60149054906101000a900460ff16611180576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611177906138fc565b60405180910390fd5b6103e86003826111909190613a81565b11156111d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c89061371c565b60405180910390fd5b346701fa42feb87e4000111561121c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611213906137bc565b60405180910390fd5b60005b600381101561124e5761123d3382846112389190613a81565b611b8f565b8061124790613caf565b905061121f565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f29061385c565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136c9061383c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113c4611bad565b73ffffffffffffffffffffffffffffffffffffffff166113e2611504565b73ffffffffffffffffffffffffffffffffffffffff1614611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f906138bc565b60405180910390fd5b6114426000611fb3565b565b61144c611bad565b73ffffffffffffffffffffffffffffffffffffffff1661146a611504565b73ffffffffffffffffffffffffffffffffffffffff16146114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b7906138bc565b60405180910390fd5b60006114ca610d51565b905060005b828110156114ff576114ec3382846114e79190613a81565b611b8f565b80806114f790613caf565b9150506114cf565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461153d90613c4c565b80601f016020809104026020016040519081016040528092919081815260200182805461156990613c4c565b80156115b65780601f1061158b576101008083540402835291602001916115b6565b820191906000526020600020905b81548152906001019060200180831161159957829003601f168201915b5050505050905090565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661164c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116439061397c565b60405180910390fd5b61165581611252565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146116c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b9906137fc565b60405180910390fd5b6116cb81612079565b5050565b6116e16116da611bad565b8383612196565b5050565b60106020528060005260406000206000915054906101000a900460ff1681565b611716611710611bad565b83611c6e565b611755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174c9061393c565b60405180910390fd5b61176184848484612303565b50505050565b61176f611bad565b73ffffffffffffffffffffffffffffffffffffffff1661178d611504565b73ffffffffffffffffffffffffffffffffffffffff16146117e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117da906138bc565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b606061180b82611b23565b61184a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611841906138dc565b60405180910390fd5b600061185461235f565b905060008151116118745760405180602001604052806000815250611895565b806040516020016118859190613601565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600a60149054906101000a900460ff1681565b61194c611bad565b73ffffffffffffffffffffffffffffffffffffffff1661196a611504565b73ffffffffffffffffffffffffffffffffffffffff16146119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b7906138bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a27906136fc565b60405180910390fd5b611a3981611fb3565b50565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6701fa42feb87e400081565b66d529ae9e86000081565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611b1c5750611b1b826123f1565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b611ba98282604051806020016040528060008152506124d3565b5050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611c2883611252565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611c7982611b23565b611cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caf906137dc565b60405180910390fd5b6000611cc383611252565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d055750611d04818561189d565b5b80611d4357508373ffffffffffffffffffffffffffffffffffffffff16611d2b846108a1565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d6c82611252565b73ffffffffffffffffffffffffffffffffffffffff1614611dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db99061373c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e299061377c565b60405180910390fd5b611e3d83838361252e565b611e48600082611bb5565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e989190613b62565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611eef9190613a81565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611fae83838361253e565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061208482611252565b90506120928160008461252e565b61209d600083611bb5565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120ed9190613b62565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121928160008461253e565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fc9061379c565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122f6919061367f565b60405180910390a3505050565b61230e848484611d4c565b61231a84848484612543565b612359576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612350906136dc565b60405180910390fd5b50505050565b6060600b805461236e90613c4c565b80601f016020809104026020016040519081016040528092919081815260200182805461239a90613c4c565b80156123e75780601f106123bc576101008083540402835291602001916123e7565b820191906000526020600020905b8154815290600101906020018083116123ca57829003601f168201915b5050505050905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124bc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806124cc57506124cb826126da565b5b9050919050565b6124dd8383612744565b6124ea6000848484612543565b612529576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612520906136dc565b60405180910390fd5b505050565b61253983838361291e565b505050565b505050565b60006125648473ffffffffffffffffffffffffffffffffffffffff16612a32565b156126cd578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261258d611bad565b8786866040518563ffffffff1660e01b81526004016125af9493929190613633565b602060405180830381600087803b1580156125c957600080fd5b505af19250505080156125fa57506040513d601f19601f820116820180604052508101906125f79190613169565b60015b61267d573d806000811461262a576040519150601f19603f3d011682016040523d82523d6000602084013e61262f565b606091505b50600081511415612675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266c906136dc565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506126d2565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ab9061387c565b60405180910390fd5b6127bd81611b23565b156127fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f49061375c565b60405180910390fd5b6128096000838361252e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128599190613a81565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461291a6000838361253e565b5050565b612929838383612a55565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561296c5761296781612a5a565b6129ab565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146129aa576129a98382612aa3565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129ee576129e981612c10565b612a2d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a2c57612a2b8282612ce1565b5b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612ab084611304565b612aba9190613b62565b9050600060076000848152602001908152602001600020549050818114612b9f576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612c249190613b62565b9050600060096000848152602001908152602001600020549050600060088381548110612c5457612c53613db4565b5b906000526020600020015490508060088381548110612c7657612c75613db4565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612cc557612cc4613d85565b5b6001900381819060005260206000200160009055905550505050565b6000612cec83611304565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054612d6c90613c4c565b90600052602060002090601f016020900481019282612d8e5760008555612dd5565b82601f10612da757805160ff1916838001178555612dd5565b82800160010185558215612dd5579182015b82811115612dd4578251825591602001919060010190612db9565b5b509050612de29190612de6565b5090565b5b80821115612dff576000816000905550600101612de7565b5090565b6000612e16612e11846139dc565b6139b7565b905082815260208101848484011115612e3257612e31613e17565b5b612e3d848285613c0a565b509392505050565b6000612e58612e5384613a0d565b6139b7565b905082815260208101848484011115612e7457612e73613e17565b5b612e7f848285613c0a565b509392505050565b600081359050612e9681614446565b92915050565b600081359050612eab8161445d565b92915050565b600081359050612ec081614474565b92915050565b600081519050612ed581614474565b92915050565b600082601f830112612ef057612eef613e12565b5b8135612f00848260208601612e03565b91505092915050565b600082601f830112612f1e57612f1d613e12565b5b8135612f2e848260208601612e45565b91505092915050565b600081359050612f468161448b565b92915050565b600060208284031215612f6257612f61613e21565b5b6000612f7084828501612e87565b91505092915050565b60008060408385031215612f9057612f8f613e21565b5b6000612f9e85828601612e87565b9250506020612faf85828601612e87565b9150509250929050565b600080600060608486031215612fd257612fd1613e21565b5b6000612fe086828701612e87565b9350506020612ff186828701612e87565b925050604061300286828701612f37565b9150509250925092565b6000806000806080858703121561302657613025613e21565b5b600061303487828801612e87565b945050602061304587828801612e87565b935050604061305687828801612f37565b925050606085013567ffffffffffffffff81111561307757613076613e1c565b5b61308387828801612edb565b91505092959194509250565b600080604083850312156130a6576130a5613e21565b5b60006130b485828601612e87565b92505060206130c585828601612e9c565b9150509250929050565b600080604083850312156130e6576130e5613e21565b5b60006130f485828601612e87565b925050602061310585828601612f37565b9150509250929050565b60006020828403121561312557613124613e21565b5b600061313384828501612e9c565b91505092915050565b60006020828403121561315257613151613e21565b5b600061316084828501612eb1565b91505092915050565b60006020828403121561317f5761317e613e21565b5b600061318d84828501612ec6565b91505092915050565b6000602082840312156131ac576131ab613e21565b5b600082013567ffffffffffffffff8111156131ca576131c9613e1c565b5b6131d684828501612f09565b91505092915050565b6000602082840312156131f5576131f4613e21565b5b600061320384828501612f37565b91505092915050565b61321581613b96565b82525050565b61322481613ba8565b82525050565b600061323582613a3e565b61323f8185613a54565b935061324f818560208601613c19565b61325881613e26565b840191505092915050565b600061326e82613a49565b6132788185613a65565b9350613288818560208601613c19565b61329181613e26565b840191505092915050565b60006132a782613a49565b6132b18185613a76565b93506132c1818560208601613c19565b80840191505092915050565b60006132da602b83613a65565b91506132e582613e37565b604082019050919050565b60006132fd603283613a65565b915061330882613e86565b604082019050919050565b6000613320602683613a65565b915061332b82613ed5565b604082019050919050565b6000613343602083613a65565b915061334e82613f24565b602082019050919050565b6000613366602583613a65565b915061337182613f4d565b604082019050919050565b6000613389601c83613a65565b915061339482613f9c565b602082019050919050565b60006133ac602483613a65565b91506133b782613fc5565b604082019050919050565b60006133cf601983613a65565b91506133da82614014565b602082019050919050565b60006133f2601f83613a65565b91506133fd8261403d565b602082019050919050565b6000613415602c83613a65565b915061342082614066565b604082019050919050565b6000613438603083613a65565b9150613443826140b5565b604082019050919050565b600061345b603883613a65565b915061346682614104565b604082019050919050565b600061347e602a83613a65565b915061348982614153565b604082019050919050565b60006134a1602983613a65565b91506134ac826141a2565b604082019050919050565b60006134c4602083613a65565b91506134cf826141f1565b602082019050919050565b60006134e7602c83613a65565b91506134f28261421a565b604082019050919050565b600061350a602083613a65565b915061351582614269565b602082019050919050565b600061352d602f83613a65565b915061353882614292565b604082019050919050565b6000613550602283613a65565b915061355b826142e1565b604082019050919050565b6000613573602183613a65565b915061357e82614330565b604082019050919050565b6000613596603183613a65565b91506135a18261437f565b604082019050919050565b60006135b9602c83613a65565b91506135c4826143ce565b604082019050919050565b60006135dc601483613a65565b91506135e78261441d565b602082019050919050565b6135fb81613c00565b82525050565b600061360d828461329c565b915081905092915050565b600060208201905061362d600083018461320c565b92915050565b6000608082019050613648600083018761320c565b613655602083018661320c565b61366260408301856135f2565b8181036060830152613674818461322a565b905095945050505050565b6000602082019050613694600083018461321b565b92915050565b600060208201905081810360008301526136b48184613263565b905092915050565b600060208201905081810360008301526136d5816132cd565b9050919050565b600060208201905081810360008301526136f5816132f0565b9050919050565b6000602082019050818103600083015261371581613313565b9050919050565b6000602082019050818103600083015261373581613336565b9050919050565b6000602082019050818103600083015261375581613359565b9050919050565b600060208201905081810360008301526137758161337c565b9050919050565b600060208201905081810360008301526137958161339f565b9050919050565b600060208201905081810360008301526137b5816133c2565b9050919050565b600060208201905081810360008301526137d5816133e5565b9050919050565b600060208201905081810360008301526137f581613408565b9050919050565b600060208201905081810360008301526138158161342b565b9050919050565b600060208201905081810360008301526138358161344e565b9050919050565b6000602082019050818103600083015261385581613471565b9050919050565b6000602082019050818103600083015261387581613494565b9050919050565b60006020820190508181036000830152613895816134b7565b9050919050565b600060208201905081810360008301526138b5816134da565b9050919050565b600060208201905081810360008301526138d5816134fd565b9050919050565b600060208201905081810360008301526138f581613520565b9050919050565b6000602082019050818103600083015261391581613543565b9050919050565b6000602082019050818103600083015261393581613566565b9050919050565b6000602082019050818103600083015261395581613589565b9050919050565b60006020820190508181036000830152613975816135ac565b9050919050565b60006020820190508181036000830152613995816135cf565b9050919050565b60006020820190506139b160008301846135f2565b92915050565b60006139c16139d2565b90506139cd8282613c7e565b919050565b6000604051905090565b600067ffffffffffffffff8211156139f7576139f6613de3565b5b613a0082613e26565b9050602081019050919050565b600067ffffffffffffffff821115613a2857613a27613de3565b5b613a3182613e26565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613a8c82613c00565b9150613a9783613c00565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613acc57613acb613cf8565b5b828201905092915050565b6000613ae282613c00565b9150613aed83613c00565b925082613afd57613afc613d27565b5b828204905092915050565b6000613b1382613c00565b9150613b1e83613c00565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b5757613b56613cf8565b5b828202905092915050565b6000613b6d82613c00565b9150613b7883613c00565b925082821015613b8b57613b8a613cf8565b5b828203905092915050565b6000613ba182613be0565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613c37578082015181840152602081019050613c1c565b83811115613c46576000848401525b50505050565b60006002820490506001821680613c6457607f821691505b60208210811415613c7857613c77613d56565b5b50919050565b613c8782613e26565b810181811067ffffffffffffffff82111715613ca657613ca5613de3565b5b80604052505050565b6000613cba82613c00565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ced57613cec613cf8565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820746f6b656e73600082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f596f75206e65656420746f20626520746865206f776e6572206f66207468652060008201527f746f6b656e20746f206275726e20697400000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f53616c65206d7573742062652061637469766520746f206d696e7420746f6b6560008201527f6e73000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f7420617070726f76656420746f206275726e000000000000000000000000600082015250565b61444f81613b96565b811461445a57600080fd5b50565b61446681613ba8565b811461447157600080fd5b50565b61447d81613bb4565b811461448857600080fd5b50565b61449481613c00565b811461449f57600080fd5b5056fea2646970667358221220ca8bd062143fcbf6028af6848a3f634e36df404efbfb1e3c9ffd179e245e23e564736f6c63430008070033
Deployed Bytecode Sourcemap
145:3559:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1074:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2501:100:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4041:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2473:376:10;;;:::i;:::-;;3564:411:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;722:52:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1761:322;;;:::i;:::-;;3242:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1658:113:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4791:339:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1326:256:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;564:41:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3410:291;;;;;;;;;;;;;:::i;:::-;;5201:185:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1848:233:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1253:105:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2089:378;;;:::i;:::-;;2195:239:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1925:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1714:103:11;;;;;;;;;;;;;:::i;:::-;;1481:178:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1063:87:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2670:104:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2855:250:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4334:155:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;781:53:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5457:328:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1665:90:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2845:314:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4560:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;208:32:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1972:201:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3111:125:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;665:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;612:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1074:173;1185:4;1205:36;1229:11;1205:23;:36::i;:::-;1198:43;;1074:173;;;:::o;2501:100:3:-;2555:13;2588:5;2581:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2501:100;:::o;4041:221::-;4117:7;4145:16;4153:7;4145;:16::i;:::-;4137:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4230:15;:24;4246:7;4230:24;;;;;;;;;;;;;;;;;;;;;4223:31;;4041:221;;;:::o;2473:376:10:-;2515:10;2528:13;:11;:13::i;:::-;2515:26;;2556:12;;;;;;;;;;;2548:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;601:4;2627:1;2622:2;:6;;;;:::i;:::-;:20;;2614:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;2712:9;763:11;2694:27;;2686:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;2771:9;2766:78;2790:1;2786;:5;2766:78;;;2807:29;2817:10;2834:1;2829:2;:6;;;;:::i;:::-;2807:9;:29::i;:::-;2793:3;;;;:::i;:::-;;;2766:78;;;;2508:341;2473:376::o;3564:411:3:-;3645:13;3661:23;3676:7;3661:14;:23::i;:::-;3645:39;;3709:5;3703:11;;:2;:11;;;;3695:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3803:5;3787:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3812:37;3829:5;3836:12;:10;:12::i;:::-;3812:16;:37::i;:::-;3787:62;3765:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;3946:21;3955:2;3959:7;3946:8;:21::i;:::-;3634:341;3564:411;;:::o;722:52:10:-;763:11;722:52;:::o;1761:322::-;1802:10;1815:13;:11;:13::i;:::-;1802:26;;1843:12;;;;;;;;;;;1835:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;601:4;1914:1;1909:2;:6;;;;:::i;:::-;:20;;1901:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;1998:9;652:10;1981:26;;1973:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;2052:25;2062:10;2074:2;2052:9;:25::i;:::-;1795:288;1761:322::o;3242:162::-;1294:12:11;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3390:8:10::1;3345:21;:42;3367:19;3345:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;3242:162:::0;;:::o;1658:113:4:-;1719:7;1746:10;:17;;;;1739:24;;1658:113;:::o;4791:339:3:-;4986:41;5005:12;:10;:12::i;:::-;5019:7;4986:18;:41::i;:::-;4978:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5094:28;5104:4;5110:2;5114:7;5094:9;:28::i;:::-;4791:339;;;:::o;1326:256:4:-;1423:7;1459:23;1476:5;1459:16;:23::i;:::-;1451:5;:31;1443:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;1548:12;:19;1561:5;1548:19;;;;;;;;;;;;;;;:26;1568:5;1548:26;;;;;;;;;;;;1541:33;;1326:256;;;;:::o;564:41:10:-;601:4;564:41;:::o;3410:291::-;1294:12:11;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3454:12:10::1;3469:21;3454:36;;3497:14;3529:3;3522:6;;3514:7;:14;;;;:::i;:::-;:18;;;;:::i;:::-;3497:35;;3539:21;3585:4;3571:13;;3563:7;:21;;;;:::i;:::-;:26;;;;:::i;:::-;3539:50;;3604:9;;;;;;;;;;;3596:27;;:38;3624:9;3596:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;3649:16;;;;;;;;;;;3641:34;;:52;3676:16;3641:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;3447:254;;;3410:291::o:0;5201:185:3:-;5339:39;5356:4;5362:2;5366:7;5339:39;;;;;;;;;;;;:16;:39::i;:::-;5201:185;;;:::o;1848:233:4:-;1923:7;1959:30;:28;:30::i;:::-;1951:5;:38;1943:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;2056:10;2067:5;2056:17;;;;;;;;:::i;:::-;;;;;;;;;;2049:24;;1848:233;;;:::o;1253:105:10:-;1294:12:11;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1344:8:10::1;1325:16;:27;;;;;;;;;;;;:::i;:::-;;1253:105:::0;:::o;2089:378::-;2132:10;2145:13;:11;:13::i;:::-;2132:26;;2173:12;;;;;;;;;;;2165:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;601:4;2244:1;2239:2;:6;;;;:::i;:::-;:20;;2231:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;2330:9;707:12;2311:28;;2303:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;2389:9;2384:78;2408:1;2404;:5;2384:78;;;2425:29;2435:10;2452:1;2447:2;:6;;;;:::i;:::-;2425:9;:29::i;:::-;2411:3;;;;:::i;:::-;;;2384:78;;;;2125:342;2089:378::o;2195:239:3:-;2267:7;2287:13;2303:7;:16;2311:7;2303:16;;;;;;;;;;;;;;;;;;;;;2287:32;;2355:1;2338:19;;:5;:19;;;;2330:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2421:5;2414:12;;;2195:239;;;:::o;1925:208::-;1997:7;2042:1;2025:19;;:5;:19;;;;2017:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2109:9;:16;2119:5;2109:16;;;;;;;;;;;;;;;;2102:23;;1925:208;;;:::o;1714:103:11:-;1294:12;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1779:30:::1;1806:1;1779:18;:30::i;:::-;1714:103::o:0;1481:178:10:-;1294:12:11;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1533:11:10::1;1547:13;:11;:13::i;:::-;1533:27;;1567:6;1580:74;1596:1;1592;:5;1580:74;;;1613:33;1623:10;1644:1;1635:6;:10;;;;:::i;:::-;1613:9;:33::i;:::-;1599:3;;;;;:::i;:::-;;;;1580:74;;;1526:133;;1481:178:::0;:::o;1063:87:11:-;1109:7;1136:6;;;;;;;;;;;1129:13;;1063:87;:::o;2670:104:3:-;2726:13;2759:7;2752:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2670:104;:::o;2855:250:10:-;2922:21;:33;2944:10;2922:33;;;;;;;;;;;;;;;;;;;;;;;;;2914:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;3004:16;3012:7;3004;:16::i;:::-;2996:24;;:4;:24;;;2987:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;3082:15;3089:7;3082:5;:15::i;:::-;2855:250;;:::o;4334:155:3:-;4429:52;4448:12;:10;:12::i;:::-;4462:8;4472;4429:18;:52::i;:::-;4334:155;;:::o;781:53:10:-;;;;;;;;;;;;;;;;;;;;;;:::o;5457:328:3:-;5632:41;5651:12;:10;:12::i;:::-;5665:7;5632:18;:41::i;:::-;5624:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5738:39;5752:4;5758:2;5762:7;5771:5;5738:13;:39::i;:::-;5457:328;;;;:::o;1665:90:10:-;1294:12:11;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1741:8:10::1;1726:12;;:23;;;;;;;;;;;;;;;;;;1665:90:::0;:::o;2845:314:3:-;2918:13;2952:16;2960:7;2952;:16::i;:::-;2944:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;3033:21;3057:10;:8;:10::i;:::-;3033:34;;3109:1;3091:7;3085:21;:25;:66;;;;;;;;;;;;;;;;;3137:7;3120:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;3085:66;3078:73;;;2845:314;;;:::o;4560:164::-;4657:4;4681:18;:25;4700:5;4681:25;;;;;;;;;;;;;;;:35;4707:8;4681:35;;;;;;;;;;;;;;;;;;;;;;;;;4674:42;;4560:164;;;;:::o;208:32:10:-;;;;;;;;;;;;;:::o;1972:201:11:-;1294:12;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:1:::1;2061:22;;:8;:22;;;;2053:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2137:28;2156:8;2137:18;:28::i;:::-;1972:201:::0;:::o;3111:125:10:-;3183:4;3202:21;:28;3224:5;3202:28;;;;;;;;;;;;;;;;;;;;;;;;;3195:35;;3111:125;;;:::o;665:54::-;707:12;665:54;:::o;612:50::-;652:10;612:50;:::o;1018:224:4:-;1120:4;1159:35;1144:50;;;:11;:50;;;;:90;;;;1198:36;1222:11;1198:23;:36::i;:::-;1144:90;1137:97;;1018:224;;;:::o;7295:127:3:-;7360:4;7412:1;7384:30;;:7;:16;7392:7;7384:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7377:37;;7295:127;;;:::o;8279:110::-;8355:26;8365:2;8369:7;8355:26;;;;;;;;;;;;:9;:26::i;:::-;8279:110;;:::o;656:98:1:-;709:7;736:10;729:17;;656:98;:::o;11441:174:3:-;11543:2;11516:15;:24;11532:7;11516:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11599:7;11595:2;11561:46;;11570:23;11585:7;11570:14;:23::i;:::-;11561:46;;;;;;;;;;;;11441:174;;:::o;7589:348::-;7682:4;7707:16;7715:7;7707;:16::i;:::-;7699:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7783:13;7799:23;7814:7;7799:14;:23::i;:::-;7783:39;;7852:5;7841:16;;:7;:16;;;:52;;;;7861:32;7878:5;7885:7;7861:16;:32::i;:::-;7841:52;:87;;;;7921:7;7897:31;;:20;7909:7;7897:11;:20::i;:::-;:31;;;7841:87;7833:96;;;7589:348;;;;:::o;10698:625::-;10857:4;10830:31;;:23;10845:7;10830:14;:23::i;:::-;:31;;;10822:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;10936:1;10922:16;;:2;:16;;;;10914:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10992:39;11013:4;11019:2;11023:7;10992:20;:39::i;:::-;11096:29;11113:1;11117:7;11096:8;:29::i;:::-;11157:1;11138:9;:15;11148:4;11138:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;11186:1;11169:9;:13;11179:2;11169:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;11217:2;11198:7;:16;11206:7;11198:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;11256:7;11252:2;11237:27;;11246:4;11237:27;;;;;;;;;;;;11277:38;11297:4;11303:2;11307:7;11277:19;:38::i;:::-;10698:625;;;:::o;2333:191:11:-;2407:16;2426:6;;;;;;;;;;;2407:25;;2452:8;2443:6;;:17;;;;;;;;;;;;;;;;;;2507:8;2476:40;;2497:8;2476:40;;;;;;;;;;;;2396:128;2333:191;:::o;9941:420:3:-;10001:13;10017:23;10032:7;10017:14;:23::i;:::-;10001:39;;10053:48;10074:5;10089:1;10093:7;10053:20;:48::i;:::-;10142:29;10159:1;10163:7;10142:8;:29::i;:::-;10204:1;10184:9;:16;10194:5;10184:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;10223:7;:16;10231:7;10223:16;;;;;;;;;;;;10216:23;;;;;;;;;;;10285:7;10281:1;10257:36;;10266:5;10257:36;;;;;;;;;;;;10306:47;10326:5;10341:1;10345:7;10306:19;:47::i;:::-;9990:371;9941:420;:::o;11757:315::-;11912:8;11903:17;;:5;:17;;;;11895:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;11999:8;11961:18;:25;11980:5;11961:25;;;;;;;;;;;;;;;:35;11987:8;11961:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;12045:8;12023:41;;12038:5;12023:41;;;12055:8;12023:41;;;;;;:::i;:::-;;;;;;;;11757:315;;;:::o;6667:::-;6824:28;6834:4;6840:2;6844:7;6824:9;:28::i;:::-;6871:48;6894:4;6900:2;6904:7;6913:5;6871:22;:48::i;:::-;6863:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6667:315;;;;:::o;1364:111:10:-;1424:13;1453:16;1446:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1364:111;:::o;1556:305:3:-;1658:4;1710:25;1695:40;;;:11;:40;;;;:105;;;;1767:33;1752:48;;;:11;:48;;;;1695:105;:158;;;;1817:36;1841:11;1817:23;:36::i;:::-;1695:158;1675:178;;1556:305;;;:::o;8616:321::-;8746:18;8752:2;8756:7;8746:5;:18::i;:::-;8797:54;8828:1;8832:2;8836:7;8845:5;8797:22;:54::i;:::-;8775:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;8616:321;;;:::o;893:175:10:-;1017:45;1044:4;1050:2;1054:7;1017:26;:45::i;:::-;893:175;;;:::o;14519:125:3:-;;;;:::o;12637:799::-;12792:4;12813:15;:2;:13;;;:15::i;:::-;12809:620;;;12865:2;12849:36;;;12886:12;:10;:12::i;:::-;12900:4;12906:7;12915:5;12849:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12845:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13108:1;13091:6;:13;:18;13087:272;;;13134:60;;;;;;;;;;:::i;:::-;;;;;;;;13087:272;13309:6;13303:13;13294:6;13290:2;13286:15;13279:38;12845:529;12982:41;;;12972:51;;;:6;:51;;;;12965:58;;;;;12809:620;13413:4;13406:11;;12637:799;;;;;;;:::o;854:157:2:-;939:4;978:25;963:40;;;:11;:40;;;;956:47;;854:157;;;:::o;9273:439:3:-;9367:1;9353:16;;:2;:16;;;;9345:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9426:16;9434:7;9426;:16::i;:::-;9425:17;9417:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9488:45;9517:1;9521:2;9525:7;9488:20;:45::i;:::-;9563:1;9546:9;:13;9556:2;9546:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9594:2;9575:7;:16;9583:7;9575:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9639:7;9635:2;9614:33;;9631:1;9614:33;;;;;;;;;;;;9660:44;9688:1;9692:2;9696:7;9660:19;:44::i;:::-;9273:439;;:::o;2694:589:4:-;2838:45;2865:4;2871:2;2875:7;2838:26;:45::i;:::-;2916:1;2900:18;;:4;:18;;;2896:187;;;2935:40;2967:7;2935:31;:40::i;:::-;2896:187;;;3005:2;2997:10;;:4;:10;;;2993:90;;3024:47;3057:4;3063:7;3024:32;:47::i;:::-;2993:90;2896:187;3111:1;3097:16;;:2;:16;;;3093:183;;;3130:45;3167:7;3130:36;:45::i;:::-;3093:183;;;3203:4;3197:10;;:2;:10;;;3193:83;;3224:40;3252:2;3256:7;3224:27;:40::i;:::-;3193:83;3093:183;2694:589;;;:::o;1210:326:0:-;1270:4;1527:1;1505:7;:19;;;:23;1498:30;;1210:326;;;:::o;14008:126:3:-;;;;:::o;4006:164:4:-;4110:10;:17;;;;4083:15;:24;4099:7;4083:24;;;;;;;;;;;:44;;;;4138:10;4154:7;4138:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4006:164;:::o;4797:988::-;5063:22;5113:1;5088:22;5105:4;5088:16;:22::i;:::-;:26;;;;:::i;:::-;5063:51;;5125:18;5146:17;:26;5164:7;5146:26;;;;;;;;;;;;5125:47;;5293:14;5279:10;:28;5275:328;;5324:19;5346:12;:18;5359:4;5346:18;;;;;;;;;;;;;;;:34;5365:14;5346:34;;;;;;;;;;;;5324:56;;5430:11;5397:12;:18;5410:4;5397:18;;;;;;;;;;;;;;;:30;5416:10;5397:30;;;;;;;;;;;:44;;;;5547:10;5514:17;:30;5532:11;5514:30;;;;;;;;;;;:43;;;;5309:294;5275:328;5699:17;:26;5717:7;5699:26;;;;;;;;;;;5692:33;;;5743:12;:18;5756:4;5743:18;;;;;;;;;;;;;;;:34;5762:14;5743:34;;;;;;;;;;;5736:41;;;4878:907;;4797:988;;:::o;6080:1079::-;6333:22;6378:1;6358:10;:17;;;;:21;;;;:::i;:::-;6333:46;;6390:18;6411:15;:24;6427:7;6411:24;;;;;;;;;;;;6390:45;;6762:19;6784:10;6795:14;6784:26;;;;;;;;:::i;:::-;;;;;;;;;;6762:48;;6848:11;6823:10;6834;6823:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;6959:10;6928:15;:28;6944:11;6928:28;;;;;;;;;;;:41;;;;7100:15;:24;7116:7;7100:24;;;;;;;;;;;7093:31;;;7135:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6151:1008;;;6080:1079;:::o;3584:221::-;3669:14;3686:20;3703:2;3686:16;:20::i;:::-;3669:37;;3744:7;3717:12;:16;3730:2;3717:16;;;;;;;;;;;;;;;:24;3734:6;3717:24;;;;;;;;;;;:34;;;;3791:6;3762:17;:26;3780:7;3762:26;;;;;;;;;;;:35;;;;3658:147;3584:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:13:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:118::-;7574:24;7592:5;7574:24;:::i;:::-;7569:3;7562:37;7487:118;;:::o;7611:109::-;7692:21;7707:5;7692:21;:::i;:::-;7687:3;7680:34;7611:109;;:::o;7726:360::-;7812:3;7840:38;7872:5;7840:38;:::i;:::-;7894:70;7957:6;7952:3;7894:70;:::i;:::-;7887:77;;7973:52;8018:6;8013:3;8006:4;7999:5;7995:16;7973:52;:::i;:::-;8050:29;8072:6;8050:29;:::i;:::-;8045:3;8041:39;8034:46;;7816:270;7726:360;;;;:::o;8092:364::-;8180:3;8208:39;8241:5;8208:39;:::i;:::-;8263:71;8327:6;8322:3;8263:71;:::i;:::-;8256:78;;8343:52;8388:6;8383:3;8376:4;8369:5;8365:16;8343:52;:::i;:::-;8420:29;8442:6;8420:29;:::i;:::-;8415:3;8411:39;8404:46;;8184:272;8092:364;;;;:::o;8462:377::-;8568:3;8596:39;8629:5;8596:39;:::i;:::-;8651:89;8733:6;8728:3;8651:89;:::i;:::-;8644:96;;8749:52;8794:6;8789:3;8782:4;8775:5;8771:16;8749:52;:::i;:::-;8826:6;8821:3;8817:16;8810:23;;8572:267;8462:377;;;;:::o;8845:366::-;8987:3;9008:67;9072:2;9067:3;9008:67;:::i;:::-;9001:74;;9084:93;9173:3;9084:93;:::i;:::-;9202:2;9197:3;9193:12;9186:19;;8845:366;;;:::o;9217:::-;9359:3;9380:67;9444:2;9439:3;9380:67;:::i;:::-;9373:74;;9456:93;9545:3;9456:93;:::i;:::-;9574:2;9569:3;9565:12;9558:19;;9217:366;;;:::o;9589:::-;9731:3;9752:67;9816:2;9811:3;9752:67;:::i;:::-;9745:74;;9828:93;9917:3;9828:93;:::i;:::-;9946:2;9941:3;9937:12;9930:19;;9589:366;;;:::o;9961:::-;10103:3;10124:67;10188:2;10183:3;10124:67;:::i;:::-;10117:74;;10200:93;10289:3;10200:93;:::i;:::-;10318:2;10313:3;10309:12;10302:19;;9961:366;;;:::o;10333:::-;10475:3;10496:67;10560:2;10555:3;10496:67;:::i;:::-;10489:74;;10572:93;10661:3;10572:93;:::i;:::-;10690:2;10685:3;10681:12;10674:19;;10333:366;;;:::o;10705:::-;10847:3;10868:67;10932:2;10927:3;10868:67;:::i;:::-;10861:74;;10944:93;11033:3;10944:93;:::i;:::-;11062:2;11057:3;11053:12;11046:19;;10705:366;;;:::o;11077:::-;11219:3;11240:67;11304:2;11299:3;11240:67;:::i;:::-;11233:74;;11316:93;11405:3;11316:93;:::i;:::-;11434:2;11429:3;11425:12;11418:19;;11077:366;;;:::o;11449:::-;11591:3;11612:67;11676:2;11671:3;11612:67;:::i;:::-;11605:74;;11688:93;11777:3;11688:93;:::i;:::-;11806:2;11801:3;11797:12;11790:19;;11449:366;;;:::o;11821:::-;11963:3;11984:67;12048:2;12043:3;11984:67;:::i;:::-;11977:74;;12060:93;12149:3;12060:93;:::i;:::-;12178:2;12173:3;12169:12;12162:19;;11821:366;;;:::o;12193:::-;12335:3;12356:67;12420:2;12415:3;12356:67;:::i;:::-;12349:74;;12432:93;12521:3;12432:93;:::i;:::-;12550:2;12545:3;12541:12;12534:19;;12193:366;;;:::o;12565:::-;12707:3;12728:67;12792:2;12787:3;12728:67;:::i;:::-;12721:74;;12804:93;12893:3;12804:93;:::i;:::-;12922:2;12917:3;12913:12;12906:19;;12565:366;;;:::o;12937:::-;13079:3;13100:67;13164:2;13159:3;13100:67;:::i;:::-;13093:74;;13176:93;13265:3;13176:93;:::i;:::-;13294:2;13289:3;13285:12;13278:19;;12937:366;;;:::o;13309:::-;13451:3;13472:67;13536:2;13531:3;13472:67;:::i;:::-;13465:74;;13548:93;13637:3;13548:93;:::i;:::-;13666:2;13661:3;13657:12;13650:19;;13309:366;;;:::o;13681:::-;13823:3;13844:67;13908:2;13903:3;13844:67;:::i;:::-;13837:74;;13920:93;14009:3;13920:93;:::i;:::-;14038:2;14033:3;14029:12;14022:19;;13681:366;;;:::o;14053:::-;14195:3;14216:67;14280:2;14275:3;14216:67;:::i;:::-;14209:74;;14292:93;14381:3;14292:93;:::i;:::-;14410:2;14405:3;14401:12;14394:19;;14053:366;;;:::o;14425:::-;14567:3;14588:67;14652:2;14647:3;14588:67;:::i;:::-;14581:74;;14664:93;14753:3;14664:93;:::i;:::-;14782:2;14777:3;14773:12;14766:19;;14425:366;;;:::o;14797:::-;14939:3;14960:67;15024:2;15019:3;14960:67;:::i;:::-;14953:74;;15036:93;15125:3;15036:93;:::i;:::-;15154:2;15149:3;15145:12;15138:19;;14797:366;;;:::o;15169:::-;15311:3;15332:67;15396:2;15391:3;15332:67;:::i;:::-;15325:74;;15408:93;15497:3;15408:93;:::i;:::-;15526:2;15521:3;15517:12;15510:19;;15169:366;;;:::o;15541:::-;15683:3;15704:67;15768:2;15763:3;15704:67;:::i;:::-;15697:74;;15780:93;15869:3;15780:93;:::i;:::-;15898:2;15893:3;15889:12;15882:19;;15541:366;;;:::o;15913:::-;16055:3;16076:67;16140:2;16135:3;16076:67;:::i;:::-;16069:74;;16152:93;16241:3;16152:93;:::i;:::-;16270:2;16265:3;16261:12;16254:19;;15913:366;;;:::o;16285:::-;16427:3;16448:67;16512:2;16507:3;16448:67;:::i;:::-;16441:74;;16524:93;16613:3;16524:93;:::i;:::-;16642:2;16637:3;16633:12;16626:19;;16285:366;;;:::o;16657:::-;16799:3;16820:67;16884:2;16879:3;16820:67;:::i;:::-;16813:74;;16896:93;16985:3;16896:93;:::i;:::-;17014:2;17009:3;17005:12;16998:19;;16657:366;;;:::o;17029:::-;17171:3;17192:67;17256:2;17251:3;17192:67;:::i;:::-;17185:74;;17268:93;17357:3;17268:93;:::i;:::-;17386:2;17381:3;17377:12;17370:19;;17029:366;;;:::o;17401:118::-;17488:24;17506:5;17488:24;:::i;:::-;17483:3;17476:37;17401:118;;:::o;17525:275::-;17657:3;17679:95;17770:3;17761:6;17679:95;:::i;:::-;17672:102;;17791:3;17784:10;;17525:275;;;;:::o;17806:222::-;17899:4;17937:2;17926:9;17922:18;17914:26;;17950:71;18018:1;18007:9;18003:17;17994:6;17950:71;:::i;:::-;17806:222;;;;:::o;18034:640::-;18229:4;18267:3;18256:9;18252:19;18244:27;;18281:71;18349:1;18338:9;18334:17;18325:6;18281:71;:::i;:::-;18362:72;18430:2;18419:9;18415:18;18406:6;18362:72;:::i;:::-;18444;18512:2;18501:9;18497:18;18488:6;18444:72;:::i;:::-;18563:9;18557:4;18553:20;18548:2;18537:9;18533:18;18526:48;18591:76;18662:4;18653:6;18591:76;:::i;:::-;18583:84;;18034:640;;;;;;;:::o;18680:210::-;18767:4;18805:2;18794:9;18790:18;18782:26;;18818:65;18880:1;18869:9;18865:17;18856:6;18818:65;:::i;:::-;18680:210;;;;:::o;18896:313::-;19009:4;19047:2;19036:9;19032:18;19024:26;;19096:9;19090:4;19086:20;19082:1;19071:9;19067:17;19060:47;19124:78;19197:4;19188:6;19124:78;:::i;:::-;19116:86;;18896:313;;;;:::o;19215:419::-;19381:4;19419:2;19408:9;19404:18;19396:26;;19468:9;19462:4;19458:20;19454:1;19443:9;19439:17;19432:47;19496:131;19622:4;19496:131;:::i;:::-;19488:139;;19215:419;;;:::o;19640:::-;19806:4;19844:2;19833:9;19829:18;19821:26;;19893:9;19887:4;19883:20;19879:1;19868:9;19864:17;19857:47;19921:131;20047:4;19921:131;:::i;:::-;19913:139;;19640:419;;;:::o;20065:::-;20231:4;20269:2;20258:9;20254:18;20246:26;;20318:9;20312:4;20308:20;20304:1;20293:9;20289:17;20282:47;20346:131;20472:4;20346:131;:::i;:::-;20338:139;;20065:419;;;:::o;20490:::-;20656:4;20694:2;20683:9;20679:18;20671:26;;20743:9;20737:4;20733:20;20729:1;20718:9;20714:17;20707:47;20771:131;20897:4;20771:131;:::i;:::-;20763:139;;20490:419;;;:::o;20915:::-;21081:4;21119:2;21108:9;21104:18;21096:26;;21168:9;21162:4;21158:20;21154:1;21143:9;21139:17;21132:47;21196:131;21322:4;21196:131;:::i;:::-;21188:139;;20915:419;;;:::o;21340:::-;21506:4;21544:2;21533:9;21529:18;21521:26;;21593:9;21587:4;21583:20;21579:1;21568:9;21564:17;21557:47;21621:131;21747:4;21621:131;:::i;:::-;21613:139;;21340:419;;;:::o;21765:::-;21931:4;21969:2;21958:9;21954:18;21946:26;;22018:9;22012:4;22008:20;22004:1;21993:9;21989:17;21982:47;22046:131;22172:4;22046:131;:::i;:::-;22038:139;;21765:419;;;:::o;22190:::-;22356:4;22394:2;22383:9;22379:18;22371:26;;22443:9;22437:4;22433:20;22429:1;22418:9;22414:17;22407:47;22471:131;22597:4;22471:131;:::i;:::-;22463:139;;22190:419;;;:::o;22615:::-;22781:4;22819:2;22808:9;22804:18;22796:26;;22868:9;22862:4;22858:20;22854:1;22843:9;22839:17;22832:47;22896:131;23022:4;22896:131;:::i;:::-;22888:139;;22615:419;;;:::o;23040:::-;23206:4;23244:2;23233:9;23229:18;23221:26;;23293:9;23287:4;23283:20;23279:1;23268:9;23264:17;23257:47;23321:131;23447:4;23321:131;:::i;:::-;23313:139;;23040:419;;;:::o;23465:::-;23631:4;23669:2;23658:9;23654:18;23646:26;;23718:9;23712:4;23708:20;23704:1;23693:9;23689:17;23682:47;23746:131;23872:4;23746:131;:::i;:::-;23738:139;;23465:419;;;:::o;23890:::-;24056:4;24094:2;24083:9;24079:18;24071:26;;24143:9;24137:4;24133:20;24129:1;24118:9;24114:17;24107:47;24171:131;24297:4;24171:131;:::i;:::-;24163:139;;23890:419;;;:::o;24315:::-;24481:4;24519:2;24508:9;24504:18;24496:26;;24568:9;24562:4;24558:20;24554:1;24543:9;24539:17;24532:47;24596:131;24722:4;24596:131;:::i;:::-;24588:139;;24315:419;;;:::o;24740:::-;24906:4;24944:2;24933:9;24929:18;24921:26;;24993:9;24987:4;24983:20;24979:1;24968:9;24964:17;24957:47;25021:131;25147:4;25021:131;:::i;:::-;25013:139;;24740:419;;;:::o;25165:::-;25331:4;25369:2;25358:9;25354:18;25346:26;;25418:9;25412:4;25408:20;25404:1;25393:9;25389:17;25382:47;25446:131;25572:4;25446:131;:::i;:::-;25438:139;;25165:419;;;:::o;25590:::-;25756:4;25794:2;25783:9;25779:18;25771:26;;25843:9;25837:4;25833:20;25829:1;25818:9;25814:17;25807:47;25871:131;25997:4;25871:131;:::i;:::-;25863:139;;25590:419;;;:::o;26015:::-;26181:4;26219:2;26208:9;26204:18;26196:26;;26268:9;26262:4;26258:20;26254:1;26243:9;26239:17;26232:47;26296:131;26422:4;26296:131;:::i;:::-;26288:139;;26015:419;;;:::o;26440:::-;26606:4;26644:2;26633:9;26629:18;26621:26;;26693:9;26687:4;26683:20;26679:1;26668:9;26664:17;26657:47;26721:131;26847:4;26721:131;:::i;:::-;26713:139;;26440:419;;;:::o;26865:::-;27031:4;27069:2;27058:9;27054:18;27046:26;;27118:9;27112:4;27108:20;27104:1;27093:9;27089:17;27082:47;27146:131;27272:4;27146:131;:::i;:::-;27138:139;;26865:419;;;:::o;27290:::-;27456:4;27494:2;27483:9;27479:18;27471:26;;27543:9;27537:4;27533:20;27529:1;27518:9;27514:17;27507:47;27571:131;27697:4;27571:131;:::i;:::-;27563:139;;27290:419;;;:::o;27715:::-;27881:4;27919:2;27908:9;27904:18;27896:26;;27968:9;27962:4;27958:20;27954:1;27943:9;27939:17;27932:47;27996:131;28122:4;27996:131;:::i;:::-;27988:139;;27715:419;;;:::o;28140:::-;28306:4;28344:2;28333:9;28329:18;28321:26;;28393:9;28387:4;28383:20;28379:1;28368:9;28364:17;28357:47;28421:131;28547:4;28421:131;:::i;:::-;28413:139;;28140:419;;;:::o;28565:::-;28731:4;28769:2;28758:9;28754:18;28746:26;;28818:9;28812:4;28808:20;28804:1;28793:9;28789:17;28782:47;28846:131;28972:4;28846:131;:::i;:::-;28838:139;;28565:419;;;:::o;28990:222::-;29083:4;29121:2;29110:9;29106:18;29098:26;;29134:71;29202:1;29191:9;29187:17;29178:6;29134:71;:::i;:::-;28990:222;;;;:::o;29218:129::-;29252:6;29279:20;;:::i;:::-;29269:30;;29308:33;29336:4;29328:6;29308:33;:::i;:::-;29218:129;;;:::o;29353:75::-;29386:6;29419:2;29413:9;29403:19;;29353:75;:::o;29434:307::-;29495:4;29585:18;29577:6;29574:30;29571:56;;;29607:18;;:::i;:::-;29571:56;29645:29;29667:6;29645:29;:::i;:::-;29637:37;;29729:4;29723;29719:15;29711:23;;29434:307;;;:::o;29747:308::-;29809:4;29899:18;29891:6;29888:30;29885:56;;;29921:18;;:::i;:::-;29885:56;29959:29;29981:6;29959:29;:::i;:::-;29951:37;;30043:4;30037;30033:15;30025:23;;29747:308;;;:::o;30061:98::-;30112:6;30146:5;30140:12;30130:22;;30061:98;;;:::o;30165:99::-;30217:6;30251:5;30245:12;30235:22;;30165:99;;;:::o;30270:168::-;30353:11;30387:6;30382:3;30375:19;30427:4;30422:3;30418:14;30403:29;;30270:168;;;;:::o;30444:169::-;30528:11;30562:6;30557:3;30550:19;30602:4;30597:3;30593:14;30578:29;;30444:169;;;;:::o;30619:148::-;30721:11;30758:3;30743:18;;30619:148;;;;:::o;30773:305::-;30813:3;30832:20;30850:1;30832:20;:::i;:::-;30827:25;;30866:20;30884:1;30866:20;:::i;:::-;30861:25;;31020:1;30952:66;30948:74;30945:1;30942:81;30939:107;;;31026:18;;:::i;:::-;30939:107;31070:1;31067;31063:9;31056:16;;30773:305;;;;:::o;31084:185::-;31124:1;31141:20;31159:1;31141:20;:::i;:::-;31136:25;;31175:20;31193:1;31175:20;:::i;:::-;31170:25;;31214:1;31204:35;;31219:18;;:::i;:::-;31204:35;31261:1;31258;31254:9;31249:14;;31084:185;;;;:::o;31275:348::-;31315:7;31338:20;31356:1;31338:20;:::i;:::-;31333:25;;31372:20;31390:1;31372:20;:::i;:::-;31367:25;;31560:1;31492:66;31488:74;31485:1;31482:81;31477:1;31470:9;31463:17;31459:105;31456:131;;;31567:18;;:::i;:::-;31456:131;31615:1;31612;31608:9;31597:20;;31275:348;;;;:::o;31629:191::-;31669:4;31689:20;31707:1;31689:20;:::i;:::-;31684:25;;31723:20;31741:1;31723:20;:::i;:::-;31718:25;;31762:1;31759;31756:8;31753:34;;;31767:18;;:::i;:::-;31753:34;31812:1;31809;31805:9;31797:17;;31629:191;;;;:::o;31826:96::-;31863:7;31892:24;31910:5;31892:24;:::i;:::-;31881:35;;31826:96;;;:::o;31928:90::-;31962:7;32005:5;31998:13;31991:21;31980:32;;31928:90;;;:::o;32024:149::-;32060:7;32100:66;32093:5;32089:78;32078:89;;32024:149;;;:::o;32179:126::-;32216:7;32256:42;32249:5;32245:54;32234:65;;32179:126;;;:::o;32311:77::-;32348:7;32377:5;32366:16;;32311:77;;;:::o;32394:154::-;32478:6;32473:3;32468;32455:30;32540:1;32531:6;32526:3;32522:16;32515:27;32394:154;;;:::o;32554:307::-;32622:1;32632:113;32646:6;32643:1;32640:13;32632:113;;;32731:1;32726:3;32722:11;32716:18;32712:1;32707:3;32703:11;32696:39;32668:2;32665:1;32661:10;32656:15;;32632:113;;;32763:6;32760:1;32757:13;32754:101;;;32843:1;32834:6;32829:3;32825:16;32818:27;32754:101;32603:258;32554:307;;;:::o;32867:320::-;32911:6;32948:1;32942:4;32938:12;32928:22;;32995:1;32989:4;32985:12;33016:18;33006:81;;33072:4;33064:6;33060:17;33050:27;;33006:81;33134:2;33126:6;33123:14;33103:18;33100:38;33097:84;;;33153:18;;:::i;:::-;33097:84;32918:269;32867:320;;;:::o;33193:281::-;33276:27;33298:4;33276:27;:::i;:::-;33268:6;33264:40;33406:6;33394:10;33391:22;33370:18;33358:10;33355:34;33352:62;33349:88;;;33417:18;;:::i;:::-;33349:88;33457:10;33453:2;33446:22;33236:238;33193:281;;:::o;33480:233::-;33519:3;33542:24;33560:5;33542:24;:::i;:::-;33533:33;;33588:66;33581:5;33578:77;33575:103;;;33658:18;;:::i;:::-;33575:103;33705:1;33698:5;33694:13;33687:20;;33480:233;;;:::o;33719:180::-;33767:77;33764:1;33757:88;33864:4;33861:1;33854:15;33888:4;33885:1;33878:15;33905:180;33953:77;33950:1;33943:88;34050:4;34047:1;34040:15;34074:4;34071:1;34064:15;34091:180;34139:77;34136:1;34129:88;34236:4;34233:1;34226:15;34260:4;34257:1;34250:15;34277:180;34325:77;34322:1;34315:88;34422:4;34419:1;34412:15;34446:4;34443:1;34436:15;34463:180;34511:77;34508:1;34501:88;34608:4;34605:1;34598:15;34632:4;34629:1;34622:15;34649:180;34697:77;34694:1;34687:88;34794:4;34791:1;34784:15;34818:4;34815:1;34808:15;34835:117;34944:1;34941;34934:12;34958:117;35067:1;35064;35057:12;35081:117;35190:1;35187;35180:12;35204:117;35313:1;35310;35303:12;35327:102;35368:6;35419:2;35415:7;35410:2;35403:5;35399:14;35395:28;35385:38;;35327:102;;;:::o;35435:230::-;35575:34;35571:1;35563:6;35559:14;35552:58;35644:13;35639:2;35631:6;35627:15;35620:38;35435:230;:::o;35671:237::-;35811:34;35807:1;35799:6;35795:14;35788:58;35880:20;35875:2;35867:6;35863:15;35856:45;35671:237;:::o;35914:225::-;36054:34;36050:1;36042:6;36038:14;36031:58;36123:8;36118:2;36110:6;36106:15;36099:33;35914:225;:::o;36145:182::-;36285:34;36281:1;36273:6;36269:14;36262:58;36145:182;:::o;36333:224::-;36473:34;36469:1;36461:6;36457:14;36450:58;36542:7;36537:2;36529:6;36525:15;36518:32;36333:224;:::o;36563:178::-;36703:30;36699:1;36691:6;36687:14;36680:54;36563:178;:::o;36747:223::-;36887:34;36883:1;36875:6;36871:14;36864:58;36956:6;36951:2;36943:6;36939:15;36932:31;36747:223;:::o;36976:175::-;37116:27;37112:1;37104:6;37100:14;37093:51;36976:175;:::o;37157:181::-;37297:33;37293:1;37285:6;37281:14;37274:57;37157:181;:::o;37344:231::-;37484:34;37480:1;37472:6;37468:14;37461:58;37553:14;37548:2;37540:6;37536:15;37529:39;37344:231;:::o;37581:235::-;37721:34;37717:1;37709:6;37705:14;37698:58;37790:18;37785:2;37777:6;37773:15;37766:43;37581:235;:::o;37822:243::-;37962:34;37958:1;37950:6;37946:14;37939:58;38031:26;38026:2;38018:6;38014:15;38007:51;37822:243;:::o;38071:229::-;38211:34;38207:1;38199:6;38195:14;38188:58;38280:12;38275:2;38267:6;38263:15;38256:37;38071:229;:::o;38306:228::-;38446:34;38442:1;38434:6;38430:14;38423:58;38515:11;38510:2;38502:6;38498:15;38491:36;38306:228;:::o;38540:182::-;38680:34;38676:1;38668:6;38664:14;38657:58;38540:182;:::o;38728:231::-;38868:34;38864:1;38856:6;38852:14;38845:58;38937:14;38932:2;38924:6;38920:15;38913:39;38728:231;:::o;38965:182::-;39105:34;39101:1;39093:6;39089:14;39082:58;38965:182;:::o;39153:234::-;39293:34;39289:1;39281:6;39277:14;39270:58;39362:17;39357:2;39349:6;39345:15;39338:42;39153:234;:::o;39393:221::-;39533:34;39529:1;39521:6;39517:14;39510:58;39602:4;39597:2;39589:6;39585:15;39578:29;39393:221;:::o;39620:220::-;39760:34;39756:1;39748:6;39744:14;39737:58;39829:3;39824:2;39816:6;39812:15;39805:28;39620:220;:::o;39846:236::-;39986:34;39982:1;39974:6;39970:14;39963:58;40055:19;40050:2;40042:6;40038:15;40031:44;39846:236;:::o;40088:231::-;40228:34;40224:1;40216:6;40212:14;40205:58;40297:14;40292:2;40284:6;40280:15;40273:39;40088:231;:::o;40325:170::-;40465:22;40461:1;40453:6;40449:14;40442:46;40325:170;:::o;40501:122::-;40574:24;40592:5;40574:24;:::i;:::-;40567:5;40564:35;40554:63;;40613:1;40610;40603:12;40554:63;40501:122;:::o;40629:116::-;40699:21;40714:5;40699:21;:::i;:::-;40692:5;40689:32;40679:60;;40735:1;40732;40725:12;40679:60;40629:116;:::o;40751:120::-;40823:23;40840:5;40823:23;:::i;:::-;40816:5;40813:34;40803:62;;40861:1;40858;40851:12;40803:62;40751:120;:::o;40877:122::-;40950:24;40968:5;40950:24;:::i;:::-;40943:5;40940:35;40930:63;;40989:1;40986;40979:12;40930:63;40877:122;:::o
Swarm Source
ipfs://ca8bd062143fcbf6028af6848a3f634e36df404efbfb1e3c9ffd179e245e23e5
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,225.59 | 0.0167 | $53.87 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.