Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 28 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw | 21378100 | 450 days ago | IN | 0.001 ETH | 0.00039761 | ||||
| Flip Sale State | 14563128 | 1425 days ago | IN | 0 ETH | 0.00054022 | ||||
| Set New Public P... | 14522939 | 1431 days ago | IN | 0 ETH | 0.0018714 | ||||
| Set New Public P... | 14515166 | 1432 days ago | IN | 0 ETH | 0.00149929 | ||||
| Mint Token | 14511099 | 1433 days ago | IN | 0.06 ETH | 0.00704234 | ||||
| Set New Public P... | 14508095 | 1433 days ago | IN | 0 ETH | 0.00435497 | ||||
| Mint Token | 14508090 | 1433 days ago | IN | 0 ETH | 0.01267633 | ||||
| Set New Public P... | 14508088 | 1433 days ago | IN | 0 ETH | 0.001793 | ||||
| Flip Sale State | 14508087 | 1433 days ago | IN | 0 ETH | 0.00204214 | ||||
| Set New Wl Max W... | 14494981 | 1435 days ago | IN | 0 ETH | 0.00230504 | ||||
| Transfer From | 14488133 | 1436 days ago | IN | 0 ETH | 0.00509804 | ||||
| Flip Wl Sale Sta... | 14449865 | 1442 days ago | IN | 0 ETH | 0.00191323 | ||||
| Set Not Revealed... | 14448175 | 1442 days ago | IN | 0 ETH | 0.00111739 | ||||
| Set New Public P... | 14448099 | 1442 days ago | IN | 0 ETH | 0.00084629 | ||||
| Set New WL Price | 14448095 | 1442 days ago | IN | 0 ETH | 0.00097394 | ||||
| Flip Reveal Stat... | 14297379 | 1466 days ago | IN | 0 ETH | 0.00740713 | ||||
| Set New Public P... | 14236063 | 1475 days ago | IN | 0 ETH | 0.00143743 | ||||
| Set New WL Price | 14236062 | 1475 days ago | IN | 0 ETH | 0.00129942 | ||||
| Flip Sale State | 14235856 | 1475 days ago | IN | 0 ETH | 0.00103329 | ||||
| Set New WL Price | 14232825 | 1476 days ago | IN | 0 ETH | 0.00269673 | ||||
| Set Base URI | 14158129 | 1487 days ago | IN | 0 ETH | 0.00290498 | ||||
| Mint Reserved To... | 14158019 | 1487 days ago | IN | 0 ETH | 0.07262011 | ||||
| Mint Reserved To... | 14155007 | 1488 days ago | IN | 0 ETH | 0.06054996 | ||||
| Flip Reveal Stat... | 14154688 | 1488 days ago | IN | 0 ETH | 0.00433419 | ||||
| Mint Reserved To... | 14154652 | 1488 days ago | IN | 0 ETH | 0.04624299 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 21378100 | 450 days ago | 0.061 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
AroundTheWorld
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-02-06
*/
// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Strings.sol
// 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);
}
}
// File: @openzeppelin/contracts/utils/Context.sol
// 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;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_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);
}
}
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
// 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 `IERC721.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// 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);
}
// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Enumerable is IERC721 {
/**
* @dev Returns the total amount of tokens stored by the contract.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns a token ID owned by `owner` at a given `index` of its token list.
* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
/**
* @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
* Use along with {totalSupply} to enumerate all tokens.
*/
function tokenByIndex(uint256 index) external view returns (uint256);
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: @openzeppelin/contracts/token/ERC721/ERC721.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
* {ERC721Enumerable}.
*/
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to owner address
mapping(uint256 => address) private _owners;
// Mapping owner address to token count
mapping(address => uint256) private _balances;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: balance query for the zero address");
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: owner query for nonexistent token");
return owner;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overriden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not owner nor approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual override returns (address) {
require(_exists(tokenId), "ERC721: approved query for nonexistent token");
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
_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 || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
}
/**
* @dev Safely mints `tokenId` and transfers it to `to`.
*
* Requirements:
*
* - `tokenId` must not exist.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeMint(
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, _data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Mints `tokenId` and transfers it to `to`.
*
* WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
*
* Requirements:
*
* - `tokenId` must not exist.
* - `to` cannot be the zero address.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
// Clear approvals
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
// Clear approvals from the previous owner
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits a {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
/**
* @dev 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 {}
}
// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol)
pragma solidity ^0.8.0;
/**
* @dev This implements an optional extension of {ERC721} defined in the EIP that adds
* enumerability of all the token ids in the contract as well as all token ids owned by each
* account.
*/
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
// Mapping from owner to list of owned token IDs
mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
// Mapping from token ID to index of the owner tokens list
mapping(uint256 => uint256) private _ownedTokensIndex;
// Array with all token ids, used for enumeration
uint256[] private _allTokens;
// Mapping from token id to position in the allTokens array
mapping(uint256 => uint256) private _allTokensIndex;
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
return _ownedTokens[owner][index];
}
/**
* @dev See {IERC721Enumerable-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _allTokens.length;
}
/**
* @dev See {IERC721Enumerable-tokenByIndex}.
*/
function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
return _allTokens[index];
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual override {
super._beforeTokenTransfer(from, to, tokenId);
if (from == address(0)) {
_addTokenToAllTokensEnumeration(tokenId);
} else if (from != to) {
_removeTokenFromOwnerEnumeration(from, tokenId);
}
if (to == address(0)) {
_removeTokenFromAllTokensEnumeration(tokenId);
} else if (to != from) {
_addTokenToOwnerEnumeration(to, tokenId);
}
}
/**
* @dev Private function to add a token to this extension's ownership-tracking data structures.
* @param to address representing the new owner of the given token ID
* @param tokenId uint256 ID of the token to be added to the tokens list of the given address
*/
function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
uint256 length = ERC721.balanceOf(to);
_ownedTokens[to][length] = tokenId;
_ownedTokensIndex[tokenId] = length;
}
/**
* @dev Private function to add a token to this extension's token tracking data structures.
* @param tokenId uint256 ID of the token to be added to the tokens list
*/
function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
_allTokensIndex[tokenId] = _allTokens.length;
_allTokens.push(tokenId);
}
/**
* @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
* while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
* gas optimizations e.g. when performing a transfer operation (avoiding double writes).
* This has O(1) time complexity, but alters the order of the _ownedTokens array.
* @param from address representing the previous owner of the given token ID
* @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
*/
function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
// To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
uint256 tokenIndex = _ownedTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary
if (tokenIndex != lastTokenIndex) {
uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
_ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
}
// This also deletes the contents at the last position of the array
delete _ownedTokensIndex[tokenId];
delete _ownedTokens[from][lastTokenIndex];
}
/**
* @dev Private function to remove a token from this extension's token tracking data structures.
* This has O(1) time complexity, but alters the order of the _allTokens array.
* @param tokenId uint256 ID of the token to be removed from the tokens list
*/
function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
// To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = _allTokens.length - 1;
uint256 tokenIndex = _allTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
// rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
// an 'if' statement (like in _removeTokenFromOwnerEnumeration)
uint256 lastTokenId = _allTokens[lastTokenIndex];
_allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
// This also deletes the contents at the last position of the array
delete _allTokensIndex[tokenId];
_allTokens.pop();
}
}
// File: contracts/AroundTheWorld.sol
pragma solidity 0.8.9; //Compiler
// █████╗ ██████╗ ██████╗ ██╗ ██╗███╗ ██╗██████╗ ████████╗██╗ ██╗███████╗ ██╗ ██╗ ██████╗ ██████╗ ██╗ ██████╗ ██████╗ ██╗ ██╗ ██████╗ █████╗ ██████╗ ██████╗ ██╗███████╗██╗ ██████╗ ███████╗ ██████╗ ██████╗ ██████╗ ███████╗███████╗ ██████╗██╗ ██╗
// ██╔══██╗██╔══██╗██╔═══██╗██║ ██║████╗ ██║██╔══██╗ ╚══██╔══╝██║ ██║██╔════╝ ██║ ██║██╔═══██╗██╔══██╗██║ ██╔══██╗ ██╔══██╗╚██╗ ██╔╝ ██╔════╝ ██╔══██╗██╔══██╗██╔══██╗██║██╔════╝██║ ██╔════╝ ██╔════╝██╔═══██╗██╔══██╗██╔════╝ ██╔════╝██╔════╝██╔════╝██║ ██║
// ███████║██████╔╝██║ ██║██║ ██║██╔██╗ ██║██║ ██║ ██║ ███████║█████╗ ██║ █╗ ██║██║ ██║██████╔╝██║ ██║ ██║ ██████╔╝ ╚████╔╝ ██║ ███╗███████║██████╔╝██████╔╝██║█████╗ ██║ ██║ ███╗█████╗ ██║ ██║██████╔╝██║ ███╗█████╗ ███████╗██║ ██║ ██║
// ██╔══██║██╔══██╗██║ ██║██║ ██║██║╚██╗██║██║ ██║ ██║ ██╔══██║██╔══╝ ██║███╗██║██║ ██║██╔══██╗██║ ██║ ██║ ██╔══██╗ ╚██╔╝ ██║ ██║██╔══██║██╔══██╗██╔══██╗██║██╔══╝ ██║ ██║ ██║██╔══╝ ██║ ██║██╔══██╗██║ ██║██╔══╝ ╚════██║██║ ██║ ██║
// ██║ ██║██║ ██║╚██████╔╝╚██████╔╝██║ ╚████║██████╔╝ ██║ ██║ ██║███████╗ ╚███╔███╔╝╚██████╔╝██║ ██║███████╗██████╔╝ ██████╔╝ ██║ ╚██████╔╝██║ ██║██████╔╝██║ ██║██║███████╗███████╗ ╚██████╔╝███████╗╚██████╔╝██║ ██║╚██████╔╝███████╗███████║╚██████╗╚██████╔╝
// ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═══╝╚═════╝ ╚═╝ ╚═╝ ╚═╝╚══════╝ ╚══╝╚══╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚═════╝ ╚═════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝╚═╝╚══════╝╚══════╝ ╚═════╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚══════╝ ╚═════╝ ╚═════╝
//
contract AroundTheWorld is ERC721, ERC721Enumerable, Ownable
{
using Strings for string;
uint public MAX_TOKENS = 6999;
uint public NUMBER_RESERVED_TOKENS = 49;
uint256 public PUBLIC_PRICE = 250000000000000000; // 0.25 ETH
uint256 public WL_PRICE = 150000000000000000; // 0.15 ETH
address public giveaways_wallet = 0xFE7fF92BE77C6E848a661D355c4cD2E77F580add;
uint public WL_SALE_MAX_TOKENS = 2000;
uint public WL_MAX_WALLET = 4;
address[] public whitelistedAddresses;
bool public saleIsActive = false;
bool public wlSaleIsActive = false;
bool public revealed = false;
uint public reservedTokensMinted = 0;
uint public supply = 0;
uint public preSaleSupply = 0;
uint public wlSaleSupply = 0;
string private _baseTokenURI;
string public notRevealedUri;
constructor() ERC721("Around The World by Gabriel G", "ATWGG") {}
function mintToken(uint256 amount) external payable
{
require(msg.sender == tx.origin, "No transaction from smart contracts!");
require(amount > 0 && amount <= 10, "Max 10 NFTs per transaction");
require(saleIsActive, "Public Sale must be active to mint");
require((supply + amount) <= (MAX_TOKENS - (NUMBER_RESERVED_TOKENS - reservedTokensMinted)), "Purchase would exceed max supply");
require(msg.value >= (PUBLIC_PRICE * amount), "Not enough ETH for transaction");
for (uint i = 0; i < amount; i++)
{
uint256 tokenId = supply + 1;
_safeMint(msg.sender, tokenId);
supply++;
}
}
function mintTokenWlSale(uint256 amount) external payable
{
require(msg.sender == tx.origin, "No transaction from smart contracts!");
require(wlSaleIsActive, "Whitelist Sale must be active to mint");
require(isWhitelisted(msg.sender), "User is not whitelisted");
require(msg.value >= (WL_PRICE * amount), "Not enough ETH for transaction");
require((wlSaleSupply + amount) <= WL_SALE_MAX_TOKENS, "Purchase would exceed max supply for Whitelist Sale");
require((balanceOf(msg.sender) + amount) <= WL_MAX_WALLET, "Limit is 4 tokens per wallet, this sale not allowed");
for (uint i = 0; i < amount; i++)
{
uint256 tokenId = supply + 1;
_safeMint(msg.sender, tokenId);
supply++;
wlSaleSupply++;
}
}
function isWhitelisted(address _user) public view returns (bool)
{
for (uint i = 0; i < whitelistedAddresses.length; i++) {
if (whitelistedAddresses[i] == _user) {
return true;
}
}
return false;
}
function flipSaleState() external onlyOwner
{
wlSaleIsActive = false;
saleIsActive = !saleIsActive;
}
function flipWlSaleState() external onlyOwner
{
saleIsActive = false;
wlSaleIsActive = !wlSaleIsActive;
}
function flipRevealState() external onlyOwner
{
revealed = !revealed;
}
function mintReservedTokens(uint256 amount) external onlyOwner
{
require((reservedTokensMinted + amount) <= NUMBER_RESERVED_TOKENS, "This amount is more than max allowed");
for (uint i = 0; i < amount; i++)
{
uint256 tokenId = supply + 1;
_safeMint(giveaways_wallet, tokenId);
supply++;
reservedTokensMinted++;
}
}
function withdraw() public payable onlyOwner
{
require(msg.sender == owner(), "Invalid sender");
payable(owner()).transfer(address(this).balance);
}
function withdraw_giveaways() public payable onlyOwner
{
require(msg.sender == owner(), "Invalid sender");
payable(giveaways_wallet).transfer(100000000000000000000); // 100 eth
}
function _beforeTokenTransfer(address from, address to, uint256 tokenId)
internal
override(ERC721, ERC721Enumerable)
{
super._beforeTokenTransfer(from, to, tokenId);
}
function supportsInterface(bytes4 interfaceId) public view
override(ERC721, ERC721Enumerable) returns (bool)
{
return super.supportsInterface(interfaceId);
}
function setNotRevealedUrl(string memory url) external onlyOwner
{
notRevealedUri = url;
}
function _setBaseURI(string memory baseURI) internal virtual
{
_baseTokenURI = baseURI;
}
function _baseURI() internal view override returns (string memory)
{
return _baseTokenURI;
}
function setNewWLPrice(uint256 newWlPrice) external onlyOwner {
WL_PRICE = newWlPrice;
}
function setNewPublicPrice(uint256 newPublicPrice) external onlyOwner {
PUBLIC_PRICE = newPublicPrice;
}
function setNewWlMaxWallet(uint256 newWlMaxWallet) external onlyOwner {
WL_MAX_WALLET = newWlMaxWallet;
}
function setBaseURI(string memory baseURI) external onlyOwner
{
_setBaseURI(baseURI);
}
function whitelistUsers(address[] calldata _users) public onlyOwner
{
delete whitelistedAddresses;
whitelistedAddresses = _users;
}
function tokenURI(uint256 tokenId) public view override(ERC721) returns (string memory)
{
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory _tokenURI = super.tokenURI(tokenId);
if(!revealed){
return notRevealedUri;
}
return bytes(_tokenURI).length > 0 ? string(abi.encodePacked(_tokenURI, ".json")) : "";
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"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_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NUMBER_RESERVED_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WL_MAX_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WL_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WL_SALE_MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipRevealState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipWlSaleState","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":[],"name":"giveaways_wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintReservedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintTokenWlSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","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":"preSaleSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedTokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPublicPrice","type":"uint256"}],"name":"setNewPublicPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newWlPrice","type":"uint256"}],"name":"setNewWLPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newWlMaxWallet","type":"uint256"}],"name":"setNewWlMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"url","type":"string"}],"name":"setNotRevealedUrl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw_giveaways","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"wlSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wlSaleSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
6080604052611b57600b556031600c556703782dace9d90000600d55670214e8348c4f0000600e5573fe7ff92be77c6e848a661d355c4cd2e77f580add600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506107d060105560046011556000601360006101000a81548160ff0219169083151502179055506000601360016101000a81548160ff0219169083151502179055506000601360026101000a81548160ff0219169083151502179055506000601455600060155560006016556000601755348015620000f957600080fd5b506040518060400160405280601d81526020017f41726f756e642054686520576f726c64206279204761627269656c20470000008152506040518060400160405280600581526020017f415457474700000000000000000000000000000000000000000000000000000081525081600090805190602001906200017e9291906200028e565b508060019080519060200190620001979291906200028e565b505050620001ba620001ae620001c060201b60201c565b620001c860201b60201c565b620003a3565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200029c906200036d565b90600052602060002090601f016020900481019282620002c057600085556200030c565b82601f10620002db57805160ff19168380011785556200030c565b828001600101855582156200030c579182015b828111156200030b578251825591602001919060010190620002ee565b5b5090506200031b91906200031f565b5090565b5b808211156200033a57600081600090555060010162000320565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200038657607f821691505b602082108114156200039d576200039c6200033e565b5b50919050565b61553980620003b36000396000f3fe6080604052600436106102c85760003560e01c806355f804b311610175578063a461cbe8116100dc578063d3d88bcd11610095578063edec5f271161006f578063edec5f2714610a75578063f2fde38b14610a9e578063f3e3882114610ac7578063f47c84c514610af2576102c8565b8063d3d88bcd146109e2578063e985e9c514610a0d578063eb8d244414610a4a576102c8565b8063a461cbe8146108cf578063b22edfbc146108f8578063b88d4fde14610923578063ba4e5c491461094c578063c634d03214610989578063c87b56dd146109a5576102c8565b80637d5cb4e51161012e5780637d5cb4e5146107e75780638c522422146108105780638da5cb5b1461082757806395d89b41146108525780639c12e1bc1461087d578063a22cb465146108a6576102c8565b806355f804b3146106d9578063611f3f10146107025780636352211e1461072d5780636a6727691461076a57806370a0823114610793578063715018a6146107d0576102c8565b806322cf48f11161023457806331c3c7a0116101ed5780633ccfd60b116101c75780633ccfd60b1461063e57806342842e0e146106485780634f6ccce71461067157806351830227146106ae576102c8565b806331c3c7a0146105bf57806334918dfd146105ea5780633af32abf14610601576102c8565b806322cf48f1146104d057806323b872dd146104ec5780632714ce9214610515578063291cdc561461052c5780632e055bcc146105575780632f745c5914610582576102c8565b8063081c8c4411610286578063081c8c44146103f3578063095ea7b31461041e57806310715230146104475780631183c4c31461047057806311b4b9b41461047a57806318160ddd146104a5576102c8565b8062a9c653146102cd57806301ffc9a7146102f8578063047fc9aa1461033557806306f03a6e1461036057806306fdde031461038b578063081812fc146103b6575b600080fd5b3480156102d957600080fd5b506102e2610b1d565b6040516102ef9190613a31565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a9190613ab8565b610b23565b60405161032c9190613b00565b60405180910390f35b34801561034157600080fd5b5061034a610b35565b6040516103579190613a31565b60405180910390f35b34801561036c57600080fd5b50610375610b3b565b6040516103829190613a31565b60405180910390f35b34801561039757600080fd5b506103a0610b41565b6040516103ad9190613bb4565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d89190613c02565b610bd3565b6040516103ea9190613c70565b60405180910390f35b3480156103ff57600080fd5b50610408610c58565b6040516104159190613bb4565b60405180910390f35b34801561042a57600080fd5b5061044560048036038101906104409190613cb7565b610ce6565b005b34801561045357600080fd5b5061046e60048036038101906104699190613c02565b610dfe565b005b610478610e84565b005b34801561048657600080fd5b5061048f610fe9565b60405161049c9190613a31565b60405180910390f35b3480156104b157600080fd5b506104ba610fef565b6040516104c79190613a31565b60405180910390f35b6104ea60048036038101906104e59190613c02565b610ffc565b005b3480156104f857600080fd5b50610513600480360381019061050e9190613cf7565b61126b565b005b34801561052157600080fd5b5061052a6112cb565b005b34801561053857600080fd5b50610541611373565b60405161054e9190613c70565b60405180910390f35b34801561056357600080fd5b5061056c611399565b6040516105799190613a31565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a49190613cb7565b61139f565b6040516105b69190613a31565b60405180910390f35b3480156105cb57600080fd5b506105d4611444565b6040516105e19190613a31565b60405180910390f35b3480156105f657600080fd5b506105ff61144a565b005b34801561060d57600080fd5b5061062860048036038101906106239190613d4a565b61150d565b6040516106359190613b00565b60405180910390f35b6106466115bc565b005b34801561065457600080fd5b5061066f600480360381019061066a9190613cf7565b6116fd565b005b34801561067d57600080fd5b5061069860048036038101906106939190613c02565b61171d565b6040516106a59190613a31565b60405180910390f35b3480156106ba57600080fd5b506106c361178e565b6040516106d09190613b00565b60405180910390f35b3480156106e557600080fd5b5061070060048036038101906106fb9190613eac565b6117a1565b005b34801561070e57600080fd5b50610717611829565b6040516107249190613a31565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f9190613c02565b61182f565b6040516107619190613c70565b60405180910390f35b34801561077657600080fd5b50610791600480360381019061078c9190613c02565b6118e1565b005b34801561079f57600080fd5b506107ba60048036038101906107b59190613d4a565b611967565b6040516107c79190613a31565b60405180910390f35b3480156107dc57600080fd5b506107e5611a1f565b005b3480156107f357600080fd5b5061080e60048036038101906108099190613c02565b611aa7565b005b34801561081c57600080fd5b50610825611c07565b005b34801561083357600080fd5b5061083c611cca565b6040516108499190613c70565b60405180910390f35b34801561085e57600080fd5b50610867611cf4565b6040516108749190613bb4565b60405180910390f35b34801561088957600080fd5b506108a4600480360381019061089f9190613eac565b611d86565b005b3480156108b257600080fd5b506108cd60048036038101906108c89190613f21565b611e1c565b005b3480156108db57600080fd5b506108f660048036038101906108f19190613c02565b611e32565b005b34801561090457600080fd5b5061090d611eb8565b60405161091a9190613a31565b60405180910390f35b34801561092f57600080fd5b5061094a60048036038101906109459190614002565b611ebe565b005b34801561095857600080fd5b50610973600480360381019061096e9190613c02565b611f20565b6040516109809190613c70565b60405180910390f35b6109a3600480360381019061099e9190613c02565b611f5f565b005b3480156109b157600080fd5b506109cc60048036038101906109c79190613c02565b612180565b6040516109d99190613bb4565b60405180910390f35b3480156109ee57600080fd5b506109f76122c6565b604051610a049190613b00565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f9190614085565b6122d9565b604051610a419190613b00565b60405180910390f35b348015610a5657600080fd5b50610a5f61236d565b604051610a6c9190613b00565b60405180910390f35b348015610a8157600080fd5b50610a9c6004803603810190610a979190614125565b612380565b005b348015610aaa57600080fd5b50610ac56004803603810190610ac09190613d4a565b612420565b005b348015610ad357600080fd5b50610adc612518565b604051610ae99190613a31565b60405180910390f35b348015610afe57600080fd5b50610b0761251e565b604051610b149190613a31565b60405180910390f35b60115481565b6000610b2e82612524565b9050919050565b60155481565b60105481565b606060008054610b50906141a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7c906141a1565b8015610bc95780601f10610b9e57610100808354040283529160200191610bc9565b820191906000526020600020905b815481529060010190602001808311610bac57829003601f168201915b5050505050905090565b6000610bde8261259e565b610c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1490614245565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60198054610c65906141a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610c91906141a1565b8015610cde5780601f10610cb357610100808354040283529160200191610cde565b820191906000526020600020905b815481529060010190602001808311610cc157829003601f168201915b505050505081565b6000610cf18261182f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d59906142d7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d8161260a565b73ffffffffffffffffffffffffffffffffffffffff161480610db05750610daf81610daa61260a565b6122d9565b5b610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de690614369565b60405180910390fd5b610df98383612612565b505050565b610e0661260a565b73ffffffffffffffffffffffffffffffffffffffff16610e24611cca565b73ffffffffffffffffffffffffffffffffffffffff1614610e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e71906143d5565b60405180910390fd5b8060118190555050565b610e8c61260a565b73ffffffffffffffffffffffffffffffffffffffff16610eaa611cca565b73ffffffffffffffffffffffffffffffffffffffff1614610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef7906143d5565b60405180910390fd5b610f08611cca565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c90614441565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc68056bc75e2d631000009081150290604051600060405180830381858888f19350505050158015610fe6573d6000803e3d6000fd5b50565b60175481565b6000600880549050905090565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461106a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611061906144d3565b60405180910390fd5b601360019054906101000a900460ff166110b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b090614565565b60405180910390fd5b6110c23361150d565b611101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f8906145d1565b60405180910390fd5b80600e5461110f9190614620565b341015611151576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611148906146c6565b60405180910390fd5b6010548160175461116291906146e6565b11156111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119a906147ae565b60405180910390fd5b601154816111b033611967565b6111ba91906146e6565b11156111fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f290614840565b60405180910390fd5b60005b81811015611267576000600160155461121791906146e6565b905061122333826126cb565b6015600081548092919061123690614860565b91905055506017600081548092919061124e90614860565b919050555050808061125f90614860565b9150506111fe565b5050565b61127c61127661260a565b826126e9565b6112bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b29061491b565b60405180910390fd5b6112c68383836127c7565b505050565b6112d361260a565b73ffffffffffffffffffffffffffffffffffffffff166112f1611cca565b73ffffffffffffffffffffffffffffffffffffffff1614611347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133e906143d5565b60405180910390fd5b601360029054906101000a900460ff1615601360026101000a81548160ff021916908315150217905550565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b60006113aa83611967565b82106113eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e2906149ad565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600e5481565b61145261260a565b73ffffffffffffffffffffffffffffffffffffffff16611470611cca565b73ffffffffffffffffffffffffffffffffffffffff16146114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd906143d5565b60405180910390fd5b6000601360016101000a81548160ff021916908315150217905550601360009054906101000a900460ff1615601360006101000a81548160ff021916908315150217905550565b600080600090505b6012805490508110156115b1578273ffffffffffffffffffffffffffffffffffffffff166012828154811061154d5761154c6149cd565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561159e5760019150506115b7565b80806115a990614860565b915050611515565b50600090505b919050565b6115c461260a565b73ffffffffffffffffffffffffffffffffffffffff166115e2611cca565b73ffffffffffffffffffffffffffffffffffffffff1614611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162f906143d5565b60405180910390fd5b611640611cca565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a490614441565b60405180910390fd5b6116b5611cca565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156116fa573d6000803e3d6000fd5b50565b61171883838360405180602001604052806000815250611ebe565b505050565b6000611727610fef565b8210611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175f90614a6e565b60405180910390fd5b6008828154811061177c5761177b6149cd565b5b90600052602060002001549050919050565b601360029054906101000a900460ff1681565b6117a961260a565b73ffffffffffffffffffffffffffffffffffffffff166117c7611cca565b73ffffffffffffffffffffffffffffffffffffffff161461181d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611814906143d5565b60405180910390fd5b61182681612a23565b50565b600d5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cf90614b00565b60405180910390fd5b80915050919050565b6118e961260a565b73ffffffffffffffffffffffffffffffffffffffff16611907611cca565b73ffffffffffffffffffffffffffffffffffffffff161461195d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611954906143d5565b60405180910390fd5b80600d8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90614b92565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a2761260a565b73ffffffffffffffffffffffffffffffffffffffff16611a45611cca565b73ffffffffffffffffffffffffffffffffffffffff1614611a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a92906143d5565b60405180910390fd5b611aa56000612a3d565b565b611aaf61260a565b73ffffffffffffffffffffffffffffffffffffffff16611acd611cca565b73ffffffffffffffffffffffffffffffffffffffff1614611b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1a906143d5565b60405180910390fd5b600c5481601454611b3491906146e6565b1115611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c90614c24565b60405180910390fd5b60005b81811015611c035760006001601554611b9191906146e6565b9050611bbf600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826126cb565b60156000815480929190611bd290614860565b919050555060146000815480929190611bea90614860565b9190505550508080611bfb90614860565b915050611b78565b5050565b611c0f61260a565b73ffffffffffffffffffffffffffffffffffffffff16611c2d611cca565b73ffffffffffffffffffffffffffffffffffffffff1614611c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7a906143d5565b60405180910390fd5b6000601360006101000a81548160ff021916908315150217905550601360019054906101000a900460ff1615601360016101000a81548160ff021916908315150217905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611d03906141a1565b80601f0160208091040260200160405190810160405280929190818152602001828054611d2f906141a1565b8015611d7c5780601f10611d5157610100808354040283529160200191611d7c565b820191906000526020600020905b815481529060010190602001808311611d5f57829003601f168201915b5050505050905090565b611d8e61260a565b73ffffffffffffffffffffffffffffffffffffffff16611dac611cca565b73ffffffffffffffffffffffffffffffffffffffff1614611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df9906143d5565b60405180910390fd5b8060199080519060200190611e189291906138b4565b5050565b611e2e611e2761260a565b8383612b03565b5050565b611e3a61260a565b73ffffffffffffffffffffffffffffffffffffffff16611e58611cca565b73ffffffffffffffffffffffffffffffffffffffff1614611eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea5906143d5565b60405180910390fd5b80600e8190555050565b600c5481565b611ecf611ec961260a565b836126e9565b611f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f059061491b565b60405180910390fd5b611f1a84848484612c70565b50505050565b60128181548110611f3057600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc4906144d3565b60405180910390fd5b600081118015611fde5750600a8111155b61201d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201490614c90565b60405180910390fd5b601360009054906101000a900460ff1661206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390614d22565b60405180910390fd5b601454600c5461207c9190614d42565b600b546120899190614d42565b8160155461209791906146e6565b11156120d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cf90614dc2565b60405180910390fd5b80600d546120e69190614620565b341015612128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211f906146c6565b60405180910390fd5b60005b8181101561217c576000600160155461214491906146e6565b905061215033826126cb565b6015600081548092919061216390614860565b919050555050808061217490614860565b91505061212b565b5050565b606061218b8261259e565b6121ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c190614e54565b60405180910390fd5b60006121d583612ccc565b9050601360029054906101000a900460ff1661227e57601980546121f8906141a1565b80601f0160208091040260200160405190810160405280929190818152602001828054612224906141a1565b80156122715780601f1061224657610100808354040283529160200191612271565b820191906000526020600020905b81548152906001019060200180831161225457829003601f168201915b50505050509150506122c1565b600081511161229c57604051806020016040528060008152506122bd565b806040516020016122ad9190614efc565b6040516020818303038152906040525b9150505b919050565b601360019054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601360009054906101000a900460ff1681565b61238861260a565b73ffffffffffffffffffffffffffffffffffffffff166123a6611cca565b73ffffffffffffffffffffffffffffffffffffffff16146123fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f3906143d5565b60405180910390fd5b6012600061240a919061393a565b81816012919061241b92919061395b565b505050565b61242861260a565b73ffffffffffffffffffffffffffffffffffffffff16612446611cca565b73ffffffffffffffffffffffffffffffffffffffff161461249c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612493906143d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561250c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250390614f90565b60405180910390fd5b61251581612a3d565b50565b60145481565b600b5481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612597575061259682612d73565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126858361182f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6126e5828260405180602001604052806000815250612e55565b5050565b60006126f48261259e565b612733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272a90615022565b60405180910390fd5b600061273e8361182f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806127ad57508373ffffffffffffffffffffffffffffffffffffffff1661279584610bd3565b73ffffffffffffffffffffffffffffffffffffffff16145b806127be57506127bd81856122d9565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166127e78261182f565b73ffffffffffffffffffffffffffffffffffffffff161461283d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612834906150b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a490615146565b60405180910390fd5b6128b8838383612eb0565b6128c3600082612612565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129139190614d42565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461296a91906146e6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8060189080519060200190612a399291906138b4565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b69906151b2565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612c639190613b00565b60405180910390a3505050565b612c7b8484846127c7565b612c8784848484612ec0565b612cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cbd90615244565b60405180910390fd5b50505050565b6060612cd78261259e565b612d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0d90614e54565b60405180910390fd5b6000612d20613057565b90506000815111612d405760405180602001604052806000815250612d6b565b80612d4a846130e9565b604051602001612d5b929190615264565b6040516020818303038152906040525b915050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612e3e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612e4e5750612e4d8261324a565b5b9050919050565b612e5f83836132b4565b612e6c6000848484612ec0565b612eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea290615244565b60405180910390fd5b505050565b612ebb838383613482565b505050565b6000612ee18473ffffffffffffffffffffffffffffffffffffffff16613596565b1561304a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f0a61260a565b8786866040518563ffffffff1660e01b8152600401612f2c94939291906152dd565b602060405180830381600087803b158015612f4657600080fd5b505af1925050508015612f7757506040513d601f19601f82011682018060405250810190612f74919061533e565b60015b612ffa573d8060008114612fa7576040519150601f19603f3d011682016040523d82523d6000602084013e612fac565b606091505b50600081511415612ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe990615244565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061304f565b600190505b949350505050565b606060188054613066906141a1565b80601f0160208091040260200160405190810160405280929190818152602001828054613092906141a1565b80156130df5780601f106130b4576101008083540402835291602001916130df565b820191906000526020600020905b8154815290600101906020018083116130c257829003601f168201915b5050505050905090565b60606000821415613131576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613245565b600082905060005b6000821461316357808061314c90614860565b915050600a8261315c919061539a565b9150613139565b60008167ffffffffffffffff81111561317f5761317e613d81565b5b6040519080825280601f01601f1916602001820160405280156131b15781602001600182028036833780820191505090505b5090505b6000851461323e576001826131ca9190614d42565b9150600a856131d991906153cb565b60306131e591906146e6565b60f81b8183815181106131fb576131fa6149cd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613237919061539a565b94506131b5565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331b90615448565b60405180910390fd5b61332d8161259e565b1561336d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613364906154b4565b60405180910390fd5b61337960008383612eb0565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133c991906146e6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b61348d8383836135a9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134d0576134cb816135ae565b61350f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461350e5761350d83826135f7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135525761354d81613764565b613591565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146135905761358f8282613835565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161360484611967565b61360e9190614d42565b90506000600760008481526020019081526020016000205490508181146136f3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506137789190614d42565b90506000600960008481526020019081526020016000205490506000600883815481106137a8576137a76149cd565b5b9060005260206000200154905080600883815481106137ca576137c96149cd565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613819576138186154d4565b5b6001900381819060005260206000200160009055905550505050565b600061384083611967565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546138c0906141a1565b90600052602060002090601f0160209004810192826138e25760008555613929565b82601f106138fb57805160ff1916838001178555613929565b82800160010185558215613929579182015b8281111561392857825182559160200191906001019061390d565b5b50905061393691906139fb565b5090565b508054600082559060005260206000209081019061395891906139fb565b50565b8280548282559060005260206000209081019282156139ea579160200282015b828111156139e957823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061397b565b5b5090506139f791906139fb565b5090565b5b80821115613a145760008160009055506001016139fc565b5090565b6000819050919050565b613a2b81613a18565b82525050565b6000602082019050613a466000830184613a22565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613a9581613a60565b8114613aa057600080fd5b50565b600081359050613ab281613a8c565b92915050565b600060208284031215613ace57613acd613a56565b5b6000613adc84828501613aa3565b91505092915050565b60008115159050919050565b613afa81613ae5565b82525050565b6000602082019050613b156000830184613af1565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b55578082015181840152602081019050613b3a565b83811115613b64576000848401525b50505050565b6000601f19601f8301169050919050565b6000613b8682613b1b565b613b908185613b26565b9350613ba0818560208601613b37565b613ba981613b6a565b840191505092915050565b60006020820190508181036000830152613bce8184613b7b565b905092915050565b613bdf81613a18565b8114613bea57600080fd5b50565b600081359050613bfc81613bd6565b92915050565b600060208284031215613c1857613c17613a56565b5b6000613c2684828501613bed565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c5a82613c2f565b9050919050565b613c6a81613c4f565b82525050565b6000602082019050613c856000830184613c61565b92915050565b613c9481613c4f565b8114613c9f57600080fd5b50565b600081359050613cb181613c8b565b92915050565b60008060408385031215613cce57613ccd613a56565b5b6000613cdc85828601613ca2565b9250506020613ced85828601613bed565b9150509250929050565b600080600060608486031215613d1057613d0f613a56565b5b6000613d1e86828701613ca2565b9350506020613d2f86828701613ca2565b9250506040613d4086828701613bed565b9150509250925092565b600060208284031215613d6057613d5f613a56565b5b6000613d6e84828501613ca2565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613db982613b6a565b810181811067ffffffffffffffff82111715613dd857613dd7613d81565b5b80604052505050565b6000613deb613a4c565b9050613df78282613db0565b919050565b600067ffffffffffffffff821115613e1757613e16613d81565b5b613e2082613b6a565b9050602081019050919050565b82818337600083830152505050565b6000613e4f613e4a84613dfc565b613de1565b905082815260208101848484011115613e6b57613e6a613d7c565b5b613e76848285613e2d565b509392505050565b600082601f830112613e9357613e92613d77565b5b8135613ea3848260208601613e3c565b91505092915050565b600060208284031215613ec257613ec1613a56565b5b600082013567ffffffffffffffff811115613ee057613edf613a5b565b5b613eec84828501613e7e565b91505092915050565b613efe81613ae5565b8114613f0957600080fd5b50565b600081359050613f1b81613ef5565b92915050565b60008060408385031215613f3857613f37613a56565b5b6000613f4685828601613ca2565b9250506020613f5785828601613f0c565b9150509250929050565b600067ffffffffffffffff821115613f7c57613f7b613d81565b5b613f8582613b6a565b9050602081019050919050565b6000613fa5613fa084613f61565b613de1565b905082815260208101848484011115613fc157613fc0613d7c565b5b613fcc848285613e2d565b509392505050565b600082601f830112613fe957613fe8613d77565b5b8135613ff9848260208601613f92565b91505092915050565b6000806000806080858703121561401c5761401b613a56565b5b600061402a87828801613ca2565b945050602061403b87828801613ca2565b935050604061404c87828801613bed565b925050606085013567ffffffffffffffff81111561406d5761406c613a5b565b5b61407987828801613fd4565b91505092959194509250565b6000806040838503121561409c5761409b613a56565b5b60006140aa85828601613ca2565b92505060206140bb85828601613ca2565b9150509250929050565b600080fd5b600080fd5b60008083601f8401126140e5576140e4613d77565b5b8235905067ffffffffffffffff811115614102576141016140c5565b5b60208301915083602082028301111561411e5761411d6140ca565b5b9250929050565b6000806020838503121561413c5761413b613a56565b5b600083013567ffffffffffffffff81111561415a57614159613a5b565b5b614166858286016140cf565b92509250509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806141b957607f821691505b602082108114156141cd576141cc614172565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061422f602c83613b26565b915061423a826141d3565b604082019050919050565b6000602082019050818103600083015261425e81614222565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006142c1602183613b26565b91506142cc82614265565b604082019050919050565b600060208201905081810360008301526142f0816142b4565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000614353603883613b26565b915061435e826142f7565b604082019050919050565b6000602082019050818103600083015261438281614346565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006143bf602083613b26565b91506143ca82614389565b602082019050919050565b600060208201905081810360008301526143ee816143b2565b9050919050565b7f496e76616c69642073656e646572000000000000000000000000000000000000600082015250565b600061442b600e83613b26565b9150614436826143f5565b602082019050919050565b6000602082019050818103600083015261445a8161441e565b9050919050565b7f4e6f207472616e73616374696f6e2066726f6d20736d61727420636f6e74726160008201527f6374732100000000000000000000000000000000000000000000000000000000602082015250565b60006144bd602483613b26565b91506144c882614461565b604082019050919050565b600060208201905081810360008301526144ec816144b0565b9050919050565b7f57686974656c6973742053616c65206d7573742062652061637469766520746f60008201527f206d696e74000000000000000000000000000000000000000000000000000000602082015250565b600061454f602583613b26565b915061455a826144f3565b604082019050919050565b6000602082019050818103600083015261457e81614542565b9050919050565b7f55736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b60006145bb601783613b26565b91506145c682614585565b602082019050919050565b600060208201905081810360008301526145ea816145ae565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061462b82613a18565b915061463683613a18565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561466f5761466e6145f1565b5b828202905092915050565b7f4e6f7420656e6f7567682045544820666f72207472616e73616374696f6e0000600082015250565b60006146b0601e83613b26565b91506146bb8261467a565b602082019050919050565b600060208201905081810360008301526146df816146a3565b9050919050565b60006146f182613a18565b91506146fc83613a18565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614731576147306145f1565b5b828201905092915050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f20666f722057686974656c6973742053616c6500000000000000000000000000602082015250565b6000614798603383613b26565b91506147a38261473c565b604082019050919050565b600060208201905081810360008301526147c78161478b565b9050919050565b7f4c696d6974206973203420746f6b656e73207065722077616c6c65742c20746860008201527f69732073616c65206e6f7420616c6c6f77656400000000000000000000000000602082015250565b600061482a603383613b26565b9150614835826147ce565b604082019050919050565b600060208201905081810360008301526148598161481d565b9050919050565b600061486b82613a18565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561489e5761489d6145f1565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000614905603183613b26565b9150614910826148a9565b604082019050919050565b60006020820190508181036000830152614934816148f8565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614997602b83613b26565b91506149a28261493b565b604082019050919050565b600060208201905081810360008301526149c68161498a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614a58602c83613b26565b9150614a63826149fc565b604082019050919050565b60006020820190508181036000830152614a8781614a4b565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614aea602983613b26565b9150614af582614a8e565b604082019050919050565b60006020820190508181036000830152614b1981614add565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614b7c602a83613b26565b9150614b8782614b20565b604082019050919050565b60006020820190508181036000830152614bab81614b6f565b9050919050565b7f5468697320616d6f756e74206973206d6f7265207468616e206d617820616c6c60008201527f6f77656400000000000000000000000000000000000000000000000000000000602082015250565b6000614c0e602483613b26565b9150614c1982614bb2565b604082019050919050565b60006020820190508181036000830152614c3d81614c01565b9050919050565b7f4d6178203130204e46547320706572207472616e73616374696f6e0000000000600082015250565b6000614c7a601b83613b26565b9150614c8582614c44565b602082019050919050565b60006020820190508181036000830152614ca981614c6d565b9050919050565b7f5075626c69632053616c65206d7573742062652061637469766520746f206d6960008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d0c602283613b26565b9150614d1782614cb0565b604082019050919050565b60006020820190508181036000830152614d3b81614cff565b9050919050565b6000614d4d82613a18565b9150614d5883613a18565b925082821015614d6b57614d6a6145f1565b5b828203905092915050565b7f507572636861736520776f756c6420657863656564206d617820737570706c79600082015250565b6000614dac602083613b26565b9150614db782614d76565b602082019050919050565b60006020820190508181036000830152614ddb81614d9f565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614e3e602f83613b26565b9150614e4982614de2565b604082019050919050565b60006020820190508181036000830152614e6d81614e31565b9050919050565b600081905092915050565b6000614e8a82613b1b565b614e948185614e74565b9350614ea4818560208601613b37565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000614ee6600583614e74565b9150614ef182614eb0565b600582019050919050565b6000614f088284614e7f565b9150614f1382614ed9565b915081905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614f7a602683613b26565b9150614f8582614f1e565b604082019050919050565b60006020820190508181036000830152614fa981614f6d565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061500c602c83613b26565b915061501782614fb0565b604082019050919050565b6000602082019050818103600083015261503b81614fff565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b600061509e602983613b26565b91506150a982615042565b604082019050919050565b600060208201905081810360008301526150cd81615091565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615130602483613b26565b915061513b826150d4565b604082019050919050565b6000602082019050818103600083015261515f81615123565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061519c601983613b26565b91506151a782615166565b602082019050919050565b600060208201905081810360008301526151cb8161518f565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061522e603283613b26565b9150615239826151d2565b604082019050919050565b6000602082019050818103600083015261525d81615221565b9050919050565b60006152708285614e7f565b915061527c8284614e7f565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b60006152af82615288565b6152b98185615293565b93506152c9818560208601613b37565b6152d281613b6a565b840191505092915050565b60006080820190506152f26000830187613c61565b6152ff6020830186613c61565b61530c6040830185613a22565b818103606083015261531e81846152a4565b905095945050505050565b60008151905061533881613a8c565b92915050565b60006020828403121561535457615353613a56565b5b600061536284828501615329565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006153a582613a18565b91506153b083613a18565b9250826153c0576153bf61536b565b5b828204905092915050565b60006153d682613a18565b91506153e183613a18565b9250826153f1576153f061536b565b5b828206905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615432602083613b26565b915061543d826153fc565b602082019050919050565b6000602082019050818103600083015261546181615425565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061549e601c83613b26565b91506154a982615468565b602082019050919050565b600060208201905081810360008301526154cd81615491565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212201f3713912bd082af6b9c11aff93660ad930d1bc6b19ba20819ea3c83a28ba2e664736f6c63430008090033
Deployed Bytecode
0x6080604052600436106102c85760003560e01c806355f804b311610175578063a461cbe8116100dc578063d3d88bcd11610095578063edec5f271161006f578063edec5f2714610a75578063f2fde38b14610a9e578063f3e3882114610ac7578063f47c84c514610af2576102c8565b8063d3d88bcd146109e2578063e985e9c514610a0d578063eb8d244414610a4a576102c8565b8063a461cbe8146108cf578063b22edfbc146108f8578063b88d4fde14610923578063ba4e5c491461094c578063c634d03214610989578063c87b56dd146109a5576102c8565b80637d5cb4e51161012e5780637d5cb4e5146107e75780638c522422146108105780638da5cb5b1461082757806395d89b41146108525780639c12e1bc1461087d578063a22cb465146108a6576102c8565b806355f804b3146106d9578063611f3f10146107025780636352211e1461072d5780636a6727691461076a57806370a0823114610793578063715018a6146107d0576102c8565b806322cf48f11161023457806331c3c7a0116101ed5780633ccfd60b116101c75780633ccfd60b1461063e57806342842e0e146106485780634f6ccce71461067157806351830227146106ae576102c8565b806331c3c7a0146105bf57806334918dfd146105ea5780633af32abf14610601576102c8565b806322cf48f1146104d057806323b872dd146104ec5780632714ce9214610515578063291cdc561461052c5780632e055bcc146105575780632f745c5914610582576102c8565b8063081c8c4411610286578063081c8c44146103f3578063095ea7b31461041e57806310715230146104475780631183c4c31461047057806311b4b9b41461047a57806318160ddd146104a5576102c8565b8062a9c653146102cd57806301ffc9a7146102f8578063047fc9aa1461033557806306f03a6e1461036057806306fdde031461038b578063081812fc146103b6575b600080fd5b3480156102d957600080fd5b506102e2610b1d565b6040516102ef9190613a31565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a9190613ab8565b610b23565b60405161032c9190613b00565b60405180910390f35b34801561034157600080fd5b5061034a610b35565b6040516103579190613a31565b60405180910390f35b34801561036c57600080fd5b50610375610b3b565b6040516103829190613a31565b60405180910390f35b34801561039757600080fd5b506103a0610b41565b6040516103ad9190613bb4565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d89190613c02565b610bd3565b6040516103ea9190613c70565b60405180910390f35b3480156103ff57600080fd5b50610408610c58565b6040516104159190613bb4565b60405180910390f35b34801561042a57600080fd5b5061044560048036038101906104409190613cb7565b610ce6565b005b34801561045357600080fd5b5061046e60048036038101906104699190613c02565b610dfe565b005b610478610e84565b005b34801561048657600080fd5b5061048f610fe9565b60405161049c9190613a31565b60405180910390f35b3480156104b157600080fd5b506104ba610fef565b6040516104c79190613a31565b60405180910390f35b6104ea60048036038101906104e59190613c02565b610ffc565b005b3480156104f857600080fd5b50610513600480360381019061050e9190613cf7565b61126b565b005b34801561052157600080fd5b5061052a6112cb565b005b34801561053857600080fd5b50610541611373565b60405161054e9190613c70565b60405180910390f35b34801561056357600080fd5b5061056c611399565b6040516105799190613a31565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a49190613cb7565b61139f565b6040516105b69190613a31565b60405180910390f35b3480156105cb57600080fd5b506105d4611444565b6040516105e19190613a31565b60405180910390f35b3480156105f657600080fd5b506105ff61144a565b005b34801561060d57600080fd5b5061062860048036038101906106239190613d4a565b61150d565b6040516106359190613b00565b60405180910390f35b6106466115bc565b005b34801561065457600080fd5b5061066f600480360381019061066a9190613cf7565b6116fd565b005b34801561067d57600080fd5b5061069860048036038101906106939190613c02565b61171d565b6040516106a59190613a31565b60405180910390f35b3480156106ba57600080fd5b506106c361178e565b6040516106d09190613b00565b60405180910390f35b3480156106e557600080fd5b5061070060048036038101906106fb9190613eac565b6117a1565b005b34801561070e57600080fd5b50610717611829565b6040516107249190613a31565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f9190613c02565b61182f565b6040516107619190613c70565b60405180910390f35b34801561077657600080fd5b50610791600480360381019061078c9190613c02565b6118e1565b005b34801561079f57600080fd5b506107ba60048036038101906107b59190613d4a565b611967565b6040516107c79190613a31565b60405180910390f35b3480156107dc57600080fd5b506107e5611a1f565b005b3480156107f357600080fd5b5061080e60048036038101906108099190613c02565b611aa7565b005b34801561081c57600080fd5b50610825611c07565b005b34801561083357600080fd5b5061083c611cca565b6040516108499190613c70565b60405180910390f35b34801561085e57600080fd5b50610867611cf4565b6040516108749190613bb4565b60405180910390f35b34801561088957600080fd5b506108a4600480360381019061089f9190613eac565b611d86565b005b3480156108b257600080fd5b506108cd60048036038101906108c89190613f21565b611e1c565b005b3480156108db57600080fd5b506108f660048036038101906108f19190613c02565b611e32565b005b34801561090457600080fd5b5061090d611eb8565b60405161091a9190613a31565b60405180910390f35b34801561092f57600080fd5b5061094a60048036038101906109459190614002565b611ebe565b005b34801561095857600080fd5b50610973600480360381019061096e9190613c02565b611f20565b6040516109809190613c70565b60405180910390f35b6109a3600480360381019061099e9190613c02565b611f5f565b005b3480156109b157600080fd5b506109cc60048036038101906109c79190613c02565b612180565b6040516109d99190613bb4565b60405180910390f35b3480156109ee57600080fd5b506109f76122c6565b604051610a049190613b00565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f9190614085565b6122d9565b604051610a419190613b00565b60405180910390f35b348015610a5657600080fd5b50610a5f61236d565b604051610a6c9190613b00565b60405180910390f35b348015610a8157600080fd5b50610a9c6004803603810190610a979190614125565b612380565b005b348015610aaa57600080fd5b50610ac56004803603810190610ac09190613d4a565b612420565b005b348015610ad357600080fd5b50610adc612518565b604051610ae99190613a31565b60405180910390f35b348015610afe57600080fd5b50610b0761251e565b604051610b149190613a31565b60405180910390f35b60115481565b6000610b2e82612524565b9050919050565b60155481565b60105481565b606060008054610b50906141a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7c906141a1565b8015610bc95780601f10610b9e57610100808354040283529160200191610bc9565b820191906000526020600020905b815481529060010190602001808311610bac57829003601f168201915b5050505050905090565b6000610bde8261259e565b610c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1490614245565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60198054610c65906141a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610c91906141a1565b8015610cde5780601f10610cb357610100808354040283529160200191610cde565b820191906000526020600020905b815481529060010190602001808311610cc157829003601f168201915b505050505081565b6000610cf18261182f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d59906142d7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d8161260a565b73ffffffffffffffffffffffffffffffffffffffff161480610db05750610daf81610daa61260a565b6122d9565b5b610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de690614369565b60405180910390fd5b610df98383612612565b505050565b610e0661260a565b73ffffffffffffffffffffffffffffffffffffffff16610e24611cca565b73ffffffffffffffffffffffffffffffffffffffff1614610e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e71906143d5565b60405180910390fd5b8060118190555050565b610e8c61260a565b73ffffffffffffffffffffffffffffffffffffffff16610eaa611cca565b73ffffffffffffffffffffffffffffffffffffffff1614610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef7906143d5565b60405180910390fd5b610f08611cca565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c90614441565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc68056bc75e2d631000009081150290604051600060405180830381858888f19350505050158015610fe6573d6000803e3d6000fd5b50565b60175481565b6000600880549050905090565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461106a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611061906144d3565b60405180910390fd5b601360019054906101000a900460ff166110b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b090614565565b60405180910390fd5b6110c23361150d565b611101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f8906145d1565b60405180910390fd5b80600e5461110f9190614620565b341015611151576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611148906146c6565b60405180910390fd5b6010548160175461116291906146e6565b11156111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119a906147ae565b60405180910390fd5b601154816111b033611967565b6111ba91906146e6565b11156111fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f290614840565b60405180910390fd5b60005b81811015611267576000600160155461121791906146e6565b905061122333826126cb565b6015600081548092919061123690614860565b91905055506017600081548092919061124e90614860565b919050555050808061125f90614860565b9150506111fe565b5050565b61127c61127661260a565b826126e9565b6112bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b29061491b565b60405180910390fd5b6112c68383836127c7565b505050565b6112d361260a565b73ffffffffffffffffffffffffffffffffffffffff166112f1611cca565b73ffffffffffffffffffffffffffffffffffffffff1614611347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133e906143d5565b60405180910390fd5b601360029054906101000a900460ff1615601360026101000a81548160ff021916908315150217905550565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b60006113aa83611967565b82106113eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e2906149ad565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600e5481565b61145261260a565b73ffffffffffffffffffffffffffffffffffffffff16611470611cca565b73ffffffffffffffffffffffffffffffffffffffff16146114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd906143d5565b60405180910390fd5b6000601360016101000a81548160ff021916908315150217905550601360009054906101000a900460ff1615601360006101000a81548160ff021916908315150217905550565b600080600090505b6012805490508110156115b1578273ffffffffffffffffffffffffffffffffffffffff166012828154811061154d5761154c6149cd565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561159e5760019150506115b7565b80806115a990614860565b915050611515565b50600090505b919050565b6115c461260a565b73ffffffffffffffffffffffffffffffffffffffff166115e2611cca565b73ffffffffffffffffffffffffffffffffffffffff1614611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162f906143d5565b60405180910390fd5b611640611cca565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a490614441565b60405180910390fd5b6116b5611cca565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156116fa573d6000803e3d6000fd5b50565b61171883838360405180602001604052806000815250611ebe565b505050565b6000611727610fef565b8210611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175f90614a6e565b60405180910390fd5b6008828154811061177c5761177b6149cd565b5b90600052602060002001549050919050565b601360029054906101000a900460ff1681565b6117a961260a565b73ffffffffffffffffffffffffffffffffffffffff166117c7611cca565b73ffffffffffffffffffffffffffffffffffffffff161461181d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611814906143d5565b60405180910390fd5b61182681612a23565b50565b600d5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cf90614b00565b60405180910390fd5b80915050919050565b6118e961260a565b73ffffffffffffffffffffffffffffffffffffffff16611907611cca565b73ffffffffffffffffffffffffffffffffffffffff161461195d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611954906143d5565b60405180910390fd5b80600d8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90614b92565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a2761260a565b73ffffffffffffffffffffffffffffffffffffffff16611a45611cca565b73ffffffffffffffffffffffffffffffffffffffff1614611a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a92906143d5565b60405180910390fd5b611aa56000612a3d565b565b611aaf61260a565b73ffffffffffffffffffffffffffffffffffffffff16611acd611cca565b73ffffffffffffffffffffffffffffffffffffffff1614611b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1a906143d5565b60405180910390fd5b600c5481601454611b3491906146e6565b1115611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c90614c24565b60405180910390fd5b60005b81811015611c035760006001601554611b9191906146e6565b9050611bbf600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826126cb565b60156000815480929190611bd290614860565b919050555060146000815480929190611bea90614860565b9190505550508080611bfb90614860565b915050611b78565b5050565b611c0f61260a565b73ffffffffffffffffffffffffffffffffffffffff16611c2d611cca565b73ffffffffffffffffffffffffffffffffffffffff1614611c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7a906143d5565b60405180910390fd5b6000601360006101000a81548160ff021916908315150217905550601360019054906101000a900460ff1615601360016101000a81548160ff021916908315150217905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611d03906141a1565b80601f0160208091040260200160405190810160405280929190818152602001828054611d2f906141a1565b8015611d7c5780601f10611d5157610100808354040283529160200191611d7c565b820191906000526020600020905b815481529060010190602001808311611d5f57829003601f168201915b5050505050905090565b611d8e61260a565b73ffffffffffffffffffffffffffffffffffffffff16611dac611cca565b73ffffffffffffffffffffffffffffffffffffffff1614611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df9906143d5565b60405180910390fd5b8060199080519060200190611e189291906138b4565b5050565b611e2e611e2761260a565b8383612b03565b5050565b611e3a61260a565b73ffffffffffffffffffffffffffffffffffffffff16611e58611cca565b73ffffffffffffffffffffffffffffffffffffffff1614611eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea5906143d5565b60405180910390fd5b80600e8190555050565b600c5481565b611ecf611ec961260a565b836126e9565b611f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f059061491b565b60405180910390fd5b611f1a84848484612c70565b50505050565b60128181548110611f3057600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc4906144d3565b60405180910390fd5b600081118015611fde5750600a8111155b61201d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201490614c90565b60405180910390fd5b601360009054906101000a900460ff1661206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390614d22565b60405180910390fd5b601454600c5461207c9190614d42565b600b546120899190614d42565b8160155461209791906146e6565b11156120d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cf90614dc2565b60405180910390fd5b80600d546120e69190614620565b341015612128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211f906146c6565b60405180910390fd5b60005b8181101561217c576000600160155461214491906146e6565b905061215033826126cb565b6015600081548092919061216390614860565b919050555050808061217490614860565b91505061212b565b5050565b606061218b8261259e565b6121ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c190614e54565b60405180910390fd5b60006121d583612ccc565b9050601360029054906101000a900460ff1661227e57601980546121f8906141a1565b80601f0160208091040260200160405190810160405280929190818152602001828054612224906141a1565b80156122715780601f1061224657610100808354040283529160200191612271565b820191906000526020600020905b81548152906001019060200180831161225457829003601f168201915b50505050509150506122c1565b600081511161229c57604051806020016040528060008152506122bd565b806040516020016122ad9190614efc565b6040516020818303038152906040525b9150505b919050565b601360019054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601360009054906101000a900460ff1681565b61238861260a565b73ffffffffffffffffffffffffffffffffffffffff166123a6611cca565b73ffffffffffffffffffffffffffffffffffffffff16146123fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f3906143d5565b60405180910390fd5b6012600061240a919061393a565b81816012919061241b92919061395b565b505050565b61242861260a565b73ffffffffffffffffffffffffffffffffffffffff16612446611cca565b73ffffffffffffffffffffffffffffffffffffffff161461249c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612493906143d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561250c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250390614f90565b60405180910390fd5b61251581612a3d565b50565b60145481565b600b5481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612597575061259682612d73565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126858361182f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6126e5828260405180602001604052806000815250612e55565b5050565b60006126f48261259e565b612733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272a90615022565b60405180910390fd5b600061273e8361182f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806127ad57508373ffffffffffffffffffffffffffffffffffffffff1661279584610bd3565b73ffffffffffffffffffffffffffffffffffffffff16145b806127be57506127bd81856122d9565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166127e78261182f565b73ffffffffffffffffffffffffffffffffffffffff161461283d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612834906150b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a490615146565b60405180910390fd5b6128b8838383612eb0565b6128c3600082612612565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129139190614d42565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461296a91906146e6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8060189080519060200190612a399291906138b4565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b69906151b2565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612c639190613b00565b60405180910390a3505050565b612c7b8484846127c7565b612c8784848484612ec0565b612cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cbd90615244565b60405180910390fd5b50505050565b6060612cd78261259e565b612d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0d90614e54565b60405180910390fd5b6000612d20613057565b90506000815111612d405760405180602001604052806000815250612d6b565b80612d4a846130e9565b604051602001612d5b929190615264565b6040516020818303038152906040525b915050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612e3e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612e4e5750612e4d8261324a565b5b9050919050565b612e5f83836132b4565b612e6c6000848484612ec0565b612eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea290615244565b60405180910390fd5b505050565b612ebb838383613482565b505050565b6000612ee18473ffffffffffffffffffffffffffffffffffffffff16613596565b1561304a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f0a61260a565b8786866040518563ffffffff1660e01b8152600401612f2c94939291906152dd565b602060405180830381600087803b158015612f4657600080fd5b505af1925050508015612f7757506040513d601f19601f82011682018060405250810190612f74919061533e565b60015b612ffa573d8060008114612fa7576040519150601f19603f3d011682016040523d82523d6000602084013e612fac565b606091505b50600081511415612ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe990615244565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061304f565b600190505b949350505050565b606060188054613066906141a1565b80601f0160208091040260200160405190810160405280929190818152602001828054613092906141a1565b80156130df5780601f106130b4576101008083540402835291602001916130df565b820191906000526020600020905b8154815290600101906020018083116130c257829003601f168201915b5050505050905090565b60606000821415613131576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613245565b600082905060005b6000821461316357808061314c90614860565b915050600a8261315c919061539a565b9150613139565b60008167ffffffffffffffff81111561317f5761317e613d81565b5b6040519080825280601f01601f1916602001820160405280156131b15781602001600182028036833780820191505090505b5090505b6000851461323e576001826131ca9190614d42565b9150600a856131d991906153cb565b60306131e591906146e6565b60f81b8183815181106131fb576131fa6149cd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613237919061539a565b94506131b5565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331b90615448565b60405180910390fd5b61332d8161259e565b1561336d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613364906154b4565b60405180910390fd5b61337960008383612eb0565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133c991906146e6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b61348d8383836135a9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134d0576134cb816135ae565b61350f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461350e5761350d83826135f7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135525761354d81613764565b613591565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146135905761358f8282613835565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161360484611967565b61360e9190614d42565b90506000600760008481526020019081526020016000205490508181146136f3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506137789190614d42565b90506000600960008481526020019081526020016000205490506000600883815481106137a8576137a76149cd565b5b9060005260206000200154905080600883815481106137ca576137c96149cd565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613819576138186154d4565b5b6001900381819060005260206000200160009055905550505050565b600061384083611967565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546138c0906141a1565b90600052602060002090601f0160209004810192826138e25760008555613929565b82601f106138fb57805160ff1916838001178555613929565b82800160010185558215613929579182015b8281111561392857825182559160200191906001019061390d565b5b50905061393691906139fb565b5090565b508054600082559060005260206000209081019061395891906139fb565b50565b8280548282559060005260206000209081019282156139ea579160200282015b828111156139e957823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061397b565b5b5090506139f791906139fb565b5090565b5b80821115613a145760008160009055506001016139fc565b5090565b6000819050919050565b613a2b81613a18565b82525050565b6000602082019050613a466000830184613a22565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613a9581613a60565b8114613aa057600080fd5b50565b600081359050613ab281613a8c565b92915050565b600060208284031215613ace57613acd613a56565b5b6000613adc84828501613aa3565b91505092915050565b60008115159050919050565b613afa81613ae5565b82525050565b6000602082019050613b156000830184613af1565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b55578082015181840152602081019050613b3a565b83811115613b64576000848401525b50505050565b6000601f19601f8301169050919050565b6000613b8682613b1b565b613b908185613b26565b9350613ba0818560208601613b37565b613ba981613b6a565b840191505092915050565b60006020820190508181036000830152613bce8184613b7b565b905092915050565b613bdf81613a18565b8114613bea57600080fd5b50565b600081359050613bfc81613bd6565b92915050565b600060208284031215613c1857613c17613a56565b5b6000613c2684828501613bed565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c5a82613c2f565b9050919050565b613c6a81613c4f565b82525050565b6000602082019050613c856000830184613c61565b92915050565b613c9481613c4f565b8114613c9f57600080fd5b50565b600081359050613cb181613c8b565b92915050565b60008060408385031215613cce57613ccd613a56565b5b6000613cdc85828601613ca2565b9250506020613ced85828601613bed565b9150509250929050565b600080600060608486031215613d1057613d0f613a56565b5b6000613d1e86828701613ca2565b9350506020613d2f86828701613ca2565b9250506040613d4086828701613bed565b9150509250925092565b600060208284031215613d6057613d5f613a56565b5b6000613d6e84828501613ca2565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613db982613b6a565b810181811067ffffffffffffffff82111715613dd857613dd7613d81565b5b80604052505050565b6000613deb613a4c565b9050613df78282613db0565b919050565b600067ffffffffffffffff821115613e1757613e16613d81565b5b613e2082613b6a565b9050602081019050919050565b82818337600083830152505050565b6000613e4f613e4a84613dfc565b613de1565b905082815260208101848484011115613e6b57613e6a613d7c565b5b613e76848285613e2d565b509392505050565b600082601f830112613e9357613e92613d77565b5b8135613ea3848260208601613e3c565b91505092915050565b600060208284031215613ec257613ec1613a56565b5b600082013567ffffffffffffffff811115613ee057613edf613a5b565b5b613eec84828501613e7e565b91505092915050565b613efe81613ae5565b8114613f0957600080fd5b50565b600081359050613f1b81613ef5565b92915050565b60008060408385031215613f3857613f37613a56565b5b6000613f4685828601613ca2565b9250506020613f5785828601613f0c565b9150509250929050565b600067ffffffffffffffff821115613f7c57613f7b613d81565b5b613f8582613b6a565b9050602081019050919050565b6000613fa5613fa084613f61565b613de1565b905082815260208101848484011115613fc157613fc0613d7c565b5b613fcc848285613e2d565b509392505050565b600082601f830112613fe957613fe8613d77565b5b8135613ff9848260208601613f92565b91505092915050565b6000806000806080858703121561401c5761401b613a56565b5b600061402a87828801613ca2565b945050602061403b87828801613ca2565b935050604061404c87828801613bed565b925050606085013567ffffffffffffffff81111561406d5761406c613a5b565b5b61407987828801613fd4565b91505092959194509250565b6000806040838503121561409c5761409b613a56565b5b60006140aa85828601613ca2565b92505060206140bb85828601613ca2565b9150509250929050565b600080fd5b600080fd5b60008083601f8401126140e5576140e4613d77565b5b8235905067ffffffffffffffff811115614102576141016140c5565b5b60208301915083602082028301111561411e5761411d6140ca565b5b9250929050565b6000806020838503121561413c5761413b613a56565b5b600083013567ffffffffffffffff81111561415a57614159613a5b565b5b614166858286016140cf565b92509250509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806141b957607f821691505b602082108114156141cd576141cc614172565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061422f602c83613b26565b915061423a826141d3565b604082019050919050565b6000602082019050818103600083015261425e81614222565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006142c1602183613b26565b91506142cc82614265565b604082019050919050565b600060208201905081810360008301526142f0816142b4565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000614353603883613b26565b915061435e826142f7565b604082019050919050565b6000602082019050818103600083015261438281614346565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006143bf602083613b26565b91506143ca82614389565b602082019050919050565b600060208201905081810360008301526143ee816143b2565b9050919050565b7f496e76616c69642073656e646572000000000000000000000000000000000000600082015250565b600061442b600e83613b26565b9150614436826143f5565b602082019050919050565b6000602082019050818103600083015261445a8161441e565b9050919050565b7f4e6f207472616e73616374696f6e2066726f6d20736d61727420636f6e74726160008201527f6374732100000000000000000000000000000000000000000000000000000000602082015250565b60006144bd602483613b26565b91506144c882614461565b604082019050919050565b600060208201905081810360008301526144ec816144b0565b9050919050565b7f57686974656c6973742053616c65206d7573742062652061637469766520746f60008201527f206d696e74000000000000000000000000000000000000000000000000000000602082015250565b600061454f602583613b26565b915061455a826144f3565b604082019050919050565b6000602082019050818103600083015261457e81614542565b9050919050565b7f55736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b60006145bb601783613b26565b91506145c682614585565b602082019050919050565b600060208201905081810360008301526145ea816145ae565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061462b82613a18565b915061463683613a18565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561466f5761466e6145f1565b5b828202905092915050565b7f4e6f7420656e6f7567682045544820666f72207472616e73616374696f6e0000600082015250565b60006146b0601e83613b26565b91506146bb8261467a565b602082019050919050565b600060208201905081810360008301526146df816146a3565b9050919050565b60006146f182613a18565b91506146fc83613a18565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614731576147306145f1565b5b828201905092915050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f20666f722057686974656c6973742053616c6500000000000000000000000000602082015250565b6000614798603383613b26565b91506147a38261473c565b604082019050919050565b600060208201905081810360008301526147c78161478b565b9050919050565b7f4c696d6974206973203420746f6b656e73207065722077616c6c65742c20746860008201527f69732073616c65206e6f7420616c6c6f77656400000000000000000000000000602082015250565b600061482a603383613b26565b9150614835826147ce565b604082019050919050565b600060208201905081810360008301526148598161481d565b9050919050565b600061486b82613a18565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561489e5761489d6145f1565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000614905603183613b26565b9150614910826148a9565b604082019050919050565b60006020820190508181036000830152614934816148f8565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614997602b83613b26565b91506149a28261493b565b604082019050919050565b600060208201905081810360008301526149c68161498a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614a58602c83613b26565b9150614a63826149fc565b604082019050919050565b60006020820190508181036000830152614a8781614a4b565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614aea602983613b26565b9150614af582614a8e565b604082019050919050565b60006020820190508181036000830152614b1981614add565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614b7c602a83613b26565b9150614b8782614b20565b604082019050919050565b60006020820190508181036000830152614bab81614b6f565b9050919050565b7f5468697320616d6f756e74206973206d6f7265207468616e206d617820616c6c60008201527f6f77656400000000000000000000000000000000000000000000000000000000602082015250565b6000614c0e602483613b26565b9150614c1982614bb2565b604082019050919050565b60006020820190508181036000830152614c3d81614c01565b9050919050565b7f4d6178203130204e46547320706572207472616e73616374696f6e0000000000600082015250565b6000614c7a601b83613b26565b9150614c8582614c44565b602082019050919050565b60006020820190508181036000830152614ca981614c6d565b9050919050565b7f5075626c69632053616c65206d7573742062652061637469766520746f206d6960008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d0c602283613b26565b9150614d1782614cb0565b604082019050919050565b60006020820190508181036000830152614d3b81614cff565b9050919050565b6000614d4d82613a18565b9150614d5883613a18565b925082821015614d6b57614d6a6145f1565b5b828203905092915050565b7f507572636861736520776f756c6420657863656564206d617820737570706c79600082015250565b6000614dac602083613b26565b9150614db782614d76565b602082019050919050565b60006020820190508181036000830152614ddb81614d9f565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614e3e602f83613b26565b9150614e4982614de2565b604082019050919050565b60006020820190508181036000830152614e6d81614e31565b9050919050565b600081905092915050565b6000614e8a82613b1b565b614e948185614e74565b9350614ea4818560208601613b37565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000614ee6600583614e74565b9150614ef182614eb0565b600582019050919050565b6000614f088284614e7f565b9150614f1382614ed9565b915081905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614f7a602683613b26565b9150614f8582614f1e565b604082019050919050565b60006020820190508181036000830152614fa981614f6d565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061500c602c83613b26565b915061501782614fb0565b604082019050919050565b6000602082019050818103600083015261503b81614fff565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b600061509e602983613b26565b91506150a982615042565b604082019050919050565b600060208201905081810360008301526150cd81615091565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615130602483613b26565b915061513b826150d4565b604082019050919050565b6000602082019050818103600083015261515f81615123565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061519c601983613b26565b91506151a782615166565b602082019050919050565b600060208201905081810360008301526151cb8161518f565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061522e603283613b26565b9150615239826151d2565b604082019050919050565b6000602082019050818103600083015261525d81615221565b9050919050565b60006152708285614e7f565b915061527c8284614e7f565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b60006152af82615288565b6152b98185615293565b93506152c9818560208601613b37565b6152d281613b6a565b840191505092915050565b60006080820190506152f26000830187613c61565b6152ff6020830186613c61565b61530c6040830185613a22565b818103606083015261531e81846152a4565b905095945050505050565b60008151905061533881613a8c565b92915050565b60006020828403121561535457615353613a56565b5b600061536284828501615329565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006153a582613a18565b91506153b083613a18565b9250826153c0576153bf61536b565b5b828204905092915050565b60006153d682613a18565b91506153e183613a18565b9250826153f1576153f061536b565b5b828206905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615432602083613b26565b915061543d826153fc565b602082019050919050565b6000602082019050818103600083015261546181615425565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061549e601c83613b26565b91506154a982615468565b602082019050919050565b600060208201905081810360008301526154cd81615491565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212201f3713912bd082af6b9c11aff93660ad930d1bc6b19ba20819ea3c83a28ba2e664736f6c63430008090033
Deployed Bytecode Sourcemap
49194:5813:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49639:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53387:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49887:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49595:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25793:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27352:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50022:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26875:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54171:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52961:206;;;:::i;:::-;;49952:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38939:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50845:838;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28102:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52255:90;;;;;;;;;;;;;:::i;:::-;;49510:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49916:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38607:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49445:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51976:130;;;;;;;;;;;;;:::i;:::-;;51691:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52775:178;;;:::i;:::-;;28512:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39129:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49807:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54298:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49378:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25487:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54045:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25217:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4763:103;;;;;;;;;;;;;:::i;:::-;;52353:414;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52114:133;;;;;;;;;;;;;:::i;:::-;;4112:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25962:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53580:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27645:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53935:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49332:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28768:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49681:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50132:705;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54585:419;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49766:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27871:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49727:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54417:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5021:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49844:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49296:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49639;;;;:::o;53387:185::-;53499:4;53528:36;53552:11;53528:23;:36::i;:::-;53521:43;;53387:185;;;:::o;49887:22::-;;;;:::o;49595:37::-;;;;:::o;25793:100::-;25847:13;25880:5;25873:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25793:100;:::o;27352:221::-;27428:7;27456:16;27464:7;27456;:16::i;:::-;27448:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27541:15;:24;27557:7;27541:24;;;;;;;;;;;;;;;;;;;;;27534:31;;27352:221;;;:::o;50022:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26875:411::-;26956:13;26972:23;26987:7;26972:14;:23::i;:::-;26956:39;;27020:5;27014:11;;:2;:11;;;;27006:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27114:5;27098:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27123:37;27140:5;27147:12;:10;:12::i;:::-;27123:16;:37::i;:::-;27098:62;27076:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27257:21;27266:2;27270:7;27257:8;:21::i;:::-;26945:341;26875:411;;:::o;54171:119::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54268:14:::1;54252:13;:30;;;;54171:119:::0;:::o;52961:206::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53054:7:::1;:5;:7::i;:::-;53040:21;;:10;:21;;;53032:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;53099:16;;;;;;;;;;;53091:34;;:57;53126:21;53091:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;52961:206::o:0;49952:28::-;;;;:::o;38939:113::-;39000:7;39027:10;:17;;;;39020:24;;38939:113;:::o;50845:838::-;50941:9;50927:23;;:10;:23;;;50919:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;51010:14;;;;;;;;;;;51002:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;51085:25;51099:10;51085:13;:25::i;:::-;51077:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;51182:6;51171:8;;:17;;;;:::i;:::-;51157:9;:32;;51149:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;51270:18;;51259:6;51244:12;;:21;;;;:::i;:::-;51243:45;;51235:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;51399:13;;51388:6;51364:21;51374:10;51364:9;:21::i;:::-;:30;;;;:::i;:::-;51363:49;;51355:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;51486:6;51481:195;51502:6;51498:1;:10;51481:195;;;51539:15;51566:1;51557:6;;:10;;;;:::i;:::-;51539:28;;51582:30;51592:10;51604:7;51582:9;:30::i;:::-;51627:6;;:8;;;;;;;;;:::i;:::-;;;;;;51650:12;;:14;;;;;;;;;:::i;:::-;;;;;;51524:152;51510:3;;;;;:::i;:::-;;;;51481:195;;;;50845:838;:::o;28102:339::-;28297:41;28316:12;:10;:12::i;:::-;28330:7;28297:18;:41::i;:::-;28289:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28405:28;28415:4;28421:2;28425:7;28405:9;:28::i;:::-;28102:339;;;:::o;52255:90::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52329:8:::1;;;;;;;;;;;52328:9;52317:8;;:20;;;;;;;;;;;;;;;;;;52255:90::o:0;49510:76::-;;;;;;;;;;;;;:::o;49916:29::-;;;;:::o;38607:256::-;38704:7;38740:23;38757:5;38740:16;:23::i;:::-;38732:5;:31;38724:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38829:12;:19;38842:5;38829:19;;;;;;;;;;;;;;;:26;38849:5;38829:26;;;;;;;;;;;;38822:33;;38607:256;;;;:::o;49445:44::-;;;;:::o;51976:130::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52054:5:::1;52037:14;;:22;;;;;;;;;;;;;;;;;;52086:12;;;;;;;;;;;52085:13;52070:12;;:28;;;;;;;;;;;;;;;;;;51976:130::o:0;51691:277::-;51750:4;51778:6;51787:1;51778:10;;51773:165;51794:20;:27;;;;51790:1;:31;51773:165;;;51874:5;51847:32;;:20;51868:1;51847:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;51843:84;;;51907:4;51900:11;;;;;51843:84;51823:3;;;;;:::i;:::-;;;;51773:165;;;;51955:5;51948:12;;51691:277;;;;:::o;52775:178::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52858:7:::1;:5;:7::i;:::-;52844:21;;:10;:21;;;52836:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;52905:7;:5;:7::i;:::-;52897:25;;:48;52923:21;52897:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;52775:178::o:0;28512:185::-;28650:39;28667:4;28673:2;28677:7;28650:39;;;;;;;;;;;;:16;:39::i;:::-;28512:185;;;:::o;39129:233::-;39204:7;39240:30;:28;:30::i;:::-;39232:5;:38;39224:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39337:10;39348:5;39337:17;;;;;;;;:::i;:::-;;;;;;;;;;39330:24;;39129:233;;;:::o;49807:28::-;;;;;;;;;;;;;:::o;54298:107::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54377:20:::1;54389:7;54377:11;:20::i;:::-;54298:107:::0;:::o;49378:48::-;;;;:::o;25487:239::-;25559:7;25579:13;25595:7;:16;25603:7;25595:16;;;;;;;;;;;;;;;;;;;;;25579:32;;25647:1;25630:19;;:5;:19;;;;25622:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25713:5;25706:12;;;25487:239;;;:::o;54045:118::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54141:14:::1;54126:12;:29;;;;54045:118:::0;:::o;25217:208::-;25289:7;25334:1;25317:19;;:5;:19;;;;25309:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25401:9;:16;25411:5;25401:16;;;;;;;;;;;;;;;;25394:23;;25217:208;;;:::o;4763:103::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4828:30:::1;4855:1;4828:18;:30::i;:::-;4763:103::o:0;52353:414::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52475:22:::1;;52464:6;52441:20;;:29;;;;:::i;:::-;52440:57;;52432:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;52556:6;52551:209;52572:6;52568:1;:10;52551:209;;;52609:15;52636:1;52627:6;;:10;;;;:::i;:::-;52609:28;;52652:36;52662:16;;;;;;;;;;;52680:7;52652:9;:36::i;:::-;52703:6;;:8;;;;;;;;;:::i;:::-;;;;;;52726:20;;:22;;;;;;;;;:::i;:::-;;;;;;52594:166;52580:3;;;;;:::i;:::-;;;;52551:209;;;;52353:414:::0;:::o;52114:133::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52191:5:::1;52176:12;;:20;;;;;;;;;;;;;;;;;;52225:14;;;;;;;;;;;52224:15;52207:14;;:32;;;;;;;;;;;;;;;;;;52114:133::o:0;4112:87::-;4158:7;4185:6;;;;;;;;;;;4178:13;;4112:87;:::o;25962:104::-;26018:13;26051:7;26044:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25962:104;:::o;53580:110::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53679:3:::1;53662:14;:20;;;;;;;;;;;;:::i;:::-;;53580:110:::0;:::o;27645:155::-;27740:52;27759:12;:10;:12::i;:::-;27773:8;27783;27740:18;:52::i;:::-;27645:155;;:::o;53935:102::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54019:10:::1;54008:8;:21;;;;53935:102:::0;:::o;49332:39::-;;;;:::o;28768:328::-;28943:41;28962:12;:10;:12::i;:::-;28976:7;28943:18;:41::i;:::-;28935:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29049:39;29063:4;29069:2;29073:7;29082:5;29049:13;:39::i;:::-;28768:328;;;;:::o;49681:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50132:705::-;50223:9;50209:23;;:10;:23;;;50201:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;50301:1;50292:6;:10;:26;;;;;50316:2;50306:6;:12;;50292:26;50284:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;50370:12;;;;;;;;;;;50362:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;50501:20;;50476:22;;:45;;;;:::i;:::-;50462:10;;:60;;;;:::i;:::-;50450:6;50441;;:15;;;;:::i;:::-;50440:83;;50432:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;50608:6;50593:12;;:21;;;;:::i;:::-;50579:9;:36;;50571:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;50669:6;50664:166;50685:6;50681:1;:10;50664:166;;;50722:15;50749:1;50740:6;;:10;;;;:::i;:::-;50722:28;;50765:30;50775:10;50787:7;50765:9;:30::i;:::-;50810:6;;:8;;;;;;;;;:::i;:::-;;;;;;50707:123;50693:3;;;;;:::i;:::-;;;;50664:166;;;;50132:705;:::o;54585:419::-;54658:13;54698:16;54706:7;54698;:16::i;:::-;54690:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;54777:23;54803;54818:7;54803:14;:23::i;:::-;54777:49;;54843:8;;;;;;;;;;;54839:61;;54874:14;54867:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54839:61;54943:1;54923:9;54917:23;:27;:79;;;;;;;;;;;;;;;;;54971:9;54954:36;;;;;;;;:::i;:::-;;;;;;;;;;;;;54917:79;54910:86;;;54585:419;;;;:::o;49766:34::-;;;;;;;;;;;;;:::o;27871:164::-;27968:4;27992:18;:25;28011:5;27992:25;;;;;;;;;;;;;;;:35;28018:8;27992:35;;;;;;;;;;;;;;;;;;;;;;;;;27985:42;;27871:164;;;;:::o;49727:32::-;;;;;;;;;;;;;:::o;54417:160::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54509:20:::1;;54502:27;;;;:::i;:::-;54563:6;;54540:20;:29;;;;;;;:::i;:::-;;54417:160:::0;;:::o;5021:201::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5130:1:::1;5110:22;;:8;:22;;;;5102:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5186:28;5205:8;5186:18;:28::i;:::-;5021:201:::0;:::o;49844:36::-;;;;:::o;49296:29::-;;;;:::o;38299:224::-;38401:4;38440:35;38425:50;;;:11;:50;;;;:90;;;;38479:36;38503:11;38479:23;:36::i;:::-;38425:90;38418:97;;38299:224;;;:::o;30606:127::-;30671:4;30723:1;30695:30;;:7;:16;30703:7;30695:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30688:37;;30606:127;;;:::o;2836:98::-;2889:7;2916:10;2909:17;;2836:98;:::o;34588:174::-;34690:2;34663:15;:24;34679:7;34663:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34746:7;34742:2;34708:46;;34717:23;34732:7;34717:14;:23::i;:::-;34708:46;;;;;;;;;;;;34588:174;;:::o;31590:110::-;31666:26;31676:2;31680:7;31666:26;;;;;;;;;;;;:9;:26::i;:::-;31590:110;;:::o;30900:348::-;30993:4;31018:16;31026:7;31018;:16::i;:::-;31010:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31094:13;31110:23;31125:7;31110:14;:23::i;:::-;31094:39;;31163:5;31152:16;;:7;:16;;;:51;;;;31196:7;31172:31;;:20;31184:7;31172:11;:20::i;:::-;:31;;;31152:51;:87;;;;31207:32;31224:5;31231:7;31207:16;:32::i;:::-;31152:87;31144:96;;;30900:348;;;;:::o;33892:578::-;34051:4;34024:31;;:23;34039:7;34024:14;:23::i;:::-;:31;;;34016:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34134:1;34120:16;;:2;:16;;;;34112:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34190:39;34211:4;34217:2;34221:7;34190:20;:39::i;:::-;34294:29;34311:1;34315:7;34294:8;:29::i;:::-;34355:1;34336:9;:15;34346:4;34336:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34384:1;34367:9;:13;34377:2;34367:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34415:2;34396:7;:16;34404:7;34396:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34454:7;34450:2;34435:27;;34444:4;34435:27;;;;;;;;;;;;33892:578;;;:::o;53698:109::-;53792:7;53776:13;:23;;;;;;;;;;;;:::i;:::-;;53698:109;:::o;5382:191::-;5456:16;5475:6;;;;;;;;;;;5456:25;;5501:8;5492:6;;:17;;;;;;;;;;;;;;;;;;5556:8;5525:40;;5546:8;5525:40;;;;;;;;;;;;5445:128;5382:191;:::o;34904:315::-;35059:8;35050:17;;:5;:17;;;;35042:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35146:8;35108:18;:25;35127:5;35108:25;;;;;;;;;;;;;;;:35;35134:8;35108:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35192:8;35170:41;;35185:5;35170:41;;;35202:8;35170:41;;;;;;:::i;:::-;;;;;;;;34904:315;;;:::o;29978:::-;30135:28;30145:4;30151:2;30155:7;30135:9;:28::i;:::-;30182:48;30205:4;30211:2;30215:7;30224:5;30182:22;:48::i;:::-;30174:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29978:315;;;;:::o;26137:334::-;26210:13;26244:16;26252:7;26244;:16::i;:::-;26236:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26325:21;26349:10;:8;:10::i;:::-;26325:34;;26401:1;26383:7;26377:21;:25;:86;;;;;;;;;;;;;;;;;26429:7;26438:18;:7;:16;:18::i;:::-;26412:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26377:86;26370:93;;;26137:334;;;:::o;24848:305::-;24950:4;25002:25;24987:40;;;:11;:40;;;;:105;;;;25059:33;25044:48;;;:11;:48;;;;24987:105;:158;;;;25109:36;25133:11;25109:23;:36::i;:::-;24987:158;24967:178;;24848:305;;;:::o;31927:321::-;32057:18;32063:2;32067:7;32057:5;:18::i;:::-;32108:54;32139:1;32143:2;32147:7;32156:5;32108:22;:54::i;:::-;32086:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31927:321;;;:::o;53175:204::-;53326:45;53353:4;53359:2;53363:7;53326:26;:45::i;:::-;53175:204;;;:::o;35784:799::-;35939:4;35960:15;:2;:13;;;:15::i;:::-;35956:620;;;36012:2;35996:36;;;36033:12;:10;:12::i;:::-;36047:4;36053:7;36062:5;35996:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35992:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36255:1;36238:6;:13;:18;36234:272;;;36281:60;;;;;;;;;;:::i;:::-;;;;;;;;36234:272;36456:6;36450:13;36441:6;36437:2;36433:15;36426:38;35992:529;36129:41;;;36119:51;;;:6;:51;;;;36112:58;;;;;35956:620;36560:4;36553:11;;35784:799;;;;;;;:::o;53815:112::-;53867:13;53906;53899:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53815:112;:::o;398:723::-;454:13;684:1;675:5;:10;671:53;;;702:10;;;;;;;;;;;;;;;;;;;;;671:53;734:12;749:5;734:20;;765:14;790:78;805:1;797:4;:9;790:78;;823:8;;;;;:::i;:::-;;;;854:2;846:10;;;;;:::i;:::-;;;790:78;;;878:19;910:6;900:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;878:39;;928:154;944:1;935:5;:10;928:154;;972:1;962:11;;;;;:::i;:::-;;;1039:2;1031:5;:10;;;;:::i;:::-;1018:2;:24;;;;:::i;:::-;1005:39;;988:6;995;988:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1068:2;1059:11;;;;;:::i;:::-;;;928:154;;;1106:6;1092:21;;;;;398:723;;;;:::o;16544:157::-;16629:4;16668:25;16653:40;;;:11;:40;;;;16646:47;;16544:157;;;:::o;32584:382::-;32678:1;32664:16;;:2;:16;;;;32656:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32737:16;32745:7;32737;:16::i;:::-;32736:17;32728:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32799:45;32828:1;32832:2;32836:7;32799:20;:45::i;:::-;32874:1;32857:9;:13;32867:2;32857:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32905:2;32886:7;:16;32894:7;32886:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32950:7;32946:2;32925:33;;32942:1;32925:33;;;;;;;;;;;;32584:382;;:::o;39975:589::-;40119:45;40146:4;40152:2;40156:7;40119:26;:45::i;:::-;40197:1;40181:18;;:4;:18;;;40177:187;;;40216:40;40248:7;40216:31;:40::i;:::-;40177:187;;;40286:2;40278:10;;:4;:10;;;40274:90;;40305:47;40338:4;40344:7;40305:32;:47::i;:::-;40274:90;40177:187;40392:1;40378:16;;:2;:16;;;40374:183;;;40411:45;40448:7;40411:36;:45::i;:::-;40374:183;;;40484:4;40478:10;;:2;:10;;;40474:83;;40505:40;40533:2;40537:7;40505:27;:40::i;:::-;40474:83;40374:183;39975:589;;;:::o;6400:387::-;6460:4;6668:12;6735:7;6723:20;6715:28;;6778:1;6771:4;:8;6764:15;;;6400:387;;;:::o;37155:126::-;;;;:::o;41287:164::-;41391:10;:17;;;;41364:15;:24;41380:7;41364:24;;;;;;;;;;;:44;;;;41419:10;41435:7;41419:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41287:164;:::o;42078:988::-;42344:22;42394:1;42369:22;42386:4;42369:16;:22::i;:::-;:26;;;;:::i;:::-;42344:51;;42406:18;42427:17;:26;42445:7;42427:26;;;;;;;;;;;;42406:47;;42574:14;42560:10;:28;42556:328;;42605:19;42627:12;:18;42640:4;42627:18;;;;;;;;;;;;;;;:34;42646:14;42627:34;;;;;;;;;;;;42605:56;;42711:11;42678:12;:18;42691:4;42678:18;;;;;;;;;;;;;;;:30;42697:10;42678:30;;;;;;;;;;;:44;;;;42828:10;42795:17;:30;42813:11;42795:30;;;;;;;;;;;:43;;;;42590:294;42556:328;42980:17;:26;42998:7;42980:26;;;;;;;;;;;42973:33;;;43024:12;:18;43037:4;43024:18;;;;;;;;;;;;;;;:34;43043:14;43024:34;;;;;;;;;;;43017:41;;;42159:907;;42078:988;;:::o;43361:1079::-;43614:22;43659:1;43639:10;:17;;;;:21;;;;:::i;:::-;43614:46;;43671:18;43692:15;:24;43708:7;43692:24;;;;;;;;;;;;43671:45;;44043:19;44065:10;44076:14;44065:26;;;;;;;;:::i;:::-;;;;;;;;;;44043:48;;44129:11;44104:10;44115;44104:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;44240:10;44209:15;:28;44225:11;44209:28;;;;;;;;;;;:41;;;;44381:15;:24;44397:7;44381:24;;;;;;;;;;;44374:31;;;44416:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43432:1008;;;43361:1079;:::o;40865:221::-;40950:14;40967:20;40984:2;40967:16;:20::i;:::-;40950:37;;41025:7;40998:12;:16;41011:2;40998:16;;;;;;;;;;;;;;;:24;41015:6;40998:24;;;;;;;;;;;:34;;;;41072:6;41043:17;:26;41061:7;41043:26;;;;;;;;;;;:35;;;;40939:147;40865:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:75::-;475:6;508:2;502:9;492:19;;442:75;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:149;805:7;845:66;838:5;834:78;823:89;;769:149;;;:::o;924:120::-;996:23;1013:5;996:23;:::i;:::-;989:5;986:34;976:62;;1034:1;1031;1024:12;976:62;924:120;:::o;1050:137::-;1095:5;1133:6;1120:20;1111:29;;1149:32;1175:5;1149:32;:::i;:::-;1050:137;;;;:::o;1193:327::-;1251:6;1300:2;1288:9;1279:7;1275:23;1271:32;1268:119;;;1306:79;;:::i;:::-;1268:119;1426:1;1451:52;1495:7;1486:6;1475:9;1471:22;1451:52;:::i;:::-;1441:62;;1397:116;1193:327;;;;:::o;1526:90::-;1560:7;1603:5;1596:13;1589:21;1578:32;;1526:90;;;:::o;1622:109::-;1703:21;1718:5;1703:21;:::i;:::-;1698:3;1691:34;1622:109;;:::o;1737:210::-;1824:4;1862:2;1851:9;1847:18;1839:26;;1875:65;1937:1;1926:9;1922:17;1913:6;1875:65;:::i;:::-;1737:210;;;;:::o;1953:99::-;2005:6;2039:5;2033:12;2023:22;;1953:99;;;:::o;2058:169::-;2142:11;2176:6;2171:3;2164:19;2216:4;2211:3;2207:14;2192:29;;2058:169;;;;:::o;2233:307::-;2301:1;2311:113;2325:6;2322:1;2319:13;2311:113;;;2410:1;2405:3;2401:11;2395:18;2391:1;2386:3;2382:11;2375:39;2347:2;2344:1;2340:10;2335:15;;2311:113;;;2442:6;2439:1;2436:13;2433:101;;;2522:1;2513:6;2508:3;2504:16;2497:27;2433:101;2282:258;2233:307;;;:::o;2546:102::-;2587:6;2638:2;2634:7;2629:2;2622:5;2618:14;2614:28;2604:38;;2546:102;;;:::o;2654:364::-;2742:3;2770:39;2803:5;2770:39;:::i;:::-;2825:71;2889:6;2884:3;2825:71;:::i;:::-;2818:78;;2905:52;2950:6;2945:3;2938:4;2931:5;2927:16;2905:52;:::i;:::-;2982:29;3004:6;2982:29;:::i;:::-;2977:3;2973:39;2966:46;;2746:272;2654:364;;;;:::o;3024:313::-;3137:4;3175:2;3164:9;3160:18;3152:26;;3224:9;3218:4;3214:20;3210:1;3199:9;3195:17;3188:47;3252:78;3325:4;3316:6;3252:78;:::i;:::-;3244:86;;3024:313;;;;:::o;3343:122::-;3416:24;3434:5;3416:24;:::i;:::-;3409:5;3406:35;3396:63;;3455:1;3452;3445:12;3396:63;3343:122;:::o;3471:139::-;3517:5;3555:6;3542:20;3533:29;;3571:33;3598:5;3571:33;:::i;:::-;3471:139;;;;:::o;3616:329::-;3675:6;3724:2;3712:9;3703:7;3699:23;3695:32;3692:119;;;3730:79;;:::i;:::-;3692:119;3850:1;3875:53;3920:7;3911:6;3900:9;3896:22;3875:53;:::i;:::-;3865:63;;3821:117;3616:329;;;;:::o;3951:126::-;3988:7;4028:42;4021:5;4017:54;4006:65;;3951:126;;;:::o;4083:96::-;4120:7;4149:24;4167:5;4149:24;:::i;:::-;4138:35;;4083:96;;;:::o;4185:118::-;4272:24;4290:5;4272:24;:::i;:::-;4267:3;4260:37;4185:118;;:::o;4309:222::-;4402:4;4440:2;4429:9;4425:18;4417:26;;4453:71;4521:1;4510:9;4506:17;4497:6;4453:71;:::i;:::-;4309:222;;;;:::o;4537:122::-;4610:24;4628:5;4610:24;:::i;:::-;4603:5;4600:35;4590:63;;4649:1;4646;4639:12;4590:63;4537:122;:::o;4665:139::-;4711:5;4749:6;4736:20;4727:29;;4765:33;4792:5;4765:33;:::i;:::-;4665:139;;;;:::o;4810:474::-;4878:6;4886;4935:2;4923:9;4914:7;4910:23;4906:32;4903:119;;;4941:79;;:::i;:::-;4903:119;5061:1;5086:53;5131:7;5122:6;5111:9;5107:22;5086:53;:::i;:::-;5076:63;;5032:117;5188:2;5214:53;5259:7;5250:6;5239:9;5235:22;5214:53;:::i;:::-;5204:63;;5159:118;4810:474;;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:329::-;5974:6;6023:2;6011:9;6002:7;5998:23;5994:32;5991:119;;;6029:79;;:::i;:::-;5991:119;6149:1;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6120:117;5915:329;;;;:::o;6250:117::-;6359:1;6356;6349:12;6373:117;6482:1;6479;6472:12;6496:180;6544:77;6541:1;6534:88;6641:4;6638:1;6631:15;6665:4;6662:1;6655:15;6682:281;6765:27;6787:4;6765:27;:::i;:::-;6757:6;6753:40;6895:6;6883:10;6880:22;6859:18;6847:10;6844:34;6841:62;6838:88;;;6906:18;;:::i;:::-;6838:88;6946:10;6942:2;6935:22;6725:238;6682:281;;:::o;6969:129::-;7003:6;7030:20;;:::i;:::-;7020:30;;7059:33;7087:4;7079:6;7059:33;:::i;:::-;6969:129;;;:::o;7104:308::-;7166:4;7256:18;7248:6;7245:30;7242:56;;;7278:18;;:::i;:::-;7242:56;7316:29;7338:6;7316:29;:::i;:::-;7308:37;;7400:4;7394;7390:15;7382:23;;7104:308;;;:::o;7418:154::-;7502:6;7497:3;7492;7479:30;7564:1;7555:6;7550:3;7546:16;7539:27;7418:154;;;:::o;7578:412::-;7656:5;7681:66;7697:49;7739:6;7697:49;:::i;:::-;7681:66;:::i;:::-;7672:75;;7770:6;7763:5;7756:21;7808:4;7801:5;7797:16;7846:3;7837:6;7832:3;7828:16;7825:25;7822:112;;;7853:79;;:::i;:::-;7822:112;7943:41;7977:6;7972:3;7967;7943:41;:::i;:::-;7662:328;7578:412;;;;;:::o;8010:340::-;8066:5;8115:3;8108:4;8100:6;8096:17;8092:27;8082:122;;8123:79;;:::i;:::-;8082:122;8240:6;8227:20;8265:79;8340:3;8332:6;8325:4;8317:6;8313:17;8265:79;:::i;:::-;8256:88;;8072:278;8010:340;;;;:::o;8356:509::-;8425:6;8474:2;8462:9;8453:7;8449:23;8445:32;8442:119;;;8480:79;;:::i;:::-;8442:119;8628:1;8617:9;8613:17;8600:31;8658:18;8650:6;8647:30;8644:117;;;8680:79;;:::i;:::-;8644:117;8785:63;8840:7;8831:6;8820:9;8816:22;8785:63;:::i;:::-;8775:73;;8571:287;8356:509;;;;:::o;8871:116::-;8941:21;8956:5;8941:21;:::i;:::-;8934:5;8931:32;8921:60;;8977:1;8974;8967:12;8921:60;8871:116;:::o;8993:133::-;9036:5;9074:6;9061:20;9052:29;;9090:30;9114:5;9090:30;:::i;:::-;8993:133;;;;:::o;9132:468::-;9197:6;9205;9254:2;9242:9;9233:7;9229:23;9225:32;9222:119;;;9260:79;;:::i;:::-;9222:119;9380:1;9405:53;9450:7;9441:6;9430:9;9426:22;9405:53;:::i;:::-;9395:63;;9351:117;9507:2;9533:50;9575:7;9566:6;9555:9;9551:22;9533:50;:::i;:::-;9523:60;;9478:115;9132:468;;;;;:::o;9606:307::-;9667:4;9757:18;9749:6;9746:30;9743:56;;;9779:18;;:::i;:::-;9743:56;9817:29;9839:6;9817:29;:::i;:::-;9809:37;;9901:4;9895;9891:15;9883:23;;9606:307;;;:::o;9919:410::-;9996:5;10021:65;10037:48;10078:6;10037:48;:::i;:::-;10021:65;:::i;:::-;10012:74;;10109:6;10102:5;10095:21;10147:4;10140:5;10136:16;10185:3;10176:6;10171:3;10167:16;10164:25;10161:112;;;10192:79;;:::i;:::-;10161:112;10282:41;10316:6;10311:3;10306;10282:41;:::i;:::-;10002:327;9919:410;;;;;:::o;10348:338::-;10403:5;10452:3;10445:4;10437:6;10433:17;10429:27;10419:122;;10460:79;;:::i;:::-;10419:122;10577:6;10564:20;10602:78;10676:3;10668:6;10661:4;10653:6;10649:17;10602:78;:::i;:::-;10593:87;;10409:277;10348:338;;;;:::o;10692:943::-;10787:6;10795;10803;10811;10860:3;10848:9;10839:7;10835:23;10831:33;10828:120;;;10867:79;;:::i;:::-;10828:120;10987:1;11012:53;11057:7;11048:6;11037:9;11033:22;11012:53;:::i;:::-;11002:63;;10958:117;11114:2;11140:53;11185:7;11176:6;11165:9;11161:22;11140:53;:::i;:::-;11130:63;;11085:118;11242:2;11268:53;11313:7;11304:6;11293:9;11289:22;11268:53;:::i;:::-;11258:63;;11213:118;11398:2;11387:9;11383:18;11370:32;11429:18;11421:6;11418:30;11415:117;;;11451:79;;:::i;:::-;11415:117;11556:62;11610:7;11601:6;11590:9;11586:22;11556:62;:::i;:::-;11546:72;;11341:287;10692:943;;;;;;;:::o;11641:474::-;11709:6;11717;11766:2;11754:9;11745:7;11741:23;11737:32;11734:119;;;11772:79;;:::i;:::-;11734:119;11892:1;11917:53;11962:7;11953:6;11942:9;11938:22;11917:53;:::i;:::-;11907:63;;11863:117;12019:2;12045:53;12090:7;12081:6;12070:9;12066:22;12045:53;:::i;:::-;12035:63;;11990:118;11641:474;;;;;:::o;12121:117::-;12230:1;12227;12220:12;12244:117;12353:1;12350;12343:12;12384:568;12457:8;12467:6;12517:3;12510:4;12502:6;12498:17;12494:27;12484:122;;12525:79;;:::i;:::-;12484:122;12638:6;12625:20;12615:30;;12668:18;12660:6;12657:30;12654:117;;;12690:79;;:::i;:::-;12654:117;12804:4;12796:6;12792:17;12780:29;;12858:3;12850:4;12842:6;12838:17;12828:8;12824:32;12821:41;12818:128;;;12865:79;;:::i;:::-;12818:128;12384:568;;;;;:::o;12958:559::-;13044:6;13052;13101:2;13089:9;13080:7;13076:23;13072:32;13069:119;;;13107:79;;:::i;:::-;13069:119;13255:1;13244:9;13240:17;13227:31;13285:18;13277:6;13274:30;13271:117;;;13307:79;;:::i;:::-;13271:117;13420:80;13492:7;13483:6;13472:9;13468:22;13420:80;:::i;:::-;13402:98;;;;13198:312;12958:559;;;;;:::o;13523:180::-;13571:77;13568:1;13561:88;13668:4;13665:1;13658:15;13692:4;13689:1;13682:15;13709:320;13753:6;13790:1;13784:4;13780:12;13770:22;;13837:1;13831:4;13827:12;13858:18;13848:81;;13914:4;13906:6;13902:17;13892:27;;13848:81;13976:2;13968:6;13965:14;13945:18;13942:38;13939:84;;;13995:18;;:::i;:::-;13939:84;13760:269;13709:320;;;:::o;14035:231::-;14175:34;14171:1;14163:6;14159:14;14152:58;14244:14;14239:2;14231:6;14227:15;14220:39;14035:231;:::o;14272:366::-;14414:3;14435:67;14499:2;14494:3;14435:67;:::i;:::-;14428:74;;14511:93;14600:3;14511:93;:::i;:::-;14629:2;14624:3;14620:12;14613:19;;14272:366;;;:::o;14644:419::-;14810:4;14848:2;14837:9;14833:18;14825:26;;14897:9;14891:4;14887:20;14883:1;14872:9;14868:17;14861:47;14925:131;15051:4;14925:131;:::i;:::-;14917:139;;14644:419;;;:::o;15069:220::-;15209:34;15205:1;15197:6;15193:14;15186:58;15278:3;15273:2;15265:6;15261:15;15254:28;15069:220;:::o;15295:366::-;15437:3;15458:67;15522:2;15517:3;15458:67;:::i;:::-;15451:74;;15534:93;15623:3;15534:93;:::i;:::-;15652:2;15647:3;15643:12;15636:19;;15295:366;;;:::o;15667:419::-;15833:4;15871:2;15860:9;15856:18;15848:26;;15920:9;15914:4;15910:20;15906:1;15895:9;15891:17;15884:47;15948:131;16074:4;15948:131;:::i;:::-;15940:139;;15667:419;;;:::o;16092:243::-;16232:34;16228:1;16220:6;16216:14;16209:58;16301:26;16296:2;16288:6;16284:15;16277:51;16092:243;:::o;16341:366::-;16483:3;16504:67;16568:2;16563:3;16504:67;:::i;:::-;16497:74;;16580:93;16669:3;16580:93;:::i;:::-;16698:2;16693:3;16689:12;16682:19;;16341:366;;;:::o;16713:419::-;16879:4;16917:2;16906:9;16902:18;16894:26;;16966:9;16960:4;16956:20;16952:1;16941:9;16937:17;16930:47;16994:131;17120:4;16994:131;:::i;:::-;16986:139;;16713:419;;;:::o;17138:182::-;17278:34;17274:1;17266:6;17262:14;17255:58;17138:182;:::o;17326:366::-;17468:3;17489:67;17553:2;17548:3;17489:67;:::i;:::-;17482:74;;17565:93;17654:3;17565:93;:::i;:::-;17683:2;17678:3;17674:12;17667:19;;17326:366;;;:::o;17698:419::-;17864:4;17902:2;17891:9;17887:18;17879:26;;17951:9;17945:4;17941:20;17937:1;17926:9;17922:17;17915:47;17979:131;18105:4;17979:131;:::i;:::-;17971:139;;17698:419;;;:::o;18123:164::-;18263:16;18259:1;18251:6;18247:14;18240:40;18123:164;:::o;18293:366::-;18435:3;18456:67;18520:2;18515:3;18456:67;:::i;:::-;18449:74;;18532:93;18621:3;18532:93;:::i;:::-;18650:2;18645:3;18641:12;18634:19;;18293:366;;;:::o;18665:419::-;18831:4;18869:2;18858:9;18854:18;18846:26;;18918:9;18912:4;18908:20;18904:1;18893:9;18889:17;18882:47;18946:131;19072:4;18946:131;:::i;:::-;18938:139;;18665:419;;;:::o;19090:223::-;19230:34;19226:1;19218:6;19214:14;19207:58;19299:6;19294:2;19286:6;19282:15;19275:31;19090:223;:::o;19319:366::-;19461:3;19482:67;19546:2;19541:3;19482:67;:::i;:::-;19475:74;;19558:93;19647:3;19558:93;:::i;:::-;19676:2;19671:3;19667:12;19660:19;;19319:366;;;:::o;19691:419::-;19857:4;19895:2;19884:9;19880:18;19872:26;;19944:9;19938:4;19934:20;19930:1;19919:9;19915:17;19908:47;19972:131;20098:4;19972:131;:::i;:::-;19964:139;;19691:419;;;:::o;20116:224::-;20256:34;20252:1;20244:6;20240:14;20233:58;20325:7;20320:2;20312:6;20308:15;20301:32;20116:224;:::o;20346:366::-;20488:3;20509:67;20573:2;20568:3;20509:67;:::i;:::-;20502:74;;20585:93;20674:3;20585:93;:::i;:::-;20703:2;20698:3;20694:12;20687:19;;20346:366;;;:::o;20718:419::-;20884:4;20922:2;20911:9;20907:18;20899:26;;20971:9;20965:4;20961:20;20957:1;20946:9;20942:17;20935:47;20999:131;21125:4;20999:131;:::i;:::-;20991:139;;20718:419;;;:::o;21143:173::-;21283:25;21279:1;21271:6;21267:14;21260:49;21143:173;:::o;21322:366::-;21464:3;21485:67;21549:2;21544:3;21485:67;:::i;:::-;21478:74;;21561:93;21650:3;21561:93;:::i;:::-;21679:2;21674:3;21670:12;21663:19;;21322:366;;;:::o;21694:419::-;21860:4;21898:2;21887:9;21883:18;21875:26;;21947:9;21941:4;21937:20;21933:1;21922:9;21918:17;21911:47;21975:131;22101:4;21975:131;:::i;:::-;21967:139;;21694:419;;;:::o;22119:180::-;22167:77;22164:1;22157:88;22264:4;22261:1;22254:15;22288:4;22285:1;22278:15;22305:348;22345:7;22368:20;22386:1;22368:20;:::i;:::-;22363:25;;22402:20;22420:1;22402:20;:::i;:::-;22397:25;;22590:1;22522:66;22518:74;22515:1;22512:81;22507:1;22500:9;22493:17;22489:105;22486:131;;;22597:18;;:::i;:::-;22486:131;22645:1;22642;22638:9;22627:20;;22305:348;;;;:::o;22659:180::-;22799:32;22795:1;22787:6;22783:14;22776:56;22659:180;:::o;22845:366::-;22987:3;23008:67;23072:2;23067:3;23008:67;:::i;:::-;23001:74;;23084:93;23173:3;23084:93;:::i;:::-;23202:2;23197:3;23193:12;23186:19;;22845:366;;;:::o;23217:419::-;23383:4;23421:2;23410:9;23406:18;23398:26;;23470:9;23464:4;23460:20;23456:1;23445:9;23441:17;23434:47;23498:131;23624:4;23498:131;:::i;:::-;23490:139;;23217:419;;;:::o;23642:305::-;23682:3;23701:20;23719:1;23701:20;:::i;:::-;23696:25;;23735:20;23753:1;23735:20;:::i;:::-;23730:25;;23889:1;23821:66;23817:74;23814:1;23811:81;23808:107;;;23895:18;;:::i;:::-;23808:107;23939:1;23936;23932:9;23925:16;;23642:305;;;;:::o;23953:238::-;24093:34;24089:1;24081:6;24077:14;24070:58;24162:21;24157:2;24149:6;24145:15;24138:46;23953:238;:::o;24197:366::-;24339:3;24360:67;24424:2;24419:3;24360:67;:::i;:::-;24353:74;;24436:93;24525:3;24436:93;:::i;:::-;24554:2;24549:3;24545:12;24538:19;;24197:366;;;:::o;24569:419::-;24735:4;24773:2;24762:9;24758:18;24750:26;;24822:9;24816:4;24812:20;24808:1;24797:9;24793:17;24786:47;24850:131;24976:4;24850:131;:::i;:::-;24842:139;;24569:419;;;:::o;24994:238::-;25134:34;25130:1;25122:6;25118:14;25111:58;25203:21;25198:2;25190:6;25186:15;25179:46;24994:238;:::o;25238:366::-;25380:3;25401:67;25465:2;25460:3;25401:67;:::i;:::-;25394:74;;25477:93;25566:3;25477:93;:::i;:::-;25595:2;25590:3;25586:12;25579:19;;25238:366;;;:::o;25610:419::-;25776:4;25814:2;25803:9;25799:18;25791:26;;25863:9;25857:4;25853:20;25849:1;25838:9;25834:17;25827:47;25891:131;26017:4;25891:131;:::i;:::-;25883:139;;25610:419;;;:::o;26035:233::-;26074:3;26097:24;26115:5;26097:24;:::i;:::-;26088:33;;26143:66;26136:5;26133:77;26130:103;;;26213:18;;:::i;:::-;26130:103;26260:1;26253:5;26249:13;26242:20;;26035:233;;;:::o;26274:236::-;26414:34;26410:1;26402:6;26398:14;26391:58;26483:19;26478:2;26470:6;26466:15;26459:44;26274:236;:::o;26516:366::-;26658:3;26679:67;26743:2;26738:3;26679:67;:::i;:::-;26672:74;;26755:93;26844:3;26755:93;:::i;:::-;26873:2;26868:3;26864:12;26857:19;;26516:366;;;:::o;26888:419::-;27054:4;27092:2;27081:9;27077:18;27069:26;;27141:9;27135:4;27131:20;27127:1;27116:9;27112:17;27105:47;27169:131;27295:4;27169:131;:::i;:::-;27161:139;;26888:419;;;:::o;27313:230::-;27453:34;27449:1;27441:6;27437:14;27430:58;27522:13;27517:2;27509:6;27505:15;27498:38;27313:230;:::o;27549:366::-;27691:3;27712:67;27776:2;27771:3;27712:67;:::i;:::-;27705:74;;27788:93;27877:3;27788:93;:::i;:::-;27906:2;27901:3;27897:12;27890:19;;27549:366;;;:::o;27921:419::-;28087:4;28125:2;28114:9;28110:18;28102:26;;28174:9;28168:4;28164:20;28160:1;28149:9;28145:17;28138:47;28202:131;28328:4;28202:131;:::i;:::-;28194:139;;27921:419;;;:::o;28346:180::-;28394:77;28391:1;28384:88;28491:4;28488:1;28481:15;28515:4;28512:1;28505:15;28532:231;28672:34;28668:1;28660:6;28656:14;28649:58;28741:14;28736:2;28728:6;28724:15;28717:39;28532:231;:::o;28769:366::-;28911:3;28932:67;28996:2;28991:3;28932:67;:::i;:::-;28925:74;;29008:93;29097:3;29008:93;:::i;:::-;29126:2;29121:3;29117:12;29110:19;;28769:366;;;:::o;29141:419::-;29307:4;29345:2;29334:9;29330:18;29322:26;;29394:9;29388:4;29384:20;29380:1;29369:9;29365:17;29358:47;29422:131;29548:4;29422:131;:::i;:::-;29414:139;;29141:419;;;:::o;29566:228::-;29706:34;29702:1;29694:6;29690:14;29683:58;29775:11;29770:2;29762:6;29758:15;29751:36;29566:228;:::o;29800:366::-;29942:3;29963:67;30027:2;30022:3;29963:67;:::i;:::-;29956:74;;30039:93;30128:3;30039:93;:::i;:::-;30157:2;30152:3;30148:12;30141:19;;29800:366;;;:::o;30172:419::-;30338:4;30376:2;30365:9;30361:18;30353:26;;30425:9;30419:4;30415:20;30411:1;30400:9;30396:17;30389:47;30453:131;30579:4;30453:131;:::i;:::-;30445:139;;30172:419;;;:::o;30597:229::-;30737:34;30733:1;30725:6;30721:14;30714:58;30806:12;30801:2;30793:6;30789:15;30782:37;30597:229;:::o;30832:366::-;30974:3;30995:67;31059:2;31054:3;30995:67;:::i;:::-;30988:74;;31071:93;31160:3;31071:93;:::i;:::-;31189:2;31184:3;31180:12;31173:19;;30832:366;;;:::o;31204:419::-;31370:4;31408:2;31397:9;31393:18;31385:26;;31457:9;31451:4;31447:20;31443:1;31432:9;31428:17;31421:47;31485:131;31611:4;31485:131;:::i;:::-;31477:139;;31204:419;;;:::o;31629:223::-;31769:34;31765:1;31757:6;31753:14;31746:58;31838:6;31833:2;31825:6;31821:15;31814:31;31629:223;:::o;31858:366::-;32000:3;32021:67;32085:2;32080:3;32021:67;:::i;:::-;32014:74;;32097:93;32186:3;32097:93;:::i;:::-;32215:2;32210:3;32206:12;32199:19;;31858:366;;;:::o;32230:419::-;32396:4;32434:2;32423:9;32419:18;32411:26;;32483:9;32477:4;32473:20;32469:1;32458:9;32454:17;32447:47;32511:131;32637:4;32511:131;:::i;:::-;32503:139;;32230:419;;;:::o;32655:177::-;32795:29;32791:1;32783:6;32779:14;32772:53;32655:177;:::o;32838:366::-;32980:3;33001:67;33065:2;33060:3;33001:67;:::i;:::-;32994:74;;33077:93;33166:3;33077:93;:::i;:::-;33195:2;33190:3;33186:12;33179:19;;32838:366;;;:::o;33210:419::-;33376:4;33414:2;33403:9;33399:18;33391:26;;33463:9;33457:4;33453:20;33449:1;33438:9;33434:17;33427:47;33491:131;33617:4;33491:131;:::i;:::-;33483:139;;33210:419;;;:::o;33635:221::-;33775:34;33771:1;33763:6;33759:14;33752:58;33844:4;33839:2;33831:6;33827:15;33820:29;33635:221;:::o;33862:366::-;34004:3;34025:67;34089:2;34084:3;34025:67;:::i;:::-;34018:74;;34101:93;34190:3;34101:93;:::i;:::-;34219:2;34214:3;34210:12;34203:19;;33862:366;;;:::o;34234:419::-;34400:4;34438:2;34427:9;34423:18;34415:26;;34487:9;34481:4;34477:20;34473:1;34462:9;34458:17;34451:47;34515:131;34641:4;34515:131;:::i;:::-;34507:139;;34234:419;;;:::o;34659:191::-;34699:4;34719:20;34737:1;34719:20;:::i;:::-;34714:25;;34753:20;34771:1;34753:20;:::i;:::-;34748:25;;34792:1;34789;34786:8;34783:34;;;34797:18;;:::i;:::-;34783:34;34842:1;34839;34835:9;34827:17;;34659:191;;;;:::o;34856:182::-;34996:34;34992:1;34984:6;34980:14;34973:58;34856:182;:::o;35044:366::-;35186:3;35207:67;35271:2;35266:3;35207:67;:::i;:::-;35200:74;;35283:93;35372:3;35283:93;:::i;:::-;35401:2;35396:3;35392:12;35385:19;;35044:366;;;:::o;35416:419::-;35582:4;35620:2;35609:9;35605:18;35597:26;;35669:9;35663:4;35659:20;35655:1;35644:9;35640:17;35633:47;35697:131;35823:4;35697:131;:::i;:::-;35689:139;;35416:419;;;:::o;35841:234::-;35981:34;35977:1;35969:6;35965:14;35958:58;36050:17;36045:2;36037:6;36033:15;36026:42;35841:234;:::o;36081:366::-;36223:3;36244:67;36308:2;36303:3;36244:67;:::i;:::-;36237:74;;36320:93;36409:3;36320:93;:::i;:::-;36438:2;36433:3;36429:12;36422:19;;36081:366;;;:::o;36453:419::-;36619:4;36657:2;36646:9;36642:18;36634:26;;36706:9;36700:4;36696:20;36692:1;36681:9;36677:17;36670:47;36734:131;36860:4;36734:131;:::i;:::-;36726:139;;36453:419;;;:::o;36878:148::-;36980:11;37017:3;37002:18;;36878:148;;;;:::o;37032:377::-;37138:3;37166:39;37199:5;37166:39;:::i;:::-;37221:89;37303:6;37298:3;37221:89;:::i;:::-;37214:96;;37319:52;37364:6;37359:3;37352:4;37345:5;37341:16;37319:52;:::i;:::-;37396:6;37391:3;37387:16;37380:23;;37142:267;37032:377;;;;:::o;37415:155::-;37555:7;37551:1;37543:6;37539:14;37532:31;37415:155;:::o;37576:400::-;37736:3;37757:84;37839:1;37834:3;37757:84;:::i;:::-;37750:91;;37850:93;37939:3;37850:93;:::i;:::-;37968:1;37963:3;37959:11;37952:18;;37576:400;;;:::o;37982:541::-;38215:3;38237:95;38328:3;38319:6;38237:95;:::i;:::-;38230:102;;38349:148;38493:3;38349:148;:::i;:::-;38342:155;;38514:3;38507:10;;37982:541;;;;:::o;38529:225::-;38669:34;38665:1;38657:6;38653:14;38646:58;38738:8;38733:2;38725:6;38721:15;38714:33;38529:225;:::o;38760:366::-;38902:3;38923:67;38987:2;38982:3;38923:67;:::i;:::-;38916:74;;38999:93;39088:3;38999:93;:::i;:::-;39117:2;39112:3;39108:12;39101:19;;38760:366;;;:::o;39132:419::-;39298:4;39336:2;39325:9;39321:18;39313:26;;39385:9;39379:4;39375:20;39371:1;39360:9;39356:17;39349:47;39413:131;39539:4;39413:131;:::i;:::-;39405:139;;39132:419;;;:::o;39557:231::-;39697:34;39693:1;39685:6;39681:14;39674:58;39766:14;39761:2;39753:6;39749:15;39742:39;39557:231;:::o;39794:366::-;39936:3;39957:67;40021:2;40016:3;39957:67;:::i;:::-;39950:74;;40033:93;40122:3;40033:93;:::i;:::-;40151:2;40146:3;40142:12;40135:19;;39794:366;;;:::o;40166:419::-;40332:4;40370:2;40359:9;40355:18;40347:26;;40419:9;40413:4;40409:20;40405:1;40394:9;40390:17;40383:47;40447:131;40573:4;40447:131;:::i;:::-;40439:139;;40166:419;;;:::o;40591:228::-;40731:34;40727:1;40719:6;40715:14;40708:58;40800:11;40795:2;40787:6;40783:15;40776:36;40591:228;:::o;40825:366::-;40967:3;40988:67;41052:2;41047:3;40988:67;:::i;:::-;40981:74;;41064:93;41153:3;41064:93;:::i;:::-;41182:2;41177:3;41173:12;41166:19;;40825:366;;;:::o;41197:419::-;41363:4;41401:2;41390:9;41386:18;41378:26;;41450:9;41444:4;41440:20;41436:1;41425:9;41421:17;41414:47;41478:131;41604:4;41478:131;:::i;:::-;41470:139;;41197:419;;;:::o;41622:223::-;41762:34;41758:1;41750:6;41746:14;41739:58;41831:6;41826:2;41818:6;41814:15;41807:31;41622:223;:::o;41851:366::-;41993:3;42014:67;42078:2;42073:3;42014:67;:::i;:::-;42007:74;;42090:93;42179:3;42090:93;:::i;:::-;42208:2;42203:3;42199:12;42192:19;;41851:366;;;:::o;42223:419::-;42389:4;42427:2;42416:9;42412:18;42404:26;;42476:9;42470:4;42466:20;42462:1;42451:9;42447:17;42440:47;42504:131;42630:4;42504:131;:::i;:::-;42496:139;;42223:419;;;:::o;42648:175::-;42788:27;42784:1;42776:6;42772:14;42765:51;42648:175;:::o;42829:366::-;42971:3;42992:67;43056:2;43051:3;42992:67;:::i;:::-;42985:74;;43068:93;43157:3;43068:93;:::i;:::-;43186:2;43181:3;43177:12;43170:19;;42829:366;;;:::o;43201:419::-;43367:4;43405:2;43394:9;43390:18;43382:26;;43454:9;43448:4;43444:20;43440:1;43429:9;43425:17;43418:47;43482:131;43608:4;43482:131;:::i;:::-;43474:139;;43201:419;;;:::o;43626:237::-;43766:34;43762:1;43754:6;43750:14;43743:58;43835:20;43830:2;43822:6;43818:15;43811:45;43626:237;:::o;43869:366::-;44011:3;44032:67;44096:2;44091:3;44032:67;:::i;:::-;44025:74;;44108:93;44197:3;44108:93;:::i;:::-;44226:2;44221:3;44217:12;44210:19;;43869:366;;;:::o;44241:419::-;44407:4;44445:2;44434:9;44430:18;44422:26;;44494:9;44488:4;44484:20;44480:1;44469:9;44465:17;44458:47;44522:131;44648:4;44522:131;:::i;:::-;44514:139;;44241:419;;;:::o;44666:435::-;44846:3;44868:95;44959:3;44950:6;44868:95;:::i;:::-;44861:102;;44980:95;45071:3;45062:6;44980:95;:::i;:::-;44973:102;;45092:3;45085:10;;44666:435;;;;;:::o;45107:98::-;45158:6;45192:5;45186:12;45176:22;;45107:98;;;:::o;45211:168::-;45294:11;45328:6;45323:3;45316:19;45368:4;45363:3;45359:14;45344:29;;45211:168;;;;:::o;45385:360::-;45471:3;45499:38;45531:5;45499:38;:::i;:::-;45553:70;45616:6;45611:3;45553:70;:::i;:::-;45546:77;;45632:52;45677:6;45672:3;45665:4;45658:5;45654:16;45632:52;:::i;:::-;45709:29;45731:6;45709:29;:::i;:::-;45704:3;45700:39;45693:46;;45475:270;45385:360;;;;:::o;45751:640::-;45946:4;45984:3;45973:9;45969:19;45961:27;;45998:71;46066:1;46055:9;46051:17;46042:6;45998:71;:::i;:::-;46079:72;46147:2;46136:9;46132:18;46123:6;46079:72;:::i;:::-;46161;46229:2;46218:9;46214:18;46205:6;46161:72;:::i;:::-;46280:9;46274:4;46270:20;46265:2;46254:9;46250:18;46243:48;46308:76;46379:4;46370:6;46308:76;:::i;:::-;46300:84;;45751:640;;;;;;;:::o;46397:141::-;46453:5;46484:6;46478:13;46469:22;;46500:32;46526:5;46500:32;:::i;:::-;46397:141;;;;:::o;46544:349::-;46613:6;46662:2;46650:9;46641:7;46637:23;46633:32;46630:119;;;46668:79;;:::i;:::-;46630:119;46788:1;46813:63;46868:7;46859:6;46848:9;46844:22;46813:63;:::i;:::-;46803:73;;46759:127;46544:349;;;;:::o;46899:180::-;46947:77;46944:1;46937:88;47044:4;47041:1;47034:15;47068:4;47065:1;47058:15;47085:185;47125:1;47142:20;47160:1;47142:20;:::i;:::-;47137:25;;47176:20;47194:1;47176:20;:::i;:::-;47171:25;;47215:1;47205:35;;47220:18;;:::i;:::-;47205:35;47262:1;47259;47255:9;47250:14;;47085:185;;;;:::o;47276:176::-;47308:1;47325:20;47343:1;47325:20;:::i;:::-;47320:25;;47359:20;47377:1;47359:20;:::i;:::-;47354:25;;47398:1;47388:35;;47403:18;;:::i;:::-;47388:35;47444:1;47441;47437:9;47432:14;;47276:176;;;;:::o;47458:182::-;47598:34;47594:1;47586:6;47582:14;47575:58;47458:182;:::o;47646:366::-;47788:3;47809:67;47873:2;47868:3;47809:67;:::i;:::-;47802:74;;47885:93;47974:3;47885:93;:::i;:::-;48003:2;47998:3;47994:12;47987:19;;47646:366;;;:::o;48018:419::-;48184:4;48222:2;48211:9;48207:18;48199:26;;48271:9;48265:4;48261:20;48257:1;48246:9;48242:17;48235:47;48299:131;48425:4;48299:131;:::i;:::-;48291:139;;48018:419;;;:::o;48443:178::-;48583:30;48579:1;48571:6;48567:14;48560:54;48443:178;:::o;48627:366::-;48769:3;48790:67;48854:2;48849:3;48790:67;:::i;:::-;48783:74;;48866:93;48955:3;48866:93;:::i;:::-;48984:2;48979:3;48975:12;48968:19;;48627:366;;;:::o;48999:419::-;49165:4;49203:2;49192:9;49188:18;49180:26;;49252:9;49246:4;49242:20;49238:1;49227:9;49223:17;49216:47;49280:131;49406:4;49280:131;:::i;:::-;49272:139;;48999:419;;;:::o;49424:180::-;49472:77;49469:1;49462:88;49569:4;49566:1;49559:15;49593:4;49590:1;49583:15
Swarm Source
ipfs://1f3713912bd082af6b9c11aff93660ad930d1bc6b19ba20819ea3c83a28ba2e6
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.