Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 1,389 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Set Approval For... | 76654887 | 127 days ago | IN | 0 POL | 0.00139959 | ||||
| Safe Transfer Fr... | 70064178 | 291 days ago | IN | 0 POL | 0.00133425 | ||||
| Safe Transfer Fr... | 70064168 | 291 days ago | IN | 0 POL | 0.00199125 | ||||
| Safe Transfer Fr... | 70063292 | 291 days ago | IN | 0 POL | 0.00133461 | ||||
| Safe Transfer Fr... | 70063278 | 291 days ago | IN | 0 POL | 0.00199161 | ||||
| Set Approval For... | 69359004 | 308 days ago | IN | 0 POL | 0.00139959 | ||||
| Safe Transfer Fr... | 69358780 | 308 days ago | IN | 0 POL | 0.00184917 | ||||
| Safe Transfer Fr... | 68177371 | 337 days ago | IN | 0 POL | 0.00133461 | ||||
| Safe Transfer Fr... | 68177364 | 337 days ago | IN | 0 POL | 0.00199161 | ||||
| Set Approval For... | 67262165 | 361 days ago | IN | 0 POL | 0.00139959 | ||||
| Set Approval For... | 66410472 | 382 days ago | IN | 0 POL | 0.00240236 | ||||
| Set Approval For... | 64403552 | 433 days ago | IN | 0 POL | 0.00139959 | ||||
| Set Approval For... | 64112805 | 440 days ago | IN | 0 POL | 0.01602528 | ||||
| Set Approval For... | 63678046 | 451 days ago | IN | 0 POL | 0.01227411 | ||||
| Set Approval For... | 63140231 | 464 days ago | IN | 0 POL | 0.00139959 | ||||
| Transfer From | 57145092 | 615 days ago | IN | 0 POL | 0.00187186 | ||||
| Transfer From | 57145085 | 615 days ago | IN | 0 POL | 0.00195107 | ||||
| Transfer From | 57145080 | 615 days ago | IN | 0 POL | 0.00195107 | ||||
| Transfer From | 57141793 | 615 days ago | IN | 0 POL | 0.0031196 | ||||
| Set Approval For... | 56996008 | 619 days ago | IN | 0 POL | 0.00139959 | ||||
| Set Approval For... | 56755185 | 625 days ago | IN | 0 POL | 0.00139959 | ||||
| Set Approval For... | 56210109 | 640 days ago | IN | 0 POL | 0.00384906 | ||||
| Set Approval For... | 55884366 | 648 days ago | IN | 0 POL | 0.00993647 | ||||
| Safe Transfer Fr... | 55735663 | 652 days ago | IN | 0 POL | 0.01389931 | ||||
| Set Approval For... | 55128397 | 668 days ago | IN | 0 POL | 0.00572408 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 26184874 | 1405 days ago | 68.028 POL | ||||
| 26184792 | 1405 days ago | 68.028 POL | ||||
| 26184762 | 1405 days ago | 68.028 POL | ||||
| 26184711 | 1405 days ago | 340.14 POL | ||||
| 26184688 | 1405 days ago | 68.028 POL | ||||
| 26184647 | 1405 days ago | 136.056 POL | ||||
| 26184589 | 1405 days ago | 68.028 POL | ||||
| 26184576 | 1405 days ago | 68.028 POL | ||||
| 26184454 | 1405 days ago | 68.028 POL | ||||
| 26184419 | 1405 days ago | 136.056 POL | ||||
| 26184407 | 1405 days ago | 68.028 POL | ||||
| 26184318 | 1405 days ago | 68.028 POL | ||||
| 26184188 | 1405 days ago | 68.028 POL | ||||
| 26184011 | 1405 days ago | 68.028 POL | ||||
| 26183832 | 1405 days ago | 68.028 POL | ||||
| 26183740 | 1405 days ago | 68.028 POL | ||||
| 26182978 | 1405 days ago | 68.028 POL | ||||
| 26182960 | 1405 days ago | 68.028 POL | ||||
| 26182868 | 1405 days ago | 68.028 POL | ||||
| 26182586 | 1405 days ago | 68.028 POL | ||||
| 26182459 | 1405 days ago | 68.028 POL | ||||
| 26182314 | 1405 days ago | 68.028 POL | ||||
| 26182149 | 1405 days ago | 68.028 POL | ||||
| 26181722 | 1405 days ago | 68.028 POL | ||||
| 26181238 | 1405 days ago | 68.028 POL |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
wldWolfPack
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/**
*Submitted for verification at polygonscan.com on 2022-03-25
*/
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
// File: @openzeppelin/contracts/utils/Counters.sol
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)
pragma solidity ^0.8.0;
/**
* @title Counters
* @author Matt Condon (@shrugs)
* @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
* of elements in a mapping, issuing ERC721 ids, or counting request ids.
*
* Include with `using Counters for Counters.Counter;`
*/
library Counters {
struct Counter {
// This variable should never be directly accessed by users of the library: interactions must be restricted to
// the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
// this feature: see https://github.com/ethereum/solidity/issues/4637
uint256 _value; // default: 0
}
function current(Counter storage counter) internal view returns (uint256) {
return counter._value;
}
function increment(Counter storage counter) internal {
unchecked {
counter._value += 1;
}
}
function decrement(Counter storage counter) internal {
uint256 value = counter._value;
require(value > 0, "Counter: decrement overflow");
unchecked {
counter._value = value - 1;
}
}
function reset(Counter storage counter) internal {
counter._value = 0;
}
}
// File: @openzeppelin/contracts/utils/Strings.sol
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts/token/ERC721/ERC721.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
* {ERC721Enumerable}.
*/
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to owner address
mapping(uint256 => address) private _owners;
// Mapping owner address to token count
mapping(address => uint256) private _balances;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: balance query for the zero address");
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: owner query for nonexistent token");
return owner;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overriden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not owner nor approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual override returns (address) {
require(_exists(tokenId), "ERC721: approved query for nonexistent token");
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
_setApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
//solhint-disable-next-line max-line-length
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_safeTransfer(from, to, tokenId, _data);
}
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* `_data` is additional data, it has no specified format and it is sent in call to `to`.
*
* This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
* implement alternative mechanisms to perform token transfer, such as signature-based.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
* and stop existing when they are burned (`_burn`).
*/
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _owners[tokenId] != address(0);
}
/**
* @dev Returns whether `spender` is allowed to manage `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
require(_exists(tokenId), "ERC721: operator query for nonexistent token");
address owner = ERC721.ownerOf(tokenId);
return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
}
/**
* @dev Safely mints `tokenId` and transfers it to `to`.
*
* Requirements:
*
* - `tokenId` must not exist.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeMint(
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, _data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Mints `tokenId` and transfers it to `to`.
*
* WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
*
* Requirements:
*
* - `tokenId` must not exist.
* - `to` cannot be the zero address.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
// Clear approvals
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
// Clear approvals from the previous owner
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits a {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
/**
* @dev Approve `operator` to operate on all of `owner` tokens
*
* Emits a {ApprovalForAll} event.
*/
function _setApprovalForAll(
address owner,
address operator,
bool approved
) internal virtual {
require(owner != operator, "ERC721: approve to caller");
_operatorApprovals[owner][operator] = approved;
emit ApprovalForAll(owner, operator, approved);
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: contracts/Wolf Pack NFT/NFT.sol
// contracts/GameItem.sol
pragma solidity ^0.8.0;
library SafeMath {
/**
* @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) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @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 sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @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) {
// 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 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* 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) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* 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) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts 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 mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
contract wldWolfPack is ERC721, Ownable {
using Counters for Counters.Counter;
using SafeMath for uint256;
uint256 public constant MAX_WOLVES = 1000;
uint public constant maxWolfPurchase = 5;
bool public saleIsActive = false;
bool public whitelistedOnly = true;
Counters.Counter private _tokenIds;
IERC20 private _tokenUSDC;
uint256 private _tokenPriceMATIC;
uint256 private _tokenPriceUSDC;
address private _treasuryWallet;
string private _baseURIextended;
mapping(address => bool) private _whitelisted;
constructor(address tokenUSDC, address treasuryWallet) ERC721("WLD Wolf Pack", "WPK") {
_tokenUSDC = IERC20(tokenUSDC);
_treasuryWallet = treasuryWallet;
}
//+---------------------------------------------------------------------------------------+
// Public / Minting
//+---------------------------------------------------------------------------------------+
function mintWolf(uint256 numWolves) public payable {
require(msg.sender != address(0), "AddressZero cannot purchase");
require(_tokenPriceMATIC != 0, "Token price is not set");
require(saleIsActive, "Sale must be active to mint");
require(balanceOf(msg.sender).add(numWolves) <= maxWolfPurchase, "above max purchase");
require(!whitelistedOnly || (whitelistedOnly && _whitelisted[msg.sender]), "Cannot purchase");
require(!whitelistedOnly || (whitelistedOnly && balanceOf(msg.sender).add(numWolves) <= 1), "above max purchase whitelist");
require(totalSupply().add(numWolves) <= MAX_WOLVES, "Purchase would exceed max supply of wolves");
uint256 totalPrice = numWolves.mul(_tokenPriceMATIC);
require(msg.value >= totalPrice, "Payment amount too low");
for(uint i = 0; i < numWolves; i++) {
_tokenIds.increment();
uint256 newItemId = _tokenIds.current();
_mint(msg.sender, newItemId);
}
address payable walletPayable = payable(_treasuryWallet);
walletPayable.transfer(totalPrice);
address payable client = payable(msg.sender);
client.transfer(msg.value - totalPrice);
}
function mintWolfUSDC(uint256 numWolves) public {
require(msg.sender != address(0), "AddressZero cannot purchase");
require(_tokenPriceUSDC != 0, "Token price is not set");
require(saleIsActive, "Sale must be active to mint");
require(balanceOf(msg.sender).add(numWolves) <= maxWolfPurchase, "above max purchase");
require(!whitelistedOnly || (whitelistedOnly && _whitelisted[msg.sender]), "Cannot purchase");
require(!whitelistedOnly || (whitelistedOnly && balanceOf(msg.sender).add(numWolves) <= 1), "above max purchase whitelist");
require(totalSupply().add(numWolves) <= MAX_WOLVES, "Purchase would exceed max supply of wolves");
uint256 totalPrice = numWolves.mul(_tokenPriceUSDC);
require(_tokenUSDC.balanceOf(msg.sender) >= totalPrice, "Balance too low");
for(uint i = 0; i < numWolves; i++) {
_tokenIds.increment();
uint256 newItemId = _tokenIds.current();
_mint(msg.sender, newItemId);
}
uint256 allowance = _tokenUSDC.allowance(msg.sender, address(this));
require(allowance >= totalPrice, "Check the token allowance");
_tokenUSDC.transferFrom(msg.sender, _treasuryWallet, totalPrice);
}
//+---------------------------------------------------------------------------------------+
// Controls (Owner Only)
//+---------------------------------------------------------------------------------------+
function reserveWolves(address a, uint256 amount) public onlyOwner {
require(totalSupply() + amount <= MAX_WOLVES, "max minted");
for(uint256 i = 0; i < amount; i++) {
_tokenIds.increment();
uint256 newItemId = _tokenIds.current();
_safeMint(a, newItemId);
}
}
function setTreasuryWallet(address treasuryWallet) public onlyOwner { _treasuryWallet = treasuryWallet; }
function setTokenPriceMATIC(uint256 price) public onlyOwner { _tokenPriceMATIC = price; }
function setTokenPriceUSDC(uint256 price) public onlyOwner { _tokenPriceUSDC = price; }
function setWhitelist(address[] memory users) public onlyOwner {
for (uint i = 0; i < users.length; i++) {
_whitelisted[users[i]] = true;
}
}
function setBaseURI(string memory baseURI_) public onlyOwner() { _baseURIextended = baseURI_; }
function setSaleActive(bool b) public onlyOwner { saleIsActive = b; }
function setWhitelistedOnly(bool b) public onlyOwner { whitelistedOnly = b; }
//+---------------------------------------------------------------------------------------+
// Getters
//+---------------------------------------------------------------------------------------+
function getTokenPriceMATIC() public view returns (uint256) { return _tokenPriceMATIC; }
function getTokenPriceUSDC() public view returns (uint256) { return _tokenPriceUSDC; }
function getTreasuryWallet() public view returns (address) { return _treasuryWallet; }
function _baseURI() internal view virtual override returns (string memory) { return _baseURIextended; }
function getWhitelisted(address a) public view returns (bool) { return _whitelisted[a]; }
function totalSupply() public view returns (uint256) { return _tokenIds.current(); }
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"tokenUSDC","type":"address"},{"internalType":"address","name":"treasuryWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_WOLVES","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenPriceMATIC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenPriceUSDC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTreasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"getWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWolfPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numWolves","type":"uint256"}],"name":"mintWolf","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numWolves","type":"uint256"}],"name":"mintWolfUSDC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"reserveWolves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"b","type":"bool"}],"name":"setSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setTokenPriceMATIC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setTokenPriceUSDC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"treasuryWallet","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"b","type":"bool"}],"name":"setWhitelistedOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistedOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60806040526000600660146101000a81548160ff0219169083151502179055506001600660156101000a81548160ff0219169083151502179055503480156200004757600080fd5b50604051620050453803806200504583398181016040528101906200006d91906200039f565b6040518060400160405280600d81526020017f574c4420576f6c66205061636b000000000000000000000000000000000000008152506040518060400160405280600381526020017f57504b00000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000f192919062000285565b5080600190805190602001906200010a92919062000285565b5050506200012d62000121620001b760201b60201c565b620001bf60201b60201c565b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506200044a565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002939062000415565b90600052602060002090601f016020900481019282620002b7576000855562000303565b82601f10620002d257805160ff191683800117855562000303565b8280016001018555821562000303579182015b8281111562000302578251825591602001919060010190620002e5565b5b50905062000312919062000316565b5090565b5b808211156200033157600081600090555060010162000317565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000367826200033a565b9050919050565b62000379816200035a565b81146200038557600080fd5b50565b60008151905062000399816200036e565b92915050565b60008060408385031215620003b957620003b862000335565b5b6000620003c98582860162000388565b9250506020620003dc8582860162000388565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200042e57607f821691505b602082108103620004445762000443620003e6565b5b50919050565b614beb806200045a6000396000f3fe6080604052600436106102045760003560e01c80637fa3c2df11610118578063a8818bb9116100a0578063e985e9c51161006f578063e985e9c514610742578063eb8d24441461077f578063f2fde38b146107aa578063f4217648146107d3578063f6192760146107fc57610204565b8063a8818bb914610695578063b88d4fde146106b1578063c87b56dd146106da578063c8b19b441461071757610204565b806395d89b41116100e757806395d89b41146105c6578063a157696b146105f1578063a22a80001461061a578063a22cb46514610643578063a8602fea1461066c57610204565b80637fa3c2df1461051e578063841718a6146105475780638da5cb5b146105705780639186b4251461059b57610204565b80632c035b741161019b57806360b421fb1161016a57806360b421fb146104395780636352211e1461046257806370a082311461049f57806370cca472146104dc578063715018a61461050757610204565b80632c035b741461037f5780633f18064a146103aa57806342842e0e146103e757806355f804b31461041057610204565b8063095ea7b3116101d7578063095ea7b3146102d757806318160ddd1461030057806323b872dd1461032b578063259cf04f1461035457610204565b806301ffc9a71461020957806306fdde031461024657806307cd7ffc14610271578063081812fc1461029a575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190613144565b610827565b60405161023d919061318c565b60405180910390f35b34801561025257600080fd5b5061025b610909565b6040516102689190613240565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190613298565b61099b565b005b3480156102a657600080fd5b506102c160048036038101906102bc9190613298565b610a21565b6040516102ce9190613306565b60405180910390f35b3480156102e357600080fd5b506102fe60048036038101906102f9919061334d565b610aa6565b005b34801561030c57600080fd5b50610315610bbd565b604051610322919061339c565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d91906133b7565b610bce565b005b34801561036057600080fd5b50610369610c2e565b604051610376919061339c565b60405180910390f35b34801561038b57600080fd5b50610394610c38565b6040516103a19190613306565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc919061340a565b610c62565b6040516103de919061318c565b60405180910390f35b3480156103f357600080fd5b5061040e600480360381019061040991906133b7565b610cb8565b005b34801561041c57600080fd5b506104376004803603810190610432919061356c565b610cd8565b005b34801561044557600080fd5b50610460600480360381019061045b9190613298565b610d6e565b005b34801561046e57600080fd5b5061048960048036038101906104849190613298565b61135f565b6040516104969190613306565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c1919061340a565b611410565b6040516104d3919061339c565b60405180910390f35b3480156104e857600080fd5b506104f16114c7565b6040516104fe919061339c565b60405180910390f35b34801561051357600080fd5b5061051c6114cd565b005b34801561052a57600080fd5b506105456004803603810190610540919061334d565b611555565b005b34801561055357600080fd5b5061056e600480360381019061056991906135e1565b61166e565b005b34801561057c57600080fd5b50610585611707565b6040516105929190613306565b60405180910390f35b3480156105a757600080fd5b506105b0611731565b6040516105bd919061318c565b60405180910390f35b3480156105d257600080fd5b506105db611744565b6040516105e89190613240565b60405180910390f35b3480156105fd57600080fd5b50610618600480360381019061061391906135e1565b6117d6565b005b34801561062657600080fd5b50610641600480360381019061063c9190613298565b61186f565b005b34801561064f57600080fd5b5061066a6004803603810190610665919061360e565b6118f5565b005b34801561067857600080fd5b50610693600480360381019061068e919061340a565b61190b565b005b6106af60048036038101906106aa9190613298565b6119cb565b005b3480156106bd57600080fd5b506106d860048036038101906106d391906136ef565b611e3d565b005b3480156106e657600080fd5b5061070160048036038101906106fc9190613298565b611e9f565b60405161070e9190613240565b60405180910390f35b34801561072357600080fd5b5061072c611f46565b604051610739919061339c565b60405180910390f35b34801561074e57600080fd5b5061076960048036038101906107649190613772565b611f50565b604051610776919061318c565b60405180910390f35b34801561078b57600080fd5b50610794611fe4565b6040516107a1919061318c565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc919061340a565b611ff7565b005b3480156107df57600080fd5b506107fa60048036038101906107f5919061387a565b6120ee565b005b34801561080857600080fd5b506108116121ff565b60405161081e919061339c565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610902575061090182612204565b5b9050919050565b606060008054610918906138f2565b80601f0160208091040260200160405190810160405280929190818152602001828054610944906138f2565b80156109915780601f1061096657610100808354040283529160200191610991565b820191906000526020600020905b81548152906001019060200180831161097457829003601f168201915b5050505050905090565b6109a361226e565b73ffffffffffffffffffffffffffffffffffffffff166109c1611707565b73ffffffffffffffffffffffffffffffffffffffff1614610a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0e9061396f565b60405180910390fd5b80600a8190555050565b6000610a2c82612276565b610a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6290613a01565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ab18261135f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1890613a93565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b4061226e565b73ffffffffffffffffffffffffffffffffffffffff161480610b6f5750610b6e81610b6961226e565b611f50565b5b610bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba590613b25565b60405180910390fd5b610bb883836122e2565b505050565b6000610bc9600761239b565b905090565b610bdf610bd961226e565b826123a9565b610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1590613bb7565b60405180910390fd5b610c29838383612487565b505050565b6000600954905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610cd383838360405180602001604052806000815250611e3d565b505050565b610ce061226e565b73ffffffffffffffffffffffffffffffffffffffff16610cfe611707565b73ffffffffffffffffffffffffffffffffffffffff1614610d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4b9061396f565b60405180910390fd5b80600c9080519060200190610d6a929190613035565b5050565b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd490613c23565b60405180910390fd5b6000600a5403610e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1990613c8f565b60405180910390fd5b600660149054906101000a900460ff16610e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6890613cfb565b60405180910390fd5b6005610e8e82610e8033611410565b6126e290919063ffffffff16565b1115610ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec690613d67565b60405180910390fd5b600660159054906101000a900460ff161580610f4c5750600660159054906101000a900460ff168015610f4b5750600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b610f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8290613dd3565b60405180910390fd5b600660159054906101000a900460ff161580610fda5750600660159054906101000a900460ff168015610fd957506001610fd682610fc833611410565b6126e290919063ffffffff16565b11155b5b611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090613e3f565b60405180910390fd5b6103e861103682611028610bbd565b6126e290919063ffffffff16565b1115611077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106e90613ed1565b60405180910390fd5b600061108e600a548361274090919063ffffffff16565b905080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016110ec9190613306565b602060405180830381865afa158015611109573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112d9190613f06565b101561116e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116590613f7f565b60405180910390fd5b60005b828110156111af5761118360076127ba565b600061118f600761239b565b905061119b33826127d0565b5080806111a790613fce565b915050611171565b506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b815260040161120f929190614016565b602060405180830381865afa15801561122c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112509190613f06565b905081811015611295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128c9061408b565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff1660e01b8152600401611316939291906140ab565b6020604051808303816000875af1158015611335573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135991906140f7565b50505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90614196565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147790614228565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6103e881565b6114d561226e565b73ffffffffffffffffffffffffffffffffffffffff166114f3611707565b73ffffffffffffffffffffffffffffffffffffffff1614611549576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115409061396f565b60405180910390fd5b611553600061299d565b565b61155d61226e565b73ffffffffffffffffffffffffffffffffffffffff1661157b611707565b73ffffffffffffffffffffffffffffffffffffffff16146115d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c89061396f565b60405180910390fd5b6103e8816115dd610bbd565b6115e79190614248565b1115611628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161f906142ea565b60405180910390fd5b60005b818110156116695761163d60076127ba565b6000611649600761239b565b90506116558482612a63565b50808061166190613fce565b91505061162b565b505050565b61167661226e565b73ffffffffffffffffffffffffffffffffffffffff16611694611707565b73ffffffffffffffffffffffffffffffffffffffff16146116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e19061396f565b60405180910390fd5b80600660146101000a81548160ff02191690831515021790555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660159054906101000a900460ff1681565b606060018054611753906138f2565b80601f016020809104026020016040519081016040528092919081815260200182805461177f906138f2565b80156117cc5780601f106117a1576101008083540402835291602001916117cc565b820191906000526020600020905b8154815290600101906020018083116117af57829003601f168201915b5050505050905090565b6117de61226e565b73ffffffffffffffffffffffffffffffffffffffff166117fc611707565b73ffffffffffffffffffffffffffffffffffffffff1614611852576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118499061396f565b60405180910390fd5b80600660156101000a81548160ff02191690831515021790555050565b61187761226e565b73ffffffffffffffffffffffffffffffffffffffff16611895611707565b73ffffffffffffffffffffffffffffffffffffffff16146118eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e29061396f565b60405180910390fd5b8060098190555050565b61190761190061226e565b8383612a81565b5050565b61191361226e565b73ffffffffffffffffffffffffffffffffffffffff16611931611707565b73ffffffffffffffffffffffffffffffffffffffff1614611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e9061396f565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603611a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3190613c23565b60405180910390fd5b600060095403611a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7690613c8f565b60405180910390fd5b600660149054906101000a900460ff16611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac590613cfb565b60405180910390fd5b6005611aeb82611add33611410565b6126e290919063ffffffff16565b1115611b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2390613d67565b60405180910390fd5b600660159054906101000a900460ff161580611ba95750600660159054906101000a900460ff168015611ba85750600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdf90613dd3565b60405180910390fd5b600660159054906101000a900460ff161580611c375750600660159054906101000a900460ff168015611c3657506001611c3382611c2533611410565b6126e290919063ffffffff16565b11155b5b611c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6d90613e3f565b60405180910390fd5b6103e8611c9382611c85610bbd565b6126e290919063ffffffff16565b1115611cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccb90613ed1565b60405180910390fd5b6000611ceb6009548361274090919063ffffffff16565b905080341015611d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2790614356565b60405180910390fd5b60005b82811015611d7157611d4560076127ba565b6000611d51600761239b565b9050611d5d33826127d0565b508080611d6990613fce565b915050611d33565b506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611ddf573d6000803e3d6000fd5b5060003390508073ffffffffffffffffffffffffffffffffffffffff166108fc8434611e0b9190614376565b9081150290604051600060405180830381858888f19350505050158015611e36573d6000803e3d6000fd5b5050505050565b611e4e611e4861226e565b836123a9565b611e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8490613bb7565b60405180910390fd5b611e9984848484612bed565b50505050565b6060611eaa82612276565b611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee09061441c565b60405180910390fd5b6000611ef3612c49565b90506000815111611f135760405180602001604052806000815250611f3e565b80611f1d84612cdb565b604051602001611f2e929190614478565b6040516020818303038152906040525b915050919050565b6000600a54905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600660149054906101000a900460ff1681565b611fff61226e565b73ffffffffffffffffffffffffffffffffffffffff1661201d611707565b73ffffffffffffffffffffffffffffffffffffffff1614612073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206a9061396f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d99061450e565b60405180910390fd5b6120eb8161299d565b50565b6120f661226e565b73ffffffffffffffffffffffffffffffffffffffff16612114611707565b73ffffffffffffffffffffffffffffffffffffffff161461216a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121619061396f565b60405180910390fd5b60005b81518110156121fb576001600d600084848151811061218f5761218e61452e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806121f390613fce565b91505061216d565b5050565b600581565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123558361135f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60006123b482612276565b6123f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ea906145cf565b60405180910390fd5b60006123fe8361135f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061246d57508373ffffffffffffffffffffffffffffffffffffffff1661245584610a21565b73ffffffffffffffffffffffffffffffffffffffff16145b8061247e575061247d8185611f50565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124a78261135f565b73ffffffffffffffffffffffffffffffffffffffff16146124fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f490614661565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361256c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612563906146f3565b60405180910390fd5b612577838383612e3b565b6125826000826122e2565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125d29190614376565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126299190614248565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008082846126f19190614248565b905083811015612736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272d9061475f565b60405180910390fd5b8091505092915050565b600080830361275257600090506127b4565b60008284612760919061477f565b905082848261276f9190614808565b146127af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a6906148ab565b60405180910390fd5b809150505b92915050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361283f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283690614917565b60405180910390fd5b61284881612276565b15612888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287f90614983565b60405180910390fd5b61289460008383612e3b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128e49190614248565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a7d828260405180602001604052806000815250612e40565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae6906149ef565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612be0919061318c565b60405180910390a3505050565b612bf8848484612487565b612c0484848484612e9b565b612c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3a90614a81565b60405180910390fd5b50505050565b6060600c8054612c58906138f2565b80601f0160208091040260200160405190810160405280929190818152602001828054612c84906138f2565b8015612cd15780601f10612ca657610100808354040283529160200191612cd1565b820191906000526020600020905b815481529060010190602001808311612cb457829003601f168201915b5050505050905090565b606060008203612d22576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e36565b600082905060005b60008214612d54578080612d3d90613fce565b915050600a82612d4d9190614808565b9150612d2a565b60008167ffffffffffffffff811115612d7057612d6f613441565b5b6040519080825280601f01601f191660200182016040528015612da25781602001600182028036833780820191505090505b5090505b60008514612e2f57600182612dbb9190614376565b9150600a85612dca9190614aa1565b6030612dd69190614248565b60f81b818381518110612dec57612deb61452e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e289190614808565b9450612da6565b8093505050505b919050565b505050565b612e4a83836127d0565b612e576000848484612e9b565b612e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8d90614a81565b60405180910390fd5b505050565b6000612ebc8473ffffffffffffffffffffffffffffffffffffffff16613022565b15613015578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ee561226e565b8786866040518563ffffffff1660e01b8152600401612f079493929190614b27565b6020604051808303816000875af1925050508015612f4357506040513d601f19601f82011682018060405250810190612f409190614b88565b60015b612fc5573d8060008114612f73576040519150601f19603f3d011682016040523d82523d6000602084013e612f78565b606091505b506000815103612fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb490614a81565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061301a565b600190505b949350505050565b600080823b905060008111915050919050565b828054613041906138f2565b90600052602060002090601f01602090048101928261306357600085556130aa565b82601f1061307c57805160ff19168380011785556130aa565b828001600101855582156130aa579182015b828111156130a957825182559160200191906001019061308e565b5b5090506130b791906130bb565b5090565b5b808211156130d45760008160009055506001016130bc565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613121816130ec565b811461312c57600080fd5b50565b60008135905061313e81613118565b92915050565b60006020828403121561315a576131596130e2565b5b60006131688482850161312f565b91505092915050565b60008115159050919050565b61318681613171565b82525050565b60006020820190506131a1600083018461317d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131e15780820151818401526020810190506131c6565b838111156131f0576000848401525b50505050565b6000601f19601f8301169050919050565b6000613212826131a7565b61321c81856131b2565b935061322c8185602086016131c3565b613235816131f6565b840191505092915050565b6000602082019050818103600083015261325a8184613207565b905092915050565b6000819050919050565b61327581613262565b811461328057600080fd5b50565b6000813590506132928161326c565b92915050565b6000602082840312156132ae576132ad6130e2565b5b60006132bc84828501613283565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132f0826132c5565b9050919050565b613300816132e5565b82525050565b600060208201905061331b60008301846132f7565b92915050565b61332a816132e5565b811461333557600080fd5b50565b60008135905061334781613321565b92915050565b60008060408385031215613364576133636130e2565b5b600061337285828601613338565b925050602061338385828601613283565b9150509250929050565b61339681613262565b82525050565b60006020820190506133b1600083018461338d565b92915050565b6000806000606084860312156133d0576133cf6130e2565b5b60006133de86828701613338565b93505060206133ef86828701613338565b925050604061340086828701613283565b9150509250925092565b6000602082840312156134205761341f6130e2565b5b600061342e84828501613338565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613479826131f6565b810181811067ffffffffffffffff8211171561349857613497613441565b5b80604052505050565b60006134ab6130d8565b90506134b78282613470565b919050565b600067ffffffffffffffff8211156134d7576134d6613441565b5b6134e0826131f6565b9050602081019050919050565b82818337600083830152505050565b600061350f61350a846134bc565b6134a1565b90508281526020810184848401111561352b5761352a61343c565b5b6135368482856134ed565b509392505050565b600082601f83011261355357613552613437565b5b81356135638482602086016134fc565b91505092915050565b600060208284031215613582576135816130e2565b5b600082013567ffffffffffffffff8111156135a05761359f6130e7565b5b6135ac8482850161353e565b91505092915050565b6135be81613171565b81146135c957600080fd5b50565b6000813590506135db816135b5565b92915050565b6000602082840312156135f7576135f66130e2565b5b6000613605848285016135cc565b91505092915050565b60008060408385031215613625576136246130e2565b5b600061363385828601613338565b9250506020613644858286016135cc565b9150509250929050565b600067ffffffffffffffff82111561366957613668613441565b5b613672826131f6565b9050602081019050919050565b600061369261368d8461364e565b6134a1565b9050828152602081018484840111156136ae576136ad61343c565b5b6136b98482856134ed565b509392505050565b600082601f8301126136d6576136d5613437565b5b81356136e684826020860161367f565b91505092915050565b60008060008060808587031215613709576137086130e2565b5b600061371787828801613338565b945050602061372887828801613338565b935050604061373987828801613283565b925050606085013567ffffffffffffffff81111561375a576137596130e7565b5b613766878288016136c1565b91505092959194509250565b60008060408385031215613789576137886130e2565b5b600061379785828601613338565b92505060206137a885828601613338565b9150509250929050565b600067ffffffffffffffff8211156137cd576137cc613441565b5b602082029050602081019050919050565b600080fd5b60006137f66137f1846137b2565b6134a1565b90508083825260208201905060208402830185811115613819576138186137de565b5b835b81811015613842578061382e8882613338565b84526020840193505060208101905061381b565b5050509392505050565b600082601f83011261386157613860613437565b5b81356138718482602086016137e3565b91505092915050565b6000602082840312156138905761388f6130e2565b5b600082013567ffffffffffffffff8111156138ae576138ad6130e7565b5b6138ba8482850161384c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061390a57607f821691505b60208210810361391d5761391c6138c3565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139596020836131b2565b915061396482613923565b602082019050919050565b600060208201905081810360008301526139888161394c565b9050919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006139eb602c836131b2565b91506139f68261398f565b604082019050919050565b60006020820190508181036000830152613a1a816139de565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a7d6021836131b2565b9150613a8882613a21565b604082019050919050565b60006020820190508181036000830152613aac81613a70565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613b0f6038836131b2565b9150613b1a82613ab3565b604082019050919050565b60006020820190508181036000830152613b3e81613b02565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613ba16031836131b2565b9150613bac82613b45565b604082019050919050565b60006020820190508181036000830152613bd081613b94565b9050919050565b7f416464726573735a65726f2063616e6e6f742070757263686173650000000000600082015250565b6000613c0d601b836131b2565b9150613c1882613bd7565b602082019050919050565b60006020820190508181036000830152613c3c81613c00565b9050919050565b7f546f6b656e207072696365206973206e6f742073657400000000000000000000600082015250565b6000613c796016836131b2565b9150613c8482613c43565b602082019050919050565b60006020820190508181036000830152613ca881613c6c565b9050919050565b7f53616c65206d7573742062652061637469766520746f206d696e740000000000600082015250565b6000613ce5601b836131b2565b9150613cf082613caf565b602082019050919050565b60006020820190508181036000830152613d1481613cd8565b9050919050565b7f61626f7665206d61782070757263686173650000000000000000000000000000600082015250565b6000613d516012836131b2565b9150613d5c82613d1b565b602082019050919050565b60006020820190508181036000830152613d8081613d44565b9050919050565b7f43616e6e6f742070757263686173650000000000000000000000000000000000600082015250565b6000613dbd600f836131b2565b9150613dc882613d87565b602082019050919050565b60006020820190508181036000830152613dec81613db0565b9050919050565b7f61626f7665206d61782070757263686173652077686974656c69737400000000600082015250565b6000613e29601c836131b2565b9150613e3482613df3565b602082019050919050565b60006020820190508181036000830152613e5881613e1c565b9050919050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620776f6c76657300000000000000000000000000000000000000000000602082015250565b6000613ebb602a836131b2565b9150613ec682613e5f565b604082019050919050565b60006020820190508181036000830152613eea81613eae565b9050919050565b600081519050613f008161326c565b92915050565b600060208284031215613f1c57613f1b6130e2565b5b6000613f2a84828501613ef1565b91505092915050565b7f42616c616e636520746f6f206c6f770000000000000000000000000000000000600082015250565b6000613f69600f836131b2565b9150613f7482613f33565b602082019050919050565b60006020820190508181036000830152613f9881613f5c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613fd982613262565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361400b5761400a613f9f565b5b600182019050919050565b600060408201905061402b60008301856132f7565b61403860208301846132f7565b9392505050565b7f436865636b2074686520746f6b656e20616c6c6f77616e636500000000000000600082015250565b60006140756019836131b2565b91506140808261403f565b602082019050919050565b600060208201905081810360008301526140a481614068565b9050919050565b60006060820190506140c060008301866132f7565b6140cd60208301856132f7565b6140da604083018461338d565b949350505050565b6000815190506140f1816135b5565b92915050565b60006020828403121561410d5761410c6130e2565b5b600061411b848285016140e2565b91505092915050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006141806029836131b2565b915061418b82614124565b604082019050919050565b600060208201905081810360008301526141af81614173565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614212602a836131b2565b915061421d826141b6565b604082019050919050565b6000602082019050818103600083015261424181614205565b9050919050565b600061425382613262565b915061425e83613262565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561429357614292613f9f565b5b828201905092915050565b7f6d6178206d696e74656400000000000000000000000000000000000000000000600082015250565b60006142d4600a836131b2565b91506142df8261429e565b602082019050919050565b60006020820190508181036000830152614303816142c7565b9050919050565b7f5061796d656e7420616d6f756e7420746f6f206c6f7700000000000000000000600082015250565b60006143406016836131b2565b915061434b8261430a565b602082019050919050565b6000602082019050818103600083015261436f81614333565b9050919050565b600061438182613262565b915061438c83613262565b92508282101561439f5761439e613f9f565b5b828203905092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614406602f836131b2565b9150614411826143aa565b604082019050919050565b60006020820190508181036000830152614435816143f9565b9050919050565b600081905092915050565b6000614452826131a7565b61445c818561443c565b935061446c8185602086016131c3565b80840191505092915050565b60006144848285614447565b91506144908284614447565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144f86026836131b2565b91506145038261449c565b604082019050919050565b60006020820190508181036000830152614527816144eb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006145b9602c836131b2565b91506145c48261455d565b604082019050919050565b600060208201905081810360008301526145e8816145ac565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b600061464b6029836131b2565b9150614656826145ef565b604082019050919050565b6000602082019050818103600083015261467a8161463e565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146dd6024836131b2565b91506146e882614681565b604082019050919050565b6000602082019050818103600083015261470c816146d0565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614749601b836131b2565b915061475482614713565b602082019050919050565b600060208201905081810360008301526147788161473c565b9050919050565b600061478a82613262565b915061479583613262565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147ce576147cd613f9f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061481382613262565b915061481e83613262565b92508261482e5761482d6147d9565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006148956021836131b2565b91506148a082614839565b604082019050919050565b600060208201905081810360008301526148c481614888565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006149016020836131b2565b915061490c826148cb565b602082019050919050565b60006020820190508181036000830152614930816148f4565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061496d601c836131b2565b915061497882614937565b602082019050919050565b6000602082019050818103600083015261499c81614960565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006149d96019836131b2565b91506149e4826149a3565b602082019050919050565b60006020820190508181036000830152614a08816149cc565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614a6b6032836131b2565b9150614a7682614a0f565b604082019050919050565b60006020820190508181036000830152614a9a81614a5e565b9050919050565b6000614aac82613262565b9150614ab783613262565b925082614ac757614ac66147d9565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000614af982614ad2565b614b038185614add565b9350614b138185602086016131c3565b614b1c816131f6565b840191505092915050565b6000608082019050614b3c60008301876132f7565b614b4960208301866132f7565b614b56604083018561338d565b8181036060830152614b688184614aee565b905095945050505050565b600081519050614b8281613118565b92915050565b600060208284031215614b9e57614b9d6130e2565b5b6000614bac84828501614b73565b9150509291505056fea26469706673582212207169e1915503193d57c8848c3f280f55eac65613a31eb07b6e4effdb5ce274c964736f6c634300080d00330000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa84174000000000000000000000000bb70063bf4dfa26ce088b478ab52368e423d2bfe
Deployed Bytecode
0x6080604052600436106102045760003560e01c80637fa3c2df11610118578063a8818bb9116100a0578063e985e9c51161006f578063e985e9c514610742578063eb8d24441461077f578063f2fde38b146107aa578063f4217648146107d3578063f6192760146107fc57610204565b8063a8818bb914610695578063b88d4fde146106b1578063c87b56dd146106da578063c8b19b441461071757610204565b806395d89b41116100e757806395d89b41146105c6578063a157696b146105f1578063a22a80001461061a578063a22cb46514610643578063a8602fea1461066c57610204565b80637fa3c2df1461051e578063841718a6146105475780638da5cb5b146105705780639186b4251461059b57610204565b80632c035b741161019b57806360b421fb1161016a57806360b421fb146104395780636352211e1461046257806370a082311461049f57806370cca472146104dc578063715018a61461050757610204565b80632c035b741461037f5780633f18064a146103aa57806342842e0e146103e757806355f804b31461041057610204565b8063095ea7b3116101d7578063095ea7b3146102d757806318160ddd1461030057806323b872dd1461032b578063259cf04f1461035457610204565b806301ffc9a71461020957806306fdde031461024657806307cd7ffc14610271578063081812fc1461029a575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190613144565b610827565b60405161023d919061318c565b60405180910390f35b34801561025257600080fd5b5061025b610909565b6040516102689190613240565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190613298565b61099b565b005b3480156102a657600080fd5b506102c160048036038101906102bc9190613298565b610a21565b6040516102ce9190613306565b60405180910390f35b3480156102e357600080fd5b506102fe60048036038101906102f9919061334d565b610aa6565b005b34801561030c57600080fd5b50610315610bbd565b604051610322919061339c565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d91906133b7565b610bce565b005b34801561036057600080fd5b50610369610c2e565b604051610376919061339c565b60405180910390f35b34801561038b57600080fd5b50610394610c38565b6040516103a19190613306565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc919061340a565b610c62565b6040516103de919061318c565b60405180910390f35b3480156103f357600080fd5b5061040e600480360381019061040991906133b7565b610cb8565b005b34801561041c57600080fd5b506104376004803603810190610432919061356c565b610cd8565b005b34801561044557600080fd5b50610460600480360381019061045b9190613298565b610d6e565b005b34801561046e57600080fd5b5061048960048036038101906104849190613298565b61135f565b6040516104969190613306565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c1919061340a565b611410565b6040516104d3919061339c565b60405180910390f35b3480156104e857600080fd5b506104f16114c7565b6040516104fe919061339c565b60405180910390f35b34801561051357600080fd5b5061051c6114cd565b005b34801561052a57600080fd5b506105456004803603810190610540919061334d565b611555565b005b34801561055357600080fd5b5061056e600480360381019061056991906135e1565b61166e565b005b34801561057c57600080fd5b50610585611707565b6040516105929190613306565b60405180910390f35b3480156105a757600080fd5b506105b0611731565b6040516105bd919061318c565b60405180910390f35b3480156105d257600080fd5b506105db611744565b6040516105e89190613240565b60405180910390f35b3480156105fd57600080fd5b50610618600480360381019061061391906135e1565b6117d6565b005b34801561062657600080fd5b50610641600480360381019061063c9190613298565b61186f565b005b34801561064f57600080fd5b5061066a6004803603810190610665919061360e565b6118f5565b005b34801561067857600080fd5b50610693600480360381019061068e919061340a565b61190b565b005b6106af60048036038101906106aa9190613298565b6119cb565b005b3480156106bd57600080fd5b506106d860048036038101906106d391906136ef565b611e3d565b005b3480156106e657600080fd5b5061070160048036038101906106fc9190613298565b611e9f565b60405161070e9190613240565b60405180910390f35b34801561072357600080fd5b5061072c611f46565b604051610739919061339c565b60405180910390f35b34801561074e57600080fd5b5061076960048036038101906107649190613772565b611f50565b604051610776919061318c565b60405180910390f35b34801561078b57600080fd5b50610794611fe4565b6040516107a1919061318c565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc919061340a565b611ff7565b005b3480156107df57600080fd5b506107fa60048036038101906107f5919061387a565b6120ee565b005b34801561080857600080fd5b506108116121ff565b60405161081e919061339c565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610902575061090182612204565b5b9050919050565b606060008054610918906138f2565b80601f0160208091040260200160405190810160405280929190818152602001828054610944906138f2565b80156109915780601f1061096657610100808354040283529160200191610991565b820191906000526020600020905b81548152906001019060200180831161097457829003601f168201915b5050505050905090565b6109a361226e565b73ffffffffffffffffffffffffffffffffffffffff166109c1611707565b73ffffffffffffffffffffffffffffffffffffffff1614610a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0e9061396f565b60405180910390fd5b80600a8190555050565b6000610a2c82612276565b610a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6290613a01565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ab18261135f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1890613a93565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b4061226e565b73ffffffffffffffffffffffffffffffffffffffff161480610b6f5750610b6e81610b6961226e565b611f50565b5b610bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba590613b25565b60405180910390fd5b610bb883836122e2565b505050565b6000610bc9600761239b565b905090565b610bdf610bd961226e565b826123a9565b610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1590613bb7565b60405180910390fd5b610c29838383612487565b505050565b6000600954905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610cd383838360405180602001604052806000815250611e3d565b505050565b610ce061226e565b73ffffffffffffffffffffffffffffffffffffffff16610cfe611707565b73ffffffffffffffffffffffffffffffffffffffff1614610d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4b9061396f565b60405180910390fd5b80600c9080519060200190610d6a929190613035565b5050565b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd490613c23565b60405180910390fd5b6000600a5403610e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1990613c8f565b60405180910390fd5b600660149054906101000a900460ff16610e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6890613cfb565b60405180910390fd5b6005610e8e82610e8033611410565b6126e290919063ffffffff16565b1115610ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec690613d67565b60405180910390fd5b600660159054906101000a900460ff161580610f4c5750600660159054906101000a900460ff168015610f4b5750600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b610f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8290613dd3565b60405180910390fd5b600660159054906101000a900460ff161580610fda5750600660159054906101000a900460ff168015610fd957506001610fd682610fc833611410565b6126e290919063ffffffff16565b11155b5b611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090613e3f565b60405180910390fd5b6103e861103682611028610bbd565b6126e290919063ffffffff16565b1115611077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106e90613ed1565b60405180910390fd5b600061108e600a548361274090919063ffffffff16565b905080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016110ec9190613306565b602060405180830381865afa158015611109573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112d9190613f06565b101561116e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116590613f7f565b60405180910390fd5b60005b828110156111af5761118360076127ba565b600061118f600761239b565b905061119b33826127d0565b5080806111a790613fce565b915050611171565b506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b815260040161120f929190614016565b602060405180830381865afa15801561122c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112509190613f06565b905081811015611295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128c9061408b565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff1660e01b8152600401611316939291906140ab565b6020604051808303816000875af1158015611335573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135991906140f7565b50505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90614196565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147790614228565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6103e881565b6114d561226e565b73ffffffffffffffffffffffffffffffffffffffff166114f3611707565b73ffffffffffffffffffffffffffffffffffffffff1614611549576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115409061396f565b60405180910390fd5b611553600061299d565b565b61155d61226e565b73ffffffffffffffffffffffffffffffffffffffff1661157b611707565b73ffffffffffffffffffffffffffffffffffffffff16146115d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c89061396f565b60405180910390fd5b6103e8816115dd610bbd565b6115e79190614248565b1115611628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161f906142ea565b60405180910390fd5b60005b818110156116695761163d60076127ba565b6000611649600761239b565b90506116558482612a63565b50808061166190613fce565b91505061162b565b505050565b61167661226e565b73ffffffffffffffffffffffffffffffffffffffff16611694611707565b73ffffffffffffffffffffffffffffffffffffffff16146116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e19061396f565b60405180910390fd5b80600660146101000a81548160ff02191690831515021790555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660159054906101000a900460ff1681565b606060018054611753906138f2565b80601f016020809104026020016040519081016040528092919081815260200182805461177f906138f2565b80156117cc5780601f106117a1576101008083540402835291602001916117cc565b820191906000526020600020905b8154815290600101906020018083116117af57829003601f168201915b5050505050905090565b6117de61226e565b73ffffffffffffffffffffffffffffffffffffffff166117fc611707565b73ffffffffffffffffffffffffffffffffffffffff1614611852576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118499061396f565b60405180910390fd5b80600660156101000a81548160ff02191690831515021790555050565b61187761226e565b73ffffffffffffffffffffffffffffffffffffffff16611895611707565b73ffffffffffffffffffffffffffffffffffffffff16146118eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e29061396f565b60405180910390fd5b8060098190555050565b61190761190061226e565b8383612a81565b5050565b61191361226e565b73ffffffffffffffffffffffffffffffffffffffff16611931611707565b73ffffffffffffffffffffffffffffffffffffffff1614611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e9061396f565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603611a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3190613c23565b60405180910390fd5b600060095403611a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7690613c8f565b60405180910390fd5b600660149054906101000a900460ff16611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac590613cfb565b60405180910390fd5b6005611aeb82611add33611410565b6126e290919063ffffffff16565b1115611b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2390613d67565b60405180910390fd5b600660159054906101000a900460ff161580611ba95750600660159054906101000a900460ff168015611ba85750600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdf90613dd3565b60405180910390fd5b600660159054906101000a900460ff161580611c375750600660159054906101000a900460ff168015611c3657506001611c3382611c2533611410565b6126e290919063ffffffff16565b11155b5b611c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6d90613e3f565b60405180910390fd5b6103e8611c9382611c85610bbd565b6126e290919063ffffffff16565b1115611cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccb90613ed1565b60405180910390fd5b6000611ceb6009548361274090919063ffffffff16565b905080341015611d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2790614356565b60405180910390fd5b60005b82811015611d7157611d4560076127ba565b6000611d51600761239b565b9050611d5d33826127d0565b508080611d6990613fce565b915050611d33565b506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611ddf573d6000803e3d6000fd5b5060003390508073ffffffffffffffffffffffffffffffffffffffff166108fc8434611e0b9190614376565b9081150290604051600060405180830381858888f19350505050158015611e36573d6000803e3d6000fd5b5050505050565b611e4e611e4861226e565b836123a9565b611e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8490613bb7565b60405180910390fd5b611e9984848484612bed565b50505050565b6060611eaa82612276565b611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee09061441c565b60405180910390fd5b6000611ef3612c49565b90506000815111611f135760405180602001604052806000815250611f3e565b80611f1d84612cdb565b604051602001611f2e929190614478565b6040516020818303038152906040525b915050919050565b6000600a54905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600660149054906101000a900460ff1681565b611fff61226e565b73ffffffffffffffffffffffffffffffffffffffff1661201d611707565b73ffffffffffffffffffffffffffffffffffffffff1614612073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206a9061396f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d99061450e565b60405180910390fd5b6120eb8161299d565b50565b6120f661226e565b73ffffffffffffffffffffffffffffffffffffffff16612114611707565b73ffffffffffffffffffffffffffffffffffffffff161461216a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121619061396f565b60405180910390fd5b60005b81518110156121fb576001600d600084848151811061218f5761218e61452e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806121f390613fce565b91505061216d565b5050565b600581565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123558361135f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60006123b482612276565b6123f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ea906145cf565b60405180910390fd5b60006123fe8361135f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061246d57508373ffffffffffffffffffffffffffffffffffffffff1661245584610a21565b73ffffffffffffffffffffffffffffffffffffffff16145b8061247e575061247d8185611f50565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124a78261135f565b73ffffffffffffffffffffffffffffffffffffffff16146124fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f490614661565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361256c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612563906146f3565b60405180910390fd5b612577838383612e3b565b6125826000826122e2565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125d29190614376565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126299190614248565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008082846126f19190614248565b905083811015612736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272d9061475f565b60405180910390fd5b8091505092915050565b600080830361275257600090506127b4565b60008284612760919061477f565b905082848261276f9190614808565b146127af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a6906148ab565b60405180910390fd5b809150505b92915050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361283f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283690614917565b60405180910390fd5b61284881612276565b15612888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287f90614983565b60405180910390fd5b61289460008383612e3b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128e49190614248565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a7d828260405180602001604052806000815250612e40565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae6906149ef565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612be0919061318c565b60405180910390a3505050565b612bf8848484612487565b612c0484848484612e9b565b612c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3a90614a81565b60405180910390fd5b50505050565b6060600c8054612c58906138f2565b80601f0160208091040260200160405190810160405280929190818152602001828054612c84906138f2565b8015612cd15780601f10612ca657610100808354040283529160200191612cd1565b820191906000526020600020905b815481529060010190602001808311612cb457829003601f168201915b5050505050905090565b606060008203612d22576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e36565b600082905060005b60008214612d54578080612d3d90613fce565b915050600a82612d4d9190614808565b9150612d2a565b60008167ffffffffffffffff811115612d7057612d6f613441565b5b6040519080825280601f01601f191660200182016040528015612da25781602001600182028036833780820191505090505b5090505b60008514612e2f57600182612dbb9190614376565b9150600a85612dca9190614aa1565b6030612dd69190614248565b60f81b818381518110612dec57612deb61452e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e289190614808565b9450612da6565b8093505050505b919050565b505050565b612e4a83836127d0565b612e576000848484612e9b565b612e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8d90614a81565b60405180910390fd5b505050565b6000612ebc8473ffffffffffffffffffffffffffffffffffffffff16613022565b15613015578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ee561226e565b8786866040518563ffffffff1660e01b8152600401612f079493929190614b27565b6020604051808303816000875af1925050508015612f4357506040513d601f19601f82011682018060405250810190612f409190614b88565b60015b612fc5573d8060008114612f73576040519150601f19603f3d011682016040523d82523d6000602084013e612f78565b606091505b506000815103612fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb490614a81565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061301a565b600190505b949350505050565b600080823b905060008111915050919050565b828054613041906138f2565b90600052602060002090601f01602090048101928261306357600085556130aa565b82601f1061307c57805160ff19168380011785556130aa565b828001600101855582156130aa579182015b828111156130a957825182559160200191906001019061308e565b5b5090506130b791906130bb565b5090565b5b808211156130d45760008160009055506001016130bc565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613121816130ec565b811461312c57600080fd5b50565b60008135905061313e81613118565b92915050565b60006020828403121561315a576131596130e2565b5b60006131688482850161312f565b91505092915050565b60008115159050919050565b61318681613171565b82525050565b60006020820190506131a1600083018461317d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131e15780820151818401526020810190506131c6565b838111156131f0576000848401525b50505050565b6000601f19601f8301169050919050565b6000613212826131a7565b61321c81856131b2565b935061322c8185602086016131c3565b613235816131f6565b840191505092915050565b6000602082019050818103600083015261325a8184613207565b905092915050565b6000819050919050565b61327581613262565b811461328057600080fd5b50565b6000813590506132928161326c565b92915050565b6000602082840312156132ae576132ad6130e2565b5b60006132bc84828501613283565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132f0826132c5565b9050919050565b613300816132e5565b82525050565b600060208201905061331b60008301846132f7565b92915050565b61332a816132e5565b811461333557600080fd5b50565b60008135905061334781613321565b92915050565b60008060408385031215613364576133636130e2565b5b600061337285828601613338565b925050602061338385828601613283565b9150509250929050565b61339681613262565b82525050565b60006020820190506133b1600083018461338d565b92915050565b6000806000606084860312156133d0576133cf6130e2565b5b60006133de86828701613338565b93505060206133ef86828701613338565b925050604061340086828701613283565b9150509250925092565b6000602082840312156134205761341f6130e2565b5b600061342e84828501613338565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613479826131f6565b810181811067ffffffffffffffff8211171561349857613497613441565b5b80604052505050565b60006134ab6130d8565b90506134b78282613470565b919050565b600067ffffffffffffffff8211156134d7576134d6613441565b5b6134e0826131f6565b9050602081019050919050565b82818337600083830152505050565b600061350f61350a846134bc565b6134a1565b90508281526020810184848401111561352b5761352a61343c565b5b6135368482856134ed565b509392505050565b600082601f83011261355357613552613437565b5b81356135638482602086016134fc565b91505092915050565b600060208284031215613582576135816130e2565b5b600082013567ffffffffffffffff8111156135a05761359f6130e7565b5b6135ac8482850161353e565b91505092915050565b6135be81613171565b81146135c957600080fd5b50565b6000813590506135db816135b5565b92915050565b6000602082840312156135f7576135f66130e2565b5b6000613605848285016135cc565b91505092915050565b60008060408385031215613625576136246130e2565b5b600061363385828601613338565b9250506020613644858286016135cc565b9150509250929050565b600067ffffffffffffffff82111561366957613668613441565b5b613672826131f6565b9050602081019050919050565b600061369261368d8461364e565b6134a1565b9050828152602081018484840111156136ae576136ad61343c565b5b6136b98482856134ed565b509392505050565b600082601f8301126136d6576136d5613437565b5b81356136e684826020860161367f565b91505092915050565b60008060008060808587031215613709576137086130e2565b5b600061371787828801613338565b945050602061372887828801613338565b935050604061373987828801613283565b925050606085013567ffffffffffffffff81111561375a576137596130e7565b5b613766878288016136c1565b91505092959194509250565b60008060408385031215613789576137886130e2565b5b600061379785828601613338565b92505060206137a885828601613338565b9150509250929050565b600067ffffffffffffffff8211156137cd576137cc613441565b5b602082029050602081019050919050565b600080fd5b60006137f66137f1846137b2565b6134a1565b90508083825260208201905060208402830185811115613819576138186137de565b5b835b81811015613842578061382e8882613338565b84526020840193505060208101905061381b565b5050509392505050565b600082601f83011261386157613860613437565b5b81356138718482602086016137e3565b91505092915050565b6000602082840312156138905761388f6130e2565b5b600082013567ffffffffffffffff8111156138ae576138ad6130e7565b5b6138ba8482850161384c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061390a57607f821691505b60208210810361391d5761391c6138c3565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139596020836131b2565b915061396482613923565b602082019050919050565b600060208201905081810360008301526139888161394c565b9050919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006139eb602c836131b2565b91506139f68261398f565b604082019050919050565b60006020820190508181036000830152613a1a816139de565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a7d6021836131b2565b9150613a8882613a21565b604082019050919050565b60006020820190508181036000830152613aac81613a70565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613b0f6038836131b2565b9150613b1a82613ab3565b604082019050919050565b60006020820190508181036000830152613b3e81613b02565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613ba16031836131b2565b9150613bac82613b45565b604082019050919050565b60006020820190508181036000830152613bd081613b94565b9050919050565b7f416464726573735a65726f2063616e6e6f742070757263686173650000000000600082015250565b6000613c0d601b836131b2565b9150613c1882613bd7565b602082019050919050565b60006020820190508181036000830152613c3c81613c00565b9050919050565b7f546f6b656e207072696365206973206e6f742073657400000000000000000000600082015250565b6000613c796016836131b2565b9150613c8482613c43565b602082019050919050565b60006020820190508181036000830152613ca881613c6c565b9050919050565b7f53616c65206d7573742062652061637469766520746f206d696e740000000000600082015250565b6000613ce5601b836131b2565b9150613cf082613caf565b602082019050919050565b60006020820190508181036000830152613d1481613cd8565b9050919050565b7f61626f7665206d61782070757263686173650000000000000000000000000000600082015250565b6000613d516012836131b2565b9150613d5c82613d1b565b602082019050919050565b60006020820190508181036000830152613d8081613d44565b9050919050565b7f43616e6e6f742070757263686173650000000000000000000000000000000000600082015250565b6000613dbd600f836131b2565b9150613dc882613d87565b602082019050919050565b60006020820190508181036000830152613dec81613db0565b9050919050565b7f61626f7665206d61782070757263686173652077686974656c69737400000000600082015250565b6000613e29601c836131b2565b9150613e3482613df3565b602082019050919050565b60006020820190508181036000830152613e5881613e1c565b9050919050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620776f6c76657300000000000000000000000000000000000000000000602082015250565b6000613ebb602a836131b2565b9150613ec682613e5f565b604082019050919050565b60006020820190508181036000830152613eea81613eae565b9050919050565b600081519050613f008161326c565b92915050565b600060208284031215613f1c57613f1b6130e2565b5b6000613f2a84828501613ef1565b91505092915050565b7f42616c616e636520746f6f206c6f770000000000000000000000000000000000600082015250565b6000613f69600f836131b2565b9150613f7482613f33565b602082019050919050565b60006020820190508181036000830152613f9881613f5c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613fd982613262565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361400b5761400a613f9f565b5b600182019050919050565b600060408201905061402b60008301856132f7565b61403860208301846132f7565b9392505050565b7f436865636b2074686520746f6b656e20616c6c6f77616e636500000000000000600082015250565b60006140756019836131b2565b91506140808261403f565b602082019050919050565b600060208201905081810360008301526140a481614068565b9050919050565b60006060820190506140c060008301866132f7565b6140cd60208301856132f7565b6140da604083018461338d565b949350505050565b6000815190506140f1816135b5565b92915050565b60006020828403121561410d5761410c6130e2565b5b600061411b848285016140e2565b91505092915050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006141806029836131b2565b915061418b82614124565b604082019050919050565b600060208201905081810360008301526141af81614173565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614212602a836131b2565b915061421d826141b6565b604082019050919050565b6000602082019050818103600083015261424181614205565b9050919050565b600061425382613262565b915061425e83613262565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561429357614292613f9f565b5b828201905092915050565b7f6d6178206d696e74656400000000000000000000000000000000000000000000600082015250565b60006142d4600a836131b2565b91506142df8261429e565b602082019050919050565b60006020820190508181036000830152614303816142c7565b9050919050565b7f5061796d656e7420616d6f756e7420746f6f206c6f7700000000000000000000600082015250565b60006143406016836131b2565b915061434b8261430a565b602082019050919050565b6000602082019050818103600083015261436f81614333565b9050919050565b600061438182613262565b915061438c83613262565b92508282101561439f5761439e613f9f565b5b828203905092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614406602f836131b2565b9150614411826143aa565b604082019050919050565b60006020820190508181036000830152614435816143f9565b9050919050565b600081905092915050565b6000614452826131a7565b61445c818561443c565b935061446c8185602086016131c3565b80840191505092915050565b60006144848285614447565b91506144908284614447565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144f86026836131b2565b91506145038261449c565b604082019050919050565b60006020820190508181036000830152614527816144eb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006145b9602c836131b2565b91506145c48261455d565b604082019050919050565b600060208201905081810360008301526145e8816145ac565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b600061464b6029836131b2565b9150614656826145ef565b604082019050919050565b6000602082019050818103600083015261467a8161463e565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146dd6024836131b2565b91506146e882614681565b604082019050919050565b6000602082019050818103600083015261470c816146d0565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614749601b836131b2565b915061475482614713565b602082019050919050565b600060208201905081810360008301526147788161473c565b9050919050565b600061478a82613262565b915061479583613262565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147ce576147cd613f9f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061481382613262565b915061481e83613262565b92508261482e5761482d6147d9565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006148956021836131b2565b91506148a082614839565b604082019050919050565b600060208201905081810360008301526148c481614888565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006149016020836131b2565b915061490c826148cb565b602082019050919050565b60006020820190508181036000830152614930816148f4565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061496d601c836131b2565b915061497882614937565b602082019050919050565b6000602082019050818103600083015261499c81614960565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006149d96019836131b2565b91506149e4826149a3565b602082019050919050565b60006020820190508181036000830152614a08816149cc565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614a6b6032836131b2565b9150614a7682614a0f565b604082019050919050565b60006020820190508181036000830152614a9a81614a5e565b9050919050565b6000614aac82613262565b9150614ab783613262565b925082614ac757614ac66147d9565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000614af982614ad2565b614b038185614add565b9350614b138185602086016131c3565b614b1c816131f6565b840191505092915050565b6000608082019050614b3c60008301876132f7565b614b4960208301866132f7565b614b56604083018561338d565b8181036060830152614b688184614aee565b905095945050505050565b600081519050614b8281613118565b92915050565b600060208284031215614b9e57614b9d6130e2565b5b6000614bac84828501614b73565b9150509291505056fea26469706673582212207169e1915503193d57c8848c3f280f55eac65613a31eb07b6e4effdb5ce274c964736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa84174000000000000000000000000bb70063bf4dfa26ce088b478ab52368e423d2bfe
-----Decoded View---------------
Arg [0] : tokenUSDC (address): 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174
Arg [1] : treasuryWallet (address): 0xbb70063Bf4DFA26Ce088B478Ab52368e423d2BFe
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa84174
Arg [1] : 000000000000000000000000bb70063bf4dfa26ce088b478ab52368e423d2bfe
Deployed Bytecode Sourcemap
45374:5728:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25573:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26518:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49756:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28077:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27600:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51013:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28827:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50521:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50711:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50916:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29237:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50044:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47658:1292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26212:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25942:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45500:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39726:103;;;;;;;;;;;;;:::i;:::-;;49184:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50147:69;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39075:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45634:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26687:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50224:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49659:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28370:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49546:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46376:1274;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29493:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26862:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50617:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28596:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45595:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39984:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49851:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45548:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25573:305;25675:4;25727:25;25712:40;;;:11;:40;;;;:105;;;;25784:33;25769:48;;;:11;:48;;;;25712:105;:158;;;;25834:36;25858:11;25834:23;:36::i;:::-;25712:158;25692:178;;25573:305;;;:::o;26518:100::-;26572:13;26605:5;26598:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26518:100;:::o;49756:87::-;39306:12;:10;:12::i;:::-;39295:23;;:7;:5;:7::i;:::-;:23;;;39287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49835:5:::1;49817:15;:23;;;;49756:87:::0;:::o;28077:221::-;28153:7;28181:16;28189:7;28181;:16::i;:::-;28173:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28266:15;:24;28282:7;28266:24;;;;;;;;;;;;;;;;;;;;;28259:31;;28077:221;;;:::o;27600:411::-;27681:13;27697:23;27712:7;27697:14;:23::i;:::-;27681:39;;27745:5;27739:11;;:2;:11;;;27731:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27839:5;27823:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27848:37;27865:5;27872:12;:10;:12::i;:::-;27848:16;:37::i;:::-;27823:62;27801:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27982:21;27991:2;27995:7;27982:8;:21::i;:::-;27670:341;27600:411;;:::o;51013:84::-;51057:7;51075:19;:9;:17;:19::i;:::-;51068:26;;51013:84;:::o;28827:339::-;29022:41;29041:12;:10;:12::i;:::-;29055:7;29022:18;:41::i;:::-;29014:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29130:28;29140:4;29146:2;29150:7;29130:9;:28::i;:::-;28827:339;;;:::o;50521:88::-;50572:7;50590:16;;50583:23;;50521:88;:::o;50711:86::-;50761:7;50779:15;;;;;;;;;;;50772:22;;50711:86;:::o;50916:89::-;50972:4;50987:12;:15;51000:1;50987:15;;;;;;;;;;;;;;;;;;;;;;;;;50980:22;;50916:89;;;:::o;29237:185::-;29375:39;29392:4;29398:2;29402:7;29375:39;;;;;;;;;;;;:16;:39::i;:::-;29237:185;;;:::o;50044:95::-;39306:12;:10;:12::i;:::-;39295:23;;:7;:5;:7::i;:::-;:23;;;39287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50128:8:::1;50109:16;:27;;;;;;;;;;;;:::i;:::-;;50044:95:::0;:::o;47658:1292::-;47749:1;47727:24;;:10;:24;;;47719:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;47821:1;47802:15;;:20;47794:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;47868:12;;;;;;;;;;;47860:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;45587:1;47931:36;47957:9;47931:21;47941:10;47931:9;:21::i;:::-;:25;;:36;;;;:::i;:::-;:55;;47923:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;48029:15;;;;;;;;;;;48028:16;:65;;;;48049:15;;;;;;;;;;;:43;;;;;48068:12;:24;48081:10;48068:24;;;;;;;;;;;;;;;;;;;;;;;;;48049:43;48028:65;48020:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;48133:15;;;;;;;;;;;48132:16;:82;;;;48153:15;;;;;;;;;;;:60;;;;;48212:1;48172:36;48198:9;48172:21;48182:10;48172:9;:21::i;:::-;:25;;:36;;;;:::i;:::-;:41;;48153:60;48132:82;48124:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;45537:4;48266:28;48284:9;48266:13;:11;:13::i;:::-;:17;;:28;;;;:::i;:::-;:42;;48258:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;48368:18;48389:30;48403:15;;48389:9;:13;;:30;;;;:::i;:::-;48368:51;;48476:10;48440;;;;;;;;;;;:20;;;48461:10;48440:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;48432:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;48523:6;48519:185;48539:9;48535:1;:13;48519:185;;;48572:21;:9;:19;:21::i;:::-;48608:17;48628:19;:9;:17;:19::i;:::-;48608:39;;48662:28;48668:10;48680:9;48662:5;:28::i;:::-;48555:149;48550:3;;;;;:::i;:::-;;;;48519:185;;;;48716:17;48736:10;;;;;;;;;;;:20;;;48757:10;48777:4;48736:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48716:67;;48815:10;48802:9;:23;;48794:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;48868:10;;;;;;;;;;;:23;;;48892:10;48904:15;;;;;;;;;;;48921:10;48868:64;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;47706:1244;;47658:1292;:::o;26212:239::-;26284:7;26304:13;26320:7;:16;26328:7;26320:16;;;;;;;;;;;;;;;;;;;;;26304:32;;26372:1;26355:19;;:5;:19;;;26347:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26438:5;26431:12;;;26212:239;;;:::o;25942:208::-;26014:7;26059:1;26042:19;;:5;:19;;;26034:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26126:9;:16;26136:5;26126:16;;;;;;;;;;;;;;;;26119:23;;25942:208;;;:::o;45500:41::-;45537:4;45500:41;:::o;39726:103::-;39306:12;:10;:12::i;:::-;39295:23;;:7;:5;:7::i;:::-;:23;;;39287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39791:30:::1;39818:1;39791:18;:30::i;:::-;39726:103::o:0;49184:354::-;39306:12;:10;:12::i;:::-;39295:23;;:7;:5;:7::i;:::-;:23;;;39287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45537:4:::1;49293:6;49277:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:36;;49269:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;49345:9;49341:188;49364:6;49360:1;:10;49341:188;;;49394:21;:9;:19;:21::i;:::-;49430:17;49450:19;:9;:17;:19::i;:::-;49430:39;;49484:23;49494:1;49497:9;49484;:23::i;:::-;49377:152;49372:3;;;;;:::i;:::-;;;;49341:188;;;;49184:354:::0;;:::o;50147:69::-;39306:12;:10;:12::i;:::-;39295:23;;:7;:5;:7::i;:::-;:23;;;39287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50212:1:::1;50197:12;;:16;;;;;;;;;;;;;;;;;;50147:69:::0;:::o;39075:87::-;39121:7;39148:6;;;;;;;;;;;39141:13;;39075:87;:::o;45634:34::-;;;;;;;;;;;;;:::o;26687:104::-;26743:13;26776:7;26769:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26687:104;:::o;50224:77::-;39306:12;:10;:12::i;:::-;39295:23;;:7;:5;:7::i;:::-;:23;;;39287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50297:1:::1;50279:15;;:19;;;;;;;;;;;;;;;;;;50224:77:::0;:::o;49659:89::-;39306:12;:10;:12::i;:::-;39295:23;;:7;:5;:7::i;:::-;:23;;;39287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49740:5:::1;49721:16;:24;;;;49659:89:::0;:::o;28370:155::-;28465:52;28484:12;:10;:12::i;:::-;28498:8;28508;28465:18;:52::i;:::-;28370:155;;:::o;49546:105::-;39306:12;:10;:12::i;:::-;39295:23;;:7;:5;:7::i;:::-;:23;;;39287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49634:14:::1;49616:15;;:32;;;;;;;;;;;;;;;;;;49546:105:::0;:::o;46376:1274::-;46471:1;46449:24;;:10;:24;;;46441:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;46544:1;46524:16;;:21;46516:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;46591:12;;;;;;;;;;;46583:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;45587:1;46654:36;46680:9;46654:21;46664:10;46654:9;:21::i;:::-;:25;;:36;;;;:::i;:::-;:55;;46646:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;46752:15;;;;;;;;;;;46751:16;:65;;;;46772:15;;;;;;;;;;;:43;;;;;46791:12;:24;46804:10;46791:24;;;;;;;;;;;;;;;;;;;;;;;;;46772:43;46751:65;46743:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;46856:15;;;;;;;;;;;46855:16;:82;;;;46876:15;;;;;;;;;;;:60;;;;;46935:1;46895:36;46921:9;46895:21;46905:10;46895:9;:21::i;:::-;:25;;:36;;;;:::i;:::-;:41;;46876:60;46855:82;46847:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;45537:4;46989:28;47007:9;46989:13;:11;:13::i;:::-;:17;;:28;;;;:::i;:::-;:42;;46981:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;47091:18;47112:31;47126:16;;47112:9;:13;;:31;;;;:::i;:::-;47091:52;;47177:10;47164:9;:23;;47156:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;47231:6;47227:185;47247:9;47243:1;:13;47227:185;;;47280:21;:9;:19;:21::i;:::-;47316:17;47336:19;:9;:17;:19::i;:::-;47316:39;;47370:28;47376:10;47388:9;47370:5;:28::i;:::-;47263:149;47258:3;;;;;:::i;:::-;;;;47227:185;;;;47424:29;47464:15;;;;;;;;;;;47424:56;;47491:13;:22;;:34;47514:10;47491:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47546:22;47579:10;47546:44;;47601:6;:15;;:39;47629:10;47617:9;:22;;;;:::i;:::-;47601:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46428:1222;;;46376:1274;:::o;29493:328::-;29668:41;29687:12;:10;:12::i;:::-;29701:7;29668:18;:41::i;:::-;29660:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29774:39;29788:4;29794:2;29798:7;29807:5;29774:13;:39::i;:::-;29493:328;;;;:::o;26862:334::-;26935:13;26969:16;26977:7;26969;:16::i;:::-;26961:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27050:21;27074:10;:8;:10::i;:::-;27050:34;;27126:1;27108:7;27102:21;:25;:86;;;;;;;;;;;;;;;;;27154:7;27163:18;:7;:16;:18::i;:::-;27137:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27102:86;27095:93;;;26862:334;;;:::o;50617:86::-;50667:7;50685:15;;50678:22;;50617:86;:::o;28596:164::-;28693:4;28717:18;:25;28736:5;28717:25;;;;;;;;;;;;;;;:35;28743:8;28717:35;;;;;;;;;;;;;;;;;;;;;;;;;28710:42;;28596:164;;;;:::o;45595:32::-;;;;;;;;;;;;;:::o;39984:201::-;39306:12;:10;:12::i;:::-;39295:23;;:7;:5;:7::i;:::-;:23;;;39287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40093:1:::1;40073:22;;:8;:22;;::::0;40065:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;40149:28;40168:8;40149:18;:28::i;:::-;39984:201:::0;:::o;49851:185::-;39306:12;:10;:12::i;:::-;39295:23;;:7;:5;:7::i;:::-;:23;;;39287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49932:6:::1;49927:100;49948:5;:12;49944:1;:16;49927:100;;;50009:4;49984:12;:22;49997:5;50003:1;49997:8;;;;;;;;:::i;:::-;;;;;;;;49984:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;49962:3;;;;;:::i;:::-;;;;49927:100;;;;49851:185:::0;:::o;45548:40::-;45587:1;45548:40;:::o;17449:157::-;17534:4;17573:25;17558:40;;;:11;:40;;;;17551:47;;17449:157;;;:::o;23967:98::-;24020:7;24047:10;24040:17;;23967:98;:::o;31331:127::-;31396:4;31448:1;31420:30;;:7;:16;31428:7;31420:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31413:37;;31331:127;;;:::o;35313:174::-;35415:2;35388:15;:24;35404:7;35388:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35471:7;35467:2;35433:46;;35442:23;35457:7;35442:14;:23::i;:::-;35433:46;;;;;;;;;;;;35313:174;;:::o;3768:114::-;3833:7;3860;:14;;;3853:21;;3768:114;;;:::o;31625:348::-;31718:4;31743:16;31751:7;31743;:16::i;:::-;31735:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31819:13;31835:23;31850:7;31835:14;:23::i;:::-;31819:39;;31888:5;31877:16;;:7;:16;;;:51;;;;31921:7;31897:31;;:20;31909:7;31897:11;:20::i;:::-;:31;;;31877:51;:87;;;;31932:32;31949:5;31956:7;31932:16;:32::i;:::-;31877:87;31869:96;;;31625:348;;;;:::o;34617:578::-;34776:4;34749:31;;:23;34764:7;34749:14;:23::i;:::-;:31;;;34741:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34859:1;34845:16;;:2;:16;;;34837:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34915:39;34936:4;34942:2;34946:7;34915:20;:39::i;:::-;35019:29;35036:1;35040:7;35019:8;:29::i;:::-;35080:1;35061:9;:15;35071:4;35061:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35109:1;35092:9;:13;35102:2;35092:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35140:2;35121:7;:16;35129:7;35121:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35179:7;35175:2;35160:27;;35169:4;35160:27;;;;;;;;;;;;34617:578;;;:::o;40914:181::-;40972:7;40992:9;41008:1;41004;:5;;;;:::i;:::-;40992:17;;41033:1;41028;:6;;41020:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;41086:1;41079:8;;;40914:181;;;;:::o;42268:471::-;42326:7;42576:1;42571;:6;42567:47;;42601:1;42594:8;;;;42567:47;42626:9;42642:1;42638;:5;;;;:::i;:::-;42626:17;;42671:1;42666;42662;:5;;;;:::i;:::-;:10;42654:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;42730:1;42723:8;;;42268:471;;;;;:::o;3890:127::-;3997:1;3979:7;:14;;;:19;;;;;;;;;;;3890:127;:::o;33309:382::-;33403:1;33389:16;;:2;:16;;;33381:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33462:16;33470:7;33462;:16::i;:::-;33461:17;33453:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33524:45;33553:1;33557:2;33561:7;33524:20;:45::i;:::-;33599:1;33582:9;:13;33592:2;33582:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33630:2;33611:7;:16;33619:7;33611:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33675:7;33671:2;33650:33;;33667:1;33650:33;;;;;;;;;;;;33309:382;;:::o;40345:191::-;40419:16;40438:6;;;;;;;;;;;40419:25;;40464:8;40455:6;;:17;;;;;;;;;;;;;;;;;;40519:8;40488:40;;40509:8;40488:40;;;;;;;;;;;;40408:128;40345:191;:::o;32315:110::-;32391:26;32401:2;32405:7;32391:26;;;;;;;;;;;;:9;:26::i;:::-;32315:110;;:::o;35629:315::-;35784:8;35775:17;;:5;:17;;;35767:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35871:8;35833:18;:25;35852:5;35833:25;;;;;;;;;;;;;;;:35;35859:8;35833:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35917:8;35895:41;;35910:5;35895:41;;;35927:8;35895:41;;;;;;:::i;:::-;;;;;;;;35629:315;;;:::o;30703:::-;30860:28;30870:4;30876:2;30880:7;30860:9;:28::i;:::-;30907:48;30930:4;30936:2;30940:7;30949:5;30907:22;:48::i;:::-;30899:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30703:315;;;;:::o;50805:103::-;50865:13;50889:16;50882:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50805:103;:::o;4726:723::-;4782:13;5012:1;5003:5;:10;4999:53;;5030:10;;;;;;;;;;;;;;;;;;;;;4999:53;5062:12;5077:5;5062:20;;5093:14;5118:78;5133:1;5125:4;:9;5118:78;;5151:8;;;;;:::i;:::-;;;;5182:2;5174:10;;;;;:::i;:::-;;;5118:78;;;5206:19;5238:6;5228:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5206:39;;5256:154;5272:1;5263:5;:10;5256:154;;5300:1;5290:11;;;;;:::i;:::-;;;5367:2;5359:5;:10;;;;:::i;:::-;5346:2;:24;;;;:::i;:::-;5333:39;;5316:6;5323;5316:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;5396:2;5387:11;;;;;:::i;:::-;;;5256:154;;;5434:6;5420:21;;;;;4726:723;;;;:::o;37880:126::-;;;;:::o;32652:321::-;32782:18;32788:2;32792:7;32782:5;:18::i;:::-;32833:54;32864:1;32868:2;32872:7;32881:5;32833:22;:54::i;:::-;32811:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32652:321;;;:::o;36509:799::-;36664:4;36685:15;:2;:13;;;:15::i;:::-;36681:620;;;36737:2;36721:36;;;36758:12;:10;:12::i;:::-;36772:4;36778:7;36787:5;36721:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36717:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36980:1;36963:6;:13;:18;36959:272;;37006:60;;;;;;;;;;:::i;:::-;;;;;;;;36959:272;37181:6;37175:13;37166:6;37162:2;37158:15;37151:38;36717:529;36854:41;;;36844:51;;;:6;:51;;;;36837:58;;;;;36681:620;37285:4;37278:11;;36509:799;;;;;;;:::o;7305:387::-;7365:4;7573:12;7640:7;7628:20;7620:28;;7683:1;7676:4;:8;7669:15;;;7305:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:329::-;5974:6;6023:2;6011:9;6002:7;5998:23;5994:32;5991:119;;;6029:79;;:::i;:::-;5991:119;6149:1;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6120:117;5915:329;;;;:::o;6250:117::-;6359:1;6356;6349:12;6373:117;6482:1;6479;6472:12;6496:180;6544:77;6541:1;6534:88;6641:4;6638:1;6631:15;6665:4;6662:1;6655:15;6682:281;6765:27;6787:4;6765:27;:::i;:::-;6757:6;6753:40;6895:6;6883:10;6880:22;6859:18;6847:10;6844:34;6841:62;6838:88;;;6906:18;;:::i;:::-;6838:88;6946:10;6942:2;6935:22;6725:238;6682:281;;:::o;6969:129::-;7003:6;7030:20;;:::i;:::-;7020:30;;7059:33;7087:4;7079:6;7059:33;:::i;:::-;6969:129;;;:::o;7104:308::-;7166:4;7256:18;7248:6;7245:30;7242:56;;;7278:18;;:::i;:::-;7242:56;7316:29;7338:6;7316:29;:::i;:::-;7308:37;;7400:4;7394;7390:15;7382:23;;7104:308;;;:::o;7418:154::-;7502:6;7497:3;7492;7479:30;7564:1;7555:6;7550:3;7546:16;7539:27;7418:154;;;:::o;7578:412::-;7656:5;7681:66;7697:49;7739:6;7697:49;:::i;:::-;7681:66;:::i;:::-;7672:75;;7770:6;7763:5;7756:21;7808:4;7801:5;7797:16;7846:3;7837:6;7832:3;7828:16;7825:25;7822:112;;;7853:79;;:::i;:::-;7822:112;7943:41;7977:6;7972:3;7967;7943:41;:::i;:::-;7662:328;7578:412;;;;;:::o;8010:340::-;8066:5;8115:3;8108:4;8100:6;8096:17;8092:27;8082:122;;8123:79;;:::i;:::-;8082:122;8240:6;8227:20;8265:79;8340:3;8332:6;8325:4;8317:6;8313:17;8265:79;:::i;:::-;8256:88;;8072:278;8010:340;;;;:::o;8356:509::-;8425:6;8474:2;8462:9;8453:7;8449:23;8445:32;8442:119;;;8480:79;;:::i;:::-;8442:119;8628:1;8617:9;8613:17;8600:31;8658:18;8650:6;8647:30;8644:117;;;8680:79;;:::i;:::-;8644:117;8785:63;8840:7;8831:6;8820:9;8816:22;8785:63;:::i;:::-;8775:73;;8571:287;8356:509;;;;:::o;8871:116::-;8941:21;8956:5;8941:21;:::i;:::-;8934:5;8931:32;8921:60;;8977:1;8974;8967:12;8921:60;8871:116;:::o;8993:133::-;9036:5;9074:6;9061:20;9052:29;;9090:30;9114:5;9090:30;:::i;:::-;8993:133;;;;:::o;9132:323::-;9188:6;9237:2;9225:9;9216:7;9212:23;9208:32;9205:119;;;9243:79;;:::i;:::-;9205:119;9363:1;9388:50;9430:7;9421:6;9410:9;9406:22;9388:50;:::i;:::-;9378:60;;9334:114;9132:323;;;;:::o;9461:468::-;9526:6;9534;9583:2;9571:9;9562:7;9558:23;9554:32;9551:119;;;9589:79;;:::i;:::-;9551:119;9709:1;9734:53;9779:7;9770:6;9759:9;9755:22;9734:53;:::i;:::-;9724:63;;9680:117;9836:2;9862:50;9904:7;9895:6;9884:9;9880:22;9862:50;:::i;:::-;9852:60;;9807:115;9461:468;;;;;:::o;9935:307::-;9996:4;10086:18;10078:6;10075:30;10072:56;;;10108:18;;:::i;:::-;10072:56;10146:29;10168:6;10146:29;:::i;:::-;10138:37;;10230:4;10224;10220:15;10212:23;;9935:307;;;:::o;10248:410::-;10325:5;10350:65;10366:48;10407:6;10366:48;:::i;:::-;10350:65;:::i;:::-;10341:74;;10438:6;10431:5;10424:21;10476:4;10469:5;10465:16;10514:3;10505:6;10500:3;10496:16;10493:25;10490:112;;;10521:79;;:::i;:::-;10490:112;10611:41;10645:6;10640:3;10635;10611:41;:::i;:::-;10331:327;10248:410;;;;;:::o;10677:338::-;10732:5;10781:3;10774:4;10766:6;10762:17;10758:27;10748:122;;10789:79;;:::i;:::-;10748:122;10906:6;10893:20;10931:78;11005:3;10997:6;10990:4;10982:6;10978:17;10931:78;:::i;:::-;10922:87;;10738:277;10677:338;;;;:::o;11021:943::-;11116:6;11124;11132;11140;11189:3;11177:9;11168:7;11164:23;11160:33;11157:120;;;11196:79;;:::i;:::-;11157:120;11316:1;11341:53;11386:7;11377:6;11366:9;11362:22;11341:53;:::i;:::-;11331:63;;11287:117;11443:2;11469:53;11514:7;11505:6;11494:9;11490:22;11469:53;:::i;:::-;11459:63;;11414:118;11571:2;11597:53;11642:7;11633:6;11622:9;11618:22;11597:53;:::i;:::-;11587:63;;11542:118;11727:2;11716:9;11712:18;11699:32;11758:18;11750:6;11747:30;11744:117;;;11780:79;;:::i;:::-;11744:117;11885:62;11939:7;11930:6;11919:9;11915:22;11885:62;:::i;:::-;11875:72;;11670:287;11021:943;;;;;;;:::o;11970:474::-;12038:6;12046;12095:2;12083:9;12074:7;12070:23;12066:32;12063:119;;;12101:79;;:::i;:::-;12063:119;12221:1;12246:53;12291:7;12282:6;12271:9;12267:22;12246:53;:::i;:::-;12236:63;;12192:117;12348:2;12374:53;12419:7;12410:6;12399:9;12395:22;12374:53;:::i;:::-;12364:63;;12319:118;11970:474;;;;;:::o;12450:311::-;12527:4;12617:18;12609:6;12606:30;12603:56;;;12639:18;;:::i;:::-;12603:56;12689:4;12681:6;12677:17;12669:25;;12749:4;12743;12739:15;12731:23;;12450:311;;;:::o;12767:117::-;12876:1;12873;12866:12;12907:710;13003:5;13028:81;13044:64;13101:6;13044:64;:::i;:::-;13028:81;:::i;:::-;13019:90;;13129:5;13158:6;13151:5;13144:21;13192:4;13185:5;13181:16;13174:23;;13245:4;13237:6;13233:17;13225:6;13221:30;13274:3;13266:6;13263:15;13260:122;;;13293:79;;:::i;:::-;13260:122;13408:6;13391:220;13425:6;13420:3;13417:15;13391:220;;;13500:3;13529:37;13562:3;13550:10;13529:37;:::i;:::-;13524:3;13517:50;13596:4;13591:3;13587:14;13580:21;;13467:144;13451:4;13446:3;13442:14;13435:21;;13391:220;;;13395:21;13009:608;;12907:710;;;;;:::o;13640:370::-;13711:5;13760:3;13753:4;13745:6;13741:17;13737:27;13727:122;;13768:79;;:::i;:::-;13727:122;13885:6;13872:20;13910:94;14000:3;13992:6;13985:4;13977:6;13973:17;13910:94;:::i;:::-;13901:103;;13717:293;13640:370;;;;:::o;14016:539::-;14100:6;14149:2;14137:9;14128:7;14124:23;14120:32;14117:119;;;14155:79;;:::i;:::-;14117:119;14303:1;14292:9;14288:17;14275:31;14333:18;14325:6;14322:30;14319:117;;;14355:79;;:::i;:::-;14319:117;14460:78;14530:7;14521:6;14510:9;14506:22;14460:78;:::i;:::-;14450:88;;14246:302;14016:539;;;;:::o;14561:180::-;14609:77;14606:1;14599:88;14706:4;14703:1;14696:15;14730:4;14727:1;14720:15;14747:320;14791:6;14828:1;14822:4;14818:12;14808:22;;14875:1;14869:4;14865:12;14896:18;14886:81;;14952:4;14944:6;14940:17;14930:27;;14886:81;15014:2;15006:6;15003:14;14983:18;14980:38;14977:84;;15033:18;;:::i;:::-;14977:84;14798:269;14747:320;;;:::o;15073:182::-;15213:34;15209:1;15201:6;15197:14;15190:58;15073:182;:::o;15261:366::-;15403:3;15424:67;15488:2;15483:3;15424:67;:::i;:::-;15417:74;;15500:93;15589:3;15500:93;:::i;:::-;15618:2;15613:3;15609:12;15602:19;;15261:366;;;:::o;15633:419::-;15799:4;15837:2;15826:9;15822:18;15814:26;;15886:9;15880:4;15876:20;15872:1;15861:9;15857:17;15850:47;15914:131;16040:4;15914:131;:::i;:::-;15906:139;;15633:419;;;:::o;16058:231::-;16198:34;16194:1;16186:6;16182:14;16175:58;16267:14;16262:2;16254:6;16250:15;16243:39;16058:231;:::o;16295:366::-;16437:3;16458:67;16522:2;16517:3;16458:67;:::i;:::-;16451:74;;16534:93;16623:3;16534:93;:::i;:::-;16652:2;16647:3;16643:12;16636:19;;16295:366;;;:::o;16667:419::-;16833:4;16871:2;16860:9;16856:18;16848:26;;16920:9;16914:4;16910:20;16906:1;16895:9;16891:17;16884:47;16948:131;17074:4;16948:131;:::i;:::-;16940:139;;16667:419;;;:::o;17092:220::-;17232:34;17228:1;17220:6;17216:14;17209:58;17301:3;17296:2;17288:6;17284:15;17277:28;17092:220;:::o;17318:366::-;17460:3;17481:67;17545:2;17540:3;17481:67;:::i;:::-;17474:74;;17557:93;17646:3;17557:93;:::i;:::-;17675:2;17670:3;17666:12;17659:19;;17318:366;;;:::o;17690:419::-;17856:4;17894:2;17883:9;17879:18;17871:26;;17943:9;17937:4;17933:20;17929:1;17918:9;17914:17;17907:47;17971:131;18097:4;17971:131;:::i;:::-;17963:139;;17690:419;;;:::o;18115:243::-;18255:34;18251:1;18243:6;18239:14;18232:58;18324:26;18319:2;18311:6;18307:15;18300:51;18115:243;:::o;18364:366::-;18506:3;18527:67;18591:2;18586:3;18527:67;:::i;:::-;18520:74;;18603:93;18692:3;18603:93;:::i;:::-;18721:2;18716:3;18712:12;18705:19;;18364:366;;;:::o;18736:419::-;18902:4;18940:2;18929:9;18925:18;18917:26;;18989:9;18983:4;18979:20;18975:1;18964:9;18960:17;18953:47;19017:131;19143:4;19017:131;:::i;:::-;19009:139;;18736:419;;;:::o;19161:236::-;19301:34;19297:1;19289:6;19285:14;19278:58;19370:19;19365:2;19357:6;19353:15;19346:44;19161:236;:::o;19403:366::-;19545:3;19566:67;19630:2;19625:3;19566:67;:::i;:::-;19559:74;;19642:93;19731:3;19642:93;:::i;:::-;19760:2;19755:3;19751:12;19744:19;;19403:366;;;:::o;19775:419::-;19941:4;19979:2;19968:9;19964:18;19956:26;;20028:9;20022:4;20018:20;20014:1;20003:9;19999:17;19992:47;20056:131;20182:4;20056:131;:::i;:::-;20048:139;;19775:419;;;:::o;20200:177::-;20340:29;20336:1;20328:6;20324:14;20317:53;20200:177;:::o;20383:366::-;20525:3;20546:67;20610:2;20605:3;20546:67;:::i;:::-;20539:74;;20622:93;20711:3;20622:93;:::i;:::-;20740:2;20735:3;20731:12;20724:19;;20383:366;;;:::o;20755:419::-;20921:4;20959:2;20948:9;20944:18;20936:26;;21008:9;21002:4;20998:20;20994:1;20983:9;20979:17;20972:47;21036:131;21162:4;21036:131;:::i;:::-;21028:139;;20755:419;;;:::o;21180:172::-;21320:24;21316:1;21308:6;21304:14;21297:48;21180:172;:::o;21358:366::-;21500:3;21521:67;21585:2;21580:3;21521:67;:::i;:::-;21514:74;;21597:93;21686:3;21597:93;:::i;:::-;21715:2;21710:3;21706:12;21699:19;;21358:366;;;:::o;21730:419::-;21896:4;21934:2;21923:9;21919:18;21911:26;;21983:9;21977:4;21973:20;21969:1;21958:9;21954:17;21947:47;22011:131;22137:4;22011:131;:::i;:::-;22003:139;;21730:419;;;:::o;22155:177::-;22295:29;22291:1;22283:6;22279:14;22272:53;22155:177;:::o;22338:366::-;22480:3;22501:67;22565:2;22560:3;22501:67;:::i;:::-;22494:74;;22577:93;22666:3;22577:93;:::i;:::-;22695:2;22690:3;22686:12;22679:19;;22338:366;;;:::o;22710:419::-;22876:4;22914:2;22903:9;22899:18;22891:26;;22963:9;22957:4;22953:20;22949:1;22938:9;22934:17;22927:47;22991:131;23117:4;22991:131;:::i;:::-;22983:139;;22710:419;;;:::o;23135:168::-;23275:20;23271:1;23263:6;23259:14;23252:44;23135:168;:::o;23309:366::-;23451:3;23472:67;23536:2;23531:3;23472:67;:::i;:::-;23465:74;;23548:93;23637:3;23548:93;:::i;:::-;23666:2;23661:3;23657:12;23650:19;;23309:366;;;:::o;23681:419::-;23847:4;23885:2;23874:9;23870:18;23862:26;;23934:9;23928:4;23924:20;23920:1;23909:9;23905:17;23898:47;23962:131;24088:4;23962:131;:::i;:::-;23954:139;;23681:419;;;:::o;24106:165::-;24246:17;24242:1;24234:6;24230:14;24223:41;24106:165;:::o;24277:366::-;24419:3;24440:67;24504:2;24499:3;24440:67;:::i;:::-;24433:74;;24516:93;24605:3;24516:93;:::i;:::-;24634:2;24629:3;24625:12;24618:19;;24277:366;;;:::o;24649:419::-;24815:4;24853:2;24842:9;24838:18;24830:26;;24902:9;24896:4;24892:20;24888:1;24877:9;24873:17;24866:47;24930:131;25056:4;24930:131;:::i;:::-;24922:139;;24649:419;;;:::o;25074:178::-;25214:30;25210:1;25202:6;25198:14;25191:54;25074:178;:::o;25258:366::-;25400:3;25421:67;25485:2;25480:3;25421:67;:::i;:::-;25414:74;;25497:93;25586:3;25497:93;:::i;:::-;25615:2;25610:3;25606:12;25599:19;;25258:366;;;:::o;25630:419::-;25796:4;25834:2;25823:9;25819:18;25811:26;;25883:9;25877:4;25873:20;25869:1;25858:9;25854:17;25847:47;25911:131;26037:4;25911:131;:::i;:::-;25903:139;;25630:419;;;:::o;26055:229::-;26195:34;26191:1;26183:6;26179:14;26172:58;26264:12;26259:2;26251:6;26247:15;26240:37;26055:229;:::o;26290:366::-;26432:3;26453:67;26517:2;26512:3;26453:67;:::i;:::-;26446:74;;26529:93;26618:3;26529:93;:::i;:::-;26647:2;26642:3;26638:12;26631:19;;26290:366;;;:::o;26662:419::-;26828:4;26866:2;26855:9;26851:18;26843:26;;26915:9;26909:4;26905:20;26901:1;26890:9;26886:17;26879:47;26943:131;27069:4;26943:131;:::i;:::-;26935:139;;26662:419;;;:::o;27087:143::-;27144:5;27175:6;27169:13;27160:22;;27191:33;27218:5;27191:33;:::i;:::-;27087:143;;;;:::o;27236:351::-;27306:6;27355:2;27343:9;27334:7;27330:23;27326:32;27323:119;;;27361:79;;:::i;:::-;27323:119;27481:1;27506:64;27562:7;27553:6;27542:9;27538:22;27506:64;:::i;:::-;27496:74;;27452:128;27236:351;;;;:::o;27593:165::-;27733:17;27729:1;27721:6;27717:14;27710:41;27593:165;:::o;27764:366::-;27906:3;27927:67;27991:2;27986:3;27927:67;:::i;:::-;27920:74;;28003:93;28092:3;28003:93;:::i;:::-;28121:2;28116:3;28112:12;28105:19;;27764:366;;;:::o;28136:419::-;28302:4;28340:2;28329:9;28325:18;28317:26;;28389:9;28383:4;28379:20;28375:1;28364:9;28360:17;28353:47;28417:131;28543:4;28417:131;:::i;:::-;28409:139;;28136:419;;;:::o;28561:180::-;28609:77;28606:1;28599:88;28706:4;28703:1;28696:15;28730:4;28727:1;28720:15;28747:233;28786:3;28809:24;28827:5;28809:24;:::i;:::-;28800:33;;28855:66;28848:5;28845:77;28842:103;;28925:18;;:::i;:::-;28842:103;28972:1;28965:5;28961:13;28954:20;;28747:233;;;:::o;28986:332::-;29107:4;29145:2;29134:9;29130:18;29122:26;;29158:71;29226:1;29215:9;29211:17;29202:6;29158:71;:::i;:::-;29239:72;29307:2;29296:9;29292:18;29283:6;29239:72;:::i;:::-;28986:332;;;;;:::o;29324:175::-;29464:27;29460:1;29452:6;29448:14;29441:51;29324:175;:::o;29505:366::-;29647:3;29668:67;29732:2;29727:3;29668:67;:::i;:::-;29661:74;;29744:93;29833:3;29744:93;:::i;:::-;29862:2;29857:3;29853:12;29846:19;;29505:366;;;:::o;29877:419::-;30043:4;30081:2;30070:9;30066:18;30058:26;;30130:9;30124:4;30120:20;30116:1;30105:9;30101:17;30094:47;30158:131;30284:4;30158:131;:::i;:::-;30150:139;;29877:419;;;:::o;30302:442::-;30451:4;30489:2;30478:9;30474:18;30466:26;;30502:71;30570:1;30559:9;30555:17;30546:6;30502:71;:::i;:::-;30583:72;30651:2;30640:9;30636:18;30627:6;30583:72;:::i;:::-;30665;30733:2;30722:9;30718:18;30709:6;30665:72;:::i;:::-;30302:442;;;;;;:::o;30750:137::-;30804:5;30835:6;30829:13;30820:22;;30851:30;30875:5;30851:30;:::i;:::-;30750:137;;;;:::o;30893:345::-;30960:6;31009:2;30997:9;30988:7;30984:23;30980:32;30977:119;;;31015:79;;:::i;:::-;30977:119;31135:1;31160:61;31213:7;31204:6;31193:9;31189:22;31160:61;:::i;:::-;31150:71;;31106:125;30893:345;;;;:::o;31244:228::-;31384:34;31380:1;31372:6;31368:14;31361:58;31453:11;31448:2;31440:6;31436:15;31429:36;31244:228;:::o;31478:366::-;31620:3;31641:67;31705:2;31700:3;31641:67;:::i;:::-;31634:74;;31717:93;31806:3;31717:93;:::i;:::-;31835:2;31830:3;31826:12;31819:19;;31478:366;;;:::o;31850:419::-;32016:4;32054:2;32043:9;32039:18;32031:26;;32103:9;32097:4;32093:20;32089:1;32078:9;32074:17;32067:47;32131:131;32257:4;32131:131;:::i;:::-;32123:139;;31850:419;;;:::o;32275:229::-;32415:34;32411:1;32403:6;32399:14;32392:58;32484:12;32479:2;32471:6;32467:15;32460:37;32275:229;:::o;32510:366::-;32652:3;32673:67;32737:2;32732:3;32673:67;:::i;:::-;32666:74;;32749:93;32838:3;32749:93;:::i;:::-;32867:2;32862:3;32858:12;32851:19;;32510:366;;;:::o;32882:419::-;33048:4;33086:2;33075:9;33071:18;33063:26;;33135:9;33129:4;33125:20;33121:1;33110:9;33106:17;33099:47;33163:131;33289:4;33163:131;:::i;:::-;33155:139;;32882:419;;;:::o;33307:305::-;33347:3;33366:20;33384:1;33366:20;:::i;:::-;33361:25;;33400:20;33418:1;33400:20;:::i;:::-;33395:25;;33554:1;33486:66;33482:74;33479:1;33476:81;33473:107;;;33560:18;;:::i;:::-;33473:107;33604:1;33601;33597:9;33590:16;;33307:305;;;;:::o;33618:160::-;33758:12;33754:1;33746:6;33742:14;33735:36;33618:160;:::o;33784:366::-;33926:3;33947:67;34011:2;34006:3;33947:67;:::i;:::-;33940:74;;34023:93;34112:3;34023:93;:::i;:::-;34141:2;34136:3;34132:12;34125:19;;33784:366;;;:::o;34156:419::-;34322:4;34360:2;34349:9;34345:18;34337:26;;34409:9;34403:4;34399:20;34395:1;34384:9;34380:17;34373:47;34437:131;34563:4;34437:131;:::i;:::-;34429:139;;34156:419;;;:::o;34581:172::-;34721:24;34717:1;34709:6;34705:14;34698:48;34581:172;:::o;34759:366::-;34901:3;34922:67;34986:2;34981:3;34922:67;:::i;:::-;34915:74;;34998:93;35087:3;34998:93;:::i;:::-;35116:2;35111:3;35107:12;35100:19;;34759:366;;;:::o;35131:419::-;35297:4;35335:2;35324:9;35320:18;35312:26;;35384:9;35378:4;35374:20;35370:1;35359:9;35355:17;35348:47;35412:131;35538:4;35412:131;:::i;:::-;35404:139;;35131:419;;;:::o;35556:191::-;35596:4;35616:20;35634:1;35616:20;:::i;:::-;35611:25;;35650:20;35668:1;35650:20;:::i;:::-;35645:25;;35689:1;35686;35683:8;35680:34;;;35694:18;;:::i;:::-;35680:34;35739:1;35736;35732:9;35724:17;;35556:191;;;;:::o;35753:234::-;35893:34;35889:1;35881:6;35877:14;35870:58;35962:17;35957:2;35949:6;35945:15;35938:42;35753:234;:::o;35993:366::-;36135:3;36156:67;36220:2;36215:3;36156:67;:::i;:::-;36149:74;;36232:93;36321:3;36232:93;:::i;:::-;36350:2;36345:3;36341:12;36334:19;;35993:366;;;:::o;36365:419::-;36531:4;36569:2;36558:9;36554:18;36546:26;;36618:9;36612:4;36608:20;36604:1;36593:9;36589:17;36582:47;36646:131;36772:4;36646:131;:::i;:::-;36638:139;;36365:419;;;:::o;36790:148::-;36892:11;36929:3;36914:18;;36790:148;;;;:::o;36944:377::-;37050:3;37078:39;37111:5;37078:39;:::i;:::-;37133:89;37215:6;37210:3;37133:89;:::i;:::-;37126:96;;37231:52;37276:6;37271:3;37264:4;37257:5;37253:16;37231:52;:::i;:::-;37308:6;37303:3;37299:16;37292:23;;37054:267;36944:377;;;;:::o;37327:435::-;37507:3;37529:95;37620:3;37611:6;37529:95;:::i;:::-;37522:102;;37641:95;37732:3;37723:6;37641:95;:::i;:::-;37634:102;;37753:3;37746:10;;37327:435;;;;;:::o;37768:225::-;37908:34;37904:1;37896:6;37892:14;37885:58;37977:8;37972:2;37964:6;37960:15;37953:33;37768:225;:::o;37999:366::-;38141:3;38162:67;38226:2;38221:3;38162:67;:::i;:::-;38155:74;;38238:93;38327:3;38238:93;:::i;:::-;38356:2;38351:3;38347:12;38340:19;;37999:366;;;:::o;38371:419::-;38537:4;38575:2;38564:9;38560:18;38552:26;;38624:9;38618:4;38614:20;38610:1;38599:9;38595:17;38588:47;38652:131;38778:4;38652:131;:::i;:::-;38644:139;;38371:419;;;:::o;38796:180::-;38844:77;38841:1;38834:88;38941:4;38938:1;38931:15;38965:4;38962:1;38955:15;38982:231;39122:34;39118:1;39110:6;39106:14;39099:58;39191:14;39186:2;39178:6;39174:15;39167:39;38982:231;:::o;39219:366::-;39361:3;39382:67;39446:2;39441:3;39382:67;:::i;:::-;39375:74;;39458:93;39547:3;39458:93;:::i;:::-;39576:2;39571:3;39567:12;39560:19;;39219:366;;;:::o;39591:419::-;39757:4;39795:2;39784:9;39780:18;39772:26;;39844:9;39838:4;39834:20;39830:1;39819:9;39815:17;39808:47;39872:131;39998:4;39872:131;:::i;:::-;39864:139;;39591:419;;;:::o;40016:228::-;40156:34;40152:1;40144:6;40140:14;40133:58;40225:11;40220:2;40212:6;40208:15;40201:36;40016:228;:::o;40250:366::-;40392:3;40413:67;40477:2;40472:3;40413:67;:::i;:::-;40406:74;;40489:93;40578:3;40489:93;:::i;:::-;40607:2;40602:3;40598:12;40591:19;;40250:366;;;:::o;40622:419::-;40788:4;40826:2;40815:9;40811:18;40803:26;;40875:9;40869:4;40865:20;40861:1;40850:9;40846:17;40839:47;40903:131;41029:4;40903:131;:::i;:::-;40895:139;;40622:419;;;:::o;41047:223::-;41187:34;41183:1;41175:6;41171:14;41164:58;41256:6;41251:2;41243:6;41239:15;41232:31;41047:223;:::o;41276:366::-;41418:3;41439:67;41503:2;41498:3;41439:67;:::i;:::-;41432:74;;41515:93;41604:3;41515:93;:::i;:::-;41633:2;41628:3;41624:12;41617:19;;41276:366;;;:::o;41648:419::-;41814:4;41852:2;41841:9;41837:18;41829:26;;41901:9;41895:4;41891:20;41887:1;41876:9;41872:17;41865:47;41929:131;42055:4;41929:131;:::i;:::-;41921:139;;41648:419;;;:::o;42073:177::-;42213:29;42209:1;42201:6;42197:14;42190:53;42073:177;:::o;42256:366::-;42398:3;42419:67;42483:2;42478:3;42419:67;:::i;:::-;42412:74;;42495:93;42584:3;42495:93;:::i;:::-;42613:2;42608:3;42604:12;42597:19;;42256:366;;;:::o;42628:419::-;42794:4;42832:2;42821:9;42817:18;42809:26;;42881:9;42875:4;42871:20;42867:1;42856:9;42852:17;42845:47;42909:131;43035:4;42909:131;:::i;:::-;42901:139;;42628:419;;;:::o;43053:348::-;43093:7;43116:20;43134:1;43116:20;:::i;:::-;43111:25;;43150:20;43168:1;43150:20;:::i;:::-;43145:25;;43338:1;43270:66;43266:74;43263:1;43260:81;43255:1;43248:9;43241:17;43237:105;43234:131;;;43345:18;;:::i;:::-;43234:131;43393:1;43390;43386:9;43375:20;;43053:348;;;;:::o;43407:180::-;43455:77;43452:1;43445:88;43552:4;43549:1;43542:15;43576:4;43573:1;43566:15;43593:185;43633:1;43650:20;43668:1;43650:20;:::i;:::-;43645:25;;43684:20;43702:1;43684:20;:::i;:::-;43679:25;;43723:1;43713:35;;43728:18;;:::i;:::-;43713:35;43770:1;43767;43763:9;43758:14;;43593:185;;;;:::o;43784:220::-;43924:34;43920:1;43912:6;43908:14;43901:58;43993:3;43988:2;43980:6;43976:15;43969:28;43784:220;:::o;44010:366::-;44152:3;44173:67;44237:2;44232:3;44173:67;:::i;:::-;44166:74;;44249:93;44338:3;44249:93;:::i;:::-;44367:2;44362:3;44358:12;44351:19;;44010:366;;;:::o;44382:419::-;44548:4;44586:2;44575:9;44571:18;44563:26;;44635:9;44629:4;44625:20;44621:1;44610:9;44606:17;44599:47;44663:131;44789:4;44663:131;:::i;:::-;44655:139;;44382:419;;;:::o;44807:182::-;44947:34;44943:1;44935:6;44931:14;44924:58;44807:182;:::o;44995:366::-;45137:3;45158:67;45222:2;45217:3;45158:67;:::i;:::-;45151:74;;45234:93;45323:3;45234:93;:::i;:::-;45352:2;45347:3;45343:12;45336:19;;44995:366;;;:::o;45367:419::-;45533:4;45571:2;45560:9;45556:18;45548:26;;45620:9;45614:4;45610:20;45606:1;45595:9;45591:17;45584:47;45648:131;45774:4;45648:131;:::i;:::-;45640:139;;45367:419;;;:::o;45792:178::-;45932:30;45928:1;45920:6;45916:14;45909:54;45792:178;:::o;45976:366::-;46118:3;46139:67;46203:2;46198:3;46139:67;:::i;:::-;46132:74;;46215:93;46304:3;46215:93;:::i;:::-;46333:2;46328:3;46324:12;46317:19;;45976:366;;;:::o;46348:419::-;46514:4;46552:2;46541:9;46537:18;46529:26;;46601:9;46595:4;46591:20;46587:1;46576:9;46572:17;46565:47;46629:131;46755:4;46629:131;:::i;:::-;46621:139;;46348:419;;;:::o;46773:175::-;46913:27;46909:1;46901:6;46897:14;46890:51;46773:175;:::o;46954:366::-;47096:3;47117:67;47181:2;47176:3;47117:67;:::i;:::-;47110:74;;47193:93;47282:3;47193:93;:::i;:::-;47311:2;47306:3;47302:12;47295:19;;46954:366;;;:::o;47326:419::-;47492:4;47530:2;47519:9;47515:18;47507:26;;47579:9;47573:4;47569:20;47565:1;47554:9;47550:17;47543:47;47607:131;47733:4;47607:131;:::i;:::-;47599:139;;47326:419;;;:::o;47751:237::-;47891:34;47887:1;47879:6;47875:14;47868:58;47960:20;47955:2;47947:6;47943:15;47936:45;47751:237;:::o;47994:366::-;48136:3;48157:67;48221:2;48216:3;48157:67;:::i;:::-;48150:74;;48233:93;48322:3;48233:93;:::i;:::-;48351:2;48346:3;48342:12;48335:19;;47994:366;;;:::o;48366:419::-;48532:4;48570:2;48559:9;48555:18;48547:26;;48619:9;48613:4;48609:20;48605:1;48594:9;48590:17;48583:47;48647:131;48773:4;48647:131;:::i;:::-;48639:139;;48366:419;;;:::o;48791:176::-;48823:1;48840:20;48858:1;48840:20;:::i;:::-;48835:25;;48874:20;48892:1;48874:20;:::i;:::-;48869:25;;48913:1;48903:35;;48918:18;;:::i;:::-;48903:35;48959:1;48956;48952:9;48947:14;;48791:176;;;;:::o;48973:98::-;49024:6;49058:5;49052:12;49042:22;;48973:98;;;:::o;49077:168::-;49160:11;49194:6;49189:3;49182:19;49234:4;49229:3;49225:14;49210:29;;49077:168;;;;:::o;49251:360::-;49337:3;49365:38;49397:5;49365:38;:::i;:::-;49419:70;49482:6;49477:3;49419:70;:::i;:::-;49412:77;;49498:52;49543:6;49538:3;49531:4;49524:5;49520:16;49498:52;:::i;:::-;49575:29;49597:6;49575:29;:::i;:::-;49570:3;49566:39;49559:46;;49341:270;49251:360;;;;:::o;49617:640::-;49812:4;49850:3;49839:9;49835:19;49827:27;;49864:71;49932:1;49921:9;49917:17;49908:6;49864:71;:::i;:::-;49945:72;50013:2;50002:9;49998:18;49989:6;49945:72;:::i;:::-;50027;50095:2;50084:9;50080:18;50071:6;50027:72;:::i;:::-;50146:9;50140:4;50136:20;50131:2;50120:9;50116:18;50109:48;50174:76;50245:4;50236:6;50174:76;:::i;:::-;50166:84;;49617:640;;;;;;;:::o;50263:141::-;50319:5;50350:6;50344:13;50335:22;;50366:32;50392:5;50366:32;:::i;:::-;50263:141;;;;:::o;50410:349::-;50479:6;50528:2;50516:9;50507:7;50503:23;50499:32;50496:119;;;50534:79;;:::i;:::-;50496:119;50654:1;50679:63;50734:7;50725:6;50714:9;50710:22;50679:63;:::i;:::-;50669:73;;50625:127;50410:349;;;;:::o
Swarm Source
ipfs://7169e1915503193d57c8848c3f280f55eac65613a31eb07b6e4effdb5ce274c9
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$67.98
Net Worth in POL
Token Allocations
BUSD
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| BSC | 100.00% | $0.999648 | 68 | $67.98 |
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.