ERC-721
Source Code
Overview
Max Total Supply
5,000 MWLHA
Holders
46
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 MWLHALoading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
Contract Name:
MakeAWishLeiHakuAloha
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-07-10
*/
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and make it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
// File: @openzeppelin/contracts/utils/Counters.sol
pragma solidity ^0.8.0;
/**
* @title Counters
* @author Matt Condon (@shrugs)
* @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
* of elements in a mapping, issuing ERC721 ids, or counting request ids.
*
* Include with `using Counters for Counters.Counter;`
*/
library Counters {
struct Counter {
// This variable should never be directly accessed by users of the library: interactions must be restricted to
// the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
// this feature: see https://github.com/ethereum/solidity/issues/4637
uint256 _value; // default: 0
}
function current(Counter storage counter) internal view returns (uint256) {
return counter._value;
}
function increment(Counter storage counter) internal {
unchecked {
counter._value += 1;
}
}
function decrement(Counter storage counter) internal {
uint256 value = counter._value;
require(value > 0, "Counter: decrement overflow");
unchecked {
counter._value = value - 1;
}
}
function reset(Counter storage counter) internal {
counter._value = 0;
}
}
// File: @openzeppelin/contracts/utils/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/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);
}
function _verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) private pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: @openzeppelin/contracts/token/ERC721/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/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/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/ERC721.sol
pragma solidity ^0.8.0;
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
* {ERC721Enumerable}.
*/
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to owner address
mapping(uint256 => address) private _owners;
// Mapping owner address to token count
mapping(address => uint256) private _balances;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: balance query for the zero address");
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: owner query for nonexistent token");
return owner;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overriden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not owner nor approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual override returns (address) {
require(_exists(tokenId), "ERC721: approved query for nonexistent token");
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
require(operator != _msgSender(), "ERC721: approve to caller");
_operatorApprovals[_msgSender()][operator] = approved;
emit ApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
//solhint-disable-next-line max-line-length
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_safeTransfer(from, to, tokenId, _data);
}
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* `_data` is additional data, it has no specified format and it is sent in call to `to`.
*
* This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
* implement alternative mechanisms to perform token transfer, such as signature-based.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
* and stop existing when they are burned (`_burn`).
*/
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _owners[tokenId] != address(0);
}
/**
* @dev Returns whether `spender` is allowed to manage `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
require(_exists(tokenId), "ERC721: operator query for nonexistent token");
address owner = ERC721.ownerOf(tokenId);
return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
}
/**
* @dev Safely mints `tokenId` and transfers it to `to`.
*
* Requirements:
*
* - `tokenId` must not exist.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeMint(
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, _data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Mints `tokenId` and transfers it to `to`.
*
* WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
*
* Requirements:
*
* - `tokenId` must not exist.
* - `to` cannot be the zero address.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
// Clear approvals
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
// Clear approvals from the previous owner
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits a {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
return retval == IERC721Receiver(to).onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
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/access/Ownable.sol
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_setOwner(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_setOwner(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_setOwner(newOwner);
}
function _setOwner(address newOwner) private {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: contracts/MakeAWishLeiHakuAloha.sol
pragma solidity 0.8.6;
contract MakeAWishLeiHakuAloha is ERC721, Ownable, ReentrancyGuard {
uint256 public constant MAX_SUPPLY = 5000;
uint256 public constant PER_ORDER_LIMIT = 10;
uint256 public constant RESERVE_QTY = 50;
string public constant BASE_URI = "ipfs://QmbPn45u2NwiTooboiS5VjbiqHFmSoR6t3QRLWggzggCpa";
bool public isActive;
uint256 public salePrice;
using Counters for Counters.Counter;
Counters.Counter private _tokenIds;
uint256 private _qtyReserved;
constructor() ERC721("Make a Wish Lei Haku Aloha", "MWLHA") {
isActive = false;
_qtyReserved = 0;
salePrice = 5000000000000000 wei;
}
function mint(uint256 qty) public payable nonReentrant {
require(isActive, "Contract is not active");
require(qty < PER_ORDER_LIMIT + 1, "Cannot purchase more than the per-order limit");
require((totalSold() + qty + RESERVE_QTY) < MAX_SUPPLY + 1, "Requested quantity would exceed total supply");
require(msg.value == (salePrice * qty), "Incorrect payment amount");
for (uint256 i = 0; i < qty; i++) {
_tokenIds.increment();
uint256 mintIndex = totalSold();
_safeMint(msg.sender, mintIndex);
}
}
function totalSupply() public pure returns (uint256) {
return MAX_SUPPLY;
}
function totalSold() public view returns (uint256) {
return _tokenIds.current();
}
function setActive(bool val) public onlyOwner {
isActive = val;
}
function _baseURI() internal view virtual override returns (string memory) {
return BASE_URI;
}
function tokenURI(uint256 tokenId)
public
view
override
returns (string memory)
{
require(tokenId > 0, "Token Id = 0");
string memory baseURI = _baseURI();
return
bytes(baseURI).length > 0
? string(abi.encodePacked(baseURI, "/", uint2str(tokenId), ".json"))
: "";
}
function distributeFromReserve(uint256 qty, address recipient) external onlyOwner nonReentrant {
require(qty > 0,"Qty must be more than zero");
require(recipient != address(0), "Recipient cannot be a zero address");
require(_qtyReserved + qty < RESERVE_QTY + 1, "Qty would exceed reserved quantity");
require(qty + _tokenIds.current() < MAX_SUPPLY + 1, "Qty would exceed the total supply");
for (uint256 i = 0; i < qty; i++) {
_tokenIds.increment();
uint256 mintIndex = totalSold();
_qtyReserved += 1;
_safeMint(recipient, mintIndex);
}
}
function remainingReserve() public view returns(uint256){
return RESERVE_QTY - _qtyReserved;
}
function transferFunds(address recipient, uint256 amt) external onlyOwner nonReentrant {
require(recipient != address(0), "Recipient cannot be a zero address");
require(amt < address(this).balance+1,"Amt cannot be more than the current balance");
payable(recipient).transfer(amt);
}
function cashOut() external onlyOwner nonReentrant {
payable(msg.sender).transfer(address(this).balance);
}
// https://stackoverflow.com/a/47137572
function uint2str(uint256 _i)
private
pure
returns (string memory _uintAsString)
{
if (_i == 0) {
return "0";
}
uint256 j = _i;
uint256 len;
while (j != 0) {
len++;
j /= 10;
}
bytes memory bstr = new bytes(len);
uint256 k = len;
while (_i != 0) {
k = k - 1;
uint8 temp = (48 + uint8(_i - (_i / 10) * 10));
bytes1 b1 = bytes1(temp);
bstr[k] = b1;
_i /= 10;
}
return string(bstr);
}
}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":"BASE_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PER_ORDER_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_QTY","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":"cashOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"distributeFromReserve","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":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remainingReserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"salePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"setActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":"recipient","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"transferFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280601a81526020017f4d616b6520612057697368204c65692048616b7520416c6f68610000000000008152506040518060400160405280600581526020017f4d574c4841000000000000000000000000000000000000000000000000000000815250816000908051906020019062000096929190620001df565b508060019080519060200190620000af929190620001df565b505050620000d2620000c66200011160201b60201c565b6200011960201b60201c565b60016007819055506000600860006101000a81548160ff0219169083151502179055506000600b819055506611c37937e08000600981905550620002f4565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001ed906200028f565b90600052602060002090601f0160209004810192826200021157600085556200025d565b82601f106200022c57805160ff19168380011785556200025d565b828001600101855582156200025d579182015b828111156200025c5782518255916020019190600101906200023f565b5b5090506200026c919062000270565b5090565b5b808211156200028b57600081600090555060010162000271565b5090565b60006002820490506001821680620002a857607f821691505b60208210811415620002bf57620002be620002c5565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613e3b80620003046000396000f3fe6080604052600436106101cd5760003560e01c80639106d7ba116100f7578063acec338a11610095578063e985e9c511610064578063e985e9c514610643578063f2fde38b14610680578063f3fdf375146106a9578063f51f96dd146106d4576101cd565b8063acec338a14610589578063b88d4fde146105b2578063c87b56dd146105db578063dbddb26a14610618576101cd565b8063990dc9db116100d1578063990dc9db146104f0578063a060ae1814610519578063a0712d6814610544578063a22cb46514610560576101cd565b80639106d7ba1461047157806394bc7a941461049c57806395d89b41146104c5576101cd565b806323b872dd1161016f57806370a082311161013e57806370a08231146103db578063715018a614610418578063793cd71e1461042f5780638da5cb5b14610446576101cd565b806323b872dd1461032157806332cb6b0c1461034a57806342842e0e146103755780636352211e1461039e576101cd565b8063095ea7b3116101ab578063095ea7b31461027757806312e705da146102a057806318160ddd146102cb57806322f3e2d4146102f6576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f4919061286a565b6106ff565b6040516102069190612e76565b60405180910390f35b34801561021b57600080fd5b506102246107e1565b6040516102319190612e91565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c91906128c4565b610873565b60405161026e9190612e0f565b60405180910390f35b34801561028357600080fd5b5061029e600480360381019061029991906127fd565b6108f8565b005b3480156102ac57600080fd5b506102b5610a10565b6040516102c291906131f3565b60405180910390f35b3480156102d757600080fd5b506102e0610a15565b6040516102ed91906131f3565b60405180910390f35b34801561030257600080fd5b5061030b610a1f565b6040516103189190612e76565b60405180910390f35b34801561032d57600080fd5b50610348600480360381019061034391906126e7565b610a32565b005b34801561035657600080fd5b5061035f610a92565b60405161036c91906131f3565b60405180910390f35b34801561038157600080fd5b5061039c600480360381019061039791906126e7565b610a98565b005b3480156103aa57600080fd5b506103c560048036038101906103c091906128c4565b610ab8565b6040516103d29190612e0f565b60405180910390f35b3480156103e757600080fd5b5061040260048036038101906103fd919061267a565b610b6a565b60405161040f91906131f3565b60405180910390f35b34801561042457600080fd5b5061042d610c22565b005b34801561043b57600080fd5b50610444610caa565b005b34801561045257600080fd5b5061045b610dc5565b6040516104689190612e0f565b60405180910390f35b34801561047d57600080fd5b50610486610def565b60405161049391906131f3565b60405180910390f35b3480156104a857600080fd5b506104c360048036038101906104be91906128f1565b610e00565b005b3480156104d157600080fd5b506104da6110a3565b6040516104e79190612e91565b60405180910390f35b3480156104fc57600080fd5b50610517600480360381019061051291906127fd565b611135565b005b34801561052557600080fd5b5061052e611310565b60405161053b91906131f3565b60405180910390f35b61055e600480360381019061055991906128c4565b611326565b005b34801561056c57600080fd5b50610587600480360381019061058291906127bd565b61151a565b005b34801561059557600080fd5b506105b060048036038101906105ab919061283d565b61169b565b005b3480156105be57600080fd5b506105d960048036038101906105d4919061273a565b611734565b005b3480156105e757600080fd5b5061060260048036038101906105fd91906128c4565b611796565b60405161060f9190612e91565b60405180910390f35b34801561062457600080fd5b5061062d611838565b60405161063a9190612e91565b60405180910390f35b34801561064f57600080fd5b5061066a600480360381019061066591906126a7565b611854565b6040516106779190612e76565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a2919061267a565b6118e8565b005b3480156106b557600080fd5b506106be6119e0565b6040516106cb91906131f3565b60405180910390f35b3480156106e057600080fd5b506106e96119e5565b6040516106f691906131f3565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107ca57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107da57506107d9826119eb565b5b9050919050565b6060600080546107f0906134b6565b80601f016020809104026020016040519081016040528092919081815260200182805461081c906134b6565b80156108695780601f1061083e57610100808354040283529160200191610869565b820191906000526020600020905b81548152906001019060200180831161084c57829003601f168201915b5050505050905090565b600061087e82611a55565b6108bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b4906130d3565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061090382610ab8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096b90613153565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610993611ac1565b73ffffffffffffffffffffffffffffffffffffffff1614806109c257506109c1816109bc611ac1565b611854565b5b610a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f890613033565b60405180910390fd5b610a0b8383611ac9565b505050565b600a81565b6000611388905090565b600860009054906101000a900460ff1681565b610a43610a3d611ac1565b82611b82565b610a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7990613173565b60405180910390fd5b610a8d838383611c60565b505050565b61138881565b610ab383838360405180602001604052806000815250611734565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5890613073565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd290613053565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c2a611ac1565b73ffffffffffffffffffffffffffffffffffffffff16610c48610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614610c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9590613113565b60405180910390fd5b610ca86000611ebc565b565b610cb2611ac1565b73ffffffffffffffffffffffffffffffffffffffff16610cd0610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614610d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1d90613113565b60405180910390fd5b60026007541415610d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6390613193565b60405180910390fd5b60026007819055503373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610dba573d6000803e3d6000fd5b506001600781905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610dfb600a611f82565b905090565b610e08611ac1565b73ffffffffffffffffffffffffffffffffffffffff16610e26610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614610e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7390613113565b60405180910390fd5b60026007541415610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990613193565b60405180910390fd5b600260078190555060008211610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0490612eb3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f74906130f3565b60405180910390fd5b60016032610f8b91906132a7565b82600b54610f9991906132a7565b10610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd0906131d3565b60405180910390fd5b6001611388610fe891906132a7565b610ff2600a611f82565b83610ffd91906132a7565b1061103d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103490612f13565b60405180910390fd5b60005b8281101561109657611052600a611f90565b600061105c610def565b90506001600b600082825461107191906132a7565b925050819055506110828382611fa6565b50808061108e90613519565b915050611040565b5060016007819055505050565b6060600180546110b2906134b6565b80601f01602080910402602001604051908101604052809291908181526020018280546110de906134b6565b801561112b5780601f106111005761010080835404028352916020019161112b565b820191906000526020600020905b81548152906001019060200180831161110e57829003601f168201915b5050505050905090565b61113d611ac1565b73ffffffffffffffffffffffffffffffffffffffff1661115b610dc5565b73ffffffffffffffffffffffffffffffffffffffff16146111b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a890613113565b60405180910390fd5b600260075414156111f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ee90613193565b60405180910390fd5b6002600781905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561126f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611266906130f3565b60405180910390fd5b60014761127c91906132a7565b81106112bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b490613013565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611303573d6000803e3d6000fd5b5060016007819055505050565b6000600b54603261132191906133bf565b905090565b6002600754141561136c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136390613193565b60405180910390fd5b6002600781905550600860009054906101000a900460ff166113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba906130b3565b60405180910390fd5b6001600a6113d191906132a7565b8110611412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140990612f53565b60405180910390fd5b600161138861142191906132a7565b60328261142c610def565b61143691906132a7565b61144091906132a7565b10611480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147790612ff3565b60405180910390fd5b8060095461148e9190613365565b34146114cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c690612fb3565b60405180910390fd5b60005b8181101561150e576114e4600a611f90565b60006114ee610def565b90506114fa3382611fa6565b50808061150690613519565b9150506114d2565b50600160078190555050565b611522611ac1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158790612f93565b60405180910390fd5b806005600061159d611ac1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661164a611ac1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161168f9190612e76565b60405180910390a35050565b6116a3611ac1565b73ffffffffffffffffffffffffffffffffffffffff166116c1610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e90613113565b60405180910390fd5b80600860006101000a81548160ff02191690831515021790555050565b61174561173f611ac1565b83611b82565b611784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177b90613173565b60405180910390fd5b61179084848484611fc4565b50505050565b6060600082116117db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d2906131b3565b60405180910390fd5b60006117e5612020565b905060008151116118055760405180602001604052806000815250611830565b8061180f84612040565b604051602001611820929190612dd5565b6040516020818303038152906040525b915050919050565b604051806060016040528060358152602001613dd16035913981565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118f0611ac1565b73ffffffffffffffffffffffffffffffffffffffff1661190e610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614611964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195b90613113565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb90612ef3565b60405180910390fd5b6119dd81611ebc565b50565b603281565b60095481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b3c83610ab8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611b8d82611a55565b611bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc390612fd3565b60405180910390fd5b6000611bd783610ab8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c4657508373ffffffffffffffffffffffffffffffffffffffff16611c2e84610873565b73ffffffffffffffffffffffffffffffffffffffff16145b80611c575750611c568185611854565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c8082610ab8565b73ffffffffffffffffffffffffffffffffffffffff1614611cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccd90613133565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3d90612f73565b60405180910390fd5b611d518383836121c9565b611d5c600082611ac9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dac91906133bf565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e0391906132a7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081600001549050919050565b6001816000016000828254019250508190555050565b611fc08282604051806020016040528060008152506121ce565b5050565b611fcf848484611c60565b611fdb84848484612229565b61201a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201190612ed3565b60405180910390fd5b50505050565b6060604051806060016040528060358152602001613dd160359139905090565b60606000821415612088576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506121c4565b600082905060005b600082146120ba5780806120a390613519565b915050600a826120b39190613334565b9150612090565b60008167ffffffffffffffff8111156120d6576120d561361e565b5b6040519080825280601f01601f1916602001820160405280156121085781602001600182028036833780820191505090505b50905060008290505b600086146121bc5760018161212691906133bf565b90506000600a80886121389190613334565b6121429190613365565b8761214d91906133bf565b603061215991906132fd565b905060008160f81b905080848481518110612177576121766135ef565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a886121b39190613334565b97505050612111565b819450505050505b919050565b505050565b6121d883836123c0565b6121e56000848484612229565b612224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221b90612ed3565b60405180910390fd5b505050565b600061224a8473ffffffffffffffffffffffffffffffffffffffff1661258e565b156123b3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612273611ac1565b8786866040518563ffffffff1660e01b81526004016122959493929190612e2a565b602060405180830381600087803b1580156122af57600080fd5b505af19250505080156122e057506040513d601f19601f820116820180604052508101906122dd9190612897565b60015b612363573d8060008114612310576040519150601f19603f3d011682016040523d82523d6000602084013e612315565b606091505b5060008151141561235b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235290612ed3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506123b8565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242790613093565b60405180910390fd5b61243981611a55565b15612479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247090612f33565b60405180910390fd5b612485600083836121c9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124d591906132a7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b60006125b46125af84613233565b61320e565b9050828152602081018484840111156125d0576125cf613652565b5b6125db848285613474565b509392505050565b6000813590506125f281613d74565b92915050565b60008135905061260781613d8b565b92915050565b60008135905061261c81613da2565b92915050565b60008151905061263181613da2565b92915050565b600082601f83011261264c5761264b61364d565b5b813561265c8482602086016125a1565b91505092915050565b60008135905061267481613db9565b92915050565b6000602082840312156126905761268f61365c565b5b600061269e848285016125e3565b91505092915050565b600080604083850312156126be576126bd61365c565b5b60006126cc858286016125e3565b92505060206126dd858286016125e3565b9150509250929050565b600080600060608486031215612700576126ff61365c565b5b600061270e868287016125e3565b935050602061271f868287016125e3565b925050604061273086828701612665565b9150509250925092565b600080600080608085870312156127545761275361365c565b5b6000612762878288016125e3565b9450506020612773878288016125e3565b935050604061278487828801612665565b925050606085013567ffffffffffffffff8111156127a5576127a4613657565b5b6127b187828801612637565b91505092959194509250565b600080604083850312156127d4576127d361365c565b5b60006127e2858286016125e3565b92505060206127f3858286016125f8565b9150509250929050565b600080604083850312156128145761281361365c565b5b6000612822858286016125e3565b925050602061283385828601612665565b9150509250929050565b6000602082840312156128535761285261365c565b5b6000612861848285016125f8565b91505092915050565b6000602082840312156128805761287f61365c565b5b600061288e8482850161260d565b91505092915050565b6000602082840312156128ad576128ac61365c565b5b60006128bb84828501612622565b91505092915050565b6000602082840312156128da576128d961365c565b5b60006128e884828501612665565b91505092915050565b600080604083850312156129085761290761365c565b5b600061291685828601612665565b9250506020612927858286016125e3565b9150509250929050565b61293a816133f3565b82525050565b61294981613405565b82525050565b600061295a82613264565b612964818561327a565b9350612974818560208601613483565b61297d81613661565b840191505092915050565b60006129938261326f565b61299d818561328b565b93506129ad818560208601613483565b6129b681613661565b840191505092915050565b60006129cc8261326f565b6129d6818561329c565b93506129e6818560208601613483565b80840191505092915050565b60006129ff601a8361328b565b9150612a0a82613672565b602082019050919050565b6000612a2260328361328b565b9150612a2d8261369b565b604082019050919050565b6000612a4560268361328b565b9150612a50826136ea565b604082019050919050565b6000612a6860218361328b565b9150612a7382613739565b604082019050919050565b6000612a8b601c8361328b565b9150612a9682613788565b602082019050919050565b6000612aae602d8361328b565b9150612ab9826137b1565b604082019050919050565b6000612ad160248361328b565b9150612adc82613800565b604082019050919050565b6000612af460198361328b565b9150612aff8261384f565b602082019050919050565b6000612b1760188361328b565b9150612b2282613878565b602082019050919050565b6000612b3a602c8361328b565b9150612b45826138a1565b604082019050919050565b6000612b5d602c8361328b565b9150612b68826138f0565b604082019050919050565b6000612b80602b8361328b565b9150612b8b8261393f565b604082019050919050565b6000612ba360388361328b565b9150612bae8261398e565b604082019050919050565b6000612bc6602a8361328b565b9150612bd1826139dd565b604082019050919050565b6000612be960298361328b565b9150612bf482613a2c565b604082019050919050565b6000612c0c60208361328b565b9150612c1782613a7b565b602082019050919050565b6000612c2f60168361328b565b9150612c3a82613aa4565b602082019050919050565b6000612c52602c8361328b565b9150612c5d82613acd565b604082019050919050565b6000612c7560058361329c565b9150612c8082613b1c565b600582019050919050565b6000612c9860228361328b565b9150612ca382613b45565b604082019050919050565b6000612cbb60208361328b565b9150612cc682613b94565b602082019050919050565b6000612cde60298361328b565b9150612ce982613bbd565b604082019050919050565b6000612d0160218361328b565b9150612d0c82613c0c565b604082019050919050565b6000612d2460318361328b565b9150612d2f82613c5b565b604082019050919050565b6000612d47601f8361328b565b9150612d5282613caa565b602082019050919050565b6000612d6a600c8361328b565b9150612d7582613cd3565b602082019050919050565b6000612d8d60228361328b565b9150612d9882613cfc565b604082019050919050565b6000612db060018361329c565b9150612dbb82613d4b565b600182019050919050565b612dcf8161345d565b82525050565b6000612de182856129c1565b9150612dec82612da3565b9150612df882846129c1565b9150612e0382612c68565b91508190509392505050565b6000602082019050612e246000830184612931565b92915050565b6000608082019050612e3f6000830187612931565b612e4c6020830186612931565b612e596040830185612dc6565b8181036060830152612e6b818461294f565b905095945050505050565b6000602082019050612e8b6000830184612940565b92915050565b60006020820190508181036000830152612eab8184612988565b905092915050565b60006020820190508181036000830152612ecc816129f2565b9050919050565b60006020820190508181036000830152612eec81612a15565b9050919050565b60006020820190508181036000830152612f0c81612a38565b9050919050565b60006020820190508181036000830152612f2c81612a5b565b9050919050565b60006020820190508181036000830152612f4c81612a7e565b9050919050565b60006020820190508181036000830152612f6c81612aa1565b9050919050565b60006020820190508181036000830152612f8c81612ac4565b9050919050565b60006020820190508181036000830152612fac81612ae7565b9050919050565b60006020820190508181036000830152612fcc81612b0a565b9050919050565b60006020820190508181036000830152612fec81612b2d565b9050919050565b6000602082019050818103600083015261300c81612b50565b9050919050565b6000602082019050818103600083015261302c81612b73565b9050919050565b6000602082019050818103600083015261304c81612b96565b9050919050565b6000602082019050818103600083015261306c81612bb9565b9050919050565b6000602082019050818103600083015261308c81612bdc565b9050919050565b600060208201905081810360008301526130ac81612bff565b9050919050565b600060208201905081810360008301526130cc81612c22565b9050919050565b600060208201905081810360008301526130ec81612c45565b9050919050565b6000602082019050818103600083015261310c81612c8b565b9050919050565b6000602082019050818103600083015261312c81612cae565b9050919050565b6000602082019050818103600083015261314c81612cd1565b9050919050565b6000602082019050818103600083015261316c81612cf4565b9050919050565b6000602082019050818103600083015261318c81612d17565b9050919050565b600060208201905081810360008301526131ac81612d3a565b9050919050565b600060208201905081810360008301526131cc81612d5d565b9050919050565b600060208201905081810360008301526131ec81612d80565b9050919050565b60006020820190506132086000830184612dc6565b92915050565b6000613218613229565b905061322482826134e8565b919050565b6000604051905090565b600067ffffffffffffffff82111561324e5761324d61361e565b5b61325782613661565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006132b28261345d565b91506132bd8361345d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132f2576132f1613562565b5b828201905092915050565b600061330882613467565b915061331383613467565b92508260ff0382111561332957613328613562565b5b828201905092915050565b600061333f8261345d565b915061334a8361345d565b92508261335a57613359613591565b5b828204905092915050565b60006133708261345d565b915061337b8361345d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156133b4576133b3613562565b5b828202905092915050565b60006133ca8261345d565b91506133d58361345d565b9250828210156133e8576133e7613562565b5b828203905092915050565b60006133fe8261343d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156134a1578082015181840152602081019050613486565b838111156134b0576000848401525b50505050565b600060028204905060018216806134ce57607f821691505b602082108114156134e2576134e16135c0565b5b50919050565b6134f182613661565b810181811067ffffffffffffffff821117156135105761350f61361e565b5b80604052505050565b60006135248261345d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561355757613556613562565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f517479206d757374206265206d6f7265207468616e207a65726f000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f51747920776f756c64206578636565642074686520746f74616c20737570706c60008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f43616e6e6f74207075726368617365206d6f7265207468616e2074686520706560008201527f722d6f72646572206c696d697400000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f496e636f7272656374207061796d656e7420616d6f756e740000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f526571756573746564207175616e7469747920776f756c64206578636565642060008201527f746f74616c20737570706c790000000000000000000000000000000000000000602082015250565b7f416d742063616e6e6f74206265206d6f7265207468616e20746865206375727260008201527f656e742062616c616e6365000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f436f6e7472616374206973206e6f742061637469766500000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f526563697069656e742063616e6e6f742062652061207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f546f6b656e204964203d20300000000000000000000000000000000000000000600082015250565b7f51747920776f756c6420657863656564207265736572766564207175616e746960008201527f7479000000000000000000000000000000000000000000000000000000000000602082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b613d7d816133f3565b8114613d8857600080fd5b50565b613d9481613405565b8114613d9f57600080fd5b50565b613dab81613411565b8114613db657600080fd5b50565b613dc28161345d565b8114613dcd57600080fd5b5056fe697066733a2f2f516d62506e343575324e7769546f6f626f695335566a62697148466d536f5236743351524c5767677a6767437061a26469706673582212206120d76a30fd3197cf42b25c2dc829976fdcdce120e7ba6fc4374fe8672df62064736f6c63430008060033
Deployed Bytecode
0x6080604052600436106101cd5760003560e01c80639106d7ba116100f7578063acec338a11610095578063e985e9c511610064578063e985e9c514610643578063f2fde38b14610680578063f3fdf375146106a9578063f51f96dd146106d4576101cd565b8063acec338a14610589578063b88d4fde146105b2578063c87b56dd146105db578063dbddb26a14610618576101cd565b8063990dc9db116100d1578063990dc9db146104f0578063a060ae1814610519578063a0712d6814610544578063a22cb46514610560576101cd565b80639106d7ba1461047157806394bc7a941461049c57806395d89b41146104c5576101cd565b806323b872dd1161016f57806370a082311161013e57806370a08231146103db578063715018a614610418578063793cd71e1461042f5780638da5cb5b14610446576101cd565b806323b872dd1461032157806332cb6b0c1461034a57806342842e0e146103755780636352211e1461039e576101cd565b8063095ea7b3116101ab578063095ea7b31461027757806312e705da146102a057806318160ddd146102cb57806322f3e2d4146102f6576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f4919061286a565b6106ff565b6040516102069190612e76565b60405180910390f35b34801561021b57600080fd5b506102246107e1565b6040516102319190612e91565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c91906128c4565b610873565b60405161026e9190612e0f565b60405180910390f35b34801561028357600080fd5b5061029e600480360381019061029991906127fd565b6108f8565b005b3480156102ac57600080fd5b506102b5610a10565b6040516102c291906131f3565b60405180910390f35b3480156102d757600080fd5b506102e0610a15565b6040516102ed91906131f3565b60405180910390f35b34801561030257600080fd5b5061030b610a1f565b6040516103189190612e76565b60405180910390f35b34801561032d57600080fd5b50610348600480360381019061034391906126e7565b610a32565b005b34801561035657600080fd5b5061035f610a92565b60405161036c91906131f3565b60405180910390f35b34801561038157600080fd5b5061039c600480360381019061039791906126e7565b610a98565b005b3480156103aa57600080fd5b506103c560048036038101906103c091906128c4565b610ab8565b6040516103d29190612e0f565b60405180910390f35b3480156103e757600080fd5b5061040260048036038101906103fd919061267a565b610b6a565b60405161040f91906131f3565b60405180910390f35b34801561042457600080fd5b5061042d610c22565b005b34801561043b57600080fd5b50610444610caa565b005b34801561045257600080fd5b5061045b610dc5565b6040516104689190612e0f565b60405180910390f35b34801561047d57600080fd5b50610486610def565b60405161049391906131f3565b60405180910390f35b3480156104a857600080fd5b506104c360048036038101906104be91906128f1565b610e00565b005b3480156104d157600080fd5b506104da6110a3565b6040516104e79190612e91565b60405180910390f35b3480156104fc57600080fd5b50610517600480360381019061051291906127fd565b611135565b005b34801561052557600080fd5b5061052e611310565b60405161053b91906131f3565b60405180910390f35b61055e600480360381019061055991906128c4565b611326565b005b34801561056c57600080fd5b50610587600480360381019061058291906127bd565b61151a565b005b34801561059557600080fd5b506105b060048036038101906105ab919061283d565b61169b565b005b3480156105be57600080fd5b506105d960048036038101906105d4919061273a565b611734565b005b3480156105e757600080fd5b5061060260048036038101906105fd91906128c4565b611796565b60405161060f9190612e91565b60405180910390f35b34801561062457600080fd5b5061062d611838565b60405161063a9190612e91565b60405180910390f35b34801561064f57600080fd5b5061066a600480360381019061066591906126a7565b611854565b6040516106779190612e76565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a2919061267a565b6118e8565b005b3480156106b557600080fd5b506106be6119e0565b6040516106cb91906131f3565b60405180910390f35b3480156106e057600080fd5b506106e96119e5565b6040516106f691906131f3565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107ca57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107da57506107d9826119eb565b5b9050919050565b6060600080546107f0906134b6565b80601f016020809104026020016040519081016040528092919081815260200182805461081c906134b6565b80156108695780601f1061083e57610100808354040283529160200191610869565b820191906000526020600020905b81548152906001019060200180831161084c57829003601f168201915b5050505050905090565b600061087e82611a55565b6108bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b4906130d3565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061090382610ab8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096b90613153565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610993611ac1565b73ffffffffffffffffffffffffffffffffffffffff1614806109c257506109c1816109bc611ac1565b611854565b5b610a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f890613033565b60405180910390fd5b610a0b8383611ac9565b505050565b600a81565b6000611388905090565b600860009054906101000a900460ff1681565b610a43610a3d611ac1565b82611b82565b610a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7990613173565b60405180910390fd5b610a8d838383611c60565b505050565b61138881565b610ab383838360405180602001604052806000815250611734565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5890613073565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd290613053565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c2a611ac1565b73ffffffffffffffffffffffffffffffffffffffff16610c48610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614610c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9590613113565b60405180910390fd5b610ca86000611ebc565b565b610cb2611ac1565b73ffffffffffffffffffffffffffffffffffffffff16610cd0610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614610d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1d90613113565b60405180910390fd5b60026007541415610d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6390613193565b60405180910390fd5b60026007819055503373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610dba573d6000803e3d6000fd5b506001600781905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610dfb600a611f82565b905090565b610e08611ac1565b73ffffffffffffffffffffffffffffffffffffffff16610e26610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614610e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7390613113565b60405180910390fd5b60026007541415610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990613193565b60405180910390fd5b600260078190555060008211610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0490612eb3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f74906130f3565b60405180910390fd5b60016032610f8b91906132a7565b82600b54610f9991906132a7565b10610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd0906131d3565b60405180910390fd5b6001611388610fe891906132a7565b610ff2600a611f82565b83610ffd91906132a7565b1061103d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103490612f13565b60405180910390fd5b60005b8281101561109657611052600a611f90565b600061105c610def565b90506001600b600082825461107191906132a7565b925050819055506110828382611fa6565b50808061108e90613519565b915050611040565b5060016007819055505050565b6060600180546110b2906134b6565b80601f01602080910402602001604051908101604052809291908181526020018280546110de906134b6565b801561112b5780601f106111005761010080835404028352916020019161112b565b820191906000526020600020905b81548152906001019060200180831161110e57829003601f168201915b5050505050905090565b61113d611ac1565b73ffffffffffffffffffffffffffffffffffffffff1661115b610dc5565b73ffffffffffffffffffffffffffffffffffffffff16146111b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a890613113565b60405180910390fd5b600260075414156111f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ee90613193565b60405180910390fd5b6002600781905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561126f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611266906130f3565b60405180910390fd5b60014761127c91906132a7565b81106112bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b490613013565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611303573d6000803e3d6000fd5b5060016007819055505050565b6000600b54603261132191906133bf565b905090565b6002600754141561136c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136390613193565b60405180910390fd5b6002600781905550600860009054906101000a900460ff166113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba906130b3565b60405180910390fd5b6001600a6113d191906132a7565b8110611412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140990612f53565b60405180910390fd5b600161138861142191906132a7565b60328261142c610def565b61143691906132a7565b61144091906132a7565b10611480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147790612ff3565b60405180910390fd5b8060095461148e9190613365565b34146114cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c690612fb3565b60405180910390fd5b60005b8181101561150e576114e4600a611f90565b60006114ee610def565b90506114fa3382611fa6565b50808061150690613519565b9150506114d2565b50600160078190555050565b611522611ac1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158790612f93565b60405180910390fd5b806005600061159d611ac1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661164a611ac1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161168f9190612e76565b60405180910390a35050565b6116a3611ac1565b73ffffffffffffffffffffffffffffffffffffffff166116c1610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e90613113565b60405180910390fd5b80600860006101000a81548160ff02191690831515021790555050565b61174561173f611ac1565b83611b82565b611784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177b90613173565b60405180910390fd5b61179084848484611fc4565b50505050565b6060600082116117db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d2906131b3565b60405180910390fd5b60006117e5612020565b905060008151116118055760405180602001604052806000815250611830565b8061180f84612040565b604051602001611820929190612dd5565b6040516020818303038152906040525b915050919050565b604051806060016040528060358152602001613dd16035913981565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118f0611ac1565b73ffffffffffffffffffffffffffffffffffffffff1661190e610dc5565b73ffffffffffffffffffffffffffffffffffffffff1614611964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195b90613113565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb90612ef3565b60405180910390fd5b6119dd81611ebc565b50565b603281565b60095481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b3c83610ab8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611b8d82611a55565b611bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc390612fd3565b60405180910390fd5b6000611bd783610ab8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c4657508373ffffffffffffffffffffffffffffffffffffffff16611c2e84610873565b73ffffffffffffffffffffffffffffffffffffffff16145b80611c575750611c568185611854565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c8082610ab8565b73ffffffffffffffffffffffffffffffffffffffff1614611cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccd90613133565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3d90612f73565b60405180910390fd5b611d518383836121c9565b611d5c600082611ac9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dac91906133bf565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e0391906132a7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081600001549050919050565b6001816000016000828254019250508190555050565b611fc08282604051806020016040528060008152506121ce565b5050565b611fcf848484611c60565b611fdb84848484612229565b61201a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201190612ed3565b60405180910390fd5b50505050565b6060604051806060016040528060358152602001613dd160359139905090565b60606000821415612088576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506121c4565b600082905060005b600082146120ba5780806120a390613519565b915050600a826120b39190613334565b9150612090565b60008167ffffffffffffffff8111156120d6576120d561361e565b5b6040519080825280601f01601f1916602001820160405280156121085781602001600182028036833780820191505090505b50905060008290505b600086146121bc5760018161212691906133bf565b90506000600a80886121389190613334565b6121429190613365565b8761214d91906133bf565b603061215991906132fd565b905060008160f81b905080848481518110612177576121766135ef565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a886121b39190613334565b97505050612111565b819450505050505b919050565b505050565b6121d883836123c0565b6121e56000848484612229565b612224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221b90612ed3565b60405180910390fd5b505050565b600061224a8473ffffffffffffffffffffffffffffffffffffffff1661258e565b156123b3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612273611ac1565b8786866040518563ffffffff1660e01b81526004016122959493929190612e2a565b602060405180830381600087803b1580156122af57600080fd5b505af19250505080156122e057506040513d601f19601f820116820180604052508101906122dd9190612897565b60015b612363573d8060008114612310576040519150601f19603f3d011682016040523d82523d6000602084013e612315565b606091505b5060008151141561235b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235290612ed3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506123b8565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242790613093565b60405180910390fd5b61243981611a55565b15612479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247090612f33565b60405180910390fd5b612485600083836121c9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124d591906132a7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b60006125b46125af84613233565b61320e565b9050828152602081018484840111156125d0576125cf613652565b5b6125db848285613474565b509392505050565b6000813590506125f281613d74565b92915050565b60008135905061260781613d8b565b92915050565b60008135905061261c81613da2565b92915050565b60008151905061263181613da2565b92915050565b600082601f83011261264c5761264b61364d565b5b813561265c8482602086016125a1565b91505092915050565b60008135905061267481613db9565b92915050565b6000602082840312156126905761268f61365c565b5b600061269e848285016125e3565b91505092915050565b600080604083850312156126be576126bd61365c565b5b60006126cc858286016125e3565b92505060206126dd858286016125e3565b9150509250929050565b600080600060608486031215612700576126ff61365c565b5b600061270e868287016125e3565b935050602061271f868287016125e3565b925050604061273086828701612665565b9150509250925092565b600080600080608085870312156127545761275361365c565b5b6000612762878288016125e3565b9450506020612773878288016125e3565b935050604061278487828801612665565b925050606085013567ffffffffffffffff8111156127a5576127a4613657565b5b6127b187828801612637565b91505092959194509250565b600080604083850312156127d4576127d361365c565b5b60006127e2858286016125e3565b92505060206127f3858286016125f8565b9150509250929050565b600080604083850312156128145761281361365c565b5b6000612822858286016125e3565b925050602061283385828601612665565b9150509250929050565b6000602082840312156128535761285261365c565b5b6000612861848285016125f8565b91505092915050565b6000602082840312156128805761287f61365c565b5b600061288e8482850161260d565b91505092915050565b6000602082840312156128ad576128ac61365c565b5b60006128bb84828501612622565b91505092915050565b6000602082840312156128da576128d961365c565b5b60006128e884828501612665565b91505092915050565b600080604083850312156129085761290761365c565b5b600061291685828601612665565b9250506020612927858286016125e3565b9150509250929050565b61293a816133f3565b82525050565b61294981613405565b82525050565b600061295a82613264565b612964818561327a565b9350612974818560208601613483565b61297d81613661565b840191505092915050565b60006129938261326f565b61299d818561328b565b93506129ad818560208601613483565b6129b681613661565b840191505092915050565b60006129cc8261326f565b6129d6818561329c565b93506129e6818560208601613483565b80840191505092915050565b60006129ff601a8361328b565b9150612a0a82613672565b602082019050919050565b6000612a2260328361328b565b9150612a2d8261369b565b604082019050919050565b6000612a4560268361328b565b9150612a50826136ea565b604082019050919050565b6000612a6860218361328b565b9150612a7382613739565b604082019050919050565b6000612a8b601c8361328b565b9150612a9682613788565b602082019050919050565b6000612aae602d8361328b565b9150612ab9826137b1565b604082019050919050565b6000612ad160248361328b565b9150612adc82613800565b604082019050919050565b6000612af460198361328b565b9150612aff8261384f565b602082019050919050565b6000612b1760188361328b565b9150612b2282613878565b602082019050919050565b6000612b3a602c8361328b565b9150612b45826138a1565b604082019050919050565b6000612b5d602c8361328b565b9150612b68826138f0565b604082019050919050565b6000612b80602b8361328b565b9150612b8b8261393f565b604082019050919050565b6000612ba360388361328b565b9150612bae8261398e565b604082019050919050565b6000612bc6602a8361328b565b9150612bd1826139dd565b604082019050919050565b6000612be960298361328b565b9150612bf482613a2c565b604082019050919050565b6000612c0c60208361328b565b9150612c1782613a7b565b602082019050919050565b6000612c2f60168361328b565b9150612c3a82613aa4565b602082019050919050565b6000612c52602c8361328b565b9150612c5d82613acd565b604082019050919050565b6000612c7560058361329c565b9150612c8082613b1c565b600582019050919050565b6000612c9860228361328b565b9150612ca382613b45565b604082019050919050565b6000612cbb60208361328b565b9150612cc682613b94565b602082019050919050565b6000612cde60298361328b565b9150612ce982613bbd565b604082019050919050565b6000612d0160218361328b565b9150612d0c82613c0c565b604082019050919050565b6000612d2460318361328b565b9150612d2f82613c5b565b604082019050919050565b6000612d47601f8361328b565b9150612d5282613caa565b602082019050919050565b6000612d6a600c8361328b565b9150612d7582613cd3565b602082019050919050565b6000612d8d60228361328b565b9150612d9882613cfc565b604082019050919050565b6000612db060018361329c565b9150612dbb82613d4b565b600182019050919050565b612dcf8161345d565b82525050565b6000612de182856129c1565b9150612dec82612da3565b9150612df882846129c1565b9150612e0382612c68565b91508190509392505050565b6000602082019050612e246000830184612931565b92915050565b6000608082019050612e3f6000830187612931565b612e4c6020830186612931565b612e596040830185612dc6565b8181036060830152612e6b818461294f565b905095945050505050565b6000602082019050612e8b6000830184612940565b92915050565b60006020820190508181036000830152612eab8184612988565b905092915050565b60006020820190508181036000830152612ecc816129f2565b9050919050565b60006020820190508181036000830152612eec81612a15565b9050919050565b60006020820190508181036000830152612f0c81612a38565b9050919050565b60006020820190508181036000830152612f2c81612a5b565b9050919050565b60006020820190508181036000830152612f4c81612a7e565b9050919050565b60006020820190508181036000830152612f6c81612aa1565b9050919050565b60006020820190508181036000830152612f8c81612ac4565b9050919050565b60006020820190508181036000830152612fac81612ae7565b9050919050565b60006020820190508181036000830152612fcc81612b0a565b9050919050565b60006020820190508181036000830152612fec81612b2d565b9050919050565b6000602082019050818103600083015261300c81612b50565b9050919050565b6000602082019050818103600083015261302c81612b73565b9050919050565b6000602082019050818103600083015261304c81612b96565b9050919050565b6000602082019050818103600083015261306c81612bb9565b9050919050565b6000602082019050818103600083015261308c81612bdc565b9050919050565b600060208201905081810360008301526130ac81612bff565b9050919050565b600060208201905081810360008301526130cc81612c22565b9050919050565b600060208201905081810360008301526130ec81612c45565b9050919050565b6000602082019050818103600083015261310c81612c8b565b9050919050565b6000602082019050818103600083015261312c81612cae565b9050919050565b6000602082019050818103600083015261314c81612cd1565b9050919050565b6000602082019050818103600083015261316c81612cf4565b9050919050565b6000602082019050818103600083015261318c81612d17565b9050919050565b600060208201905081810360008301526131ac81612d3a565b9050919050565b600060208201905081810360008301526131cc81612d5d565b9050919050565b600060208201905081810360008301526131ec81612d80565b9050919050565b60006020820190506132086000830184612dc6565b92915050565b6000613218613229565b905061322482826134e8565b919050565b6000604051905090565b600067ffffffffffffffff82111561324e5761324d61361e565b5b61325782613661565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006132b28261345d565b91506132bd8361345d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132f2576132f1613562565b5b828201905092915050565b600061330882613467565b915061331383613467565b92508260ff0382111561332957613328613562565b5b828201905092915050565b600061333f8261345d565b915061334a8361345d565b92508261335a57613359613591565b5b828204905092915050565b60006133708261345d565b915061337b8361345d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156133b4576133b3613562565b5b828202905092915050565b60006133ca8261345d565b91506133d58361345d565b9250828210156133e8576133e7613562565b5b828203905092915050565b60006133fe8261343d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156134a1578082015181840152602081019050613486565b838111156134b0576000848401525b50505050565b600060028204905060018216806134ce57607f821691505b602082108114156134e2576134e16135c0565b5b50919050565b6134f182613661565b810181811067ffffffffffffffff821117156135105761350f61361e565b5b80604052505050565b60006135248261345d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561355757613556613562565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f517479206d757374206265206d6f7265207468616e207a65726f000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f51747920776f756c64206578636565642074686520746f74616c20737570706c60008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f43616e6e6f74207075726368617365206d6f7265207468616e2074686520706560008201527f722d6f72646572206c696d697400000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f496e636f7272656374207061796d656e7420616d6f756e740000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f526571756573746564207175616e7469747920776f756c64206578636565642060008201527f746f74616c20737570706c790000000000000000000000000000000000000000602082015250565b7f416d742063616e6e6f74206265206d6f7265207468616e20746865206375727260008201527f656e742062616c616e6365000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f436f6e7472616374206973206e6f742061637469766500000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f526563697069656e742063616e6e6f742062652061207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f546f6b656e204964203d20300000000000000000000000000000000000000000600082015250565b7f51747920776f756c6420657863656564207265736572766564207175616e746960008201527f7479000000000000000000000000000000000000000000000000000000000000602082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b613d7d816133f3565b8114613d8857600080fd5b50565b613d9481613405565b8114613d9f57600080fd5b50565b613dab81613411565b8114613db657600080fd5b50565b613dc28161345d565b8114613dcd57600080fd5b5056fe697066733a2f2f516d62506e343575324e7769546f6f626f695335566a62697148466d536f5236743351524c5767677a6767437061a26469706673582212206120d76a30fd3197cf42b25c2dc829976fdcdce120e7ba6fc4374fe8672df62064736f6c63430008060033
Deployed Bytecode Sourcemap
38960:3971:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24483:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25428:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26987:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26510:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39082:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40235:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39278:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27877:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39034:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28287:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25122:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24852:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38255:94;;;;;;;;;;;;;:::i;:::-;;42134:121;;;;;;;;;;;;;:::i;:::-;;37604:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40332:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41035:651;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25597:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41810:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41694:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39633:594;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27280:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40436:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28543:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40640:387;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39180:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27646:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38504:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39133:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39305:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24483:305;24585:4;24637:25;24622:40;;;:11;:40;;;;:105;;;;24694:33;24679:48;;;:11;:48;;;;24622:105;:158;;;;24744:36;24768:11;24744:23;:36::i;:::-;24622:158;24602:178;;24483:305;;;:::o;25428:100::-;25482:13;25515:5;25508:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25428:100;:::o;26987:221::-;27063:7;27091:16;27099:7;27091;:16::i;:::-;27083:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27176:15;:24;27192:7;27176:24;;;;;;;;;;;;;;;;;;;;;27169:31;;26987:221;;;:::o;26510:411::-;26591:13;26607:23;26622:7;26607:14;:23::i;:::-;26591:39;;26655:5;26649:11;;:2;:11;;;;26641:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26749:5;26733:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26758:37;26775:5;26782:12;:10;:12::i;:::-;26758:16;:37::i;:::-;26733:62;26711:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26892:21;26901:2;26905:7;26892:8;:21::i;:::-;26580:341;26510:411;;:::o;39082:44::-;39124:2;39082:44;:::o;40235:89::-;40279:7;39071:4;40299:17;;40235:89;:::o;39278:20::-;;;;;;;;;;;;;:::o;27877:339::-;28072:41;28091:12;:10;:12::i;:::-;28105:7;28072:18;:41::i;:::-;28064:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28180:28;28190:4;28196:2;28200:7;28180:9;:28::i;:::-;27877:339;;;:::o;39034:41::-;39071:4;39034:41;:::o;28287:185::-;28425:39;28442:4;28448:2;28452:7;28425:39;;;;;;;;;;;;:16;:39::i;:::-;28287:185;;;:::o;25122:239::-;25194:7;25214:13;25230:7;:16;25238:7;25230:16;;;;;;;;;;;;;;;;;;;;;25214:32;;25282:1;25265:19;;:5;:19;;;;25257:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25348:5;25341:12;;;25122:239;;;:::o;24852:208::-;24924:7;24969:1;24952:19;;:5;:19;;;;24944:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25036:9;:16;25046:5;25036:16;;;;;;;;;;;;;;;;25029:23;;24852:208;;;:::o;38255:94::-;37835:12;:10;:12::i;:::-;37824:23;;:7;:5;:7::i;:::-;:23;;;37816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38320:21:::1;38338:1;38320:9;:21::i;:::-;38255:94::o:0;42134:121::-;37835:12;:10;:12::i;:::-;37824:23;;:7;:5;:7::i;:::-;:23;;;37816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1743:1:::1;2339:7;;:19;;2331:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1743:1;2472:7;:18;;;;42204:10:::2;42196:28;;:51;42225:21;42196:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;1699:1:::1;2651:7;:22;;;;42134:121::o:0;37604:87::-;37650:7;37677:6;;;;;;;;;;;37670:13;;37604:87;:::o;40332:96::-;40374:7;40401:19;:9;:17;:19::i;:::-;40394:26;;40332:96;:::o;41035:651::-;37835:12;:10;:12::i;:::-;37824:23;;:7;:5;:7::i;:::-;:23;;;37816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1743:1:::1;2339:7;;:19;;2331:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1743:1;2472:7;:18;;;;41155:1:::2;41149:3;:7;41141:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;41226:1;41205:23;;:9;:23;;;;41197:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;41321:1;39171:2;41307:15;;;;:::i;:::-;41301:3;41286:12;;:18;;;;:::i;:::-;:36;41278:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;41421:1;39071:4;41408:14;;;;:::i;:::-;41386:19;:9;:17;:19::i;:::-;41380:3;:25;;;;:::i;:::-;:42;41372:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;41478:9;41473:206;41497:3;41493:1;:7;41473:206;;;41522:21;:9;:19;:21::i;:::-;41558:17;41578:11;:9;:11::i;:::-;41558:31;;41620:1;41604:12;;:17;;;;;;;:::i;:::-;;;;;;;;41636:31;41646:9;41657;41636;:31::i;:::-;41507:172;41502:3;;;;;:::i;:::-;;;;41473:206;;;;1699:1:::1;2651:7;:22;;;;41035:651:::0;;:::o;25597:104::-;25653:13;25686:7;25679:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25597:104;:::o;41810:316::-;37835:12;:10;:12::i;:::-;37824:23;;:7;:5;:7::i;:::-;:23;;;37816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1743:1:::1;2339:7;;:19;;2331:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1743:1;2472:7;:18;;;;41937:1:::2;41916:23;;:9;:23;;;;41908:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;42025:1;42003:21;:23;;;;:::i;:::-;41997:3;:29;41989:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;42094:9;42086:27;;:32;42114:3;42086:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;1699:1:::1;2651:7;:22;;;;41810:316:::0;;:::o;41694:108::-;41742:7;41782:12;;39171:2;41768:26;;;;:::i;:::-;41761:33;;41694:108;:::o;39633:594::-;1743:1;2339:7;;:19;;2331:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1743:1;2472:7;:18;;;;39707:8:::1;;;;;;;;;;;39699:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;39785:1;39124:2;39767:19;;;;:::i;:::-;39761:3;:25;39753:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;39904:1;39071:4;39891:14;;;;:::i;:::-;39171:2;39870:3;39856:11;:9;:11::i;:::-;:17;;;;:::i;:::-;:31;;;;:::i;:::-;39855:50;39847:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;39999:3;39987:9;;:15;;;;:::i;:::-;39973:9;:30;39965:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40050:9;40045:175;40069:3;40065:1;:7;40045:175;;;40094:21;:9;:19;:21::i;:::-;40130:17;40150:11;:9;:11::i;:::-;40130:31;;40176:32;40186:10;40198:9;40176;:32::i;:::-;40079:141;40074:3;;;;;:::i;:::-;;;;40045:175;;;;1699:1:::0;2651:7;:22;;;;39633:594;:::o;27280:295::-;27395:12;:10;:12::i;:::-;27383:24;;:8;:24;;;;27375:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27495:8;27450:18;:32;27469:12;:10;:12::i;:::-;27450:32;;;;;;;;;;;;;;;:42;27483:8;27450:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27548:8;27519:48;;27534:12;:10;:12::i;:::-;27519:48;;;27558:8;27519:48;;;;;;:::i;:::-;;;;;;;;27280:295;;:::o;40436:79::-;37835:12;:10;:12::i;:::-;37824:23;;:7;:5;:7::i;:::-;:23;;;37816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40504:3:::1;40493:8;;:14;;;;;;;;;;;;;;;;;;40436:79:::0;:::o;28543:328::-;28718:41;28737:12;:10;:12::i;:::-;28751:7;28718:18;:41::i;:::-;28710:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28824:39;28838:4;28844:2;28848:7;28857:5;28824:13;:39::i;:::-;28543:328;;;;:::o;40640:387::-;40741:13;40790:1;40780:7;:11;40772:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;40821:21;40845:10;:8;:10::i;:::-;40821:34;;40910:1;40892:7;40886:21;:25;:133;;;;;;;;;;;;;;;;;40955:7;40969:17;40978:7;40969:8;:17::i;:::-;40938:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40886:133;40866:153;;;40640:387;;;:::o;39180:89::-;;;;;;;;;;;;;;;;;;;:::o;27646:164::-;27743:4;27767:18;:25;27786:5;27767:25;;;;;;;;;;;;;;;:35;27793:8;27767:35;;;;;;;;;;;;;;;;;;;;;;;;;27760:42;;27646:164;;;;:::o;38504:192::-;37835:12;:10;:12::i;:::-;37824:23;;:7;:5;:7::i;:::-;:23;;;37816:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38613:1:::1;38593:22;;:8;:22;;;;38585:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38669:19;38679:8;38669:9;:19::i;:::-;38504:192:::0;:::o;39133:40::-;39171:2;39133:40;:::o;39305:24::-;;;;:::o;23003:157::-;23088:4;23127:25;23112:40;;;:11;:40;;;;23105:47;;23003:157;;;:::o;30381:127::-;30446:4;30498:1;30470:30;;:7;:16;30478:7;30470:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30463:37;;30381:127;;;:::o;21995:98::-;22048:7;22075:10;22068:17;;21995:98;:::o;34363:174::-;34465:2;34438:15;:24;34454:7;34438:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34521:7;34517:2;34483:46;;34492:23;34507:7;34492:14;:23::i;:::-;34483:46;;;;;;;;;;;;34363:174;;:::o;30675:348::-;30768:4;30793:16;30801:7;30793;:16::i;:::-;30785:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30869:13;30885:23;30900:7;30885:14;:23::i;:::-;30869:39;;30938:5;30927:16;;:7;:16;;;:51;;;;30971:7;30947:31;;:20;30959:7;30947:11;:20::i;:::-;:31;;;30927:51;:87;;;;30982:32;30999:5;31006:7;30982:16;:32::i;:::-;30927:87;30919:96;;;30675:348;;;;:::o;33667:578::-;33826:4;33799:31;;:23;33814:7;33799:14;:23::i;:::-;:31;;;33791:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33909:1;33895:16;;:2;:16;;;;33887:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33965:39;33986:4;33992:2;33996:7;33965:20;:39::i;:::-;34069:29;34086:1;34090:7;34069:8;:29::i;:::-;34130:1;34111:9;:15;34121:4;34111:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34159:1;34142:9;:13;34152:2;34142:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34190:2;34171:7;:16;34179:7;34171:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34229:7;34225:2;34210:27;;34219:4;34210:27;;;;;;;;;;;;33667:578;;;:::o;38704:173::-;38760:16;38779:6;;;;;;;;;;;38760:25;;38805:8;38796:6;;:17;;;;;;;;;;;;;;;;;;38860:8;38829:40;;38850:8;38829:40;;;;;;;;;;;;38749:128;38704:173;:::o;3503:114::-;3568:7;3595;:14;;;3588:21;;3503:114;;;:::o;3625:127::-;3732:1;3714:7;:14;;;:19;;;;;;;;;;;3625:127;:::o;31365:110::-;31441:26;31451:2;31455:7;31441:26;;;;;;;;;;;;:9;:26::i;:::-;31365:110;;:::o;29753:315::-;29910:28;29920:4;29926:2;29930:7;29910:9;:28::i;:::-;29957:48;29980:4;29986:2;29990:7;29999:5;29957:22;:48::i;:::-;29949:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29753:315;;;;:::o;40523:109::-;40583:13;40616:8;;;;;;;;;;;;;;;;;40609:15;;40523:109;:::o;42308:620::-;42387:27;42442:1;42436:2;:7;42432:50;;;42460:10;;;;;;;;;;;;;;;;;;;;;42432:50;42492:9;42504:2;42492:14;;42517:11;42539:69;42551:1;42546;:6;42539:69;;42569:5;;;;;:::i;:::-;;;;42594:2;42589:7;;;;;:::i;:::-;;;42539:69;;;42618:17;42648:3;42638:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42618:34;;42663:9;42675:3;42663:15;;42689:202;42702:1;42696:2;:7;42689:202;;42728:1;42724;:5;;;;:::i;:::-;42720:9;;42744:10;42786:2;42780;42775;:7;;;;:::i;:::-;42774:14;;;;:::i;:::-;42769:2;:19;;;;:::i;:::-;42758:2;:31;;;;:::i;:::-;42744:46;;42805:9;42824:4;42817:12;;42805:24;;42854:2;42844:4;42849:1;42844:7;;;;;;;;:::i;:::-;;;;;:12;;;;;;;;;;;42877:2;42871:8;;;;;:::i;:::-;;;42705:186;;42689:202;;;42915:4;42901:19;;;;;;42308:620;;;;:::o;36477:126::-;;;;:::o;31702:321::-;31832:18;31838:2;31842:7;31832:5;:18::i;:::-;31883:54;31914:1;31918:2;31922:7;31931:5;31883:22;:54::i;:::-;31861:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31702:321;;;:::o;35102:803::-;35257:4;35278:15;:2;:13;;;:15::i;:::-;35274:624;;;35330:2;35314:36;;;35351:12;:10;:12::i;:::-;35365:4;35371:7;35380:5;35314:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35310:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35577:1;35560:6;:13;:18;35556:272;;;35603:60;;;;;;;;;;:::i;:::-;;;;;;;;35556:272;35778:6;35772:13;35763:6;35759:2;35755:15;35748:38;35310:533;35447:45;;;35437:55;;;:6;:55;;;;35430:62;;;;;35274:624;35882:4;35875:11;;35102:803;;;;;;;:::o;32359:382::-;32453:1;32439:16;;:2;:16;;;;32431:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32512:16;32520:7;32512;:16::i;:::-;32511:17;32503:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32574:45;32603:1;32607:2;32611:7;32574:20;:45::i;:::-;32649:1;32632:9;:13;32642:2;32632:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32680:2;32661:7;:16;32669:7;32661:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32725:7;32721:2;32700:33;;32717:1;32700:33;;;;;;;;;;;;32359:382;;:::o;6928:387::-;6988:4;7196:12;7263:7;7251:20;7243:28;;7306:1;7299:4;:8;7292:15;;;6928:387;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;280:79;;:::i;:::-;249:2;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;475:87;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;617:84;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;758:86;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;912:79;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:2;;1122:79;;:::i;:::-;1081:2;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;;;;;:::o;1354:139::-;1400:5;1438:6;1425:20;1416:29;;1454:33;1481:5;1454:33;:::i;:::-;1406:87;;;;:::o;1499:329::-;1558:6;1607:2;1595:9;1586:7;1582:23;1578:32;1575:2;;;1613:79;;:::i;:::-;1575:2;1733:1;1758:53;1803:7;1794:6;1783:9;1779:22;1758:53;:::i;:::-;1748:63;;1704:117;1565:263;;;;:::o;1834:474::-;1902:6;1910;1959:2;1947:9;1938:7;1934:23;1930:32;1927:2;;;1965:79;;:::i;:::-;1927:2;2085:1;2110:53;2155:7;2146:6;2135:9;2131:22;2110:53;:::i;:::-;2100:63;;2056:117;2212:2;2238:53;2283:7;2274:6;2263:9;2259:22;2238:53;:::i;:::-;2228:63;;2183:118;1917:391;;;;;:::o;2314:619::-;2391:6;2399;2407;2456:2;2444:9;2435:7;2431:23;2427:32;2424:2;;;2462:79;;:::i;:::-;2424:2;2582:1;2607:53;2652:7;2643:6;2632:9;2628:22;2607:53;:::i;:::-;2597:63;;2553:117;2709:2;2735:53;2780:7;2771:6;2760:9;2756:22;2735:53;:::i;:::-;2725:63;;2680:118;2837:2;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2808:118;2414:519;;;;;:::o;2939:943::-;3034:6;3042;3050;3058;3107:3;3095:9;3086:7;3082:23;3078:33;3075:2;;;3114:79;;:::i;:::-;3075:2;3234:1;3259:53;3304:7;3295:6;3284:9;3280:22;3259:53;:::i;:::-;3249:63;;3205:117;3361:2;3387:53;3432:7;3423:6;3412:9;3408:22;3387:53;:::i;:::-;3377:63;;3332:118;3489:2;3515:53;3560:7;3551:6;3540:9;3536:22;3515:53;:::i;:::-;3505:63;;3460:118;3645:2;3634:9;3630:18;3617:32;3676:18;3668:6;3665:30;3662:2;;;3698:79;;:::i;:::-;3662:2;3803:62;3857:7;3848:6;3837:9;3833:22;3803:62;:::i;:::-;3793:72;;3588:287;3065:817;;;;;;;:::o;3888:468::-;3953:6;3961;4010:2;3998:9;3989:7;3985:23;3981:32;3978:2;;;4016:79;;:::i;:::-;3978:2;4136:1;4161:53;4206:7;4197:6;4186:9;4182:22;4161:53;:::i;:::-;4151:63;;4107:117;4263:2;4289:50;4331:7;4322:6;4311:9;4307:22;4289:50;:::i;:::-;4279:60;;4234:115;3968:388;;;;;:::o;4362:474::-;4430:6;4438;4487:2;4475:9;4466:7;4462:23;4458:32;4455:2;;;4493:79;;:::i;:::-;4455:2;4613:1;4638:53;4683:7;4674:6;4663:9;4659:22;4638:53;:::i;:::-;4628:63;;4584:117;4740:2;4766:53;4811:7;4802:6;4791:9;4787:22;4766:53;:::i;:::-;4756:63;;4711:118;4445:391;;;;;:::o;4842:323::-;4898:6;4947:2;4935:9;4926:7;4922:23;4918:32;4915:2;;;4953:79;;:::i;:::-;4915:2;5073:1;5098:50;5140:7;5131:6;5120:9;5116:22;5098:50;:::i;:::-;5088:60;;5044:114;4905:260;;;;:::o;5171:327::-;5229:6;5278:2;5266:9;5257:7;5253:23;5249:32;5246:2;;;5284:79;;:::i;:::-;5246:2;5404:1;5429:52;5473:7;5464:6;5453:9;5449:22;5429:52;:::i;:::-;5419:62;;5375:116;5236:262;;;;:::o;5504:349::-;5573:6;5622:2;5610:9;5601:7;5597:23;5593:32;5590:2;;;5628:79;;:::i;:::-;5590:2;5748:1;5773:63;5828:7;5819:6;5808:9;5804:22;5773:63;:::i;:::-;5763:73;;5719:127;5580:273;;;;:::o;5859:329::-;5918:6;5967:2;5955:9;5946:7;5942:23;5938:32;5935:2;;;5973:79;;:::i;:::-;5935:2;6093:1;6118:53;6163:7;6154:6;6143:9;6139:22;6118:53;:::i;:::-;6108:63;;6064:117;5925:263;;;;:::o;6194:474::-;6262:6;6270;6319:2;6307:9;6298:7;6294:23;6290:32;6287:2;;;6325:79;;:::i;:::-;6287:2;6445:1;6470:53;6515:7;6506:6;6495:9;6491:22;6470:53;:::i;:::-;6460:63;;6416:117;6572:2;6598:53;6643:7;6634:6;6623:9;6619:22;6598:53;:::i;:::-;6588:63;;6543:118;6277:391;;;;;:::o;6674:118::-;6761:24;6779:5;6761:24;:::i;:::-;6756:3;6749:37;6739:53;;:::o;6798:109::-;6879:21;6894:5;6879:21;:::i;:::-;6874:3;6867:34;6857:50;;:::o;6913:360::-;6999:3;7027:38;7059:5;7027:38;:::i;:::-;7081:70;7144:6;7139:3;7081:70;:::i;:::-;7074:77;;7160:52;7205:6;7200:3;7193:4;7186:5;7182:16;7160:52;:::i;:::-;7237:29;7259:6;7237:29;:::i;:::-;7232:3;7228:39;7221:46;;7003:270;;;;;:::o;7279:364::-;7367:3;7395:39;7428:5;7395:39;:::i;:::-;7450:71;7514:6;7509:3;7450:71;:::i;:::-;7443:78;;7530:52;7575:6;7570:3;7563:4;7556:5;7552:16;7530:52;:::i;:::-;7607:29;7629:6;7607:29;:::i;:::-;7602:3;7598:39;7591:46;;7371:272;;;;;:::o;7649:377::-;7755:3;7783:39;7816:5;7783:39;:::i;:::-;7838:89;7920:6;7915:3;7838:89;:::i;:::-;7831:96;;7936:52;7981:6;7976:3;7969:4;7962:5;7958:16;7936:52;:::i;:::-;8013:6;8008:3;8004:16;7997:23;;7759:267;;;;;:::o;8032:366::-;8174:3;8195:67;8259:2;8254:3;8195:67;:::i;:::-;8188:74;;8271:93;8360:3;8271:93;:::i;:::-;8389:2;8384:3;8380:12;8373:19;;8178:220;;;:::o;8404:366::-;8546:3;8567:67;8631:2;8626:3;8567:67;:::i;:::-;8560:74;;8643:93;8732:3;8643:93;:::i;:::-;8761:2;8756:3;8752:12;8745:19;;8550:220;;;:::o;8776:366::-;8918:3;8939:67;9003:2;8998:3;8939:67;:::i;:::-;8932:74;;9015:93;9104:3;9015:93;:::i;:::-;9133:2;9128:3;9124:12;9117:19;;8922:220;;;:::o;9148:366::-;9290:3;9311:67;9375:2;9370:3;9311:67;:::i;:::-;9304:74;;9387:93;9476:3;9387:93;:::i;:::-;9505:2;9500:3;9496:12;9489:19;;9294:220;;;:::o;9520:366::-;9662:3;9683:67;9747:2;9742:3;9683:67;:::i;:::-;9676:74;;9759:93;9848:3;9759:93;:::i;:::-;9877:2;9872:3;9868:12;9861:19;;9666:220;;;:::o;9892:366::-;10034:3;10055:67;10119:2;10114:3;10055:67;:::i;:::-;10048:74;;10131:93;10220:3;10131:93;:::i;:::-;10249:2;10244:3;10240:12;10233:19;;10038:220;;;:::o;10264:366::-;10406:3;10427:67;10491:2;10486:3;10427:67;:::i;:::-;10420:74;;10503:93;10592:3;10503:93;:::i;:::-;10621:2;10616:3;10612:12;10605:19;;10410:220;;;:::o;10636:366::-;10778:3;10799:67;10863:2;10858:3;10799:67;:::i;:::-;10792:74;;10875:93;10964:3;10875:93;:::i;:::-;10993:2;10988:3;10984:12;10977:19;;10782:220;;;:::o;11008:366::-;11150:3;11171:67;11235:2;11230:3;11171:67;:::i;:::-;11164:74;;11247:93;11336:3;11247:93;:::i;:::-;11365:2;11360:3;11356:12;11349:19;;11154:220;;;:::o;11380:366::-;11522:3;11543:67;11607:2;11602:3;11543:67;:::i;:::-;11536:74;;11619:93;11708:3;11619:93;:::i;:::-;11737:2;11732:3;11728:12;11721:19;;11526:220;;;:::o;11752:366::-;11894:3;11915:67;11979:2;11974:3;11915:67;:::i;:::-;11908:74;;11991:93;12080:3;11991:93;:::i;:::-;12109:2;12104:3;12100:12;12093:19;;11898:220;;;:::o;12124:366::-;12266:3;12287:67;12351:2;12346:3;12287:67;:::i;:::-;12280:74;;12363:93;12452:3;12363:93;:::i;:::-;12481:2;12476:3;12472:12;12465:19;;12270:220;;;:::o;12496:366::-;12638:3;12659:67;12723:2;12718:3;12659:67;:::i;:::-;12652:74;;12735:93;12824:3;12735:93;:::i;:::-;12853:2;12848:3;12844:12;12837:19;;12642:220;;;:::o;12868:366::-;13010:3;13031:67;13095:2;13090:3;13031:67;:::i;:::-;13024:74;;13107:93;13196:3;13107:93;:::i;:::-;13225:2;13220:3;13216:12;13209:19;;13014:220;;;:::o;13240:366::-;13382:3;13403:67;13467:2;13462:3;13403:67;:::i;:::-;13396:74;;13479:93;13568:3;13479:93;:::i;:::-;13597:2;13592:3;13588:12;13581:19;;13386:220;;;:::o;13612:366::-;13754:3;13775:67;13839:2;13834:3;13775:67;:::i;:::-;13768:74;;13851:93;13940:3;13851:93;:::i;:::-;13969:2;13964:3;13960:12;13953:19;;13758:220;;;:::o;13984:366::-;14126:3;14147:67;14211:2;14206:3;14147:67;:::i;:::-;14140:74;;14223:93;14312:3;14223:93;:::i;:::-;14341:2;14336:3;14332:12;14325:19;;14130:220;;;:::o;14356:366::-;14498:3;14519:67;14583:2;14578:3;14519:67;:::i;:::-;14512:74;;14595:93;14684:3;14595:93;:::i;:::-;14713:2;14708:3;14704:12;14697:19;;14502:220;;;:::o;14728:400::-;14888:3;14909:84;14991:1;14986:3;14909:84;:::i;:::-;14902:91;;15002:93;15091:3;15002:93;:::i;:::-;15120:1;15115:3;15111:11;15104:18;;14892:236;;;:::o;15134:366::-;15276:3;15297:67;15361:2;15356:3;15297:67;:::i;:::-;15290:74;;15373:93;15462:3;15373:93;:::i;:::-;15491:2;15486:3;15482:12;15475:19;;15280:220;;;:::o;15506:366::-;15648:3;15669:67;15733:2;15728:3;15669:67;:::i;:::-;15662:74;;15745:93;15834:3;15745:93;:::i;:::-;15863:2;15858:3;15854:12;15847:19;;15652:220;;;:::o;15878:366::-;16020:3;16041:67;16105:2;16100:3;16041:67;:::i;:::-;16034:74;;16117:93;16206:3;16117:93;:::i;:::-;16235:2;16230:3;16226:12;16219:19;;16024:220;;;:::o;16250:366::-;16392:3;16413:67;16477:2;16472:3;16413:67;:::i;:::-;16406:74;;16489:93;16578:3;16489:93;:::i;:::-;16607:2;16602:3;16598:12;16591:19;;16396:220;;;:::o;16622:366::-;16764:3;16785:67;16849:2;16844:3;16785:67;:::i;:::-;16778:74;;16861:93;16950:3;16861:93;:::i;:::-;16979:2;16974:3;16970:12;16963:19;;16768:220;;;:::o;16994:366::-;17136:3;17157:67;17221:2;17216:3;17157:67;:::i;:::-;17150:74;;17233:93;17322:3;17233:93;:::i;:::-;17351:2;17346:3;17342:12;17335:19;;17140:220;;;:::o;17366:366::-;17508:3;17529:67;17593:2;17588:3;17529:67;:::i;:::-;17522:74;;17605:93;17694:3;17605:93;:::i;:::-;17723:2;17718:3;17714:12;17707:19;;17512:220;;;:::o;17738:366::-;17880:3;17901:67;17965:2;17960:3;17901:67;:::i;:::-;17894:74;;17977:93;18066:3;17977:93;:::i;:::-;18095:2;18090:3;18086:12;18079:19;;17884:220;;;:::o;18110:400::-;18270:3;18291:84;18373:1;18368:3;18291:84;:::i;:::-;18284:91;;18384:93;18473:3;18384:93;:::i;:::-;18502:1;18497:3;18493:11;18486:18;;18274:236;;;:::o;18516:118::-;18603:24;18621:5;18603:24;:::i;:::-;18598:3;18591:37;18581:53;;:::o;18640:967::-;19022:3;19044:95;19135:3;19126:6;19044:95;:::i;:::-;19037:102;;19156:148;19300:3;19156:148;:::i;:::-;19149:155;;19321:95;19412:3;19403:6;19321:95;:::i;:::-;19314:102;;19433:148;19577:3;19433:148;:::i;:::-;19426:155;;19598:3;19591:10;;19026:581;;;;;:::o;19613:222::-;19706:4;19744:2;19733:9;19729:18;19721:26;;19757:71;19825:1;19814:9;19810:17;19801:6;19757:71;:::i;:::-;19711:124;;;;:::o;19841:640::-;20036:4;20074:3;20063:9;20059:19;20051:27;;20088:71;20156:1;20145:9;20141:17;20132:6;20088:71;:::i;:::-;20169:72;20237:2;20226:9;20222:18;20213:6;20169:72;:::i;:::-;20251;20319:2;20308:9;20304:18;20295:6;20251:72;:::i;:::-;20370:9;20364:4;20360:20;20355:2;20344:9;20340:18;20333:48;20398:76;20469:4;20460:6;20398:76;:::i;:::-;20390:84;;20041:440;;;;;;;:::o;20487:210::-;20574:4;20612:2;20601:9;20597:18;20589:26;;20625:65;20687:1;20676:9;20672:17;20663:6;20625:65;:::i;:::-;20579:118;;;;:::o;20703:313::-;20816:4;20854:2;20843:9;20839:18;20831:26;;20903:9;20897:4;20893:20;20889:1;20878:9;20874:17;20867:47;20931:78;21004:4;20995:6;20931:78;:::i;:::-;20923:86;;20821:195;;;;:::o;21022:419::-;21188:4;21226:2;21215:9;21211:18;21203:26;;21275:9;21269:4;21265:20;21261:1;21250:9;21246:17;21239:47;21303:131;21429:4;21303:131;:::i;:::-;21295:139;;21193:248;;;:::o;21447:419::-;21613:4;21651:2;21640:9;21636:18;21628:26;;21700:9;21694:4;21690:20;21686:1;21675:9;21671:17;21664:47;21728:131;21854:4;21728:131;:::i;:::-;21720:139;;21618:248;;;:::o;21872:419::-;22038:4;22076:2;22065:9;22061:18;22053:26;;22125:9;22119:4;22115:20;22111:1;22100:9;22096:17;22089:47;22153:131;22279:4;22153:131;:::i;:::-;22145:139;;22043:248;;;:::o;22297:419::-;22463:4;22501:2;22490:9;22486:18;22478:26;;22550:9;22544:4;22540:20;22536:1;22525:9;22521:17;22514:47;22578:131;22704:4;22578:131;:::i;:::-;22570:139;;22468:248;;;:::o;22722:419::-;22888:4;22926:2;22915:9;22911:18;22903:26;;22975:9;22969:4;22965:20;22961:1;22950:9;22946:17;22939:47;23003:131;23129:4;23003:131;:::i;:::-;22995:139;;22893:248;;;:::o;23147:419::-;23313:4;23351:2;23340:9;23336:18;23328:26;;23400:9;23394:4;23390:20;23386:1;23375:9;23371:17;23364:47;23428:131;23554:4;23428:131;:::i;:::-;23420:139;;23318:248;;;:::o;23572:419::-;23738:4;23776:2;23765:9;23761:18;23753:26;;23825:9;23819:4;23815:20;23811:1;23800:9;23796:17;23789:47;23853:131;23979:4;23853:131;:::i;:::-;23845:139;;23743:248;;;:::o;23997:419::-;24163:4;24201:2;24190:9;24186:18;24178:26;;24250:9;24244:4;24240:20;24236:1;24225:9;24221:17;24214:47;24278:131;24404:4;24278:131;:::i;:::-;24270:139;;24168:248;;;:::o;24422:419::-;24588:4;24626:2;24615:9;24611:18;24603:26;;24675:9;24669:4;24665:20;24661:1;24650:9;24646:17;24639:47;24703:131;24829:4;24703:131;:::i;:::-;24695:139;;24593:248;;;:::o;24847:419::-;25013:4;25051:2;25040:9;25036:18;25028:26;;25100:9;25094:4;25090:20;25086:1;25075:9;25071:17;25064:47;25128:131;25254:4;25128:131;:::i;:::-;25120:139;;25018:248;;;:::o;25272:419::-;25438:4;25476:2;25465:9;25461:18;25453:26;;25525:9;25519:4;25515:20;25511:1;25500:9;25496:17;25489:47;25553:131;25679:4;25553:131;:::i;:::-;25545:139;;25443:248;;;:::o;25697:419::-;25863:4;25901:2;25890:9;25886:18;25878:26;;25950:9;25944:4;25940:20;25936:1;25925:9;25921:17;25914:47;25978:131;26104:4;25978:131;:::i;:::-;25970:139;;25868:248;;;:::o;26122:419::-;26288:4;26326:2;26315:9;26311:18;26303:26;;26375:9;26369:4;26365:20;26361:1;26350:9;26346:17;26339:47;26403:131;26529:4;26403:131;:::i;:::-;26395:139;;26293:248;;;:::o;26547:419::-;26713:4;26751:2;26740:9;26736:18;26728:26;;26800:9;26794:4;26790:20;26786:1;26775:9;26771:17;26764:47;26828:131;26954:4;26828:131;:::i;:::-;26820:139;;26718:248;;;:::o;26972:419::-;27138:4;27176:2;27165:9;27161:18;27153:26;;27225:9;27219:4;27215:20;27211:1;27200:9;27196:17;27189:47;27253:131;27379:4;27253:131;:::i;:::-;27245:139;;27143:248;;;:::o;27397:419::-;27563:4;27601:2;27590:9;27586:18;27578:26;;27650:9;27644:4;27640:20;27636:1;27625:9;27621:17;27614:47;27678:131;27804:4;27678:131;:::i;:::-;27670:139;;27568:248;;;:::o;27822:419::-;27988:4;28026:2;28015:9;28011:18;28003:26;;28075:9;28069:4;28065:20;28061:1;28050:9;28046:17;28039:47;28103:131;28229:4;28103:131;:::i;:::-;28095:139;;27993:248;;;:::o;28247:419::-;28413:4;28451:2;28440:9;28436:18;28428:26;;28500:9;28494:4;28490:20;28486:1;28475:9;28471:17;28464:47;28528:131;28654:4;28528:131;:::i;:::-;28520:139;;28418:248;;;:::o;28672:419::-;28838:4;28876:2;28865:9;28861:18;28853:26;;28925:9;28919:4;28915:20;28911:1;28900:9;28896:17;28889:47;28953:131;29079:4;28953:131;:::i;:::-;28945:139;;28843:248;;;:::o;29097:419::-;29263:4;29301:2;29290:9;29286:18;29278:26;;29350:9;29344:4;29340:20;29336:1;29325:9;29321:17;29314:47;29378:131;29504:4;29378:131;:::i;:::-;29370:139;;29268:248;;;:::o;29522:419::-;29688:4;29726:2;29715:9;29711:18;29703:26;;29775:9;29769:4;29765:20;29761:1;29750:9;29746:17;29739:47;29803:131;29929:4;29803:131;:::i;:::-;29795:139;;29693:248;;;:::o;29947:419::-;30113:4;30151:2;30140:9;30136:18;30128:26;;30200:9;30194:4;30190:20;30186:1;30175:9;30171:17;30164:47;30228:131;30354:4;30228:131;:::i;:::-;30220:139;;30118:248;;;:::o;30372:419::-;30538:4;30576:2;30565:9;30561:18;30553:26;;30625:9;30619:4;30615:20;30611:1;30600:9;30596:17;30589:47;30653:131;30779:4;30653:131;:::i;:::-;30645:139;;30543:248;;;:::o;30797:419::-;30963:4;31001:2;30990:9;30986:18;30978:26;;31050:9;31044:4;31040:20;31036:1;31025:9;31021:17;31014:47;31078:131;31204:4;31078:131;:::i;:::-;31070:139;;30968:248;;;:::o;31222:419::-;31388:4;31426:2;31415:9;31411:18;31403:26;;31475:9;31469:4;31465:20;31461:1;31450:9;31446:17;31439:47;31503:131;31629:4;31503:131;:::i;:::-;31495:139;;31393:248;;;:::o;31647:419::-;31813:4;31851:2;31840:9;31836:18;31828:26;;31900:9;31894:4;31890:20;31886:1;31875:9;31871:17;31864:47;31928:131;32054:4;31928:131;:::i;:::-;31920:139;;31818:248;;;:::o;32072:222::-;32165:4;32203:2;32192:9;32188:18;32180:26;;32216:71;32284:1;32273:9;32269:17;32260:6;32216:71;:::i;:::-;32170:124;;;;:::o;32300:129::-;32334:6;32361:20;;:::i;:::-;32351:30;;32390:33;32418:4;32410:6;32390:33;:::i;:::-;32341:88;;;:::o;32435:75::-;32468:6;32501:2;32495:9;32485:19;;32475:35;:::o;32516:307::-;32577:4;32667:18;32659:6;32656:30;32653:2;;;32689:18;;:::i;:::-;32653:2;32727:29;32749:6;32727:29;:::i;:::-;32719:37;;32811:4;32805;32801:15;32793:23;;32582:241;;;:::o;32829:98::-;32880:6;32914:5;32908:12;32898:22;;32887:40;;;:::o;32933:99::-;32985:6;33019:5;33013:12;33003:22;;32992:40;;;:::o;33038:168::-;33121:11;33155:6;33150:3;33143:19;33195:4;33190:3;33186:14;33171:29;;33133:73;;;;:::o;33212:169::-;33296:11;33330:6;33325:3;33318:19;33370:4;33365:3;33361:14;33346:29;;33308:73;;;;:::o;33387:148::-;33489:11;33526:3;33511:18;;33501:34;;;;:::o;33541:305::-;33581:3;33600:20;33618:1;33600:20;:::i;:::-;33595:25;;33634:20;33652:1;33634:20;:::i;:::-;33629:25;;33788:1;33720:66;33716:74;33713:1;33710:81;33707:2;;;33794:18;;:::i;:::-;33707:2;33838:1;33835;33831:9;33824:16;;33585:261;;;;:::o;33852:237::-;33890:3;33909:18;33925:1;33909:18;:::i;:::-;33904:23;;33941:18;33957:1;33941:18;:::i;:::-;33936:23;;34031:1;34025:4;34021:12;34018:1;34015:19;34012:2;;;34037:18;;:::i;:::-;34012:2;34081:1;34078;34074:9;34067:16;;33894:195;;;;:::o;34095:185::-;34135:1;34152:20;34170:1;34152:20;:::i;:::-;34147:25;;34186:20;34204:1;34186:20;:::i;:::-;34181:25;;34225:1;34215:2;;34230:18;;:::i;:::-;34215:2;34272:1;34269;34265:9;34260:14;;34137:143;;;;:::o;34286:348::-;34326:7;34349:20;34367:1;34349:20;:::i;:::-;34344:25;;34383:20;34401:1;34383:20;:::i;:::-;34378:25;;34571:1;34503:66;34499:74;34496:1;34493:81;34488:1;34481:9;34474:17;34470:105;34467:2;;;34578:18;;:::i;:::-;34467:2;34626:1;34623;34619:9;34608:20;;34334:300;;;;:::o;34640:191::-;34680:4;34700:20;34718:1;34700:20;:::i;:::-;34695:25;;34734:20;34752:1;34734:20;:::i;:::-;34729:25;;34773:1;34770;34767:8;34764:2;;;34778:18;;:::i;:::-;34764:2;34823:1;34820;34816:9;34808:17;;34685:146;;;;:::o;34837:96::-;34874:7;34903:24;34921:5;34903:24;:::i;:::-;34892:35;;34882:51;;;:::o;34939:90::-;34973:7;35016:5;35009:13;35002:21;34991:32;;34981:48;;;:::o;35035:149::-;35071:7;35111:66;35104:5;35100:78;35089:89;;35079:105;;;:::o;35190:126::-;35227:7;35267:42;35260:5;35256:54;35245:65;;35235:81;;;:::o;35322:77::-;35359:7;35388:5;35377:16;;35367:32;;;:::o;35405:86::-;35440:7;35480:4;35473:5;35469:16;35458:27;;35448:43;;;:::o;35497:154::-;35581:6;35576:3;35571;35558:30;35643:1;35634:6;35629:3;35625:16;35618:27;35548:103;;;:::o;35657:307::-;35725:1;35735:113;35749:6;35746:1;35743:13;35735:113;;;35834:1;35829:3;35825:11;35819:18;35815:1;35810:3;35806:11;35799:39;35771:2;35768:1;35764:10;35759:15;;35735:113;;;35866:6;35863:1;35860:13;35857:2;;;35946:1;35937:6;35932:3;35928:16;35921:27;35857:2;35706:258;;;;:::o;35970:320::-;36014:6;36051:1;36045:4;36041:12;36031:22;;36098:1;36092:4;36088:12;36119:18;36109:2;;36175:4;36167:6;36163:17;36153:27;;36109:2;36237;36229:6;36226:14;36206:18;36203:38;36200:2;;;36256:18;;:::i;:::-;36200:2;36021:269;;;;:::o;36296:281::-;36379:27;36401:4;36379:27;:::i;:::-;36371:6;36367:40;36509:6;36497:10;36494:22;36473:18;36461:10;36458:34;36455:62;36452:2;;;36520:18;;:::i;:::-;36452:2;36560:10;36556:2;36549:22;36339:238;;;:::o;36583:233::-;36622:3;36645:24;36663:5;36645:24;:::i;:::-;36636:33;;36691:66;36684:5;36681:77;36678:2;;;36761:18;;:::i;:::-;36678:2;36808:1;36801:5;36797:13;36790:20;;36626:190;;;:::o;36822:180::-;36870:77;36867:1;36860:88;36967:4;36964:1;36957:15;36991:4;36988:1;36981:15;37008:180;37056:77;37053:1;37046:88;37153:4;37150:1;37143:15;37177:4;37174:1;37167:15;37194:180;37242:77;37239:1;37232:88;37339:4;37336:1;37329:15;37363:4;37360:1;37353:15;37380:180;37428:77;37425:1;37418:88;37525:4;37522:1;37515:15;37549:4;37546:1;37539:15;37566:180;37614:77;37611:1;37604:88;37711:4;37708:1;37701:15;37735:4;37732:1;37725:15;37752:117;37861:1;37858;37851:12;37875:117;37984:1;37981;37974:12;37998:117;38107:1;38104;38097:12;38121:117;38230:1;38227;38220:12;38244:102;38285:6;38336:2;38332:7;38327:2;38320:5;38316:14;38312:28;38302:38;;38292:54;;;:::o;38352:176::-;38492:28;38488:1;38480:6;38476:14;38469:52;38458:70;:::o;38534:237::-;38674:34;38670:1;38662:6;38658:14;38651:58;38743:20;38738:2;38730:6;38726:15;38719:45;38640:131;:::o;38777:225::-;38917:34;38913:1;38905:6;38901:14;38894:58;38986:8;38981:2;38973:6;38969:15;38962:33;38883:119;:::o;39008:220::-;39148:34;39144:1;39136:6;39132:14;39125:58;39217:3;39212:2;39204:6;39200:15;39193:28;39114:114;:::o;39234:178::-;39374:30;39370:1;39362:6;39358:14;39351:54;39340:72;:::o;39418:232::-;39558:34;39554:1;39546:6;39542:14;39535:58;39627:15;39622:2;39614:6;39610:15;39603:40;39524:126;:::o;39656:223::-;39796:34;39792:1;39784:6;39780:14;39773:58;39865:6;39860:2;39852:6;39848:15;39841:31;39762:117;:::o;39885:175::-;40025:27;40021:1;40013:6;40009:14;40002:51;39991:69;:::o;40066:174::-;40206:26;40202:1;40194:6;40190:14;40183:50;40172:68;:::o;40246:231::-;40386:34;40382:1;40374:6;40370:14;40363:58;40455:14;40450:2;40442:6;40438:15;40431:39;40352:125;:::o;40483:231::-;40623:34;40619:1;40611:6;40607:14;40600:58;40692:14;40687:2;40679:6;40675:15;40668:39;40589:125;:::o;40720:230::-;40860:34;40856:1;40848:6;40844:14;40837:58;40929:13;40924:2;40916:6;40912:15;40905:38;40826:124;:::o;40956:243::-;41096:34;41092:1;41084:6;41080:14;41073:58;41165:26;41160:2;41152:6;41148:15;41141:51;41062:137;:::o;41205:229::-;41345:34;41341:1;41333:6;41329:14;41322:58;41414:12;41409:2;41401:6;41397:15;41390:37;41311:123;:::o;41440:228::-;41580:34;41576:1;41568:6;41564:14;41557:58;41649:11;41644:2;41636:6;41632:15;41625:36;41546:122;:::o;41674:182::-;41814:34;41810:1;41802:6;41798:14;41791:58;41780:76;:::o;41862:172::-;42002:24;41998:1;41990:6;41986:14;41979:48;41968:66;:::o;42040:231::-;42180:34;42176:1;42168:6;42164:14;42157:58;42249:14;42244:2;42236:6;42232:15;42225:39;42146:125;:::o;42277:155::-;42417:7;42413:1;42405:6;42401:14;42394:31;42383:49;:::o;42438:221::-;42578:34;42574:1;42566:6;42562:14;42555:58;42647:4;42642:2;42634:6;42630:15;42623:29;42544:115;:::o;42665:182::-;42805:34;42801:1;42793:6;42789:14;42782:58;42771:76;:::o;42853:228::-;42993:34;42989:1;42981:6;42977:14;42970:58;43062:11;43057:2;43049:6;43045:15;43038:36;42959:122;:::o;43087:220::-;43227:34;43223:1;43215:6;43211:14;43204:58;43296:3;43291:2;43283:6;43279:15;43272:28;43193:114;:::o;43313:236::-;43453:34;43449:1;43441:6;43437:14;43430:58;43522:19;43517:2;43509:6;43505:15;43498:44;43419:130;:::o;43555:181::-;43695:33;43691:1;43683:6;43679:14;43672:57;43661:75;:::o;43742:162::-;43882:14;43878:1;43870:6;43866:14;43859:38;43848:56;:::o;43910:221::-;44050:34;44046:1;44038:6;44034:14;44027:58;44119:4;44114:2;44106:6;44102:15;44095:29;44016:115;:::o;44137:151::-;44277:3;44273:1;44265:6;44261:14;44254:27;44243:45;:::o;44294:122::-;44367:24;44385:5;44367:24;:::i;:::-;44360:5;44357:35;44347:2;;44406:1;44403;44396:12;44347:2;44337:79;:::o;44422:116::-;44492:21;44507:5;44492:21;:::i;:::-;44485:5;44482:32;44472:2;;44528:1;44525;44518:12;44472:2;44462:76;:::o;44544:120::-;44616:23;44633:5;44616:23;:::i;:::-;44609:5;44606:34;44596:2;;44654:1;44651;44644:12;44596:2;44586:78;:::o;44670:122::-;44743:24;44761:5;44743:24;:::i;:::-;44736:5;44733:35;44723:2;;44782:1;44779;44772:12;44723:2;44713:79;:::o
Swarm Source
ipfs://6120d76a30fd3197cf42b25c2dc829976fdcdce120e7ba6fc4374fe8672df620
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.