Source Code
Overview
ETH Balance
0.000999999999999968 ETH
Eth Value
$1.98 (@ $1,982.64/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 193 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Set Approval For... | 20279670 | 600 days ago | IN | 0 ETH | 0.00016483 | ||||
| Set Approval For... | 18492940 | 851 days ago | IN | 0 ETH | 0.00182941 | ||||
| Set Approval For... | 18432067 | 859 days ago | IN | 0 ETH | 0.00053946 | ||||
| Set Approval For... | 18200945 | 892 days ago | IN | 0 ETH | 0.00033062 | ||||
| Set Approval For... | 17573039 | 980 days ago | IN | 0 ETH | 0.00112153 | ||||
| Set Approval For... | 17138253 | 1041 days ago | IN | 0 ETH | 0.00158532 | ||||
| Safe Transfer Fr... | 16796393 | 1089 days ago | IN | 0 ETH | 0.00167189 | ||||
| Safe Transfer Fr... | 16796332 | 1089 days ago | IN | 0 ETH | 0.00210052 | ||||
| Set Approval For... | 16757670 | 1095 days ago | IN | 0 ETH | 0.00126308 | ||||
| Set Approval For... | 16706118 | 1102 days ago | IN | 0 ETH | 0.00099624 | ||||
| Safe Transfer Fr... | 16706086 | 1102 days ago | IN | 0 ETH | 0.00179291 | ||||
| Safe Transfer Fr... | 16702484 | 1102 days ago | IN | 0 ETH | 0.00200678 | ||||
| Safe Transfer Fr... | 16696630 | 1103 days ago | IN | 0 ETH | 0.00290192 | ||||
| Set Approval For... | 16695908 | 1103 days ago | IN | 0 ETH | 0.00125072 | ||||
| Set Approval For... | 16695450 | 1103 days ago | IN | 0 ETH | 0.00149744 | ||||
| Safe Transfer Fr... | 16598641 | 1117 days ago | IN | 0 ETH | 0.00250732 | ||||
| Set Approval For... | 16274986 | 1162 days ago | IN | 0 ETH | 0.00033049 | ||||
| Set Approval For... | 16122905 | 1183 days ago | IN | 0 ETH | 0.00062887 | ||||
| Set Approval For... | 16122895 | 1183 days ago | IN | 0 ETH | 0.0006707 | ||||
| Set Approval For... | 16122180 | 1183 days ago | IN | 0 ETH | 0.00061543 | ||||
| Safe Transfer Fr... | 16122169 | 1183 days ago | IN | 0 ETH | 0.00110874 | ||||
| Safe Transfer Fr... | 16113750 | 1185 days ago | IN | 0 ETH | 0.00114838 | ||||
| Safe Transfer Fr... | 16104888 | 1186 days ago | IN | 0 ETH | 0.00097981 | ||||
| Set Approval For... | 16049678 | 1194 days ago | IN | 0 ETH | 0.00047657 | ||||
| Safe Transfer Fr... | 16026434 | 1197 days ago | IN | 0 ETH | 0.00137915 |
Latest 10 internal transactions
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 15764834 | 1233 days ago | 30.468 ETH | ||||
| Transfer | 15764829 | 1233 days ago | 1 ETH | ||||
| Transfer | 15727891 | 1238 days ago | 1 ETH | ||||
| Transfer | 15727871 | 1238 days ago | 32 wei | ||||
| Transfer | 15677128 | 1246 days ago | 1 ETH | ||||
| Transfer | 15671143 | 1246 days ago | 1.5 ETH | ||||
| Transfer | 15666381 | 1247 days ago | 3 ETH | ||||
| Transfer | 15655391 | 1249 days ago | 3 ETH | ||||
| Transfer | 15608405 | 1255 days ago | 0.05 ETH | ||||
| Transfer | 15608401 | 1255 days ago | 0.05 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Fractpro
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-09-24
*/
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
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);
}
library Strings {
bytes16 private constant alphabet = "0123456789abcdef";
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = alphabet[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
// solhint-disable-next-line no-inline-assembly
assembly { size := extcodesize(account) }
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain`call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: value }(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.staticcall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.delegatecall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
/**
* @dev 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;
}
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);
}
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);
}
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = 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");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
interface IERC721Enumerable is IERC721 {
/**
* @dev Returns the total amount of tokens stored by the contract.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns a token ID owned by `owner` at a given `index` of its token list.
* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
/**
* @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
* Use along with {totalSupply} to enumerate all tokens.
*/
function tokenByIndex(uint256 index) external view returns (uint256);
}
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}. 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 {
// solhint-disable-next-line no-inline-assembly
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }
}
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
// Mapping from owner to list of owned token IDs
mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
// Mapping from token ID to index of the owner tokens list
mapping(uint256 => uint256) private _ownedTokensIndex;
// Array with all token ids, used for enumeration
uint256[] private _allTokens;
// Mapping from token id to position in the allTokens array
mapping(uint256 => uint256) private _allTokensIndex;
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
return interfaceId == type(IERC721Enumerable).interfaceId
|| super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
return _ownedTokens[owner][index];
}
/**
* @dev See {IERC721Enumerable-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _allTokens.length;
}
/**
* @dev See {IERC721Enumerable-tokenByIndex}.
*/
function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
return _allTokens[index];
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual override {
super._beforeTokenTransfer(from, to, tokenId);
if (from == address(0)) {
_addTokenToAllTokensEnumeration(tokenId);
} else if (from != to) {
_removeTokenFromOwnerEnumeration(from, tokenId);
}
if (to == address(0)) {
_removeTokenFromAllTokensEnumeration(tokenId);
} else if (to != from) {
_addTokenToOwnerEnumeration(to, tokenId);
}
}
/**
* @dev Private function to add a token to this extension's ownership-tracking data structures.
* @param to address representing the new owner of the given token ID
* @param tokenId uint256 ID of the token to be added to the tokens list of the given address
*/
function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
uint256 length = ERC721.balanceOf(to);
_ownedTokens[to][length] = tokenId;
_ownedTokensIndex[tokenId] = length;
}
/**
* @dev Private function to add a token to this extension's token tracking data structures.
* @param tokenId uint256 ID of the token to be added to the tokens list
*/
function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
_allTokensIndex[tokenId] = _allTokens.length;
_allTokens.push(tokenId);
}
/**
* @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
* while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
* gas optimizations e.g. when performing a transfer operation (avoiding double writes).
* This has O(1) time complexity, but alters the order of the _ownedTokens array.
* @param from address representing the previous owner of the given token ID
* @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
*/
function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
// To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
uint256 tokenIndex = _ownedTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary
if (tokenIndex != lastTokenIndex) {
uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
_ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
}
// This also deletes the contents at the last position of the array
delete _ownedTokensIndex[tokenId];
delete _ownedTokens[from][lastTokenIndex];
}
/**
* @dev Private function to remove a token from this extension's token tracking data structures.
* This has O(1) time complexity, but alters the order of the _allTokens array.
* @param tokenId uint256 ID of the token to be removed from the tokens list
*/
function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
// To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = _allTokens.length - 1;
uint256 tokenIndex = _allTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
// rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
// an 'if' statement (like in _removeTokenFromOwnerEnumeration)
uint256 lastTokenId = _allTokens[lastTokenIndex];
_allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
// This also deletes the contents at the last position of the array
delete _allTokensIndex[tokenId];
_allTokens.pop();
}
}
contract Fractpro is ERC721Enumerable, Ownable {
using Strings for uint256;
using SafeMath for uint256;
string private baseURI;
bool public isSaleStarted = true;
string public notRevealedUri;
uint256 private totalMinted;
uint256 public cost = 0.385 ether;
uint256 public maxSupply = 250;
uint256 public nftPerAddressLimit = 25;
uint256 public remainingNftForSale = 250;
bool public paused = false;
bool public revealed = true;
mapping(address => uint256) public addressMinted;
constructor(
string memory _name,
string memory _symbol,
string memory _initBaseURI,
string memory _initNotRevealedUri
) ERC721(_name, _symbol) payable{
setBaseURI(_initBaseURI);
setNotRevealedURI(_initNotRevealedUri);
}
// internal
function _baseURI() internal view virtual override returns (string memory) {
return baseURI;
}
function mintAsOwner(uint _mintAmount) public onlyOwner{
require(!paused, "the contract is paused");
require(remainingNftForSale >= _mintAmount, "Exceeds Remaining NFT for sale");
uint256 supply = totalSupply();
require(supply + _mintAmount <= maxSupply, "Exceeds maximum Originators supply");
uint256 _mintedSupply = totalMinted;
for (uint256 i = 1; i <= _mintAmount; i++) {
remainingNftForSale--;
_safeMint(msg.sender, _mintedSupply + i);
totalMinted++;
}
}
function mint(uint _mintAmount) public payable {
require(isSaleStarted,"sale is not started");
require(!paused, "the contract is paused");
require(remainingNftForSale >= _mintAmount, "Exceeds Remaining NFT for sale");
uint256 supply = totalSupply();
require(supply + _mintAmount <= maxSupply, "Exceeds maximum Originators supply");
require(msg.value >= getMintFees(_mintAmount), "Insufficient funds");
uint256 ownerMintedCount = addressMinted[msg.sender];
require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "Max NFTs per address exceeded.");
uint256 _mintedSupply = totalMinted;
for (uint256 i = 1; i <= _mintAmount; i++) {
remainingNftForSale--;
addressMinted[msg.sender]++;
_safeMint(msg.sender, _mintedSupply + i);
totalMinted++;
}
}
function multiTransfer(address[] memory _address, uint256[] memory _tokenIds) external{
for (uint256 i; i < _tokenIds.length; i++) {
safeTransferFrom(msg.sender,_address[i],_tokenIds[i]);
}
}
function Burn(uint256 tokenId) public {
address owner = ERC721.ownerOf(tokenId);
require(msg.sender == owner, "Caller is not onwer");
_burn(tokenId);
}
function walletOfOwner(address _owner) public view returns (uint256[] memory){
uint256 ownerTokenCount = balanceOf(_owner);
uint256[] memory tokenIds = new uint256[](ownerTokenCount);
for (uint256 i; i < ownerTokenCount; i++) {
tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
}
return tokenIds;
}
function getMintFees(uint _mintAmount) public view returns(uint256) {
return cost * _mintAmount;
}
function tokenURI(uint256 tokenId) public view virtual override returns (string memory){
require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token");
if(revealed == false) {
return string(abi.encodePacked(notRevealedUri, tokenId.toString()));
}
string memory currentBaseURI = _baseURI();
return string(abi.encodePacked(currentBaseURI, tokenId.toString()));
}
function setNftCost(uint price) public onlyOwner {
cost = price;
}
function setRemainingNftForSale(uint _remainingNftForSale) public onlyOwner {
remainingNftForSale = _remainingNftForSale;
}
function setNftPerAddressLimit(uint _nftPerAddressLimit) public onlyOwner {
nftPerAddressLimit = _nftPerAddressLimit;
}
function setMaxSupply(uint _maxSupply) public onlyOwner {
maxSupply = _maxSupply;
}
function startSale() public onlyOwner {
isSaleStarted = true;
}
function stopSale() public onlyOwner {
isSaleStarted = false;
}
function reveal(bool _reveal) public onlyOwner {
revealed = _reveal;
}
function setBaseURI(string memory _newBaseURI) public onlyOwner {
baseURI = _newBaseURI;
}
function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
notRevealedUri = _notRevealedURI;
}
function pause(bool _state) public onlyOwner {
paused = _state;
}
function withdraw(uint256 amount) public onlyOwner {
payable(msg.sender).transfer(amount);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMinted","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":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"getMintFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintAsOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remainingNftForSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_reveal","type":"bool"}],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setNftCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nftPerAddressLimit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_remainingNftForSale","type":"uint256"}],"name":"setRemainingNftForSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526001600c60006101000a81548160ff021916908315150217905550670557cb75ce868000600f5560fa601055601960115560fa6012556000601360006101000a81548160ff0219169083151502179055506001601360016101000a81548160ff02191690831515021790555060405162005ce838038062005ce88339818101604052810190620000959190620004a7565b83838160009081620000a89190620007e0565b508060019081620000ba9190620007e0565b5050506000620000cf6200019a60201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200017f82620001a260201b60201c565b62000190816200024660201b60201c565b505050506200094a565b600033905090565b620001b26200019a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620001d8620002ea60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000231576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002289062000928565b60405180910390fd5b80600b9081620002429190620007e0565b5050565b620002566200019a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200027c620002ea60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002d5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002cc9062000928565b60405180910390fd5b80600d9081620002e69190620007e0565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200037d8262000332565b810181811067ffffffffffffffff821117156200039f576200039e62000343565b5b80604052505050565b6000620003b462000314565b9050620003c2828262000372565b919050565b600067ffffffffffffffff821115620003e557620003e462000343565b5b620003f08262000332565b9050602081019050919050565b60005b838110156200041d57808201518184015260208101905062000400565b60008484015250505050565b6000620004406200043a84620003c7565b620003a8565b9050828152602081018484840111156200045f576200045e6200032d565b5b6200046c848285620003fd565b509392505050565b600082601f8301126200048c576200048b62000328565b5b81516200049e84826020860162000429565b91505092915050565b60008060008060808587031215620004c457620004c36200031e565b5b600085015167ffffffffffffffff811115620004e557620004e462000323565b5b620004f38782880162000474565b945050602085015167ffffffffffffffff81111562000517576200051662000323565b5b620005258782880162000474565b935050604085015167ffffffffffffffff81111562000549576200054862000323565b5b620005578782880162000474565b925050606085015167ffffffffffffffff8111156200057b576200057a62000323565b5b620005898782880162000474565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620005e857607f821691505b602082108103620005fe57620005fd620005a0565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000629565b62000674868362000629565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620006c1620006bb620006b5846200068c565b62000696565b6200068c565b9050919050565b6000819050919050565b620006dd83620006a0565b620006f5620006ec82620006c8565b84845462000636565b825550505050565b600090565b6200070c620006fd565b62000719818484620006d2565b505050565b5b8181101562000741576200073560008262000702565b6001810190506200071f565b5050565b601f82111562000790576200075a8162000604565b620007658462000619565b8101602085101562000775578190505b6200078d620007848562000619565b8301826200071e565b50505b505050565b600082821c905092915050565b6000620007b56000198460080262000795565b1980831691505092915050565b6000620007d08383620007a2565b9150826002028217905092915050565b620007eb8262000595565b67ffffffffffffffff81111562000807576200080662000343565b5b620008138254620005cf565b6200082082828562000745565b600060209050601f83116001811462000858576000841562000843578287015190505b6200084f8582620007c2565b865550620008bf565b601f198416620008688662000604565b60005b8281101562000892578489015182556001820191506020850194506020810190506200086b565b86831015620008b25784890151620008ae601f891682620007a2565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000910602083620008c7565b91506200091d82620008d8565b602082019050919050565b60006020820190508181036000830152620009438162000901565b9050919050565b61538e806200095a6000396000f3fe6080604052600436106102725760003560e01c80636f8b44b01161014f578063b88d4fde116100c1578063e36b0b371161007a578063e36b0b3714610951578063e985e9c514610968578063f2c4ce1e146109a5578063f2fde38b146109ce578063f606faea146109f7578063fa30297e14610a2057610272565b8063b88d4fde14610843578063b90306ad1461086c578063ba7d2c7614610895578063c87b56dd146108c0578063d0eb26b0146108fd578063d5abeb011461092657610272565b8063940cd05b11610113578063940cd05b1461076a57806395d89b4114610793578063a0712d68146107be578063a22cb465146107da578063b28a2c5714610803578063b66a0e5d1461082c57610272565b80636f8b44b01461069957806370a08231146106c2578063715018a6146106ff5780638a7d04d2146107165780638da5cb5b1461073f57610272565b80632e1a7d4d116101e85780634f6ccce7116101ac5780634f6ccce71461056357806351830227146105a057806355f804b3146105cb5780635c975abb146105f45780636352211e1461061f57806367f141331461065c57610272565b80632e1a7d4d1461046c5780632f745c59146104955780633b80b7d3146104d257806342842e0e146104fd578063438b63001461052657610272565b8063095ea7b31161023a578063095ea7b31461037057806313faede61461039957806315eb6503146103c457806318160ddd146103ef5780631e89d5451461041a57806323b872dd1461044357610272565b806301ffc9a71461027757806302329a29146102b457806306fdde03146102dd578063081812fc14610308578063081c8c4414610345575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613649565b610a5d565b6040516102ab9190613691565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d691906136d8565b610ad7565b005b3480156102e957600080fd5b506102f2610b70565b6040516102ff9190613795565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a91906137ed565b610c02565b60405161033c919061385b565b60405180910390f35b34801561035157600080fd5b5061035a610c87565b6040516103679190613795565b60405180910390f35b34801561037c57600080fd5b50610397600480360381019061039291906138a2565b610d15565b005b3480156103a557600080fd5b506103ae610e2c565b6040516103bb91906138f1565b60405180910390f35b3480156103d057600080fd5b506103d9610e32565b6040516103e691906138f1565b60405180910390f35b3480156103fb57600080fd5b50610404610e38565b60405161041191906138f1565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c9190613b17565b610e45565b005b34801561044f57600080fd5b5061046a60048036038101906104659190613b8f565b610ea8565b005b34801561047857600080fd5b50610493600480360381019061048e91906137ed565b610f08565b005b3480156104a157600080fd5b506104bc60048036038101906104b791906138a2565b610fce565b6040516104c991906138f1565b60405180910390f35b3480156104de57600080fd5b506104e7611073565b6040516104f49190613691565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f9190613b8f565b611086565b005b34801561053257600080fd5b5061054d60048036038101906105489190613be2565b6110a6565b60405161055a9190613ccd565b60405180910390f35b34801561056f57600080fd5b5061058a600480360381019061058591906137ed565b611154565b60405161059791906138f1565b60405180910390f35b3480156105ac57600080fd5b506105b56111c5565b6040516105c29190613691565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed9190613da4565b6111d8565b005b34801561060057600080fd5b50610609611267565b6040516106169190613691565b60405180910390f35b34801561062b57600080fd5b50610646600480360381019061064191906137ed565b61127a565b604051610653919061385b565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e91906137ed565b61132b565b60405161069091906138f1565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb91906137ed565b611342565b005b3480156106ce57600080fd5b506106e960048036038101906106e49190613be2565b6113c8565b6040516106f691906138f1565b60405180910390f35b34801561070b57600080fd5b5061071461147f565b005b34801561072257600080fd5b5061073d600480360381019061073891906137ed565b6115bc565b005b34801561074b57600080fd5b50610754611642565b604051610761919061385b565b60405180910390f35b34801561077657600080fd5b50610791600480360381019061078c91906136d8565b61166c565b005b34801561079f57600080fd5b506107a8611705565b6040516107b59190613795565b60405180910390f35b6107d860048036038101906107d391906137ed565b611797565b005b3480156107e657600080fd5b5061080160048036038101906107fc9190613ded565b611a7f565b005b34801561080f57600080fd5b5061082a600480360381019061082591906137ed565b611bff565b005b34801561083857600080fd5b50610841611ddf565b005b34801561084f57600080fd5b5061086a60048036038101906108659190613ece565b611e78565b005b34801561087857600080fd5b50610893600480360381019061088e91906137ed565b611eda565b005b3480156108a157600080fd5b506108aa611f62565b6040516108b791906138f1565b60405180910390f35b3480156108cc57600080fd5b506108e760048036038101906108e291906137ed565b611f68565b6040516108f49190613795565b60405180910390f35b34801561090957600080fd5b50610924600480360381019061091f91906137ed565b61203e565b005b34801561093257600080fd5b5061093b6120c4565b60405161094891906138f1565b60405180910390f35b34801561095d57600080fd5b506109666120ca565b005b34801561097457600080fd5b5061098f600480360381019061098a9190613f51565b612163565b60405161099c9190613691565b60405180910390f35b3480156109b157600080fd5b506109cc60048036038101906109c79190613da4565b6121f7565b005b3480156109da57600080fd5b506109f560048036038101906109f09190613be2565b612286565b005b348015610a0357600080fd5b50610a1e6004803603810190610a1991906137ed565b612431565b005b348015610a2c57600080fd5b50610a476004803603810190610a429190613be2565b6124b7565b604051610a5491906138f1565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ad05750610acf826124cf565b5b9050919050565b610adf6125b1565b73ffffffffffffffffffffffffffffffffffffffff16610afd611642565b73ffffffffffffffffffffffffffffffffffffffff1614610b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4a90613fdd565b60405180910390fd5b80601360006101000a81548160ff02191690831515021790555050565b606060008054610b7f9061402c565b80601f0160208091040260200160405190810160405280929190818152602001828054610bab9061402c565b8015610bf85780601f10610bcd57610100808354040283529160200191610bf8565b820191906000526020600020905b815481529060010190602001808311610bdb57829003601f168201915b5050505050905090565b6000610c0d826125b9565b610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c43906140cf565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610c949061402c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc09061402c565b8015610d0d5780601f10610ce257610100808354040283529160200191610d0d565b820191906000526020600020905b815481529060010190602001808311610cf057829003601f168201915b505050505081565b6000610d208261127a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8790614161565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610daf6125b1565b73ffffffffffffffffffffffffffffffffffffffff161480610dde5750610ddd81610dd86125b1565b612163565b5b610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e14906141f3565b60405180910390fd5b610e278383612625565b505050565b600f5481565b60125481565b6000600880549050905090565b60005b8151811015610ea357610e9033848381518110610e6857610e67614213565b5b6020026020010151848481518110610e8357610e82614213565b5b6020026020010151611086565b8080610e9b90614271565b915050610e48565b505050565b610eb9610eb36125b1565b826126de565b610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef9061432b565b60405180910390fd5b610f038383836127bc565b505050565b610f106125b1565b73ffffffffffffffffffffffffffffffffffffffff16610f2e611642565b73ffffffffffffffffffffffffffffffffffffffff1614610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b90613fdd565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610fca573d6000803e3d6000fd5b5050565b6000610fd9836113c8565b821061101a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611011906143bd565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600c60009054906101000a900460ff1681565b6110a183838360405180602001604052806000815250611e78565b505050565b606060006110b3836113c8565b905060008167ffffffffffffffff8111156110d1576110d0613911565b5b6040519080825280602002602001820160405280156110ff5781602001602082028036833780820191505090505b50905060005b82811015611149576111178582610fce565b82828151811061112a57611129614213565b5b602002602001018181525050808061114190614271565b915050611105565b508092505050919050565b600061115e610e38565b821061119f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111969061444f565b60405180910390fd5b600882815481106111b3576111b2614213565b5b90600052602060002001549050919050565b601360019054906101000a900460ff1681565b6111e06125b1565b73ffffffffffffffffffffffffffffffffffffffff166111fe611642565b73ffffffffffffffffffffffffffffffffffffffff1614611254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124b90613fdd565b60405180910390fd5b80600b9081611263919061461b565b5050565b601360009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611322576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113199061475f565b60405180910390fd5b80915050919050565b600081600f5461133b919061477f565b9050919050565b61134a6125b1565b73ffffffffffffffffffffffffffffffffffffffff16611368611642565b73ffffffffffffffffffffffffffffffffffffffff16146113be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b590613fdd565b60405180910390fd5b8060108190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f90614833565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114876125b1565b73ffffffffffffffffffffffffffffffffffffffff166114a5611642565b73ffffffffffffffffffffffffffffffffffffffff16146114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f290613fdd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6115c46125b1565b73ffffffffffffffffffffffffffffffffffffffff166115e2611642565b73ffffffffffffffffffffffffffffffffffffffff1614611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162f90613fdd565b60405180910390fd5b8060128190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116746125b1565b73ffffffffffffffffffffffffffffffffffffffff16611692611642565b73ffffffffffffffffffffffffffffffffffffffff16146116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116df90613fdd565b60405180910390fd5b80601360016101000a81548160ff02191690831515021790555050565b6060600180546117149061402c565b80601f01602080910402602001604051908101604052809291908181526020018280546117409061402c565b801561178d5780601f106117625761010080835404028352916020019161178d565b820191906000526020600020905b81548152906001019060200180831161177057829003601f168201915b5050505050905090565b600c60009054906101000a900460ff166117e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dd9061489f565b60405180910390fd5b601360009054906101000a900460ff1615611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d9061490b565b60405180910390fd5b80601254101561187b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187290614977565b60405180910390fd5b6000611885610e38565b905060105482826118969190614997565b11156118d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ce90614a3d565b60405180910390fd5b6118e08261132b565b341015611922576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191990614aa9565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060115483826119759190614997565b11156119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ad90614b15565b60405180910390fd5b6000600e5490506000600190505b848111611a7857601260008154809291906119de90614b35565b9190505550601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611a3390614271565b9190505550611a4d338284611a489190614997565b612a17565b600e6000815480929190611a6090614271565b91905055508080611a7090614271565b9150506119c4565b5050505050565b611a876125b1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aeb90614baa565b60405180910390fd5b8060056000611b016125b1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611bae6125b1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bf39190613691565b60405180910390a35050565b611c076125b1565b73ffffffffffffffffffffffffffffffffffffffff16611c25611642565b73ffffffffffffffffffffffffffffffffffffffff1614611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7290613fdd565b60405180910390fd5b601360009054906101000a900460ff1615611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc29061490b565b60405180910390fd5b806012541015611d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0790614977565b60405180910390fd5b6000611d1a610e38565b90506010548282611d2b9190614997565b1115611d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6390614a3d565b60405180910390fd5b6000600e5490506000600190505b838111611dd95760126000815480929190611d9490614b35565b9190505550611dae338284611da99190614997565b612a17565b600e6000815480929190611dc190614271565b91905055508080611dd190614271565b915050611d7a565b50505050565b611de76125b1565b73ffffffffffffffffffffffffffffffffffffffff16611e05611642565b73ffffffffffffffffffffffffffffffffffffffff1614611e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5290613fdd565b60405180910390fd5b6001600c60006101000a81548160ff021916908315150217905550565b611e89611e836125b1565b836126de565b611ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebf9061432b565b60405180910390fd5b611ed484848484612a35565b50505050565b6000611ee58261127a565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4c90614c16565b60405180910390fd5b611f5e82612a91565b5050565b60115481565b6060611f73826125b9565b611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa990614ca8565b60405180910390fd5b60001515601360019054906101000a900460ff16151503611fff57600d611fd883612ba2565b604051602001611fe9929190614d87565b6040516020818303038152906040529050612039565b6000612009612d02565b90508061201584612ba2565b604051602001612026929190614dab565b6040516020818303038152906040529150505b919050565b6120466125b1565b73ffffffffffffffffffffffffffffffffffffffff16612064611642565b73ffffffffffffffffffffffffffffffffffffffff16146120ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b190613fdd565b60405180910390fd5b8060118190555050565b60105481565b6120d26125b1565b73ffffffffffffffffffffffffffffffffffffffff166120f0611642565b73ffffffffffffffffffffffffffffffffffffffff1614612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d90613fdd565b60405180910390fd5b6000600c60006101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121ff6125b1565b73ffffffffffffffffffffffffffffffffffffffff1661221d611642565b73ffffffffffffffffffffffffffffffffffffffff1614612273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226a90613fdd565b60405180910390fd5b80600d9081612282919061461b565b5050565b61228e6125b1565b73ffffffffffffffffffffffffffffffffffffffff166122ac611642565b73ffffffffffffffffffffffffffffffffffffffff1614612302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f990613fdd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236890614e41565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6124396125b1565b73ffffffffffffffffffffffffffffffffffffffff16612457611642565b73ffffffffffffffffffffffffffffffffffffffff16146124ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a490613fdd565b60405180910390fd5b80600f8190555050565b60146020528060005260406000206000915090505481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061259a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806125aa57506125a982612d94565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126988361127a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006126e9826125b9565b612728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271f90614ed3565b60405180910390fd5b60006127338361127a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806127a257508373ffffffffffffffffffffffffffffffffffffffff1661278a84610c02565b73ffffffffffffffffffffffffffffffffffffffff16145b806127b357506127b28185612163565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166127dc8261127a565b73ffffffffffffffffffffffffffffffffffffffff1614612832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282990614f65565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289890614ff7565b60405180910390fd5b6128ac838383612dfe565b6128b7600082612625565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129079190615017565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461295e9190614997565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612a31828260405180602001604052806000815250612f10565b5050565b612a408484846127bc565b612a4c84848484612f6b565b612a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a82906150bd565b60405180910390fd5b50505050565b6000612a9c8261127a565b9050612aaa81600084612dfe565b612ab5600083612625565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b059190615017565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b606060008203612be9576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612cfd565b600082905060005b60008214612c1b578080612c0490614271565b915050600a82612c14919061510c565b9150612bf1565b60008167ffffffffffffffff811115612c3757612c36613911565b5b6040519080825280601f01601f191660200182016040528015612c695781602001600182028036833780820191505090505b5090505b60008514612cf657600182612c829190615017565b9150600a85612c91919061513d565b6030612c9d9190614997565b60f81b818381518110612cb357612cb2614213565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612cef919061510c565b9450612c6d565b8093505050505b919050565b6060600b8054612d119061402c565b80601f0160208091040260200160405190810160405280929190818152602001828054612d3d9061402c565b8015612d8a5780601f10612d5f57610100808354040283529160200191612d8a565b820191906000526020600020905b815481529060010190602001808311612d6d57829003601f168201915b5050505050905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612e098383836130f2565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e4b57612e46816130f7565b612e8a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612e8957612e888382613140565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ecc57612ec7816132ad565b612f0b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612f0a57612f09828261337e565b5b5b505050565b612f1a83836133fd565b612f276000848484612f6b565b612f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5d906150bd565b60405180910390fd5b505050565b6000612f8c8473ffffffffffffffffffffffffffffffffffffffff166135ca565b156130e5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fb56125b1565b8786866040518563ffffffff1660e01b8152600401612fd794939291906151c3565b6020604051808303816000875af192505050801561301357506040513d601f19601f820116820180604052508101906130109190615224565b60015b613095573d8060008114613043576040519150601f19603f3d011682016040523d82523d6000602084013e613048565b606091505b50600081510361308d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613084906150bd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130ea565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161314d846113c8565b6131579190615017565b905060006007600084815260200190815260200160002054905081811461323c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506132c19190615017565b90506000600960008481526020019081526020016000205490506000600883815481106132f1576132f0614213565b5b90600052602060002001549050806008838154811061331357613312614213565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061336257613361615251565b5b6001900381819060005260206000200160009055905550505050565b6000613389836113c8565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361346c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613463906152cc565b60405180910390fd5b613475816125b9565b156134b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ac90615338565b60405180910390fd5b6134c160008383612dfe565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135119190614997565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613626816135f1565b811461363157600080fd5b50565b6000813590506136438161361d565b92915050565b60006020828403121561365f5761365e6135e7565b5b600061366d84828501613634565b91505092915050565b60008115159050919050565b61368b81613676565b82525050565b60006020820190506136a66000830184613682565b92915050565b6136b581613676565b81146136c057600080fd5b50565b6000813590506136d2816136ac565b92915050565b6000602082840312156136ee576136ed6135e7565b5b60006136fc848285016136c3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561373f578082015181840152602081019050613724565b60008484015250505050565b6000601f19601f8301169050919050565b600061376782613705565b6137718185613710565b9350613781818560208601613721565b61378a8161374b565b840191505092915050565b600060208201905081810360008301526137af818461375c565b905092915050565b6000819050919050565b6137ca816137b7565b81146137d557600080fd5b50565b6000813590506137e7816137c1565b92915050565b600060208284031215613803576138026135e7565b5b6000613811848285016137d8565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138458261381a565b9050919050565b6138558161383a565b82525050565b6000602082019050613870600083018461384c565b92915050565b61387f8161383a565b811461388a57600080fd5b50565b60008135905061389c81613876565b92915050565b600080604083850312156138b9576138b86135e7565b5b60006138c78582860161388d565b92505060206138d8858286016137d8565b9150509250929050565b6138eb816137b7565b82525050565b600060208201905061390660008301846138e2565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6139498261374b565b810181811067ffffffffffffffff8211171561396857613967613911565b5b80604052505050565b600061397b6135dd565b90506139878282613940565b919050565b600067ffffffffffffffff8211156139a7576139a6613911565b5b602082029050602081019050919050565b600080fd5b60006139d06139cb8461398c565b613971565b905080838252602082019050602084028301858111156139f3576139f26139b8565b5b835b81811015613a1c5780613a08888261388d565b8452602084019350506020810190506139f5565b5050509392505050565b600082601f830112613a3b57613a3a61390c565b5b8135613a4b8482602086016139bd565b91505092915050565b600067ffffffffffffffff821115613a6f57613a6e613911565b5b602082029050602081019050919050565b6000613a93613a8e84613a54565b613971565b90508083825260208201905060208402830185811115613ab657613ab56139b8565b5b835b81811015613adf5780613acb88826137d8565b845260208401935050602081019050613ab8565b5050509392505050565b600082601f830112613afe57613afd61390c565b5b8135613b0e848260208601613a80565b91505092915050565b60008060408385031215613b2e57613b2d6135e7565b5b600083013567ffffffffffffffff811115613b4c57613b4b6135ec565b5b613b5885828601613a26565b925050602083013567ffffffffffffffff811115613b7957613b786135ec565b5b613b8585828601613ae9565b9150509250929050565b600080600060608486031215613ba857613ba76135e7565b5b6000613bb68682870161388d565b9350506020613bc78682870161388d565b9250506040613bd8868287016137d8565b9150509250925092565b600060208284031215613bf857613bf76135e7565b5b6000613c068482850161388d565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613c44816137b7565b82525050565b6000613c568383613c3b565b60208301905092915050565b6000602082019050919050565b6000613c7a82613c0f565b613c848185613c1a565b9350613c8f83613c2b565b8060005b83811015613cc0578151613ca78882613c4a565b9750613cb283613c62565b925050600181019050613c93565b5085935050505092915050565b60006020820190508181036000830152613ce78184613c6f565b905092915050565b600080fd5b600067ffffffffffffffff821115613d0f57613d0e613911565b5b613d188261374b565b9050602081019050919050565b82818337600083830152505050565b6000613d47613d4284613cf4565b613971565b905082815260208101848484011115613d6357613d62613cef565b5b613d6e848285613d25565b509392505050565b600082601f830112613d8b57613d8a61390c565b5b8135613d9b848260208601613d34565b91505092915050565b600060208284031215613dba57613db96135e7565b5b600082013567ffffffffffffffff811115613dd857613dd76135ec565b5b613de484828501613d76565b91505092915050565b60008060408385031215613e0457613e036135e7565b5b6000613e128582860161388d565b9250506020613e23858286016136c3565b9150509250929050565b600067ffffffffffffffff821115613e4857613e47613911565b5b613e518261374b565b9050602081019050919050565b6000613e71613e6c84613e2d565b613971565b905082815260208101848484011115613e8d57613e8c613cef565b5b613e98848285613d25565b509392505050565b600082601f830112613eb557613eb461390c565b5b8135613ec5848260208601613e5e565b91505092915050565b60008060008060808587031215613ee857613ee76135e7565b5b6000613ef68782880161388d565b9450506020613f078782880161388d565b9350506040613f18878288016137d8565b925050606085013567ffffffffffffffff811115613f3957613f386135ec565b5b613f4587828801613ea0565b91505092959194509250565b60008060408385031215613f6857613f676135e7565b5b6000613f768582860161388d565b9250506020613f878582860161388d565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613fc7602083613710565b9150613fd282613f91565b602082019050919050565b60006020820190508181036000830152613ff681613fba565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061404457607f821691505b60208210810361405757614056613ffd565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006140b9602c83613710565b91506140c48261405d565b604082019050919050565b600060208201905081810360008301526140e8816140ac565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061414b602183613710565b9150614156826140ef565b604082019050919050565b6000602082019050818103600083015261417a8161413e565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006141dd603883613710565b91506141e882614181565b604082019050919050565b6000602082019050818103600083015261420c816141d0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061427c826137b7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036142ae576142ad614242565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000614315603183613710565b9150614320826142b9565b604082019050919050565b6000602082019050818103600083015261434481614308565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b60006143a7602b83613710565b91506143b28261434b565b604082019050919050565b600060208201905081810360008301526143d68161439a565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614439602c83613710565b9150614444826143dd565b604082019050919050565b600060208201905081810360008301526144688161442c565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026144d17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614494565b6144db8683614494565b95508019841693508086168417925050509392505050565b6000819050919050565b600061451861451361450e846137b7565b6144f3565b6137b7565b9050919050565b6000819050919050565b614532836144fd565b61454661453e8261451f565b8484546144a1565b825550505050565b600090565b61455b61454e565b614566818484614529565b505050565b5b8181101561458a5761457f600082614553565b60018101905061456c565b5050565b601f8211156145cf576145a08161446f565b6145a984614484565b810160208510156145b8578190505b6145cc6145c485614484565b83018261456b565b50505b505050565b600082821c905092915050565b60006145f2600019846008026145d4565b1980831691505092915050565b600061460b83836145e1565b9150826002028217905092915050565b61462482613705565b67ffffffffffffffff81111561463d5761463c613911565b5b614647825461402c565b61465282828561458e565b600060209050601f8311600181146146855760008415614673578287015190505b61467d85826145ff565b8655506146e5565b601f1984166146938661446f565b60005b828110156146bb57848901518255600182019150602085019450602081019050614696565b868310156146d857848901516146d4601f8916826145e1565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614749602983613710565b9150614754826146ed565b604082019050919050565b600060208201905081810360008301526147788161473c565b9050919050565b600061478a826137b7565b9150614795836137b7565b92508282026147a3816137b7565b915082820484148315176147ba576147b9614242565b5b5092915050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061481d602a83613710565b9150614828826147c1565b604082019050919050565b6000602082019050818103600083015261484c81614810565b9050919050565b7f73616c65206973206e6f74207374617274656400000000000000000000000000600082015250565b6000614889601383613710565b915061489482614853565b602082019050919050565b600060208201905081810360008301526148b88161487c565b9050919050565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b60006148f5601683613710565b9150614900826148bf565b602082019050919050565b60006020820190508181036000830152614924816148e8565b9050919050565b7f457863656564732052656d61696e696e67204e465420666f722073616c650000600082015250565b6000614961601e83613710565b915061496c8261492b565b602082019050919050565b6000602082019050818103600083015261499081614954565b9050919050565b60006149a2826137b7565b91506149ad836137b7565b92508282019050808211156149c5576149c4614242565b5b92915050565b7f45786365656473206d6178696d756d204f726967696e61746f7273207375707060008201527f6c79000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a27602283613710565b9150614a32826149cb565b604082019050919050565b60006020820190508181036000830152614a5681614a1a565b9050919050565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b6000614a93601283613710565b9150614a9e82614a5d565b602082019050919050565b60006020820190508181036000830152614ac281614a86565b9050919050565b7f4d6178204e4654732070657220616464726573732065786365656465642e0000600082015250565b6000614aff601e83613710565b9150614b0a82614ac9565b602082019050919050565b60006020820190508181036000830152614b2e81614af2565b9050919050565b6000614b40826137b7565b915060008203614b5357614b52614242565b5b600182039050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614b94601983613710565b9150614b9f82614b5e565b602082019050919050565b60006020820190508181036000830152614bc381614b87565b9050919050565b7f43616c6c6572206973206e6f74206f6e77657200000000000000000000000000600082015250565b6000614c00601383613710565b9150614c0b82614bca565b602082019050919050565b60006020820190508181036000830152614c2f81614bf3565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614c92602f83613710565b9150614c9d82614c36565b604082019050919050565b60006020820190508181036000830152614cc181614c85565b9050919050565b600081905092915050565b60008154614ce08161402c565b614cea8186614cc8565b94506001821660008114614d055760018114614d1a57614d4d565b60ff1983168652811515820286019350614d4d565b614d238561446f565b60005b83811015614d4557815481890152600182019150602081019050614d26565b838801955050505b50505092915050565b6000614d6182613705565b614d6b8185614cc8565b9350614d7b818560208601613721565b80840191505092915050565b6000614d938285614cd3565b9150614d9f8284614d56565b91508190509392505050565b6000614db78285614d56565b9150614dc38284614d56565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e2b602683613710565b9150614e3682614dcf565b604082019050919050565b60006020820190508181036000830152614e5a81614e1e565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614ebd602c83613710565b9150614ec882614e61565b604082019050919050565b60006020820190508181036000830152614eec81614eb0565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614f4f602983613710565b9150614f5a82614ef3565b604082019050919050565b60006020820190508181036000830152614f7e81614f42565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614fe1602483613710565b9150614fec82614f85565b604082019050919050565b6000602082019050818103600083015261501081614fd4565b9050919050565b6000615022826137b7565b915061502d836137b7565b925082820390508181111561504557615044614242565b5b92915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006150a7603283613710565b91506150b28261504b565b604082019050919050565b600060208201905081810360008301526150d68161509a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615117826137b7565b9150615122836137b7565b925082615132576151316150dd565b5b828204905092915050565b6000615148826137b7565b9150615153836137b7565b925082615163576151626150dd565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006151958261516e565b61519f8185615179565b93506151af818560208601613721565b6151b88161374b565b840191505092915050565b60006080820190506151d8600083018761384c565b6151e5602083018661384c565b6151f260408301856138e2565b8181036060830152615204818461518a565b905095945050505050565b60008151905061521e8161361d565b92915050565b60006020828403121561523a576152396135e7565b5b60006152488482850161520f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006152b6602083613710565b91506152c182615280565b602082019050919050565b600060208201905081810360008301526152e5816152a9565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615322601c83613710565b915061532d826152ec565b602082019050919050565b6000602082019050818103600083015261535181615315565b905091905056fea2646970667358221220ef8b84805a64a2894e97c99b42a329e848fe3a753ec633ceed7a2a704ef0218c64736f6c63430008110033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000008467261637470726f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008467261637470726f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e68747470733a2f2f6d696e742e66726163742e70726f2f6d657461646174612f6e66742f72657665616c3f69643d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003168747470733a2f2f6d696e742e66726163742e70726f2f6d657461646174612f6e66742f6e6f7472657665616c3f69643d000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102725760003560e01c80636f8b44b01161014f578063b88d4fde116100c1578063e36b0b371161007a578063e36b0b3714610951578063e985e9c514610968578063f2c4ce1e146109a5578063f2fde38b146109ce578063f606faea146109f7578063fa30297e14610a2057610272565b8063b88d4fde14610843578063b90306ad1461086c578063ba7d2c7614610895578063c87b56dd146108c0578063d0eb26b0146108fd578063d5abeb011461092657610272565b8063940cd05b11610113578063940cd05b1461076a57806395d89b4114610793578063a0712d68146107be578063a22cb465146107da578063b28a2c5714610803578063b66a0e5d1461082c57610272565b80636f8b44b01461069957806370a08231146106c2578063715018a6146106ff5780638a7d04d2146107165780638da5cb5b1461073f57610272565b80632e1a7d4d116101e85780634f6ccce7116101ac5780634f6ccce71461056357806351830227146105a057806355f804b3146105cb5780635c975abb146105f45780636352211e1461061f57806367f141331461065c57610272565b80632e1a7d4d1461046c5780632f745c59146104955780633b80b7d3146104d257806342842e0e146104fd578063438b63001461052657610272565b8063095ea7b31161023a578063095ea7b31461037057806313faede61461039957806315eb6503146103c457806318160ddd146103ef5780631e89d5451461041a57806323b872dd1461044357610272565b806301ffc9a71461027757806302329a29146102b457806306fdde03146102dd578063081812fc14610308578063081c8c4414610345575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613649565b610a5d565b6040516102ab9190613691565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d691906136d8565b610ad7565b005b3480156102e957600080fd5b506102f2610b70565b6040516102ff9190613795565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a91906137ed565b610c02565b60405161033c919061385b565b60405180910390f35b34801561035157600080fd5b5061035a610c87565b6040516103679190613795565b60405180910390f35b34801561037c57600080fd5b50610397600480360381019061039291906138a2565b610d15565b005b3480156103a557600080fd5b506103ae610e2c565b6040516103bb91906138f1565b60405180910390f35b3480156103d057600080fd5b506103d9610e32565b6040516103e691906138f1565b60405180910390f35b3480156103fb57600080fd5b50610404610e38565b60405161041191906138f1565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c9190613b17565b610e45565b005b34801561044f57600080fd5b5061046a60048036038101906104659190613b8f565b610ea8565b005b34801561047857600080fd5b50610493600480360381019061048e91906137ed565b610f08565b005b3480156104a157600080fd5b506104bc60048036038101906104b791906138a2565b610fce565b6040516104c991906138f1565b60405180910390f35b3480156104de57600080fd5b506104e7611073565b6040516104f49190613691565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f9190613b8f565b611086565b005b34801561053257600080fd5b5061054d60048036038101906105489190613be2565b6110a6565b60405161055a9190613ccd565b60405180910390f35b34801561056f57600080fd5b5061058a600480360381019061058591906137ed565b611154565b60405161059791906138f1565b60405180910390f35b3480156105ac57600080fd5b506105b56111c5565b6040516105c29190613691565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed9190613da4565b6111d8565b005b34801561060057600080fd5b50610609611267565b6040516106169190613691565b60405180910390f35b34801561062b57600080fd5b50610646600480360381019061064191906137ed565b61127a565b604051610653919061385b565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e91906137ed565b61132b565b60405161069091906138f1565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb91906137ed565b611342565b005b3480156106ce57600080fd5b506106e960048036038101906106e49190613be2565b6113c8565b6040516106f691906138f1565b60405180910390f35b34801561070b57600080fd5b5061071461147f565b005b34801561072257600080fd5b5061073d600480360381019061073891906137ed565b6115bc565b005b34801561074b57600080fd5b50610754611642565b604051610761919061385b565b60405180910390f35b34801561077657600080fd5b50610791600480360381019061078c91906136d8565b61166c565b005b34801561079f57600080fd5b506107a8611705565b6040516107b59190613795565b60405180910390f35b6107d860048036038101906107d391906137ed565b611797565b005b3480156107e657600080fd5b5061080160048036038101906107fc9190613ded565b611a7f565b005b34801561080f57600080fd5b5061082a600480360381019061082591906137ed565b611bff565b005b34801561083857600080fd5b50610841611ddf565b005b34801561084f57600080fd5b5061086a60048036038101906108659190613ece565b611e78565b005b34801561087857600080fd5b50610893600480360381019061088e91906137ed565b611eda565b005b3480156108a157600080fd5b506108aa611f62565b6040516108b791906138f1565b60405180910390f35b3480156108cc57600080fd5b506108e760048036038101906108e291906137ed565b611f68565b6040516108f49190613795565b60405180910390f35b34801561090957600080fd5b50610924600480360381019061091f91906137ed565b61203e565b005b34801561093257600080fd5b5061093b6120c4565b60405161094891906138f1565b60405180910390f35b34801561095d57600080fd5b506109666120ca565b005b34801561097457600080fd5b5061098f600480360381019061098a9190613f51565b612163565b60405161099c9190613691565b60405180910390f35b3480156109b157600080fd5b506109cc60048036038101906109c79190613da4565b6121f7565b005b3480156109da57600080fd5b506109f560048036038101906109f09190613be2565b612286565b005b348015610a0357600080fd5b50610a1e6004803603810190610a1991906137ed565b612431565b005b348015610a2c57600080fd5b50610a476004803603810190610a429190613be2565b6124b7565b604051610a5491906138f1565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ad05750610acf826124cf565b5b9050919050565b610adf6125b1565b73ffffffffffffffffffffffffffffffffffffffff16610afd611642565b73ffffffffffffffffffffffffffffffffffffffff1614610b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4a90613fdd565b60405180910390fd5b80601360006101000a81548160ff02191690831515021790555050565b606060008054610b7f9061402c565b80601f0160208091040260200160405190810160405280929190818152602001828054610bab9061402c565b8015610bf85780601f10610bcd57610100808354040283529160200191610bf8565b820191906000526020600020905b815481529060010190602001808311610bdb57829003601f168201915b5050505050905090565b6000610c0d826125b9565b610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c43906140cf565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610c949061402c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc09061402c565b8015610d0d5780601f10610ce257610100808354040283529160200191610d0d565b820191906000526020600020905b815481529060010190602001808311610cf057829003601f168201915b505050505081565b6000610d208261127a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8790614161565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610daf6125b1565b73ffffffffffffffffffffffffffffffffffffffff161480610dde5750610ddd81610dd86125b1565b612163565b5b610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e14906141f3565b60405180910390fd5b610e278383612625565b505050565b600f5481565b60125481565b6000600880549050905090565b60005b8151811015610ea357610e9033848381518110610e6857610e67614213565b5b6020026020010151848481518110610e8357610e82614213565b5b6020026020010151611086565b8080610e9b90614271565b915050610e48565b505050565b610eb9610eb36125b1565b826126de565b610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef9061432b565b60405180910390fd5b610f038383836127bc565b505050565b610f106125b1565b73ffffffffffffffffffffffffffffffffffffffff16610f2e611642565b73ffffffffffffffffffffffffffffffffffffffff1614610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b90613fdd565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610fca573d6000803e3d6000fd5b5050565b6000610fd9836113c8565b821061101a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611011906143bd565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600c60009054906101000a900460ff1681565b6110a183838360405180602001604052806000815250611e78565b505050565b606060006110b3836113c8565b905060008167ffffffffffffffff8111156110d1576110d0613911565b5b6040519080825280602002602001820160405280156110ff5781602001602082028036833780820191505090505b50905060005b82811015611149576111178582610fce565b82828151811061112a57611129614213565b5b602002602001018181525050808061114190614271565b915050611105565b508092505050919050565b600061115e610e38565b821061119f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111969061444f565b60405180910390fd5b600882815481106111b3576111b2614213565b5b90600052602060002001549050919050565b601360019054906101000a900460ff1681565b6111e06125b1565b73ffffffffffffffffffffffffffffffffffffffff166111fe611642565b73ffffffffffffffffffffffffffffffffffffffff1614611254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124b90613fdd565b60405180910390fd5b80600b9081611263919061461b565b5050565b601360009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611322576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113199061475f565b60405180910390fd5b80915050919050565b600081600f5461133b919061477f565b9050919050565b61134a6125b1565b73ffffffffffffffffffffffffffffffffffffffff16611368611642565b73ffffffffffffffffffffffffffffffffffffffff16146113be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b590613fdd565b60405180910390fd5b8060108190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f90614833565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114876125b1565b73ffffffffffffffffffffffffffffffffffffffff166114a5611642565b73ffffffffffffffffffffffffffffffffffffffff16146114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f290613fdd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6115c46125b1565b73ffffffffffffffffffffffffffffffffffffffff166115e2611642565b73ffffffffffffffffffffffffffffffffffffffff1614611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162f90613fdd565b60405180910390fd5b8060128190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116746125b1565b73ffffffffffffffffffffffffffffffffffffffff16611692611642565b73ffffffffffffffffffffffffffffffffffffffff16146116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116df90613fdd565b60405180910390fd5b80601360016101000a81548160ff02191690831515021790555050565b6060600180546117149061402c565b80601f01602080910402602001604051908101604052809291908181526020018280546117409061402c565b801561178d5780601f106117625761010080835404028352916020019161178d565b820191906000526020600020905b81548152906001019060200180831161177057829003601f168201915b5050505050905090565b600c60009054906101000a900460ff166117e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dd9061489f565b60405180910390fd5b601360009054906101000a900460ff1615611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d9061490b565b60405180910390fd5b80601254101561187b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187290614977565b60405180910390fd5b6000611885610e38565b905060105482826118969190614997565b11156118d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ce90614a3d565b60405180910390fd5b6118e08261132b565b341015611922576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191990614aa9565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060115483826119759190614997565b11156119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ad90614b15565b60405180910390fd5b6000600e5490506000600190505b848111611a7857601260008154809291906119de90614b35565b9190505550601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611a3390614271565b9190505550611a4d338284611a489190614997565b612a17565b600e6000815480929190611a6090614271565b91905055508080611a7090614271565b9150506119c4565b5050505050565b611a876125b1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aeb90614baa565b60405180910390fd5b8060056000611b016125b1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611bae6125b1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bf39190613691565b60405180910390a35050565b611c076125b1565b73ffffffffffffffffffffffffffffffffffffffff16611c25611642565b73ffffffffffffffffffffffffffffffffffffffff1614611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7290613fdd565b60405180910390fd5b601360009054906101000a900460ff1615611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc29061490b565b60405180910390fd5b806012541015611d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0790614977565b60405180910390fd5b6000611d1a610e38565b90506010548282611d2b9190614997565b1115611d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6390614a3d565b60405180910390fd5b6000600e5490506000600190505b838111611dd95760126000815480929190611d9490614b35565b9190505550611dae338284611da99190614997565b612a17565b600e6000815480929190611dc190614271565b91905055508080611dd190614271565b915050611d7a565b50505050565b611de76125b1565b73ffffffffffffffffffffffffffffffffffffffff16611e05611642565b73ffffffffffffffffffffffffffffffffffffffff1614611e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5290613fdd565b60405180910390fd5b6001600c60006101000a81548160ff021916908315150217905550565b611e89611e836125b1565b836126de565b611ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebf9061432b565b60405180910390fd5b611ed484848484612a35565b50505050565b6000611ee58261127a565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4c90614c16565b60405180910390fd5b611f5e82612a91565b5050565b60115481565b6060611f73826125b9565b611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa990614ca8565b60405180910390fd5b60001515601360019054906101000a900460ff16151503611fff57600d611fd883612ba2565b604051602001611fe9929190614d87565b6040516020818303038152906040529050612039565b6000612009612d02565b90508061201584612ba2565b604051602001612026929190614dab565b6040516020818303038152906040529150505b919050565b6120466125b1565b73ffffffffffffffffffffffffffffffffffffffff16612064611642565b73ffffffffffffffffffffffffffffffffffffffff16146120ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b190613fdd565b60405180910390fd5b8060118190555050565b60105481565b6120d26125b1565b73ffffffffffffffffffffffffffffffffffffffff166120f0611642565b73ffffffffffffffffffffffffffffffffffffffff1614612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d90613fdd565b60405180910390fd5b6000600c60006101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121ff6125b1565b73ffffffffffffffffffffffffffffffffffffffff1661221d611642565b73ffffffffffffffffffffffffffffffffffffffff1614612273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226a90613fdd565b60405180910390fd5b80600d9081612282919061461b565b5050565b61228e6125b1565b73ffffffffffffffffffffffffffffffffffffffff166122ac611642565b73ffffffffffffffffffffffffffffffffffffffff1614612302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f990613fdd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236890614e41565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6124396125b1565b73ffffffffffffffffffffffffffffffffffffffff16612457611642565b73ffffffffffffffffffffffffffffffffffffffff16146124ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a490613fdd565b60405180910390fd5b80600f8190555050565b60146020528060005260406000206000915090505481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061259a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806125aa57506125a982612d94565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126988361127a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006126e9826125b9565b612728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271f90614ed3565b60405180910390fd5b60006127338361127a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806127a257508373ffffffffffffffffffffffffffffffffffffffff1661278a84610c02565b73ffffffffffffffffffffffffffffffffffffffff16145b806127b357506127b28185612163565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166127dc8261127a565b73ffffffffffffffffffffffffffffffffffffffff1614612832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282990614f65565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289890614ff7565b60405180910390fd5b6128ac838383612dfe565b6128b7600082612625565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129079190615017565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461295e9190614997565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612a31828260405180602001604052806000815250612f10565b5050565b612a408484846127bc565b612a4c84848484612f6b565b612a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a82906150bd565b60405180910390fd5b50505050565b6000612a9c8261127a565b9050612aaa81600084612dfe565b612ab5600083612625565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b059190615017565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b606060008203612be9576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612cfd565b600082905060005b60008214612c1b578080612c0490614271565b915050600a82612c14919061510c565b9150612bf1565b60008167ffffffffffffffff811115612c3757612c36613911565b5b6040519080825280601f01601f191660200182016040528015612c695781602001600182028036833780820191505090505b5090505b60008514612cf657600182612c829190615017565b9150600a85612c91919061513d565b6030612c9d9190614997565b60f81b818381518110612cb357612cb2614213565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612cef919061510c565b9450612c6d565b8093505050505b919050565b6060600b8054612d119061402c565b80601f0160208091040260200160405190810160405280929190818152602001828054612d3d9061402c565b8015612d8a5780601f10612d5f57610100808354040283529160200191612d8a565b820191906000526020600020905b815481529060010190602001808311612d6d57829003601f168201915b5050505050905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612e098383836130f2565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e4b57612e46816130f7565b612e8a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612e8957612e888382613140565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ecc57612ec7816132ad565b612f0b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612f0a57612f09828261337e565b5b5b505050565b612f1a83836133fd565b612f276000848484612f6b565b612f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5d906150bd565b60405180910390fd5b505050565b6000612f8c8473ffffffffffffffffffffffffffffffffffffffff166135ca565b156130e5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fb56125b1565b8786866040518563ffffffff1660e01b8152600401612fd794939291906151c3565b6020604051808303816000875af192505050801561301357506040513d601f19601f820116820180604052508101906130109190615224565b60015b613095573d8060008114613043576040519150601f19603f3d011682016040523d82523d6000602084013e613048565b606091505b50600081510361308d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613084906150bd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130ea565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161314d846113c8565b6131579190615017565b905060006007600084815260200190815260200160002054905081811461323c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506132c19190615017565b90506000600960008481526020019081526020016000205490506000600883815481106132f1576132f0614213565b5b90600052602060002001549050806008838154811061331357613312614213565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061336257613361615251565b5b6001900381819060005260206000200160009055905550505050565b6000613389836113c8565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361346c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613463906152cc565b60405180910390fd5b613475816125b9565b156134b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ac90615338565b60405180910390fd5b6134c160008383612dfe565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135119190614997565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613626816135f1565b811461363157600080fd5b50565b6000813590506136438161361d565b92915050565b60006020828403121561365f5761365e6135e7565b5b600061366d84828501613634565b91505092915050565b60008115159050919050565b61368b81613676565b82525050565b60006020820190506136a66000830184613682565b92915050565b6136b581613676565b81146136c057600080fd5b50565b6000813590506136d2816136ac565b92915050565b6000602082840312156136ee576136ed6135e7565b5b60006136fc848285016136c3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561373f578082015181840152602081019050613724565b60008484015250505050565b6000601f19601f8301169050919050565b600061376782613705565b6137718185613710565b9350613781818560208601613721565b61378a8161374b565b840191505092915050565b600060208201905081810360008301526137af818461375c565b905092915050565b6000819050919050565b6137ca816137b7565b81146137d557600080fd5b50565b6000813590506137e7816137c1565b92915050565b600060208284031215613803576138026135e7565b5b6000613811848285016137d8565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138458261381a565b9050919050565b6138558161383a565b82525050565b6000602082019050613870600083018461384c565b92915050565b61387f8161383a565b811461388a57600080fd5b50565b60008135905061389c81613876565b92915050565b600080604083850312156138b9576138b86135e7565b5b60006138c78582860161388d565b92505060206138d8858286016137d8565b9150509250929050565b6138eb816137b7565b82525050565b600060208201905061390660008301846138e2565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6139498261374b565b810181811067ffffffffffffffff8211171561396857613967613911565b5b80604052505050565b600061397b6135dd565b90506139878282613940565b919050565b600067ffffffffffffffff8211156139a7576139a6613911565b5b602082029050602081019050919050565b600080fd5b60006139d06139cb8461398c565b613971565b905080838252602082019050602084028301858111156139f3576139f26139b8565b5b835b81811015613a1c5780613a08888261388d565b8452602084019350506020810190506139f5565b5050509392505050565b600082601f830112613a3b57613a3a61390c565b5b8135613a4b8482602086016139bd565b91505092915050565b600067ffffffffffffffff821115613a6f57613a6e613911565b5b602082029050602081019050919050565b6000613a93613a8e84613a54565b613971565b90508083825260208201905060208402830185811115613ab657613ab56139b8565b5b835b81811015613adf5780613acb88826137d8565b845260208401935050602081019050613ab8565b5050509392505050565b600082601f830112613afe57613afd61390c565b5b8135613b0e848260208601613a80565b91505092915050565b60008060408385031215613b2e57613b2d6135e7565b5b600083013567ffffffffffffffff811115613b4c57613b4b6135ec565b5b613b5885828601613a26565b925050602083013567ffffffffffffffff811115613b7957613b786135ec565b5b613b8585828601613ae9565b9150509250929050565b600080600060608486031215613ba857613ba76135e7565b5b6000613bb68682870161388d565b9350506020613bc78682870161388d565b9250506040613bd8868287016137d8565b9150509250925092565b600060208284031215613bf857613bf76135e7565b5b6000613c068482850161388d565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613c44816137b7565b82525050565b6000613c568383613c3b565b60208301905092915050565b6000602082019050919050565b6000613c7a82613c0f565b613c848185613c1a565b9350613c8f83613c2b565b8060005b83811015613cc0578151613ca78882613c4a565b9750613cb283613c62565b925050600181019050613c93565b5085935050505092915050565b60006020820190508181036000830152613ce78184613c6f565b905092915050565b600080fd5b600067ffffffffffffffff821115613d0f57613d0e613911565b5b613d188261374b565b9050602081019050919050565b82818337600083830152505050565b6000613d47613d4284613cf4565b613971565b905082815260208101848484011115613d6357613d62613cef565b5b613d6e848285613d25565b509392505050565b600082601f830112613d8b57613d8a61390c565b5b8135613d9b848260208601613d34565b91505092915050565b600060208284031215613dba57613db96135e7565b5b600082013567ffffffffffffffff811115613dd857613dd76135ec565b5b613de484828501613d76565b91505092915050565b60008060408385031215613e0457613e036135e7565b5b6000613e128582860161388d565b9250506020613e23858286016136c3565b9150509250929050565b600067ffffffffffffffff821115613e4857613e47613911565b5b613e518261374b565b9050602081019050919050565b6000613e71613e6c84613e2d565b613971565b905082815260208101848484011115613e8d57613e8c613cef565b5b613e98848285613d25565b509392505050565b600082601f830112613eb557613eb461390c565b5b8135613ec5848260208601613e5e565b91505092915050565b60008060008060808587031215613ee857613ee76135e7565b5b6000613ef68782880161388d565b9450506020613f078782880161388d565b9350506040613f18878288016137d8565b925050606085013567ffffffffffffffff811115613f3957613f386135ec565b5b613f4587828801613ea0565b91505092959194509250565b60008060408385031215613f6857613f676135e7565b5b6000613f768582860161388d565b9250506020613f878582860161388d565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613fc7602083613710565b9150613fd282613f91565b602082019050919050565b60006020820190508181036000830152613ff681613fba565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061404457607f821691505b60208210810361405757614056613ffd565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006140b9602c83613710565b91506140c48261405d565b604082019050919050565b600060208201905081810360008301526140e8816140ac565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061414b602183613710565b9150614156826140ef565b604082019050919050565b6000602082019050818103600083015261417a8161413e565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006141dd603883613710565b91506141e882614181565b604082019050919050565b6000602082019050818103600083015261420c816141d0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061427c826137b7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036142ae576142ad614242565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000614315603183613710565b9150614320826142b9565b604082019050919050565b6000602082019050818103600083015261434481614308565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b60006143a7602b83613710565b91506143b28261434b565b604082019050919050565b600060208201905081810360008301526143d68161439a565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614439602c83613710565b9150614444826143dd565b604082019050919050565b600060208201905081810360008301526144688161442c565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026144d17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614494565b6144db8683614494565b95508019841693508086168417925050509392505050565b6000819050919050565b600061451861451361450e846137b7565b6144f3565b6137b7565b9050919050565b6000819050919050565b614532836144fd565b61454661453e8261451f565b8484546144a1565b825550505050565b600090565b61455b61454e565b614566818484614529565b505050565b5b8181101561458a5761457f600082614553565b60018101905061456c565b5050565b601f8211156145cf576145a08161446f565b6145a984614484565b810160208510156145b8578190505b6145cc6145c485614484565b83018261456b565b50505b505050565b600082821c905092915050565b60006145f2600019846008026145d4565b1980831691505092915050565b600061460b83836145e1565b9150826002028217905092915050565b61462482613705565b67ffffffffffffffff81111561463d5761463c613911565b5b614647825461402c565b61465282828561458e565b600060209050601f8311600181146146855760008415614673578287015190505b61467d85826145ff565b8655506146e5565b601f1984166146938661446f565b60005b828110156146bb57848901518255600182019150602085019450602081019050614696565b868310156146d857848901516146d4601f8916826145e1565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614749602983613710565b9150614754826146ed565b604082019050919050565b600060208201905081810360008301526147788161473c565b9050919050565b600061478a826137b7565b9150614795836137b7565b92508282026147a3816137b7565b915082820484148315176147ba576147b9614242565b5b5092915050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061481d602a83613710565b9150614828826147c1565b604082019050919050565b6000602082019050818103600083015261484c81614810565b9050919050565b7f73616c65206973206e6f74207374617274656400000000000000000000000000600082015250565b6000614889601383613710565b915061489482614853565b602082019050919050565b600060208201905081810360008301526148b88161487c565b9050919050565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b60006148f5601683613710565b9150614900826148bf565b602082019050919050565b60006020820190508181036000830152614924816148e8565b9050919050565b7f457863656564732052656d61696e696e67204e465420666f722073616c650000600082015250565b6000614961601e83613710565b915061496c8261492b565b602082019050919050565b6000602082019050818103600083015261499081614954565b9050919050565b60006149a2826137b7565b91506149ad836137b7565b92508282019050808211156149c5576149c4614242565b5b92915050565b7f45786365656473206d6178696d756d204f726967696e61746f7273207375707060008201527f6c79000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a27602283613710565b9150614a32826149cb565b604082019050919050565b60006020820190508181036000830152614a5681614a1a565b9050919050565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b6000614a93601283613710565b9150614a9e82614a5d565b602082019050919050565b60006020820190508181036000830152614ac281614a86565b9050919050565b7f4d6178204e4654732070657220616464726573732065786365656465642e0000600082015250565b6000614aff601e83613710565b9150614b0a82614ac9565b602082019050919050565b60006020820190508181036000830152614b2e81614af2565b9050919050565b6000614b40826137b7565b915060008203614b5357614b52614242565b5b600182039050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614b94601983613710565b9150614b9f82614b5e565b602082019050919050565b60006020820190508181036000830152614bc381614b87565b9050919050565b7f43616c6c6572206973206e6f74206f6e77657200000000000000000000000000600082015250565b6000614c00601383613710565b9150614c0b82614bca565b602082019050919050565b60006020820190508181036000830152614c2f81614bf3565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614c92602f83613710565b9150614c9d82614c36565b604082019050919050565b60006020820190508181036000830152614cc181614c85565b9050919050565b600081905092915050565b60008154614ce08161402c565b614cea8186614cc8565b94506001821660008114614d055760018114614d1a57614d4d565b60ff1983168652811515820286019350614d4d565b614d238561446f565b60005b83811015614d4557815481890152600182019150602081019050614d26565b838801955050505b50505092915050565b6000614d6182613705565b614d6b8185614cc8565b9350614d7b818560208601613721565b80840191505092915050565b6000614d938285614cd3565b9150614d9f8284614d56565b91508190509392505050565b6000614db78285614d56565b9150614dc38284614d56565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e2b602683613710565b9150614e3682614dcf565b604082019050919050565b60006020820190508181036000830152614e5a81614e1e565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614ebd602c83613710565b9150614ec882614e61565b604082019050919050565b60006020820190508181036000830152614eec81614eb0565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614f4f602983613710565b9150614f5a82614ef3565b604082019050919050565b60006020820190508181036000830152614f7e81614f42565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614fe1602483613710565b9150614fec82614f85565b604082019050919050565b6000602082019050818103600083015261501081614fd4565b9050919050565b6000615022826137b7565b915061502d836137b7565b925082820390508181111561504557615044614242565b5b92915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006150a7603283613710565b91506150b28261504b565b604082019050919050565b600060208201905081810360008301526150d68161509a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615117826137b7565b9150615122836137b7565b925082615132576151316150dd565b5b828204905092915050565b6000615148826137b7565b9150615153836137b7565b925082615163576151626150dd565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006151958261516e565b61519f8185615179565b93506151af818560208601613721565b6151b88161374b565b840191505092915050565b60006080820190506151d8600083018761384c565b6151e5602083018661384c565b6151f260408301856138e2565b8181036060830152615204818461518a565b905095945050505050565b60008151905061521e8161361d565b92915050565b60006020828403121561523a576152396135e7565b5b60006152488482850161520f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006152b6602083613710565b91506152c182615280565b602082019050919050565b600060208201905081810360008301526152e5816152a9565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615322601c83613710565b915061532d826152ec565b602082019050919050565b6000602082019050818103600083015261535181615315565b905091905056fea2646970667358221220ef8b84805a64a2894e97c99b42a329e848fe3a753ec633ceed7a2a704ef0218c64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000008467261637470726f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008467261637470726f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e68747470733a2f2f6d696e742e66726163742e70726f2f6d657461646174612f6e66742f72657665616c3f69643d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003168747470733a2f2f6d696e742e66726163742e70726f2f6d657461646174612f6e66742f6e6f7472657665616c3f69643d000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Fractpro
Arg [1] : _symbol (string): Fractpro
Arg [2] : _initBaseURI (string): https://mint.fract.pro/metadata/nft/reveal?id=
Arg [3] : _initNotRevealedUri (string): https://mint.fract.pro/metadata/nft/notreveal?id=
-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [5] : 467261637470726f000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [7] : 467261637470726f000000000000000000000000000000000000000000000000
Arg [8] : 000000000000000000000000000000000000000000000000000000000000002e
Arg [9] : 68747470733a2f2f6d696e742e66726163742e70726f2f6d657461646174612f
Arg [10] : 6e66742f72657665616c3f69643d000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000031
Arg [12] : 68747470733a2f2f6d696e742e66726163742e70726f2f6d657461646174612f
Arg [13] : 6e66742f6e6f7472657665616c3f69643d000000000000000000000000000000
Deployed Bytecode Sourcemap
46722:4891:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40589:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51417:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29108:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30568:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46899:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30105:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46966:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47082:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41242:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49167:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31458:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51504:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40910:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46862:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31834:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49592:329;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41432:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47160:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51185:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47129:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28802:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49927:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50838:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28532:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18913:148;;;;;;;;;;;;;:::i;:::-;;50558:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18262:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51097:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29277:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48229:930;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30861:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47642:579;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50939:73;;;;;;;;;;;;;:::i;:::-;;32056:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49402:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47039:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50047:421;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50699:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47004:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51018:73;;;;;;;;;;;;;:::i;:::-;;31227:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51289:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19216:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50476:76;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47196:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40589:237;40691:4;40730:35;40715:50;;;:11;:50;;;;:103;;;;40782:36;40806:11;40782:23;:36::i;:::-;40715:103;40708:110;;40589:237;;;:::o;51417:73::-;18493:12;:10;:12::i;:::-;18482:23;;:7;:5;:7::i;:::-;:23;;;18474:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51478:6:::1;51469;;:15;;;;;;;;;;;;;;;;;;51417:73:::0;:::o;29108:100::-;29162:13;29195:5;29188:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29108:100;:::o;30568:221::-;30644:7;30672:16;30680:7;30672;:16::i;:::-;30664:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30757:15;:24;30773:7;30757:24;;;;;;;;;;;;;;;;;;;;;30750:31;;30568:221;;;:::o;46899:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30105:397::-;30186:13;30202:23;30217:7;30202:14;:23::i;:::-;30186:39;;30250:5;30244:11;;:2;:11;;;30236:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30330:5;30314:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30339:37;30356:5;30363:12;:10;:12::i;:::-;30339:16;:37::i;:::-;30314:62;30306:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;30473:21;30482:2;30486:7;30473:8;:21::i;:::-;30175:327;30105:397;;:::o;46966:33::-;;;;:::o;47082:40::-;;;;:::o;41242:113::-;41303:7;41330:10;:17;;;;41323:24;;41242:113;:::o;49167:227::-;49269:9;49264:123;49284:9;:16;49280:1;:20;49264:123;;;49322:53;49339:10;49350:8;49359:1;49350:11;;;;;;;;:::i;:::-;;;;;;;;49362:9;49372:1;49362:12;;;;;;;;:::i;:::-;;;;;;;;49322:16;:53::i;:::-;49302:3;;;;;:::i;:::-;;;;49264:123;;;;49167:227;;:::o;31458:305::-;31619:41;31638:12;:10;:12::i;:::-;31652:7;31619:18;:41::i;:::-;31611:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31727:28;31737:4;31743:2;31747:7;31727:9;:28::i;:::-;31458:305;;;:::o;51504:106::-;18493:12;:10;:12::i;:::-;18482:23;;:7;:5;:7::i;:::-;:23;;;18474:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51574:10:::1;51566:28;;:36;51595:6;51566:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;51504:106:::0;:::o;40910:256::-;41007:7;41043:23;41060:5;41043:16;:23::i;:::-;41035:5;:31;41027:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;41132:12;:19;41145:5;41132:19;;;;;;;;;;;;;;;:26;41152:5;41132:26;;;;;;;;;;;;41125:33;;40910:256;;;;:::o;46862:32::-;;;;;;;;;;;;;:::o;31834:151::-;31938:39;31955:4;31961:2;31965:7;31938:39;;;;;;;;;;;;:16;:39::i;:::-;31834:151;;;:::o;49592:329::-;49652:16;49676:23;49702:17;49712:6;49702:9;:17::i;:::-;49676:43;;49726:25;49768:15;49754:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49726:58;;49796:9;49791:103;49811:15;49807:1;:19;49791:103;;;49856:30;49876:6;49884:1;49856:19;:30::i;:::-;49842:8;49851:1;49842:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;49828:3;;;;;:::i;:::-;;;;49791:103;;;;49907:8;49900:15;;;;49592:329;;;:::o;41432:233::-;41507:7;41543:30;:28;:30::i;:::-;41535:5;:38;41527:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41640:10;41651:5;41640:17;;;;;;;;:::i;:::-;;;;;;;;;;41633:24;;41432:233;;;:::o;47160:27::-;;;;;;;;;;;;;:::o;51185:98::-;18493:12;:10;:12::i;:::-;18482:23;;:7;:5;:7::i;:::-;:23;;;18474:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51266:11:::1;51256:7;:21;;;;;;:::i;:::-;;51185:98:::0;:::o;47129:26::-;;;;;;;;;;;;;:::o;28802:239::-;28874:7;28894:13;28910:7;:16;28918:7;28910:16;;;;;;;;;;;;;;;;;;;;;28894:32;;28962:1;28945:19;;:5;:19;;;28937:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29028:5;29021:12;;;28802:239;;;:::o;49927:110::-;49986:7;50020:11;50013:4;;:18;;;;:::i;:::-;50006:25;;49927:110;;;:::o;50838:93::-;18493:12;:10;:12::i;:::-;18482:23;;:7;:5;:7::i;:::-;:23;;;18474:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50915:10:::1;50903:9;:22;;;;50838:93:::0;:::o;28532:208::-;28604:7;28649:1;28632:19;;:5;:19;;;28624:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28716:9;:16;28726:5;28716:16;;;;;;;;;;;;;;;;28709:23;;28532:208;;;:::o;18913:148::-;18493:12;:10;:12::i;:::-;18482:23;;:7;:5;:7::i;:::-;:23;;;18474:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19020:1:::1;18983:40;;19004:6;;;;;;;;;;;18983:40;;;;;;;;;;;;19051:1;19034:6;;:19;;;;;;;;;;;;;;;;;;18913:148::o:0;50558:133::-;18493:12;:10;:12::i;:::-;18482:23;;:7;:5;:7::i;:::-;:23;;;18474:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50665:20:::1;50643:19;:42;;;;50558:133:::0;:::o;18262:87::-;18308:7;18335:6;;;;;;;;;;;18328:13;;18262:87;:::o;51097:80::-;18493:12;:10;:12::i;:::-;18482:23;;:7;:5;:7::i;:::-;:23;;;18474:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51164:7:::1;51153:8;;:18;;;;;;;;;;;;;;;;;;51097:80:::0;:::o;29277:104::-;29333:13;29366:7;29359:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29277:104;:::o;48229:930::-;48295:13;;;;;;;;;;;48287:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;48351:6;;;;;;;;;;;48350:7;48342:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;48426:11;48403:19;;:34;;48395:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;48483:14;48500:13;:11;:13::i;:::-;48483:30;;48556:9;;48541:11;48532:6;:20;;;;:::i;:::-;:33;;48524:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;48653:24;48665:11;48653;:24::i;:::-;48640:9;:37;;48632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48711:24;48738:13;:25;48752:10;48738:25;;;;;;;;;;;;;;;;48711:52;;48816:18;;48801:11;48782:16;:30;;;;:::i;:::-;:52;;48774:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;48880:21;48904:11;;48880:35;;48931:9;48943:1;48931:13;;48926:216;48951:11;48946:1;:16;48926:216;;48984:19;;:21;;;;;;;;;:::i;:::-;;;;;;49020:13;:25;49034:10;49020:25;;;;;;;;;;;;;;;;:27;;;;;;;;;:::i;:::-;;;;;;49062:40;49072:10;49100:1;49084:13;:17;;;;:::i;:::-;49062:9;:40::i;:::-;49117:11;;:13;;;;;;;;;:::i;:::-;;;;;;48964:3;;;;;:::i;:::-;;;;48926:216;;;;48276:883;;;48229:930;:::o;30861:295::-;30976:12;:10;:12::i;:::-;30964:24;;:8;:24;;;30956:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31076:8;31031:18;:32;31050:12;:10;:12::i;:::-;31031:32;;;;;;;;;;;;;;;:42;31064:8;31031:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;31129:8;31100:48;;31115:12;:10;:12::i;:::-;31100:48;;;31139:8;31100:48;;;;;;:::i;:::-;;;;;;;;30861:295;;:::o;47642:579::-;18493:12;:10;:12::i;:::-;18482:23;;:7;:5;:7::i;:::-;:23;;;18474:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47728:6:::1;;;;;;;;;;;47727:7;47719:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;47803:11;47780:19;;:34;;47772:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;47860:14;47877:13;:11;:13::i;:::-;47860:30;;47933:9;;47918:11;47909:6;:20;;;;:::i;:::-;:33;;47901:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;47992:21;48016:11;;47992:35;;48043:9;48055:1;48043:13;;48038:176;48063:11;48058:1;:16;48038:176;;48097:19;;:21;;;;;;;;;:::i;:::-;;;;;;48133:40;48143:10;48171:1;48155:13;:17;;;;:::i;:::-;48133:9;:40::i;:::-;48189:11;;:13;;;;;;;;;:::i;:::-;;;;;;48076:3;;;;;:::i;:::-;;;;48038:176;;;;47698:523;;47642:579:::0;:::o;50939:73::-;18493:12;:10;:12::i;:::-;18482:23;;:7;:5;:7::i;:::-;:23;;;18474:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51002:4:::1;50986:13;;:20;;;;;;;;;;;;;;;;;;50939:73::o:0;32056:285::-;32188:41;32207:12;:10;:12::i;:::-;32221:7;32188:18;:41::i;:::-;32180:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32294:39;32308:4;32314:2;32318:7;32327:5;32294:13;:39::i;:::-;32056:285;;;;:::o;49402:184::-;49451:13;49467:23;49482:7;49467:14;:23::i;:::-;49451:39;;49524:5;49509:20;;:10;:20;;;49501:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;49564:14;49570:7;49564:5;:14::i;:::-;49440:146;49402:184;:::o;47039:38::-;;;;:::o;50047:421::-;50120:13;50155:16;50163:7;50155;:16::i;:::-;50147:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;50248:5;50236:17;;:8;;;;;;;;;;;:17;;;50233:108;;50297:14;50313:18;:7;:16;:18::i;:::-;50280:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50266:67;;;;50233:108;50347:28;50378:10;:8;:10::i;:::-;50347:41;;50426:14;50442:18;:7;:16;:18::i;:::-;50409:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50395:67;;;50047:421;;;;:::o;50699:129::-;18493:12;:10;:12::i;:::-;18482:23;;:7;:5;:7::i;:::-;:23;;;18474:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50803:19:::1;50782:18;:40;;;;50699:129:::0;:::o;47004:30::-;;;;:::o;51018:73::-;18493:12;:10;:12::i;:::-;18482:23;;:7;:5;:7::i;:::-;:23;;;18474:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51080:5:::1;51064:13;;:21;;;;;;;;;;;;;;;;;;51018:73::o:0;31227:164::-;31324:4;31348:18;:25;31367:5;31348:25;;;;;;;;;;;;;;;:35;31374:8;31348:35;;;;;;;;;;;;;;;;;;;;;;;;;31341:42;;31227:164;;;;:::o;51289:120::-;18493:12;:10;:12::i;:::-;18482:23;;:7;:5;:7::i;:::-;:23;;;18474:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51388:15:::1;51371:14;:32;;;;;;:::i;:::-;;51289:120:::0;:::o;19216:244::-;18493:12;:10;:12::i;:::-;18482:23;;:7;:5;:7::i;:::-;:23;;;18474:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19325:1:::1;19305:22;;:8;:22;;::::0;19297:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19415:8;19386:38;;19407:6;;;;;;;;;;;19386:38;;;;;;;;;;;;19444:8;19435:6;;:17;;;;;;;;;;;;;;;;;;19216:244:::0;:::o;50476:76::-;18493:12;:10;:12::i;:::-;18482:23;;:7;:5;:7::i;:::-;:23;;;18474:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50541:5:::1;50534:4;:12;;;;50476:76:::0;:::o;47196:48::-;;;;;;;;;;;;;;;;;:::o;28176:292::-;28278:4;28317:25;28302:40;;;:11;:40;;;;:105;;;;28374:33;28359:48;;;:11;:48;;;;28302:105;:158;;;;28424:36;28448:11;28424:23;:36::i;:::-;28302:158;28295:165;;28176:292;;;:::o;16906:98::-;16959:7;16986:10;16979:17;;16906:98;:::o;33808:127::-;33873:4;33925:1;33897:30;;:7;:16;33905:7;33897:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33890:37;;33808:127;;;:::o;37685:174::-;37787:2;37760:15;:24;37776:7;37760:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37843:7;37839:2;37805:46;;37814:23;37829:7;37814:14;:23::i;:::-;37805:46;;;;;;;;;;;;37685:174;;:::o;34102:348::-;34195:4;34220:16;34228:7;34220;:16::i;:::-;34212:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34296:13;34312:23;34327:7;34312:14;:23::i;:::-;34296:39;;34365:5;34354:16;;:7;:16;;;:51;;;;34398:7;34374:31;;:20;34386:7;34374:11;:20::i;:::-;:31;;;34354:51;:87;;;;34409:32;34426:5;34433:7;34409:16;:32::i;:::-;34354:87;34346:96;;;34102:348;;;;:::o;37023:544::-;37148:4;37121:31;;:23;37136:7;37121:14;:23::i;:::-;:31;;;37113:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;37231:1;37217:16;;:2;:16;;;37209:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37287:39;37308:4;37314:2;37318:7;37287:20;:39::i;:::-;37391:29;37408:1;37412:7;37391:8;:29::i;:::-;37452:1;37433:9;:15;37443:4;37433:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;37481:1;37464:9;:13;37474:2;37464:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37512:2;37493:7;:16;37501:7;37493:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37551:7;37547:2;37532:27;;37541:4;37532:27;;;;;;;;;;;;37023:544;;;:::o;34792:110::-;34868:26;34878:2;34882:7;34868:26;;;;;;;;;;;;:9;:26::i;:::-;34792:110;;:::o;33223:272::-;33337:28;33347:4;33353:2;33357:7;33337:9;:28::i;:::-;33384:48;33407:4;33413:2;33417:7;33426:5;33384:22;:48::i;:::-;33376:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;33223:272;;;;:::o;36326:360::-;36386:13;36402:23;36417:7;36402:14;:23::i;:::-;36386:39;;36438:48;36459:5;36474:1;36478:7;36438:20;:48::i;:::-;36527:29;36544:1;36548:7;36527:8;:29::i;:::-;36589:1;36569:9;:16;36579:5;36569:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;36608:7;:16;36616:7;36608:16;;;;;;;;;;;;36601:23;;;;;;;;;;;36670:7;36666:1;36642:36;;36651:5;36642:36;;;;;;;;;;;;36375:311;36326:360;:::o;717:723::-;773:13;1003:1;994:5;:10;990:53;;1021:10;;;;;;;;;;;;;;;;;;;;;990:53;1053:12;1068:5;1053:20;;1084:14;1109:78;1124:1;1116:4;:9;1109:78;;1142:8;;;;;:::i;:::-;;;;1173:2;1165:10;;;;;:::i;:::-;;;1109:78;;;1197:19;1229:6;1219:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1197:39;;1247:154;1263:1;1254:5;:10;1247:154;;1291:1;1281:11;;;;;:::i;:::-;;;1358:2;1350:5;:10;;;;:::i;:::-;1337:2;:24;;;;:::i;:::-;1324:39;;1307:6;1314;1307:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1387:2;1378:11;;;;;:::i;:::-;;;1247:154;;;1425:6;1411:21;;;;;717:723;;;;:::o;47530:102::-;47590:13;47619:7;47612:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47530:102;:::o;10450:157::-;10535:4;10574:25;10559:40;;;:11;:40;;;;10552:47;;10450:157;;;:::o;42278:555::-;42388:45;42415:4;42421:2;42425:7;42388:26;:45::i;:::-;42466:1;42450:18;;:4;:18;;;42446:187;;42485:40;42517:7;42485:31;:40::i;:::-;42446:187;;;42555:2;42547:10;;:4;:10;;;42543:90;;42574:47;42607:4;42613:7;42574:32;:47::i;:::-;42543:90;42446:187;42661:1;42647:16;;:2;:16;;;42643:183;;42680:45;42717:7;42680:36;:45::i;:::-;42643:183;;;42753:4;42747:10;;:2;:10;;;42743:83;;42774:40;42802:2;42806:7;42774:27;:40::i;:::-;42743:83;42643:183;42278:555;;;:::o;35129:250::-;35225:18;35231:2;35235:7;35225:5;:18::i;:::-;35262:54;35293:1;35297:2;35301:7;35310:5;35262:22;:54::i;:::-;35254:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;35129:250;;;:::o;38424:843::-;38545:4;38571:15;:2;:13;;;:15::i;:::-;38567:693;;;38623:2;38607:36;;;38644:12;:10;:12::i;:::-;38658:4;38664:7;38673:5;38607:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38603:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38870:1;38853:6;:13;:18;38849:341;;38896:60;;;;;;;;;;:::i;:::-;;;;;;;;38849:341;39140:6;39134:13;39125:6;39121:2;39117:15;39110:38;38603:602;38740:45;;;38730:55;;;:6;:55;;;;38723:62;;;;;38567:693;39244:4;39237:11;;38424:843;;;;;;;:::o;39880:93::-;;;;:::o;43556:164::-;43660:10;:17;;;;43633:15;:24;43649:7;43633:24;;;;;;;;;;;:44;;;;43688:10;43704:7;43688:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43556:164;:::o;44347:988::-;44613:22;44663:1;44638:22;44655:4;44638:16;:22::i;:::-;:26;;;;:::i;:::-;44613:51;;44675:18;44696:17;:26;44714:7;44696:26;;;;;;;;;;;;44675:47;;44843:14;44829:10;:28;44825:328;;44874:19;44896:12;:18;44909:4;44896:18;;;;;;;;;;;;;;;:34;44915:14;44896:34;;;;;;;;;;;;44874:56;;44980:11;44947:12;:18;44960:4;44947:18;;;;;;;;;;;;;;;:30;44966:10;44947:30;;;;;;;;;;;:44;;;;45097:10;45064:17;:30;45082:11;45064:30;;;;;;;;;;;:43;;;;44859:294;44825:328;45249:17;:26;45267:7;45249:26;;;;;;;;;;;45242:33;;;45293:12;:18;45306:4;45293:18;;;;;;;;;;;;;;;:34;45312:14;45293:34;;;;;;;;;;;45286:41;;;44428:907;;44347:988;;:::o;45630:1079::-;45883:22;45928:1;45908:10;:17;;;;:21;;;;:::i;:::-;45883:46;;45940:18;45961:15;:24;45977:7;45961:24;;;;;;;;;;;;45940:45;;46312:19;46334:10;46345:14;46334:26;;;;;;;;:::i;:::-;;;;;;;;;;46312:48;;46398:11;46373:10;46384;46373:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;46509:10;46478:15;:28;46494:11;46478:28;;;;;;;;;;;:41;;;;46650:15;:24;46666:7;46650:24;;;;;;;;;;;46643:31;;;46685:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45701:1008;;;45630:1079;:::o;43134:221::-;43219:14;43236:20;43253:2;43236:16;:20::i;:::-;43219:37;;43294:7;43267:12;:16;43280:2;43267:16;;;;;;;;;;;;;;;:24;43284:6;43267:24;;;;;;;;;;;:34;;;;43341:6;43312:17;:26;43330:7;43312:26;;;;;;;;;;;:35;;;;43208:147;43134:221;;:::o;35715:382::-;35809:1;35795:16;;:2;:16;;;35787:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35868:16;35876:7;35868;:16::i;:::-;35867:17;35859:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35930:45;35959:1;35963:2;35967:7;35930:20;:45::i;:::-;36005:1;35988:9;:13;35998:2;35988:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36036:2;36017:7;:16;36025:7;36017:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36081:7;36077:2;36056:33;;36073:1;36056:33;;;;;;;;;;;;35715:382;;:::o;3084:422::-;3144:4;3352:12;3463:7;3451:20;3443:28;;3497:1;3490:4;:8;3483:15;;;3084:422;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:246::-;2469:1;2479:113;2493:6;2490:1;2487:13;2479:113;;;2578:1;2573:3;2569:11;2563:18;2559:1;2554:3;2550:11;2543:39;2515:2;2512:1;2508:10;2503:15;;2479:113;;;2626:1;2617:6;2612:3;2608:16;2601:27;2450:184;2388:246;;;:::o;2640:102::-;2681:6;2732:2;2728:7;2723:2;2716:5;2712:14;2708:28;2698:38;;2640:102;;;:::o;2748:377::-;2836:3;2864:39;2897:5;2864:39;:::i;:::-;2919:71;2983:6;2978:3;2919:71;:::i;:::-;2912:78;;2999:65;3057:6;3052:3;3045:4;3038:5;3034:16;2999:65;:::i;:::-;3089:29;3111:6;3089:29;:::i;:::-;3084:3;3080:39;3073:46;;2840:285;2748:377;;;;:::o;3131:313::-;3244:4;3282:2;3271:9;3267:18;3259:26;;3331:9;3325:4;3321:20;3317:1;3306:9;3302:17;3295:47;3359:78;3432:4;3423:6;3359:78;:::i;:::-;3351:86;;3131:313;;;;:::o;3450:77::-;3487:7;3516:5;3505:16;;3450:77;;;:::o;3533:122::-;3606:24;3624:5;3606:24;:::i;:::-;3599:5;3596:35;3586:63;;3645:1;3642;3635:12;3586:63;3533:122;:::o;3661:139::-;3707:5;3745:6;3732:20;3723:29;;3761:33;3788:5;3761:33;:::i;:::-;3661:139;;;;:::o;3806:329::-;3865:6;3914:2;3902:9;3893:7;3889:23;3885:32;3882:119;;;3920:79;;:::i;:::-;3882:119;4040:1;4065:53;4110:7;4101:6;4090:9;4086:22;4065:53;:::i;:::-;4055:63;;4011:117;3806:329;;;;:::o;4141:126::-;4178:7;4218:42;4211:5;4207:54;4196:65;;4141:126;;;:::o;4273:96::-;4310:7;4339:24;4357:5;4339:24;:::i;:::-;4328:35;;4273:96;;;:::o;4375:118::-;4462:24;4480:5;4462:24;:::i;:::-;4457:3;4450:37;4375:118;;:::o;4499:222::-;4592:4;4630:2;4619:9;4615:18;4607:26;;4643:71;4711:1;4700:9;4696:17;4687:6;4643:71;:::i;:::-;4499:222;;;;:::o;4727:122::-;4800:24;4818:5;4800:24;:::i;:::-;4793:5;4790:35;4780:63;;4839:1;4836;4829:12;4780:63;4727:122;:::o;4855:139::-;4901:5;4939:6;4926:20;4917:29;;4955:33;4982:5;4955:33;:::i;:::-;4855:139;;;;:::o;5000:474::-;5068:6;5076;5125:2;5113:9;5104:7;5100:23;5096:32;5093:119;;;5131:79;;:::i;:::-;5093:119;5251:1;5276:53;5321:7;5312:6;5301:9;5297:22;5276:53;:::i;:::-;5266:63;;5222:117;5378:2;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5349:118;5000:474;;;;;:::o;5480:118::-;5567:24;5585:5;5567:24;:::i;:::-;5562:3;5555:37;5480:118;;:::o;5604:222::-;5697:4;5735:2;5724:9;5720:18;5712:26;;5748:71;5816:1;5805:9;5801:17;5792:6;5748:71;:::i;:::-;5604:222;;;;:::o;5832:117::-;5941:1;5938;5931:12;5955:180;6003:77;6000:1;5993:88;6100:4;6097:1;6090:15;6124:4;6121:1;6114:15;6141:281;6224:27;6246:4;6224:27;:::i;:::-;6216:6;6212:40;6354:6;6342:10;6339:22;6318:18;6306:10;6303:34;6300:62;6297:88;;;6365:18;;:::i;:::-;6297:88;6405:10;6401:2;6394:22;6184:238;6141:281;;:::o;6428:129::-;6462:6;6489:20;;:::i;:::-;6479:30;;6518:33;6546:4;6538:6;6518:33;:::i;:::-;6428:129;;;:::o;6563:311::-;6640:4;6730:18;6722:6;6719:30;6716:56;;;6752:18;;:::i;:::-;6716:56;6802:4;6794:6;6790:17;6782:25;;6862:4;6856;6852:15;6844:23;;6563:311;;;:::o;6880:117::-;6989:1;6986;6979:12;7020:710;7116:5;7141:81;7157:64;7214:6;7157:64;:::i;:::-;7141:81;:::i;:::-;7132:90;;7242:5;7271:6;7264:5;7257:21;7305:4;7298:5;7294:16;7287:23;;7358:4;7350:6;7346:17;7338:6;7334:30;7387:3;7379:6;7376:15;7373:122;;;7406:79;;:::i;:::-;7373:122;7521:6;7504:220;7538:6;7533:3;7530:15;7504:220;;;7613:3;7642:37;7675:3;7663:10;7642:37;:::i;:::-;7637:3;7630:50;7709:4;7704:3;7700:14;7693:21;;7580:144;7564:4;7559:3;7555:14;7548:21;;7504:220;;;7508:21;7122:608;;7020:710;;;;;:::o;7753:370::-;7824:5;7873:3;7866:4;7858:6;7854:17;7850:27;7840:122;;7881:79;;:::i;:::-;7840:122;7998:6;7985:20;8023:94;8113:3;8105:6;8098:4;8090:6;8086:17;8023:94;:::i;:::-;8014:103;;7830:293;7753:370;;;;:::o;8129:311::-;8206:4;8296:18;8288:6;8285:30;8282:56;;;8318:18;;:::i;:::-;8282:56;8368:4;8360:6;8356:17;8348:25;;8428:4;8422;8418:15;8410:23;;8129:311;;;:::o;8463:710::-;8559:5;8584:81;8600:64;8657:6;8600:64;:::i;:::-;8584:81;:::i;:::-;8575:90;;8685:5;8714:6;8707:5;8700:21;8748:4;8741:5;8737:16;8730:23;;8801:4;8793:6;8789:17;8781:6;8777:30;8830:3;8822:6;8819:15;8816:122;;;8849:79;;:::i;:::-;8816:122;8964:6;8947:220;8981:6;8976:3;8973:15;8947:220;;;9056:3;9085:37;9118:3;9106:10;9085:37;:::i;:::-;9080:3;9073:50;9152:4;9147:3;9143:14;9136:21;;9023:144;9007:4;9002:3;8998:14;8991:21;;8947:220;;;8951:21;8565:608;;8463:710;;;;;:::o;9196:370::-;9267:5;9316:3;9309:4;9301:6;9297:17;9293:27;9283:122;;9324:79;;:::i;:::-;9283:122;9441:6;9428:20;9466:94;9556:3;9548:6;9541:4;9533:6;9529:17;9466:94;:::i;:::-;9457:103;;9273:293;9196:370;;;;:::o;9572:894::-;9690:6;9698;9747:2;9735:9;9726:7;9722:23;9718:32;9715:119;;;9753:79;;:::i;:::-;9715:119;9901:1;9890:9;9886:17;9873:31;9931:18;9923:6;9920:30;9917:117;;;9953:79;;:::i;:::-;9917:117;10058:78;10128:7;10119:6;10108:9;10104:22;10058:78;:::i;:::-;10048:88;;9844:302;10213:2;10202:9;10198:18;10185:32;10244:18;10236:6;10233:30;10230:117;;;10266:79;;:::i;:::-;10230:117;10371:78;10441:7;10432:6;10421:9;10417:22;10371:78;:::i;:::-;10361:88;;10156:303;9572:894;;;;;:::o;10472:619::-;10549:6;10557;10565;10614:2;10602:9;10593:7;10589:23;10585:32;10582:119;;;10620:79;;:::i;:::-;10582:119;10740:1;10765:53;10810:7;10801:6;10790:9;10786:22;10765:53;:::i;:::-;10755:63;;10711:117;10867:2;10893:53;10938:7;10929:6;10918:9;10914:22;10893:53;:::i;:::-;10883:63;;10838:118;10995:2;11021:53;11066:7;11057:6;11046:9;11042:22;11021:53;:::i;:::-;11011:63;;10966:118;10472:619;;;;;:::o;11097:329::-;11156:6;11205:2;11193:9;11184:7;11180:23;11176:32;11173:119;;;11211:79;;:::i;:::-;11173:119;11331:1;11356:53;11401:7;11392:6;11381:9;11377:22;11356:53;:::i;:::-;11346:63;;11302:117;11097:329;;;;:::o;11432:114::-;11499:6;11533:5;11527:12;11517:22;;11432:114;;;:::o;11552:184::-;11651:11;11685:6;11680:3;11673:19;11725:4;11720:3;11716:14;11701:29;;11552:184;;;;:::o;11742:132::-;11809:4;11832:3;11824:11;;11862:4;11857:3;11853:14;11845:22;;11742:132;;;:::o;11880:108::-;11957:24;11975:5;11957:24;:::i;:::-;11952:3;11945:37;11880:108;;:::o;11994:179::-;12063:10;12084:46;12126:3;12118:6;12084:46;:::i;:::-;12162:4;12157:3;12153:14;12139:28;;11994:179;;;;:::o;12179:113::-;12249:4;12281;12276:3;12272:14;12264:22;;12179:113;;;:::o;12328:732::-;12447:3;12476:54;12524:5;12476:54;:::i;:::-;12546:86;12625:6;12620:3;12546:86;:::i;:::-;12539:93;;12656:56;12706:5;12656:56;:::i;:::-;12735:7;12766:1;12751:284;12776:6;12773:1;12770:13;12751:284;;;12852:6;12846:13;12879:63;12938:3;12923:13;12879:63;:::i;:::-;12872:70;;12965:60;13018:6;12965:60;:::i;:::-;12955:70;;12811:224;12798:1;12795;12791:9;12786:14;;12751:284;;;12755:14;13051:3;13044:10;;12452:608;;;12328:732;;;;:::o;13066:373::-;13209:4;13247:2;13236:9;13232:18;13224:26;;13296:9;13290:4;13286:20;13282:1;13271:9;13267:17;13260:47;13324:108;13427:4;13418:6;13324:108;:::i;:::-;13316:116;;13066:373;;;;:::o;13445:117::-;13554:1;13551;13544:12;13568:308;13630:4;13720:18;13712:6;13709:30;13706:56;;;13742:18;;:::i;:::-;13706:56;13780:29;13802:6;13780:29;:::i;:::-;13772:37;;13864:4;13858;13854:15;13846:23;;13568:308;;;:::o;13882:146::-;13979:6;13974:3;13969;13956:30;14020:1;14011:6;14006:3;14002:16;13995:27;13882:146;;;:::o;14034:425::-;14112:5;14137:66;14153:49;14195:6;14153:49;:::i;:::-;14137:66;:::i;:::-;14128:75;;14226:6;14219:5;14212:21;14264:4;14257:5;14253:16;14302:3;14293:6;14288:3;14284:16;14281:25;14278:112;;;14309:79;;:::i;:::-;14278:112;14399:54;14446:6;14441:3;14436;14399:54;:::i;:::-;14118:341;14034:425;;;;;:::o;14479:340::-;14535:5;14584:3;14577:4;14569:6;14565:17;14561:27;14551:122;;14592:79;;:::i;:::-;14551:122;14709:6;14696:20;14734:79;14809:3;14801:6;14794:4;14786:6;14782:17;14734:79;:::i;:::-;14725:88;;14541:278;14479:340;;;;:::o;14825:509::-;14894:6;14943:2;14931:9;14922:7;14918:23;14914:32;14911:119;;;14949:79;;:::i;:::-;14911:119;15097:1;15086:9;15082:17;15069:31;15127:18;15119:6;15116:30;15113:117;;;15149:79;;:::i;:::-;15113:117;15254:63;15309:7;15300:6;15289:9;15285:22;15254:63;:::i;:::-;15244:73;;15040:287;14825:509;;;;:::o;15340:468::-;15405:6;15413;15462:2;15450:9;15441:7;15437:23;15433:32;15430:119;;;15468:79;;:::i;:::-;15430:119;15588:1;15613:53;15658:7;15649:6;15638:9;15634:22;15613:53;:::i;:::-;15603:63;;15559:117;15715:2;15741:50;15783:7;15774:6;15763:9;15759:22;15741:50;:::i;:::-;15731:60;;15686:115;15340:468;;;;;:::o;15814:307::-;15875:4;15965:18;15957:6;15954:30;15951:56;;;15987:18;;:::i;:::-;15951:56;16025:29;16047:6;16025:29;:::i;:::-;16017:37;;16109:4;16103;16099:15;16091:23;;15814:307;;;:::o;16127:423::-;16204:5;16229:65;16245:48;16286:6;16245:48;:::i;:::-;16229:65;:::i;:::-;16220:74;;16317:6;16310:5;16303:21;16355:4;16348:5;16344:16;16393:3;16384:6;16379:3;16375:16;16372:25;16369:112;;;16400:79;;:::i;:::-;16369:112;16490:54;16537:6;16532:3;16527;16490:54;:::i;:::-;16210:340;16127:423;;;;;:::o;16569:338::-;16624:5;16673:3;16666:4;16658:6;16654:17;16650:27;16640:122;;16681:79;;:::i;:::-;16640:122;16798:6;16785:20;16823:78;16897:3;16889:6;16882:4;16874:6;16870:17;16823:78;:::i;:::-;16814:87;;16630:277;16569:338;;;;:::o;16913:943::-;17008:6;17016;17024;17032;17081:3;17069:9;17060:7;17056:23;17052:33;17049:120;;;17088:79;;:::i;:::-;17049:120;17208:1;17233:53;17278:7;17269:6;17258:9;17254:22;17233:53;:::i;:::-;17223:63;;17179:117;17335:2;17361:53;17406:7;17397:6;17386:9;17382:22;17361:53;:::i;:::-;17351:63;;17306:118;17463:2;17489:53;17534:7;17525:6;17514:9;17510:22;17489:53;:::i;:::-;17479:63;;17434:118;17619:2;17608:9;17604:18;17591:32;17650:18;17642:6;17639:30;17636:117;;;17672:79;;:::i;:::-;17636:117;17777:62;17831:7;17822:6;17811:9;17807:22;17777:62;:::i;:::-;17767:72;;17562:287;16913:943;;;;;;;:::o;17862:474::-;17930:6;17938;17987:2;17975:9;17966:7;17962:23;17958:32;17955:119;;;17993:79;;:::i;:::-;17955:119;18113:1;18138:53;18183:7;18174:6;18163:9;18159:22;18138:53;:::i;:::-;18128:63;;18084:117;18240:2;18266:53;18311:7;18302:6;18291:9;18287:22;18266:53;:::i;:::-;18256:63;;18211:118;17862:474;;;;;:::o;18342:182::-;18482:34;18478:1;18470:6;18466:14;18459:58;18342:182;:::o;18530:366::-;18672:3;18693:67;18757:2;18752:3;18693:67;:::i;:::-;18686:74;;18769:93;18858:3;18769:93;:::i;:::-;18887:2;18882:3;18878:12;18871:19;;18530:366;;;:::o;18902:419::-;19068:4;19106:2;19095:9;19091:18;19083:26;;19155:9;19149:4;19145:20;19141:1;19130:9;19126:17;19119:47;19183:131;19309:4;19183:131;:::i;:::-;19175:139;;18902:419;;;:::o;19327:180::-;19375:77;19372:1;19365:88;19472:4;19469:1;19462:15;19496:4;19493:1;19486:15;19513:320;19557:6;19594:1;19588:4;19584:12;19574:22;;19641:1;19635:4;19631:12;19662:18;19652:81;;19718:4;19710:6;19706:17;19696:27;;19652:81;19780:2;19772:6;19769:14;19749:18;19746:38;19743:84;;19799:18;;:::i;:::-;19743:84;19564:269;19513:320;;;:::o;19839:231::-;19979:34;19975:1;19967:6;19963:14;19956:58;20048:14;20043:2;20035:6;20031:15;20024:39;19839:231;:::o;20076:366::-;20218:3;20239:67;20303:2;20298:3;20239:67;:::i;:::-;20232:74;;20315:93;20404:3;20315:93;:::i;:::-;20433:2;20428:3;20424:12;20417:19;;20076:366;;;:::o;20448:419::-;20614:4;20652:2;20641:9;20637:18;20629:26;;20701:9;20695:4;20691:20;20687:1;20676:9;20672:17;20665:47;20729:131;20855:4;20729:131;:::i;:::-;20721:139;;20448:419;;;:::o;20873:220::-;21013:34;21009:1;21001:6;20997:14;20990:58;21082:3;21077:2;21069:6;21065:15;21058:28;20873:220;:::o;21099:366::-;21241:3;21262:67;21326:2;21321:3;21262:67;:::i;:::-;21255:74;;21338:93;21427:3;21338:93;:::i;:::-;21456:2;21451:3;21447:12;21440:19;;21099:366;;;:::o;21471:419::-;21637:4;21675:2;21664:9;21660:18;21652:26;;21724:9;21718:4;21714:20;21710:1;21699:9;21695:17;21688:47;21752:131;21878:4;21752:131;:::i;:::-;21744:139;;21471:419;;;:::o;21896:243::-;22036:34;22032:1;22024:6;22020:14;22013:58;22105:26;22100:2;22092:6;22088:15;22081:51;21896:243;:::o;22145:366::-;22287:3;22308:67;22372:2;22367:3;22308:67;:::i;:::-;22301:74;;22384:93;22473:3;22384:93;:::i;:::-;22502:2;22497:3;22493:12;22486:19;;22145:366;;;:::o;22517:419::-;22683:4;22721:2;22710:9;22706:18;22698:26;;22770:9;22764:4;22760:20;22756:1;22745:9;22741:17;22734:47;22798:131;22924:4;22798:131;:::i;:::-;22790:139;;22517:419;;;:::o;22942:180::-;22990:77;22987:1;22980:88;23087:4;23084:1;23077:15;23111:4;23108:1;23101:15;23128:180;23176:77;23173:1;23166:88;23273:4;23270:1;23263:15;23297:4;23294:1;23287:15;23314:233;23353:3;23376:24;23394:5;23376:24;:::i;:::-;23367:33;;23422:66;23415:5;23412:77;23409:103;;23492:18;;:::i;:::-;23409:103;23539:1;23532:5;23528:13;23521:20;;23314:233;;;:::o;23553:236::-;23693:34;23689:1;23681:6;23677:14;23670:58;23762:19;23757:2;23749:6;23745:15;23738:44;23553:236;:::o;23795:366::-;23937:3;23958:67;24022:2;24017:3;23958:67;:::i;:::-;23951:74;;24034:93;24123:3;24034:93;:::i;:::-;24152:2;24147:3;24143:12;24136:19;;23795:366;;;:::o;24167:419::-;24333:4;24371:2;24360:9;24356:18;24348:26;;24420:9;24414:4;24410:20;24406:1;24395:9;24391:17;24384:47;24448:131;24574:4;24448:131;:::i;:::-;24440:139;;24167:419;;;:::o;24592:230::-;24732:34;24728:1;24720:6;24716:14;24709:58;24801:13;24796:2;24788:6;24784:15;24777:38;24592:230;:::o;24828:366::-;24970:3;24991:67;25055:2;25050:3;24991:67;:::i;:::-;24984:74;;25067:93;25156:3;25067:93;:::i;:::-;25185:2;25180:3;25176:12;25169:19;;24828:366;;;:::o;25200:419::-;25366:4;25404:2;25393:9;25389:18;25381:26;;25453:9;25447:4;25443:20;25439:1;25428:9;25424:17;25417:47;25481:131;25607:4;25481:131;:::i;:::-;25473:139;;25200:419;;;:::o;25625:231::-;25765:34;25761:1;25753:6;25749:14;25742:58;25834:14;25829:2;25821:6;25817:15;25810:39;25625:231;:::o;25862:366::-;26004:3;26025:67;26089:2;26084:3;26025:67;:::i;:::-;26018:74;;26101:93;26190:3;26101:93;:::i;:::-;26219:2;26214:3;26210:12;26203:19;;25862:366;;;:::o;26234:419::-;26400:4;26438:2;26427:9;26423:18;26415:26;;26487:9;26481:4;26477:20;26473:1;26462:9;26458:17;26451:47;26515:131;26641:4;26515:131;:::i;:::-;26507:139;;26234:419;;;:::o;26659:141::-;26708:4;26731:3;26723:11;;26754:3;26751:1;26744:14;26788:4;26785:1;26775:18;26767:26;;26659:141;;;:::o;26806:93::-;26843:6;26890:2;26885;26878:5;26874:14;26870:23;26860:33;;26806:93;;;:::o;26905:107::-;26949:8;26999:5;26993:4;26989:16;26968:37;;26905:107;;;;:::o;27018:393::-;27087:6;27137:1;27125:10;27121:18;27160:97;27190:66;27179:9;27160:97;:::i;:::-;27278:39;27308:8;27297:9;27278:39;:::i;:::-;27266:51;;27350:4;27346:9;27339:5;27335:21;27326:30;;27399:4;27389:8;27385:19;27378:5;27375:30;27365:40;;27094:317;;27018:393;;;;;:::o;27417:60::-;27445:3;27466:5;27459:12;;27417:60;;;:::o;27483:142::-;27533:9;27566:53;27584:34;27593:24;27611:5;27593:24;:::i;:::-;27584:34;:::i;:::-;27566:53;:::i;:::-;27553:66;;27483:142;;;:::o;27631:75::-;27674:3;27695:5;27688:12;;27631:75;;;:::o;27712:269::-;27822:39;27853:7;27822:39;:::i;:::-;27883:91;27932:41;27956:16;27932:41;:::i;:::-;27924:6;27917:4;27911:11;27883:91;:::i;:::-;27877:4;27870:105;27788:193;27712:269;;;:::o;27987:73::-;28032:3;27987:73;:::o;28066:189::-;28143:32;;:::i;:::-;28184:65;28242:6;28234;28228:4;28184:65;:::i;:::-;28119:136;28066:189;;:::o;28261:186::-;28321:120;28338:3;28331:5;28328:14;28321:120;;;28392:39;28429:1;28422:5;28392:39;:::i;:::-;28365:1;28358:5;28354:13;28345:22;;28321:120;;;28261:186;;:::o;28453:543::-;28554:2;28549:3;28546:11;28543:446;;;28588:38;28620:5;28588:38;:::i;:::-;28672:29;28690:10;28672:29;:::i;:::-;28662:8;28658:44;28855:2;28843:10;28840:18;28837:49;;;28876:8;28861:23;;28837:49;28899:80;28955:22;28973:3;28955:22;:::i;:::-;28945:8;28941:37;28928:11;28899:80;:::i;:::-;28558:431;;28543:446;28453:543;;;:::o;29002:117::-;29056:8;29106:5;29100:4;29096:16;29075:37;;29002:117;;;;:::o;29125:169::-;29169:6;29202:51;29250:1;29246:6;29238:5;29235:1;29231:13;29202:51;:::i;:::-;29198:56;29283:4;29277;29273:15;29263:25;;29176:118;29125:169;;;;:::o;29299:295::-;29375:4;29521:29;29546:3;29540:4;29521:29;:::i;:::-;29513:37;;29583:3;29580:1;29576:11;29570:4;29567:21;29559:29;;29299:295;;;;:::o;29599:1395::-;29716:37;29749:3;29716:37;:::i;:::-;29818:18;29810:6;29807:30;29804:56;;;29840:18;;:::i;:::-;29804:56;29884:38;29916:4;29910:11;29884:38;:::i;:::-;29969:67;30029:6;30021;30015:4;29969:67;:::i;:::-;30063:1;30087:4;30074:17;;30119:2;30111:6;30108:14;30136:1;30131:618;;;;30793:1;30810:6;30807:77;;;30859:9;30854:3;30850:19;30844:26;30835:35;;30807:77;30910:67;30970:6;30963:5;30910:67;:::i;:::-;30904:4;30897:81;30766:222;30101:887;;30131:618;30183:4;30179:9;30171:6;30167:22;30217:37;30249:4;30217:37;:::i;:::-;30276:1;30290:208;30304:7;30301:1;30298:14;30290:208;;;30383:9;30378:3;30374:19;30368:26;30360:6;30353:42;30434:1;30426:6;30422:14;30412:24;;30481:2;30470:9;30466:18;30453:31;;30327:4;30324:1;30320:12;30315:17;;30290:208;;;30526:6;30517:7;30514:19;30511:179;;;30584:9;30579:3;30575:19;30569:26;30627:48;30669:4;30661:6;30657:17;30646:9;30627:48;:::i;:::-;30619:6;30612:64;30534:156;30511:179;30736:1;30732;30724:6;30720:14;30716:22;30710:4;30703:36;30138:611;;;30101:887;;29691:1303;;;29599:1395;;:::o;31000:228::-;31140:34;31136:1;31128:6;31124:14;31117:58;31209:11;31204:2;31196:6;31192:15;31185:36;31000:228;:::o;31234:366::-;31376:3;31397:67;31461:2;31456:3;31397:67;:::i;:::-;31390:74;;31473:93;31562:3;31473:93;:::i;:::-;31591:2;31586:3;31582:12;31575:19;;31234:366;;;:::o;31606:419::-;31772:4;31810:2;31799:9;31795:18;31787:26;;31859:9;31853:4;31849:20;31845:1;31834:9;31830:17;31823:47;31887:131;32013:4;31887:131;:::i;:::-;31879:139;;31606:419;;;:::o;32031:410::-;32071:7;32094:20;32112:1;32094:20;:::i;:::-;32089:25;;32128:20;32146:1;32128:20;:::i;:::-;32123:25;;32183:1;32180;32176:9;32205:30;32223:11;32205:30;:::i;:::-;32194:41;;32384:1;32375:7;32371:15;32368:1;32365:22;32345:1;32338:9;32318:83;32295:139;;32414:18;;:::i;:::-;32295:139;32079:362;32031:410;;;;:::o;32447:229::-;32587:34;32583:1;32575:6;32571:14;32564:58;32656:12;32651:2;32643:6;32639:15;32632:37;32447:229;:::o;32682:366::-;32824:3;32845:67;32909:2;32904:3;32845:67;:::i;:::-;32838:74;;32921:93;33010:3;32921:93;:::i;:::-;33039:2;33034:3;33030:12;33023:19;;32682:366;;;:::o;33054:419::-;33220:4;33258:2;33247:9;33243:18;33235:26;;33307:9;33301:4;33297:20;33293:1;33282:9;33278:17;33271:47;33335:131;33461:4;33335:131;:::i;:::-;33327:139;;33054:419;;;:::o;33479:169::-;33619:21;33615:1;33607:6;33603:14;33596:45;33479:169;:::o;33654:366::-;33796:3;33817:67;33881:2;33876:3;33817:67;:::i;:::-;33810:74;;33893:93;33982:3;33893:93;:::i;:::-;34011:2;34006:3;34002:12;33995:19;;33654:366;;;:::o;34026:419::-;34192:4;34230:2;34219:9;34215:18;34207:26;;34279:9;34273:4;34269:20;34265:1;34254:9;34250:17;34243:47;34307:131;34433:4;34307:131;:::i;:::-;34299:139;;34026:419;;;:::o;34451:172::-;34591:24;34587:1;34579:6;34575:14;34568:48;34451:172;:::o;34629:366::-;34771:3;34792:67;34856:2;34851:3;34792:67;:::i;:::-;34785:74;;34868:93;34957:3;34868:93;:::i;:::-;34986:2;34981:3;34977:12;34970:19;;34629:366;;;:::o;35001:419::-;35167:4;35205:2;35194:9;35190:18;35182:26;;35254:9;35248:4;35244:20;35240:1;35229:9;35225:17;35218:47;35282:131;35408:4;35282:131;:::i;:::-;35274:139;;35001:419;;;:::o;35426:180::-;35566:32;35562:1;35554:6;35550:14;35543:56;35426:180;:::o;35612:366::-;35754:3;35775:67;35839:2;35834:3;35775:67;:::i;:::-;35768:74;;35851:93;35940:3;35851:93;:::i;:::-;35969:2;35964:3;35960:12;35953:19;;35612:366;;;:::o;35984:419::-;36150:4;36188:2;36177:9;36173:18;36165:26;;36237:9;36231:4;36227:20;36223:1;36212:9;36208:17;36201:47;36265:131;36391:4;36265:131;:::i;:::-;36257:139;;35984:419;;;:::o;36409:191::-;36449:3;36468:20;36486:1;36468:20;:::i;:::-;36463:25;;36502:20;36520:1;36502:20;:::i;:::-;36497:25;;36545:1;36542;36538:9;36531:16;;36566:3;36563:1;36560:10;36557:36;;;36573:18;;:::i;:::-;36557:36;36409:191;;;;:::o;36606:221::-;36746:34;36742:1;36734:6;36730:14;36723:58;36815:4;36810:2;36802:6;36798:15;36791:29;36606:221;:::o;36833:366::-;36975:3;36996:67;37060:2;37055:3;36996:67;:::i;:::-;36989:74;;37072:93;37161:3;37072:93;:::i;:::-;37190:2;37185:3;37181:12;37174:19;;36833:366;;;:::o;37205:419::-;37371:4;37409:2;37398:9;37394:18;37386:26;;37458:9;37452:4;37448:20;37444:1;37433:9;37429:17;37422:47;37486:131;37612:4;37486:131;:::i;:::-;37478:139;;37205:419;;;:::o;37630:168::-;37770:20;37766:1;37758:6;37754:14;37747:44;37630:168;:::o;37804:366::-;37946:3;37967:67;38031:2;38026:3;37967:67;:::i;:::-;37960:74;;38043:93;38132:3;38043:93;:::i;:::-;38161:2;38156:3;38152:12;38145:19;;37804:366;;;:::o;38176:419::-;38342:4;38380:2;38369:9;38365:18;38357:26;;38429:9;38423:4;38419:20;38415:1;38404:9;38400:17;38393:47;38457:131;38583:4;38457:131;:::i;:::-;38449:139;;38176:419;;;:::o;38601:180::-;38741:32;38737:1;38729:6;38725:14;38718:56;38601:180;:::o;38787:366::-;38929:3;38950:67;39014:2;39009:3;38950:67;:::i;:::-;38943:74;;39026:93;39115:3;39026:93;:::i;:::-;39144:2;39139:3;39135:12;39128:19;;38787:366;;;:::o;39159:419::-;39325:4;39363:2;39352:9;39348:18;39340:26;;39412:9;39406:4;39402:20;39398:1;39387:9;39383:17;39376:47;39440:131;39566:4;39440:131;:::i;:::-;39432:139;;39159:419;;;:::o;39584:171::-;39623:3;39646:24;39664:5;39646:24;:::i;:::-;39637:33;;39692:4;39685:5;39682:15;39679:41;;39700:18;;:::i;:::-;39679:41;39747:1;39740:5;39736:13;39729:20;;39584:171;;;:::o;39761:175::-;39901:27;39897:1;39889:6;39885:14;39878:51;39761:175;:::o;39942:366::-;40084:3;40105:67;40169:2;40164:3;40105:67;:::i;:::-;40098:74;;40181:93;40270:3;40181:93;:::i;:::-;40299:2;40294:3;40290:12;40283:19;;39942:366;;;:::o;40314:419::-;40480:4;40518:2;40507:9;40503:18;40495:26;;40567:9;40561:4;40557:20;40553:1;40542:9;40538:17;40531:47;40595:131;40721:4;40595:131;:::i;:::-;40587:139;;40314:419;;;:::o;40739:169::-;40879:21;40875:1;40867:6;40863:14;40856:45;40739:169;:::o;40914:366::-;41056:3;41077:67;41141:2;41136:3;41077:67;:::i;:::-;41070:74;;41153:93;41242:3;41153:93;:::i;:::-;41271:2;41266:3;41262:12;41255:19;;40914:366;;;:::o;41286:419::-;41452:4;41490:2;41479:9;41475:18;41467:26;;41539:9;41533:4;41529:20;41525:1;41514:9;41510:17;41503:47;41567:131;41693:4;41567:131;:::i;:::-;41559:139;;41286:419;;;:::o;41711:234::-;41851:34;41847:1;41839:6;41835:14;41828:58;41920:17;41915:2;41907:6;41903:15;41896:42;41711:234;:::o;41951:366::-;42093:3;42114:67;42178:2;42173:3;42114:67;:::i;:::-;42107:74;;42190:93;42279:3;42190:93;:::i;:::-;42308:2;42303:3;42299:12;42292:19;;41951:366;;;:::o;42323:419::-;42489:4;42527:2;42516:9;42512:18;42504:26;;42576:9;42570:4;42566:20;42562:1;42551:9;42547:17;42540:47;42604:131;42730:4;42604:131;:::i;:::-;42596:139;;42323:419;;;:::o;42748:148::-;42850:11;42887:3;42872:18;;42748:148;;;;:::o;42926:874::-;43029:3;43066:5;43060:12;43095:36;43121:9;43095:36;:::i;:::-;43147:89;43229:6;43224:3;43147:89;:::i;:::-;43140:96;;43267:1;43256:9;43252:17;43283:1;43278:166;;;;43458:1;43453:341;;;;43245:549;;43278:166;43362:4;43358:9;43347;43343:25;43338:3;43331:38;43424:6;43417:14;43410:22;43402:6;43398:35;43393:3;43389:45;43382:52;;43278:166;;43453:341;43520:38;43552:5;43520:38;:::i;:::-;43580:1;43594:154;43608:6;43605:1;43602:13;43594:154;;;43682:7;43676:14;43672:1;43667:3;43663:11;43656:35;43732:1;43723:7;43719:15;43708:26;;43630:4;43627:1;43623:12;43618:17;;43594:154;;;43777:6;43772:3;43768:16;43761:23;;43460:334;;43245:549;;43033:767;;42926:874;;;;:::o;43806:390::-;43912:3;43940:39;43973:5;43940:39;:::i;:::-;43995:89;44077:6;44072:3;43995:89;:::i;:::-;43988:96;;44093:65;44151:6;44146:3;44139:4;44132:5;44128:16;44093:65;:::i;:::-;44183:6;44178:3;44174:16;44167:23;;43916:280;43806:390;;;;:::o;44202:429::-;44379:3;44401:92;44489:3;44480:6;44401:92;:::i;:::-;44394:99;;44510:95;44601:3;44592:6;44510:95;:::i;:::-;44503:102;;44622:3;44615:10;;44202:429;;;;;:::o;44637:435::-;44817:3;44839:95;44930:3;44921:6;44839:95;:::i;:::-;44832:102;;44951:95;45042:3;45033:6;44951:95;:::i;:::-;44944:102;;45063:3;45056:10;;44637:435;;;;;:::o;45078:225::-;45218:34;45214:1;45206:6;45202:14;45195:58;45287:8;45282:2;45274:6;45270:15;45263:33;45078:225;:::o;45309:366::-;45451:3;45472:67;45536:2;45531:3;45472:67;:::i;:::-;45465:74;;45548:93;45637:3;45548:93;:::i;:::-;45666:2;45661:3;45657:12;45650:19;;45309:366;;;:::o;45681:419::-;45847:4;45885:2;45874:9;45870:18;45862:26;;45934:9;45928:4;45924:20;45920:1;45909:9;45905:17;45898:47;45962:131;46088:4;45962:131;:::i;:::-;45954:139;;45681:419;;;:::o;46106:231::-;46246:34;46242:1;46234:6;46230:14;46223:58;46315:14;46310:2;46302:6;46298:15;46291:39;46106:231;:::o;46343:366::-;46485:3;46506:67;46570:2;46565:3;46506:67;:::i;:::-;46499:74;;46582:93;46671:3;46582:93;:::i;:::-;46700:2;46695:3;46691:12;46684:19;;46343:366;;;:::o;46715:419::-;46881:4;46919:2;46908:9;46904:18;46896:26;;46968:9;46962:4;46958:20;46954:1;46943:9;46939:17;46932:47;46996:131;47122:4;46996:131;:::i;:::-;46988:139;;46715:419;;;:::o;47140:228::-;47280:34;47276:1;47268:6;47264:14;47257:58;47349:11;47344:2;47336:6;47332:15;47325:36;47140:228;:::o;47374:366::-;47516:3;47537:67;47601:2;47596:3;47537:67;:::i;:::-;47530:74;;47613:93;47702:3;47613:93;:::i;:::-;47731:2;47726:3;47722:12;47715:19;;47374:366;;;:::o;47746:419::-;47912:4;47950:2;47939:9;47935:18;47927:26;;47999:9;47993:4;47989:20;47985:1;47974:9;47970:17;47963:47;48027:131;48153:4;48027:131;:::i;:::-;48019:139;;47746:419;;;:::o;48171:223::-;48311:34;48307:1;48299:6;48295:14;48288:58;48380:6;48375:2;48367:6;48363:15;48356:31;48171:223;:::o;48400:366::-;48542:3;48563:67;48627:2;48622:3;48563:67;:::i;:::-;48556:74;;48639:93;48728:3;48639:93;:::i;:::-;48757:2;48752:3;48748:12;48741:19;;48400:366;;;:::o;48772:419::-;48938:4;48976:2;48965:9;48961:18;48953:26;;49025:9;49019:4;49015:20;49011:1;49000:9;48996:17;48989:47;49053:131;49179:4;49053:131;:::i;:::-;49045:139;;48772:419;;;:::o;49197:194::-;49237:4;49257:20;49275:1;49257:20;:::i;:::-;49252:25;;49291:20;49309:1;49291:20;:::i;:::-;49286:25;;49335:1;49332;49328:9;49320:17;;49359:1;49353:4;49350:11;49347:37;;;49364:18;;:::i;:::-;49347:37;49197:194;;;;:::o;49397:237::-;49537:34;49533:1;49525:6;49521:14;49514:58;49606:20;49601:2;49593:6;49589:15;49582:45;49397:237;:::o;49640:366::-;49782:3;49803:67;49867:2;49862:3;49803:67;:::i;:::-;49796:74;;49879:93;49968:3;49879:93;:::i;:::-;49997:2;49992:3;49988:12;49981:19;;49640:366;;;:::o;50012:419::-;50178:4;50216:2;50205:9;50201:18;50193:26;;50265:9;50259:4;50255:20;50251:1;50240:9;50236:17;50229:47;50293:131;50419:4;50293:131;:::i;:::-;50285:139;;50012:419;;;:::o;50437:180::-;50485:77;50482:1;50475:88;50582:4;50579:1;50572:15;50606:4;50603:1;50596:15;50623:185;50663:1;50680:20;50698:1;50680:20;:::i;:::-;50675:25;;50714:20;50732:1;50714:20;:::i;:::-;50709:25;;50753:1;50743:35;;50758:18;;:::i;:::-;50743:35;50800:1;50797;50793:9;50788:14;;50623:185;;;;:::o;50814:176::-;50846:1;50863:20;50881:1;50863:20;:::i;:::-;50858:25;;50897:20;50915:1;50897:20;:::i;:::-;50892:25;;50936:1;50926:35;;50941:18;;:::i;:::-;50926:35;50982:1;50979;50975:9;50970:14;;50814:176;;;;:::o;50996:98::-;51047:6;51081:5;51075:12;51065:22;;50996:98;;;:::o;51100:168::-;51183:11;51217:6;51212:3;51205:19;51257:4;51252:3;51248:14;51233:29;;51100:168;;;;:::o;51274:373::-;51360:3;51388:38;51420:5;51388:38;:::i;:::-;51442:70;51505:6;51500:3;51442:70;:::i;:::-;51435:77;;51521:65;51579:6;51574:3;51567:4;51560:5;51556:16;51521:65;:::i;:::-;51611:29;51633:6;51611:29;:::i;:::-;51606:3;51602:39;51595:46;;51364:283;51274:373;;;;:::o;51653:640::-;51848:4;51886:3;51875:9;51871:19;51863:27;;51900:71;51968:1;51957:9;51953:17;51944:6;51900:71;:::i;:::-;51981:72;52049:2;52038:9;52034:18;52025:6;51981:72;:::i;:::-;52063;52131:2;52120:9;52116:18;52107:6;52063:72;:::i;:::-;52182:9;52176:4;52172:20;52167:2;52156:9;52152:18;52145:48;52210:76;52281:4;52272:6;52210:76;:::i;:::-;52202:84;;51653:640;;;;;;;:::o;52299:141::-;52355:5;52386:6;52380:13;52371:22;;52402:32;52428:5;52402:32;:::i;:::-;52299:141;;;;:::o;52446:349::-;52515:6;52564:2;52552:9;52543:7;52539:23;52535:32;52532:119;;;52570:79;;:::i;:::-;52532:119;52690:1;52715:63;52770:7;52761:6;52750:9;52746:22;52715:63;:::i;:::-;52705:73;;52661:127;52446:349;;;;:::o;52801:180::-;52849:77;52846:1;52839:88;52946:4;52943:1;52936:15;52970:4;52967:1;52960:15;52987:182;53127:34;53123:1;53115:6;53111:14;53104:58;52987:182;:::o;53175:366::-;53317:3;53338:67;53402:2;53397:3;53338:67;:::i;:::-;53331:74;;53414:93;53503:3;53414:93;:::i;:::-;53532:2;53527:3;53523:12;53516:19;;53175:366;;;:::o;53547:419::-;53713:4;53751:2;53740:9;53736:18;53728:26;;53800:9;53794:4;53790:20;53786:1;53775:9;53771:17;53764:47;53828:131;53954:4;53828:131;:::i;:::-;53820:139;;53547:419;;;:::o;53972:178::-;54112:30;54108:1;54100:6;54096:14;54089:54;53972:178;:::o;54156:366::-;54298:3;54319:67;54383:2;54378:3;54319:67;:::i;:::-;54312:74;;54395:93;54484:3;54395:93;:::i;:::-;54513:2;54508:3;54504:12;54497:19;;54156:366;;;:::o;54528:419::-;54694:4;54732:2;54721:9;54717:18;54709:26;;54781:9;54775:4;54771:20;54767:1;54756:9;54752:17;54745:47;54809:131;54935:4;54809:131;:::i;:::-;54801:139;;54528:419;;;:::o
Swarm Source
ipfs://ef8b84805a64a2894e97c99b42a329e848fe3a753ec633ceed7a2a704ef0218c
Loading...
Loading
Loading...
Loading
Net Worth in USD
$1.97
Net Worth in ETH
0.000992
Token Allocations
ETH
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $1,967.2 | 0.001 | $1.97 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.