ERC-721
Overview
Max Total Supply
97 SST
Holders
16
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
4 SSTLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SorrySams
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-12-05 */ // SPDX-License-Identifier: MIT // File: operator-filter-registry/src/IOperatorFilterRegistry.sol pragma solidity ^0.8.13; interface IOperatorFilterRegistry { function isOperatorAllowed(address registrant, address operator) external view returns (bool); function register(address registrant) external; function registerAndSubscribe(address registrant, address subscription) external; function registerAndCopyEntries(address registrant, address registrantToCopy) external; function unregister(address addr) external; function updateOperator(address registrant, address operator, bool filtered) external; function updateOperators(address registrant, address[] calldata operators, bool filtered) external; function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external; function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external; function subscribe(address registrant, address registrantToSubscribe) external; function unsubscribe(address registrant, bool copyExistingEntries) external; function subscriptionOf(address addr) external returns (address registrant); function subscribers(address registrant) external returns (address[] memory); function subscriberAt(address registrant, uint256 index) external returns (address); function copyEntriesOf(address registrant, address registrantToCopy) external; function isOperatorFiltered(address registrant, address operator) external returns (bool); function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool); function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool); function filteredOperators(address addr) external returns (address[] memory); function filteredCodeHashes(address addr) external returns (bytes32[] memory); function filteredOperatorAt(address registrant, uint256 index) external returns (address); function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32); function isRegistered(address addr) external returns (bool); function codeHashOf(address addr) external returns (bytes32); } // File: operator-filter-registry/src/OperatorFilterer.sol pragma solidity ^0.8.13; /** * @title OperatorFilterer * @notice Abstract contract whose constructor automatically registers and optionally subscribes to or copies another * registrant's entries in the OperatorFilterRegistry. * @dev This smart contract is meant to be inherited by token contracts so they can use the following: * - `onlyAllowedOperator` modifier for `transferFrom` and `safeTransferFrom` methods. * - `onlyAllowedOperatorApproval` modifier for `approve` and `setApprovalForAll` methods. */ abstract contract OperatorFilterer { error OperatorNotAllowed(address operator); IOperatorFilterRegistry public constant OPERATOR_FILTER_REGISTRY = IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E); constructor(address subscriptionOrRegistrantToCopy, bool subscribe) { // If an inheriting token contract is deployed to a network without the registry deployed, the modifier // will not revert, but the contract will need to be registered with the registry once it is deployed in // order for the modifier to filter addresses. if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) { if (subscribe) { OPERATOR_FILTER_REGISTRY.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy); } else { if (subscriptionOrRegistrantToCopy != address(0)) { OPERATOR_FILTER_REGISTRY.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy); } else { OPERATOR_FILTER_REGISTRY.register(address(this)); } } } } modifier onlyAllowedOperator(address from) virtual { // Allow spending tokens from addresses with balance // Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred // from an EOA. if (from != msg.sender) { _checkFilterOperator(msg.sender); } _; } modifier onlyAllowedOperatorApproval(address operator) virtual { _checkFilterOperator(operator); _; } function _checkFilterOperator(address operator) internal view virtual { // Check registry code length to facilitate testing in environments without a deployed registry. if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) { if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), operator)) { revert OperatorNotAllowed(operator); } } } } // File: operator-filter-registry/src/DefaultOperatorFilterer.sol pragma solidity ^0.8.13; /** * @title DefaultOperatorFilterer * @notice Inherits from OperatorFilterer and automatically subscribes to the default OpenSea subscription. */ abstract contract DefaultOperatorFilterer is OperatorFilterer { address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6); constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {} } // 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/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (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); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: SorrySams.sol pragma solidity 0.8.17; contract SorrySams is ERC721Enumerable, Ownable, DefaultOperatorFilterer { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private mintCounter; string public baseURI; string public _contractURI; string public baseExtension = '.json'; uint256 public pricePerToken = 0.01 ether; uint256 public maxSupply = 9999; uint256 public maxMintAmount = 3; IERC721 public referenceContract; mapping(uint256 => bool) public nftClaimed; bool public paused = true; //withdraw addresses address wallet1 = 0x73db8f0431bF8D1b9BC1a0e92f384a648B6CA7fe; constructor(string memory _initBaseURI, string memory _initContractURI, IERC721 _referenceContract) ERC721("SorrySams", "SST") { setBaseURI(_initBaseURI); setContractURI(_initContractURI); referenceContract = _referenceContract; } modifier publicMintCheck(uint8 numberOfTokens) { require(!paused, "Contract is not active!"); require(numberOfTokens > 0 && numberOfTokens <= maxMintAmount, "Invalid amount or maximum token mint amount reached!"); require(totalSupply() <= maxSupply, "Max supply reached!"); require(getCurrentCounterValue() + numberOfTokens <= maxSupply, "Purchase would exceed max tokens!"); require(pricePerToken * numberOfTokens <= msg.value, "Ether value sent is not correct!"); _; } modifier freeMintCheck(uint256[] calldata _referenceTokenIds) { require(!paused, "Contract is not active!"); require(totalSupply() <= maxSupply, "Max supply reached!"); require(getCurrentCounterValue() + _referenceTokenIds.length <= maxSupply, "Purchase would exceed max tokens!"); for(uint256 i = 0; i < _referenceTokenIds.length; i++){ require(referenceContract.ownerOf(_referenceTokenIds[i]) == msg.sender, "Address does not own one of the provided BFTX token ids"); require(!nftClaimed[_referenceTokenIds[i]], "One of the provided Ids is already minted!"); } _; } modifier privateMintCheck(uint8 numberOfTokens) { require(!paused, "Contract is not active!"); require(numberOfTokens > 0, "Invalid token amount!"); require(totalSupply() <= maxSupply, "Max supply reached!"); require(getCurrentCounterValue() + numberOfTokens <= maxSupply, "Purchase would exceed max tokens!"); _; } //we override the _baseURI() method of ERC721 to return our own baseURI function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function setContractURI(string memory newuri) public onlyOwner { _contractURI = newuri; } function contractURI() public view returns (string memory) { return _contractURI; } //Public minting function mintPublic(uint8 numberOfTokens) public payable publicMintCheck(numberOfTokens){ for (uint256 i = 0; i < numberOfTokens; i++) { incrementCurrentCounterValue(); _safeMint(msg.sender, getCurrentCounterValue()); } } //free minting function mintFree(uint256[] calldata _referenceTokenIds) public freeMintCheck(_referenceTokenIds){ for(uint256 i = 0; i < _referenceTokenIds.length; i++){ incrementCurrentCounterValue(); _safeMint(msg.sender, getCurrentCounterValue()); nftClaimed[_referenceTokenIds[i]] = true; } } //Private minting function mintPrivate(uint8 numberOfTokens) public onlyOwner privateMintCheck(numberOfTokens) { for (uint256 i = 0; i < numberOfTokens; i++) { incrementCurrentCounterValue(); _safeMint(msg.sender, getCurrentCounterValue()); } } //change states //set BaseURI function setBaseURI(string memory uri) public onlyOwner { baseURI = uri; } //set public token price function setPricePerToken(uint256 newPrice) public onlyOwner { pricePerToken = newPrice; } //set max mint amount function setMaxMintAmount(uint256 newMintAmount) public onlyOwner { maxMintAmount = newMintAmount; } //set withdraw addresses function setWithdrawAddress(address newWallet1) public onlyOwner { wallet1 = newWallet1; } //set pause function setPaused(bool newState) public onlyOwner { paused = newState; } //get current token counter value function getCurrentCounterValue() public view returns (uint256){ return mintCounter.current(); } //increment token counter value function incrementCurrentCounterValue() private { require(getCurrentCounterValue() < maxSupply, "counter can not exceed the max public supply"); return mintCounter.increment(); } //withdraw all money to specific wallets function withdrawAll() public onlyOwner { uint256 balance = address(this).balance; require(balance > 0, "insufficient funds!"); _widthdraw(wallet1, address(this).balance); } function _widthdraw(address _address, uint256 _amount) private { (bool success, ) = _address.call{value: _amount}(""); require(success, "Transfer failed."); } //Opensea creator fees implementation function setApprovalForAll(address operator, bool approved) public override(ERC721, IERC721) onlyAllowedOperatorApproval(operator) { super.setApprovalForAll(operator, approved); } function approve(address operator, uint256 tokenId) public override(ERC721, IERC721) onlyAllowedOperatorApproval(operator) { super.approve(operator, tokenId); } function transferFrom(address from, address to, uint256 tokenId) public override(ERC721, IERC721) onlyAllowedOperator(from) { super.transferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId) public override(ERC721, IERC721) onlyAllowedOperator(from) { super.safeTransferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public override(ERC721, IERC721) onlyAllowedOperator(from) { super.safeTransferFrom(from, to, tokenId, data); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initContractURI","type":"string"},{"internalType":"contract IERC721","name":"_referenceContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"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":"OPERATOR_FILTER_REGISTRY","outputs":[{"internalType":"contract IOperatorFilterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"getCurrentCounterValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_referenceTokenIds","type":"uint256[]"}],"name":"mintFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"numberOfTokens","type":"uint8"}],"name":"mintPrivate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"numberOfTokens","type":"uint8"}],"name":"mintPublic","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pricePerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referenceContract","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMintAmount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newState","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPricePerToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet1","type":"address"}],"name":"setWithdrawAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600e90816200004a9190620008ea565b50662386f26fc10000600f5561270f60105560036011556001601460006101000a81548160ff0219169083151502179055507373db8f0431bf8d1b9bc1a0e92f384a648b6ca7fe601460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000de57600080fd5b50604051620063d8380380620063d8833981810160405281019062000104919062000bae565b733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280600981526020017f536f72727953616d7300000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f53535400000000000000000000000000000000000000000000000000000000008152508160009081620001989190620008ea565b508060019081620001aa9190620008ea565b505050620001cd620001c16200043060201b60201c565b6200043860201b60201c565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115620003c257801562000288576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b81526004016200024e92919062000c59565b600060405180830381600087803b1580156200026957600080fd5b505af11580156200027e573d6000803e3d6000fd5b50505050620003c1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000342576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b81526004016200030892919062000c59565b600060405180830381600087803b1580156200032357600080fd5b505af115801562000338573d6000803e3d6000fd5b50505050620003c0565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b81526004016200038b919062000c86565b600060405180830381600087803b158015620003a657600080fd5b505af1158015620003bb573d6000803e3d6000fd5b505050505b5b5b5050620003d583620004fe60201b60201c565b620003e682620005a260201b60201c565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505062000d26565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200050e6200043060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005346200064660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200058d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005849062000d04565b60405180910390fd5b80600c90816200059e9190620008ea565b5050565b620005b26200043060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005d86200064660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000631576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006289062000d04565b60405180910390fd5b80600d9081620006429190620008ea565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006f257607f821691505b602082108103620007085762000707620006aa565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000733565b6200077e868362000733565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620007cb620007c5620007bf8462000796565b620007a0565b62000796565b9050919050565b6000819050919050565b620007e783620007aa565b620007ff620007f682620007d2565b84845462000740565b825550505050565b600090565b6200081662000807565b62000823818484620007dc565b505050565b5b818110156200084b576200083f6000826200080c565b60018101905062000829565b5050565b601f8211156200089a5762000864816200070e565b6200086f8462000723565b810160208510156200087f578190505b620008976200088e8562000723565b83018262000828565b50505b505050565b600082821c905092915050565b6000620008bf600019846008026200089f565b1980831691505092915050565b6000620008da8383620008ac565b9150826002028217905092915050565b620008f58262000670565b67ffffffffffffffff8111156200091157620009106200067b565b5b6200091d8254620006d9565b6200092a8282856200084f565b600060209050601f8311600181146200096257600084156200094d578287015190505b620009598582620008cc565b865550620009c9565b601f19841662000972866200070e565b60005b828110156200099c5784890151825560018201915060208501945060208101905062000975565b86831015620009bc5784890151620009b8601f891682620008ac565b8355505b6001600288020188555050505b505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b62000a0b82620009ef565b810181811067ffffffffffffffff8211171562000a2d5762000a2c6200067b565b5b80604052505050565b600062000a42620009d1565b905062000a50828262000a00565b919050565b600067ffffffffffffffff82111562000a735762000a726200067b565b5b62000a7e82620009ef565b9050602081019050919050565b60005b8381101562000aab57808201518184015260208101905062000a8e565b60008484015250505050565b600062000ace62000ac88462000a55565b62000a36565b90508281526020810184848401111562000aed5762000aec620009ea565b5b62000afa84828562000a8b565b509392505050565b600082601f83011262000b1a5762000b19620009e5565b5b815162000b2c84826020860162000ab7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b628262000b35565b9050919050565b600062000b768262000b55565b9050919050565b62000b888162000b69565b811462000b9457600080fd5b50565b60008151905062000ba88162000b7d565b92915050565b60008060006060848603121562000bca5762000bc9620009db565b5b600084015167ffffffffffffffff81111562000beb5762000bea620009e0565b5b62000bf98682870162000b02565b935050602084015167ffffffffffffffff81111562000c1d5762000c1c620009e0565b5b62000c2b8682870162000b02565b925050604062000c3e8682870162000b97565b9150509250925092565b62000c538162000b55565b82525050565b600060408201905062000c70600083018562000c48565b62000c7f602083018462000c48565b9392505050565b600060208201905062000c9d600083018462000c48565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000cec60208362000ca3565b915062000cf98262000cb4565b602082019050919050565b6000602082019050818103600083015262000d1f8162000cdd565b9050919050565b6156a28062000d366000396000f3fe6080604052600436106102465760003560e01c806370a0823111610139578063bc391037116100b6578063d8f4b0891161007a578063d8f4b0891461086d578063e8a3d48514610896578063e985e9c5146108c1578063eda5d30f146108fe578063f2fde38b14610929578063f48321101461095257610246565b8063bc39103714610786578063c0e72740146107af578063c6682862146107da578063c87b56dd14610805578063d5abeb011461084257610246565b8063938e3d7b116100fd578063938e3d7b146106a357806395d89b41146106cc578063a22cb465146106f7578063b88d4fde14610720578063bb775ce71461074957610246565b806370a08231146105e2578063715018a61461061f5780637b1b1de614610636578063853828b6146106615780638da5cb5b1461067857610246565b80632f745c59116101c757806355f804b31161018b57806355f804b31461050a5780635c975abb146105335780636352211e1461055e57806367dce1ed1461059b5780636c0360eb146105b757610246565b80632f745c59146104135780633ab1a4941461045057806341f434341461047957806342842e0e146104a45780634f6ccce7146104cd57610246565b806316c38b3c1161020e57806316c38b3c1461034257806318160ddd1461036b578063239c70ae1461039657806323b872dd146103c15780632bf2762f146103ea57610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063088a4ed0146102f0578063095ea7b314610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613786565b61097d565b60405161027f91906137ce565b60405180910390f35b34801561029457600080fd5b5061029d6109f7565b6040516102aa9190613879565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d591906138d1565b610a89565b6040516102e7919061393f565b60405180910390f35b3480156102fc57600080fd5b50610317600480360381019061031291906138d1565b610b0e565b005b34801561032557600080fd5b50610340600480360381019061033b9190613986565b610b94565b005b34801561034e57600080fd5b50610369600480360381019061036491906139f2565b610bad565b005b34801561037757600080fd5b50610380610c46565b60405161038d9190613a2e565b60405180910390f35b3480156103a257600080fd5b506103ab610c53565b6040516103b89190613a2e565b60405180910390f35b3480156103cd57600080fd5b506103e860048036038101906103e39190613a49565b610c59565b005b3480156103f657600080fd5b50610411600480360381019061040c91906138d1565b610ca8565b005b34801561041f57600080fd5b5061043a60048036038101906104359190613986565b610d2e565b6040516104479190613a2e565b60405180910390f35b34801561045c57600080fd5b5061047760048036038101906104729190613a9c565b610dd3565b005b34801561048557600080fd5b5061048e610e93565b60405161049b9190613b28565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c69190613a49565b610ea5565b005b3480156104d957600080fd5b506104f460048036038101906104ef91906138d1565b610ef4565b6040516105019190613a2e565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c9190613c78565b610f65565b005b34801561053f57600080fd5b50610548610ff4565b60405161055591906137ce565b60405180910390f35b34801561056a57600080fd5b50610585600480360381019061058091906138d1565b611007565b604051610592919061393f565b60405180910390f35b6105b560048036038101906105b09190613cfa565b6110b8565b005b3480156105c357600080fd5b506105cc611298565b6040516105d99190613879565b60405180910390f35b3480156105ee57600080fd5b5061060960048036038101906106049190613a9c565b611326565b6040516106169190613a2e565b60405180910390f35b34801561062b57600080fd5b506106346113dd565b005b34801561064257600080fd5b5061064b611465565b6040516106589190613a2e565b60405180910390f35b34801561066d57600080fd5b5061067661146b565b005b34801561068457600080fd5b5061068d61155e565b60405161069a919061393f565b60405180910390f35b3480156106af57600080fd5b506106ca60048036038101906106c59190613c78565b611588565b005b3480156106d857600080fd5b506106e1611617565b6040516106ee9190613879565b60405180910390f35b34801561070357600080fd5b5061071e60048036038101906107199190613d27565b6116a9565b005b34801561072c57600080fd5b5061074760048036038101906107429190613e08565b6116c2565b005b34801561075557600080fd5b50610770600480360381019061076b91906138d1565b611713565b60405161077d91906137ce565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a89190613cfa565b611733565b005b3480156107bb57600080fd5b506107c461192b565b6040516107d19190613879565b60405180910390f35b3480156107e657600080fd5b506107ef6119b9565b6040516107fc9190613879565b60405180910390f35b34801561081157600080fd5b5061082c600480360381019061082791906138d1565b611a47565b6040516108399190613879565b60405180910390f35b34801561084e57600080fd5b50610857611af1565b6040516108649190613a2e565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f9190613eeb565b611af7565b005b3480156108a257600080fd5b506108ab611e33565b6040516108b89190613879565b60405180910390f35b3480156108cd57600080fd5b506108e860048036038101906108e39190613f38565b611ec5565b6040516108f591906137ce565b60405180910390f35b34801561090a57600080fd5b50610913611f59565b6040516109209190613f99565b60405180910390f35b34801561093557600080fd5b50610950600480360381019061094b9190613a9c565b611f7f565b005b34801561095e57600080fd5b50610967612076565b6040516109749190613a2e565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109f057506109ef82612087565b5b9050919050565b606060008054610a0690613fe3565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3290613fe3565b8015610a7f5780601f10610a5457610100808354040283529160200191610a7f565b820191906000526020600020905b815481529060010190602001808311610a6257829003601f168201915b5050505050905090565b6000610a9482612169565b610ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aca90614086565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610b166121d5565b73ffffffffffffffffffffffffffffffffffffffff16610b3461155e565b73ffffffffffffffffffffffffffffffffffffffff1614610b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b81906140f2565b60405180910390fd5b8060118190555050565b81610b9e816121dd565b610ba883836122da565b505050565b610bb56121d5565b73ffffffffffffffffffffffffffffffffffffffff16610bd361155e565b73ffffffffffffffffffffffffffffffffffffffff1614610c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c20906140f2565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b6000600880549050905090565b60115481565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c9757610c96336121dd565b5b610ca28484846123f1565b50505050565b610cb06121d5565b73ffffffffffffffffffffffffffffffffffffffff16610cce61155e565b73ffffffffffffffffffffffffffffffffffffffff1614610d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1b906140f2565b60405180910390fd5b80600f8190555050565b6000610d3983611326565b8210610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7190614184565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ddb6121d5565b73ffffffffffffffffffffffffffffffffffffffff16610df961155e565b73ffffffffffffffffffffffffffffffffffffffff1614610e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e46906140f2565b60405180910390fd5b80601460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6daaeb6d7670e522a718067333cd4e81565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ee357610ee2336121dd565b5b610eee848484612451565b50505050565b6000610efe610c46565b8210610f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3690614216565b60405180910390fd5b60088281548110610f5357610f52614236565b5b90600052602060002001549050919050565b610f6d6121d5565b73ffffffffffffffffffffffffffffffffffffffff16610f8b61155e565b73ffffffffffffffffffffffffffffffffffffffff1614610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd8906140f2565b60405180910390fd5b80600c9081610ff09190614407565b5050565b601460009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a69061454b565b60405180910390fd5b80915050919050565b80601460009054906101000a900460ff1615611109576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611100906145b7565b60405180910390fd5b60008160ff1611801561112157506011548160ff1611155b611160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115790614649565b60405180910390fd5b60105461116b610c46565b11156111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a3906146b5565b60405180910390fd5b6010548160ff166111bb612076565b6111c59190614704565b1115611206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fd906147aa565b60405180910390fd5b348160ff16600f5461121891906147ca565b1115611259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125090614858565b60405180910390fd5b60005b8260ff168110156112935761126f612471565b6112803361127b612076565b6124c8565b808061128b90614878565b91505061125c565b505050565b600c80546112a590613fe3565b80601f01602080910402602001604051908101604052809291908181526020018280546112d190613fe3565b801561131e5780601f106112f35761010080835404028352916020019161131e565b820191906000526020600020905b81548152906001019060200180831161130157829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138d90614932565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113e56121d5565b73ffffffffffffffffffffffffffffffffffffffff1661140361155e565b73ffffffffffffffffffffffffffffffffffffffff1614611459576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611450906140f2565b60405180910390fd5b61146360006124e6565b565b600f5481565b6114736121d5565b73ffffffffffffffffffffffffffffffffffffffff1661149161155e565b73ffffffffffffffffffffffffffffffffffffffff16146114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de906140f2565b60405180910390fd5b60004790506000811161152f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115269061499e565b60405180910390fd5b61155b601460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16476125ac565b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115906121d5565b73ffffffffffffffffffffffffffffffffffffffff166115ae61155e565b73ffffffffffffffffffffffffffffffffffffffff1614611604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fb906140f2565b60405180910390fd5b80600d90816116139190614407565b5050565b60606001805461162690613fe3565b80601f016020809104026020016040519081016040528092919081815260200182805461165290613fe3565b801561169f5780601f106116745761010080835404028352916020019161169f565b820191906000526020600020905b81548152906001019060200180831161168257829003601f168201915b5050505050905090565b816116b3816121dd565b6116bd838361265d565b505050565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611700576116ff336121dd565b5b61170c85858585612673565b5050505050565b60136020528060005260406000206000915054906101000a900460ff1681565b61173b6121d5565b73ffffffffffffffffffffffffffffffffffffffff1661175961155e565b73ffffffffffffffffffffffffffffffffffffffff16146117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a6906140f2565b60405180910390fd5b80601460009054906101000a900460ff1615611800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f7906145b7565b60405180910390fd5b60008160ff1611611846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183d90614a0a565b60405180910390fd5b601054611851610c46565b1115611892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611889906146b5565b60405180910390fd5b6010548160ff166118a1612076565b6118ab9190614704565b11156118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e3906147aa565b60405180910390fd5b60005b8260ff1681101561192657611902612471565b6119133361190e612076565b6124c8565b808061191e90614878565b9150506118ef565b505050565b600d805461193890613fe3565b80601f016020809104026020016040519081016040528092919081815260200182805461196490613fe3565b80156119b15780601f10611986576101008083540402835291602001916119b1565b820191906000526020600020905b81548152906001019060200180831161199457829003601f168201915b505050505081565b600e80546119c690613fe3565b80601f01602080910402602001604051908101604052809291908181526020018280546119f290613fe3565b8015611a3f5780601f10611a1457610100808354040283529160200191611a3f565b820191906000526020600020905b815481529060010190602001808311611a2257829003601f168201915b505050505081565b6060611a5282612169565b611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8890614a9c565b60405180910390fd5b6000611a9b6126d5565b90506000815111611abb5760405180602001604052806000815250611ae9565b80611ac584612767565b600e604051602001611ad993929190614b7b565b6040516020818303038152906040525b915050919050565b60105481565b8181601460009054906101000a900460ff1615611b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b40906145b7565b60405180910390fd5b601054611b54610c46565b1115611b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8c906146b5565b60405180910390fd5b60105482829050611ba4612076565b611bae9190614704565b1115611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be6906147aa565b60405180910390fd5b60005b82829050811015611dac573373ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e858585818110611c6557611c64614236565b5b905060200201356040518263ffffffff1660e01b8152600401611c889190613a2e565b602060405180830381865afa158015611ca5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc99190614bc1565b73ffffffffffffffffffffffffffffffffffffffff1614611d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1690614c60565b60405180910390fd5b60136000848484818110611d3657611d35614236565b5b90506020020135815260200190815260200160002060009054906101000a900460ff1615611d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9090614cf2565b60405180910390fd5b8080611da490614878565b915050611bf2565b5060005b84849050811015611e2c57611dc3612471565b611dd433611dcf612076565b6124c8565b600160136000878785818110611ded57611dec614236565b5b90506020020135815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611e2490614878565b915050611db0565b5050505050565b6060600d8054611e4290613fe3565b80601f0160208091040260200160405190810160405280929190818152602001828054611e6e90613fe3565b8015611ebb5780601f10611e9057610100808354040283529160200191611ebb565b820191906000526020600020905b815481529060010190602001808311611e9e57829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f876121d5565b73ffffffffffffffffffffffffffffffffffffffff16611fa561155e565b73ffffffffffffffffffffffffffffffffffffffff1614611ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff2906140f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361206a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206190614d84565b60405180910390fd5b612073816124e6565b50565b6000612082600b6128c7565b905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061215257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806121625750612161826128d5565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156122d7576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401612254929190614da4565b602060405180830381865afa158015612271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122959190614de2565b6122d657806040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016122cd919061393f565b60405180910390fd5b5b50565b60006122e582611007565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234c90614e81565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166123746121d5565b73ffffffffffffffffffffffffffffffffffffffff1614806123a357506123a28161239d6121d5565b611ec5565b5b6123e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d990614f13565b60405180910390fd5b6123ec838361293f565b505050565b6124026123fc6121d5565b826129f8565b612441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243890614fa5565b60405180910390fd5b61244c838383612ad6565b505050565b61246c838383604051806020016040528060008152506116c2565b505050565b60105461247c612076565b106124bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b390615037565b60405180910390fd5b6124c6600b612d3c565b565b6124e2828260405180602001604052806000815250612d52565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516125d290615088565b60006040518083038185875af1925050503d806000811461260f576040519150601f19603f3d011682016040523d82523d6000602084013e612614565b606091505b5050905080612658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264f906150e9565b60405180910390fd5b505050565b61266f6126686121d5565b8383612dad565b5050565b61268461267e6121d5565b836129f8565b6126c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ba90614fa5565b60405180910390fd5b6126cf84848484612f19565b50505050565b6060600c80546126e490613fe3565b80601f016020809104026020016040519081016040528092919081815260200182805461271090613fe3565b801561275d5780601f106127325761010080835404028352916020019161275d565b820191906000526020600020905b81548152906001019060200180831161274057829003601f168201915b5050505050905090565b6060600082036127ae576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128c2565b600082905060005b600082146127e05780806127c990614878565b915050600a826127d99190615138565b91506127b6565b60008167ffffffffffffffff8111156127fc576127fb613b4d565b5b6040519080825280601f01601f19166020018201604052801561282e5781602001600182028036833780820191505090505b5090505b600085146128bb576001826128479190615169565b9150600a85612856919061519d565b60306128629190614704565b60f81b81838151811061287857612877614236565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128b49190615138565b9450612832565b8093505050505b919050565b600081600001549050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166129b283611007565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612a0382612169565b612a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3990615240565b60405180910390fd5b6000612a4d83611007565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612abc57508373ffffffffffffffffffffffffffffffffffffffff16612aa484610a89565b73ffffffffffffffffffffffffffffffffffffffff16145b80612acd5750612acc8185611ec5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612af682611007565b73ffffffffffffffffffffffffffffffffffffffff1614612b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b43906152d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb290615364565b60405180910390fd5b612bc6838383612f75565b612bd160008261293f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c219190615169565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c789190614704565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d37838383613087565b505050565b6001816000016000828254019250508190555050565b612d5c838361308c565b612d696000848484613265565b612da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9f906153f6565b60405180910390fd5b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1290615462565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612f0c91906137ce565b60405180910390a3505050565b612f24848484612ad6565b612f3084848484613265565b612f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f66906153f6565b60405180910390fd5b50505050565b612f808383836133ec565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612fc257612fbd816133f1565b613001565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461300057612fff838261343a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130435761303e816135a7565b613082565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613081576130808282613678565b5b5b505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f2906154ce565b60405180910390fd5b61310481612169565b15613144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313b9061553a565b60405180910390fd5b61315060008383612f75565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131a09190614704565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461326160008383613087565b5050565b60006132868473ffffffffffffffffffffffffffffffffffffffff166136f7565b156133df578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132af6121d5565b8786866040518563ffffffff1660e01b81526004016132d194939291906155af565b6020604051808303816000875af192505050801561330d57506040513d601f19601f8201168201806040525081019061330a9190615610565b60015b61338f573d806000811461333d576040519150601f19603f3d011682016040523d82523d6000602084013e613342565b606091505b506000815103613387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337e906153f6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506133e4565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161344784611326565b6134519190615169565b9050600060076000848152602001908152602001600020549050818114613536576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506135bb9190615169565b90506000600960008481526020019081526020016000205490506000600883815481106135eb576135ea614236565b5b90600052602060002001549050806008838154811061360d5761360c614236565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061365c5761365b61563d565b5b6001900381819060005260206000200160009055905550505050565b600061368383611326565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6137638161372e565b811461376e57600080fd5b50565b6000813590506137808161375a565b92915050565b60006020828403121561379c5761379b613724565b5b60006137aa84828501613771565b91505092915050565b60008115159050919050565b6137c8816137b3565b82525050565b60006020820190506137e360008301846137bf565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613823578082015181840152602081019050613808565b60008484015250505050565b6000601f19601f8301169050919050565b600061384b826137e9565b61385581856137f4565b9350613865818560208601613805565b61386e8161382f565b840191505092915050565b600060208201905081810360008301526138938184613840565b905092915050565b6000819050919050565b6138ae8161389b565b81146138b957600080fd5b50565b6000813590506138cb816138a5565b92915050565b6000602082840312156138e7576138e6613724565b5b60006138f5848285016138bc565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613929826138fe565b9050919050565b6139398161391e565b82525050565b60006020820190506139546000830184613930565b92915050565b6139638161391e565b811461396e57600080fd5b50565b6000813590506139808161395a565b92915050565b6000806040838503121561399d5761399c613724565b5b60006139ab85828601613971565b92505060206139bc858286016138bc565b9150509250929050565b6139cf816137b3565b81146139da57600080fd5b50565b6000813590506139ec816139c6565b92915050565b600060208284031215613a0857613a07613724565b5b6000613a16848285016139dd565b91505092915050565b613a288161389b565b82525050565b6000602082019050613a436000830184613a1f565b92915050565b600080600060608486031215613a6257613a61613724565b5b6000613a7086828701613971565b9350506020613a8186828701613971565b9250506040613a92868287016138bc565b9150509250925092565b600060208284031215613ab257613ab1613724565b5b6000613ac084828501613971565b91505092915050565b6000819050919050565b6000613aee613ae9613ae4846138fe565b613ac9565b6138fe565b9050919050565b6000613b0082613ad3565b9050919050565b6000613b1282613af5565b9050919050565b613b2281613b07565b82525050565b6000602082019050613b3d6000830184613b19565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613b858261382f565b810181811067ffffffffffffffff82111715613ba457613ba3613b4d565b5b80604052505050565b6000613bb761371a565b9050613bc38282613b7c565b919050565b600067ffffffffffffffff821115613be357613be2613b4d565b5b613bec8261382f565b9050602081019050919050565b82818337600083830152505050565b6000613c1b613c1684613bc8565b613bad565b905082815260208101848484011115613c3757613c36613b48565b5b613c42848285613bf9565b509392505050565b600082601f830112613c5f57613c5e613b43565b5b8135613c6f848260208601613c08565b91505092915050565b600060208284031215613c8e57613c8d613724565b5b600082013567ffffffffffffffff811115613cac57613cab613729565b5b613cb884828501613c4a565b91505092915050565b600060ff82169050919050565b613cd781613cc1565b8114613ce257600080fd5b50565b600081359050613cf481613cce565b92915050565b600060208284031215613d1057613d0f613724565b5b6000613d1e84828501613ce5565b91505092915050565b60008060408385031215613d3e57613d3d613724565b5b6000613d4c85828601613971565b9250506020613d5d858286016139dd565b9150509250929050565b600067ffffffffffffffff821115613d8257613d81613b4d565b5b613d8b8261382f565b9050602081019050919050565b6000613dab613da684613d67565b613bad565b905082815260208101848484011115613dc757613dc6613b48565b5b613dd2848285613bf9565b509392505050565b600082601f830112613def57613dee613b43565b5b8135613dff848260208601613d98565b91505092915050565b60008060008060808587031215613e2257613e21613724565b5b6000613e3087828801613971565b9450506020613e4187828801613971565b9350506040613e52878288016138bc565b925050606085013567ffffffffffffffff811115613e7357613e72613729565b5b613e7f87828801613dda565b91505092959194509250565b600080fd5b600080fd5b60008083601f840112613eab57613eaa613b43565b5b8235905067ffffffffffffffff811115613ec857613ec7613e8b565b5b602083019150836020820283011115613ee457613ee3613e90565b5b9250929050565b60008060208385031215613f0257613f01613724565b5b600083013567ffffffffffffffff811115613f2057613f1f613729565b5b613f2c85828601613e95565b92509250509250929050565b60008060408385031215613f4f57613f4e613724565b5b6000613f5d85828601613971565b9250506020613f6e85828601613971565b9150509250929050565b6000613f8382613af5565b9050919050565b613f9381613f78565b82525050565b6000602082019050613fae6000830184613f8a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ffb57607f821691505b60208210810361400e5761400d613fb4565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614070602c836137f4565b915061407b82614014565b604082019050919050565b6000602082019050818103600083015261409f81614063565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006140dc6020836137f4565b91506140e7826140a6565b602082019050919050565b6000602082019050818103600083015261410b816140cf565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b600061416e602b836137f4565b915061417982614112565b604082019050919050565b6000602082019050818103600083015261419d81614161565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614200602c836137f4565b915061420b826141a4565b604082019050919050565b6000602082019050818103600083015261422f816141f3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026142c77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261428a565b6142d1868361428a565b95508019841693508086168417925050509392505050565b60006143046142ff6142fa8461389b565b613ac9565b61389b565b9050919050565b6000819050919050565b61431e836142e9565b61433261432a8261430b565b848454614297565b825550505050565b600090565b61434761433a565b614352818484614315565b505050565b5b818110156143765761436b60008261433f565b600181019050614358565b5050565b601f8211156143bb5761438c81614265565b6143958461427a565b810160208510156143a4578190505b6143b86143b08561427a565b830182614357565b50505b505050565b600082821c905092915050565b60006143de600019846008026143c0565b1980831691505092915050565b60006143f783836143cd565b9150826002028217905092915050565b614410826137e9565b67ffffffffffffffff81111561442957614428613b4d565b5b6144338254613fe3565b61443e82828561437a565b600060209050601f831160018114614471576000841561445f578287015190505b61446985826143eb565b8655506144d1565b601f19841661447f86614265565b60005b828110156144a757848901518255600182019150602085019450602081019050614482565b868310156144c457848901516144c0601f8916826143cd565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006145356029836137f4565b9150614540826144d9565b604082019050919050565b6000602082019050818103600083015261456481614528565b9050919050565b7f436f6e7472616374206973206e6f742061637469766521000000000000000000600082015250565b60006145a16017836137f4565b91506145ac8261456b565b602082019050919050565b600060208201905081810360008301526145d081614594565b9050919050565b7f496e76616c696420616d6f756e74206f72206d6178696d756d20746f6b656e2060008201527f6d696e7420616d6f756e74207265616368656421000000000000000000000000602082015250565b60006146336034836137f4565b915061463e826145d7565b604082019050919050565b6000602082019050818103600083015261466281614626565b9050919050565b7f4d617820737570706c7920726561636865642100000000000000000000000000600082015250565b600061469f6013836137f4565b91506146aa82614669565b602082019050919050565b600060208201905081810360008301526146ce81614692565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061470f8261389b565b915061471a8361389b565b9250828201905080821115614732576147316146d5565b5b92915050565b7f507572636861736520776f756c6420657863656564206d617820746f6b656e7360008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b60006147946021836137f4565b915061479f82614738565b604082019050919050565b600060208201905081810360008301526147c381614787565b9050919050565b60006147d58261389b565b91506147e08361389b565b92508282026147ee8161389b565b91508282048414831517614805576148046146d5565b5b5092915050565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637421600082015250565b60006148426020836137f4565b915061484d8261480c565b602082019050919050565b6000602082019050818103600083015261487181614835565b9050919050565b60006148838261389b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036148b5576148b46146d5565b5b600182019050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061491c602a836137f4565b9150614927826148c0565b604082019050919050565b6000602082019050818103600083015261494b8161490f565b9050919050565b7f696e73756666696369656e742066756e64732100000000000000000000000000600082015250565b60006149886013836137f4565b915061499382614952565b602082019050919050565b600060208201905081810360008301526149b78161497b565b9050919050565b7f496e76616c696420746f6b656e20616d6f756e74210000000000000000000000600082015250565b60006149f46015836137f4565b91506149ff826149be565b602082019050919050565b60006020820190508181036000830152614a23816149e7565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614a86602f836137f4565b9150614a9182614a2a565b604082019050919050565b60006020820190508181036000830152614ab581614a79565b9050919050565b600081905092915050565b6000614ad2826137e9565b614adc8185614abc565b9350614aec818560208601613805565b80840191505092915050565b60008154614b0581613fe3565b614b0f8186614abc565b94506001821660008114614b2a5760018114614b3f57614b72565b60ff1983168652811515820286019350614b72565b614b4885614265565b60005b83811015614b6a57815481890152600182019150602081019050614b4b565b838801955050505b50505092915050565b6000614b878286614ac7565b9150614b938285614ac7565b9150614b9f8284614af8565b9150819050949350505050565b600081519050614bbb8161395a565b92915050565b600060208284031215614bd757614bd6613724565b5b6000614be584828501614bac565b91505092915050565b7f4164647265737320646f6573206e6f74206f776e206f6e65206f66207468652060008201527f70726f7669646564204246545820746f6b656e20696473000000000000000000602082015250565b6000614c4a6037836137f4565b9150614c5582614bee565b604082019050919050565b60006020820190508181036000830152614c7981614c3d565b9050919050565b7f4f6e65206f66207468652070726f76696465642049647320697320616c72656160008201527f6479206d696e7465642100000000000000000000000000000000000000000000602082015250565b6000614cdc602a836137f4565b9150614ce782614c80565b604082019050919050565b60006020820190508181036000830152614d0b81614ccf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d6e6026836137f4565b9150614d7982614d12565b604082019050919050565b60006020820190508181036000830152614d9d81614d61565b9050919050565b6000604082019050614db96000830185613930565b614dc66020830184613930565b9392505050565b600081519050614ddc816139c6565b92915050565b600060208284031215614df857614df7613724565b5b6000614e0684828501614dcd565b91505092915050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e6b6021836137f4565b9150614e7682614e0f565b604082019050919050565b60006020820190508181036000830152614e9a81614e5e565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000614efd6038836137f4565b9150614f0882614ea1565b604082019050919050565b60006020820190508181036000830152614f2c81614ef0565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000614f8f6031836137f4565b9150614f9a82614f33565b604082019050919050565b60006020820190508181036000830152614fbe81614f82565b9050919050565b7f636f756e7465722063616e206e6f742065786365656420746865206d6178207060008201527f75626c696320737570706c790000000000000000000000000000000000000000602082015250565b6000615021602c836137f4565b915061502c82614fc5565b604082019050919050565b6000602082019050818103600083015261505081615014565b9050919050565b600081905092915050565b50565b6000615072600083615057565b915061507d82615062565b600082019050919050565b600061509382615065565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b60006150d36010836137f4565b91506150de8261509d565b602082019050919050565b60006020820190508181036000830152615102816150c6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151438261389b565b915061514e8361389b565b92508261515e5761515d615109565b5b828204905092915050565b60006151748261389b565b915061517f8361389b565b9250828203905081811115615197576151966146d5565b5b92915050565b60006151a88261389b565b91506151b38361389b565b9250826151c3576151c2615109565b5b828206905092915050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061522a602c836137f4565b9150615235826151ce565b604082019050919050565b600060208201905081810360008301526152598161521d565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006152bc6025836137f4565b91506152c782615260565b604082019050919050565b600060208201905081810360008301526152eb816152af565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061534e6024836137f4565b9150615359826152f2565b604082019050919050565b6000602082019050818103600083015261537d81615341565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006153e06032836137f4565b91506153eb82615384565b604082019050919050565b6000602082019050818103600083015261540f816153d3565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061544c6019836137f4565b915061545782615416565b602082019050919050565b6000602082019050818103600083015261547b8161543f565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006154b86020836137f4565b91506154c382615482565b602082019050919050565b600060208201905081810360008301526154e7816154ab565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615524601c836137f4565b915061552f826154ee565b602082019050919050565b6000602082019050818103600083015261555381615517565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006155818261555a565b61558b8185615565565b935061559b818560208601613805565b6155a48161382f565b840191505092915050565b60006080820190506155c46000830187613930565b6155d16020830186613930565b6155de6040830185613a1f565b81810360608301526155f08184615576565b905095945050505050565b60008151905061560a8161375a565b92915050565b60006020828403121561562657615625613724565b5b6000615634848285016155fb565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220c9e9c66b51f4ea853a44aae875e649bc1e259fe6dd2c840d7af8f31d540114b064736f6c63430008110033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000fb751688fb355b9dc9f41bb83cf39490022dbe23000000000000000000000000000000000000000000000000000000000000004168747470733a2f2f61766174617261706973746f726167652e626c6f622e636f72652e77696e646f77732e6e65742f736f72727973616d732f6d61696e6e65742f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005b68747470733a2f2f61766174617261706973746f726167652e626c6f622e636f72652e77696e646f77732e6e65742f736f72727973616d732f6d61696e6e65742f636f6e74726163742f7373745f636f6e74726163742e6a736f6e0000000000
Deployed Bytecode
0x6080604052600436106102465760003560e01c806370a0823111610139578063bc391037116100b6578063d8f4b0891161007a578063d8f4b0891461086d578063e8a3d48514610896578063e985e9c5146108c1578063eda5d30f146108fe578063f2fde38b14610929578063f48321101461095257610246565b8063bc39103714610786578063c0e72740146107af578063c6682862146107da578063c87b56dd14610805578063d5abeb011461084257610246565b8063938e3d7b116100fd578063938e3d7b146106a357806395d89b41146106cc578063a22cb465146106f7578063b88d4fde14610720578063bb775ce71461074957610246565b806370a08231146105e2578063715018a61461061f5780637b1b1de614610636578063853828b6146106615780638da5cb5b1461067857610246565b80632f745c59116101c757806355f804b31161018b57806355f804b31461050a5780635c975abb146105335780636352211e1461055e57806367dce1ed1461059b5780636c0360eb146105b757610246565b80632f745c59146104135780633ab1a4941461045057806341f434341461047957806342842e0e146104a45780634f6ccce7146104cd57610246565b806316c38b3c1161020e57806316c38b3c1461034257806318160ddd1461036b578063239c70ae1461039657806323b872dd146103c15780632bf2762f146103ea57610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063088a4ed0146102f0578063095ea7b314610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613786565b61097d565b60405161027f91906137ce565b60405180910390f35b34801561029457600080fd5b5061029d6109f7565b6040516102aa9190613879565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d591906138d1565b610a89565b6040516102e7919061393f565b60405180910390f35b3480156102fc57600080fd5b50610317600480360381019061031291906138d1565b610b0e565b005b34801561032557600080fd5b50610340600480360381019061033b9190613986565b610b94565b005b34801561034e57600080fd5b50610369600480360381019061036491906139f2565b610bad565b005b34801561037757600080fd5b50610380610c46565b60405161038d9190613a2e565b60405180910390f35b3480156103a257600080fd5b506103ab610c53565b6040516103b89190613a2e565b60405180910390f35b3480156103cd57600080fd5b506103e860048036038101906103e39190613a49565b610c59565b005b3480156103f657600080fd5b50610411600480360381019061040c91906138d1565b610ca8565b005b34801561041f57600080fd5b5061043a60048036038101906104359190613986565b610d2e565b6040516104479190613a2e565b60405180910390f35b34801561045c57600080fd5b5061047760048036038101906104729190613a9c565b610dd3565b005b34801561048557600080fd5b5061048e610e93565b60405161049b9190613b28565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c69190613a49565b610ea5565b005b3480156104d957600080fd5b506104f460048036038101906104ef91906138d1565b610ef4565b6040516105019190613a2e565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c9190613c78565b610f65565b005b34801561053f57600080fd5b50610548610ff4565b60405161055591906137ce565b60405180910390f35b34801561056a57600080fd5b50610585600480360381019061058091906138d1565b611007565b604051610592919061393f565b60405180910390f35b6105b560048036038101906105b09190613cfa565b6110b8565b005b3480156105c357600080fd5b506105cc611298565b6040516105d99190613879565b60405180910390f35b3480156105ee57600080fd5b5061060960048036038101906106049190613a9c565b611326565b6040516106169190613a2e565b60405180910390f35b34801561062b57600080fd5b506106346113dd565b005b34801561064257600080fd5b5061064b611465565b6040516106589190613a2e565b60405180910390f35b34801561066d57600080fd5b5061067661146b565b005b34801561068457600080fd5b5061068d61155e565b60405161069a919061393f565b60405180910390f35b3480156106af57600080fd5b506106ca60048036038101906106c59190613c78565b611588565b005b3480156106d857600080fd5b506106e1611617565b6040516106ee9190613879565b60405180910390f35b34801561070357600080fd5b5061071e60048036038101906107199190613d27565b6116a9565b005b34801561072c57600080fd5b5061074760048036038101906107429190613e08565b6116c2565b005b34801561075557600080fd5b50610770600480360381019061076b91906138d1565b611713565b60405161077d91906137ce565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a89190613cfa565b611733565b005b3480156107bb57600080fd5b506107c461192b565b6040516107d19190613879565b60405180910390f35b3480156107e657600080fd5b506107ef6119b9565b6040516107fc9190613879565b60405180910390f35b34801561081157600080fd5b5061082c600480360381019061082791906138d1565b611a47565b6040516108399190613879565b60405180910390f35b34801561084e57600080fd5b50610857611af1565b6040516108649190613a2e565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f9190613eeb565b611af7565b005b3480156108a257600080fd5b506108ab611e33565b6040516108b89190613879565b60405180910390f35b3480156108cd57600080fd5b506108e860048036038101906108e39190613f38565b611ec5565b6040516108f591906137ce565b60405180910390f35b34801561090a57600080fd5b50610913611f59565b6040516109209190613f99565b60405180910390f35b34801561093557600080fd5b50610950600480360381019061094b9190613a9c565b611f7f565b005b34801561095e57600080fd5b50610967612076565b6040516109749190613a2e565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109f057506109ef82612087565b5b9050919050565b606060008054610a0690613fe3565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3290613fe3565b8015610a7f5780601f10610a5457610100808354040283529160200191610a7f565b820191906000526020600020905b815481529060010190602001808311610a6257829003601f168201915b5050505050905090565b6000610a9482612169565b610ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aca90614086565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610b166121d5565b73ffffffffffffffffffffffffffffffffffffffff16610b3461155e565b73ffffffffffffffffffffffffffffffffffffffff1614610b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b81906140f2565b60405180910390fd5b8060118190555050565b81610b9e816121dd565b610ba883836122da565b505050565b610bb56121d5565b73ffffffffffffffffffffffffffffffffffffffff16610bd361155e565b73ffffffffffffffffffffffffffffffffffffffff1614610c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c20906140f2565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b6000600880549050905090565b60115481565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c9757610c96336121dd565b5b610ca28484846123f1565b50505050565b610cb06121d5565b73ffffffffffffffffffffffffffffffffffffffff16610cce61155e565b73ffffffffffffffffffffffffffffffffffffffff1614610d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1b906140f2565b60405180910390fd5b80600f8190555050565b6000610d3983611326565b8210610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7190614184565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ddb6121d5565b73ffffffffffffffffffffffffffffffffffffffff16610df961155e565b73ffffffffffffffffffffffffffffffffffffffff1614610e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e46906140f2565b60405180910390fd5b80601460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6daaeb6d7670e522a718067333cd4e81565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ee357610ee2336121dd565b5b610eee848484612451565b50505050565b6000610efe610c46565b8210610f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3690614216565b60405180910390fd5b60088281548110610f5357610f52614236565b5b90600052602060002001549050919050565b610f6d6121d5565b73ffffffffffffffffffffffffffffffffffffffff16610f8b61155e565b73ffffffffffffffffffffffffffffffffffffffff1614610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd8906140f2565b60405180910390fd5b80600c9081610ff09190614407565b5050565b601460009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a69061454b565b60405180910390fd5b80915050919050565b80601460009054906101000a900460ff1615611109576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611100906145b7565b60405180910390fd5b60008160ff1611801561112157506011548160ff1611155b611160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115790614649565b60405180910390fd5b60105461116b610c46565b11156111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a3906146b5565b60405180910390fd5b6010548160ff166111bb612076565b6111c59190614704565b1115611206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fd906147aa565b60405180910390fd5b348160ff16600f5461121891906147ca565b1115611259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125090614858565b60405180910390fd5b60005b8260ff168110156112935761126f612471565b6112803361127b612076565b6124c8565b808061128b90614878565b91505061125c565b505050565b600c80546112a590613fe3565b80601f01602080910402602001604051908101604052809291908181526020018280546112d190613fe3565b801561131e5780601f106112f35761010080835404028352916020019161131e565b820191906000526020600020905b81548152906001019060200180831161130157829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138d90614932565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113e56121d5565b73ffffffffffffffffffffffffffffffffffffffff1661140361155e565b73ffffffffffffffffffffffffffffffffffffffff1614611459576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611450906140f2565b60405180910390fd5b61146360006124e6565b565b600f5481565b6114736121d5565b73ffffffffffffffffffffffffffffffffffffffff1661149161155e565b73ffffffffffffffffffffffffffffffffffffffff16146114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de906140f2565b60405180910390fd5b60004790506000811161152f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115269061499e565b60405180910390fd5b61155b601460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16476125ac565b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115906121d5565b73ffffffffffffffffffffffffffffffffffffffff166115ae61155e565b73ffffffffffffffffffffffffffffffffffffffff1614611604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fb906140f2565b60405180910390fd5b80600d90816116139190614407565b5050565b60606001805461162690613fe3565b80601f016020809104026020016040519081016040528092919081815260200182805461165290613fe3565b801561169f5780601f106116745761010080835404028352916020019161169f565b820191906000526020600020905b81548152906001019060200180831161168257829003601f168201915b5050505050905090565b816116b3816121dd565b6116bd838361265d565b505050565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611700576116ff336121dd565b5b61170c85858585612673565b5050505050565b60136020528060005260406000206000915054906101000a900460ff1681565b61173b6121d5565b73ffffffffffffffffffffffffffffffffffffffff1661175961155e565b73ffffffffffffffffffffffffffffffffffffffff16146117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a6906140f2565b60405180910390fd5b80601460009054906101000a900460ff1615611800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f7906145b7565b60405180910390fd5b60008160ff1611611846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183d90614a0a565b60405180910390fd5b601054611851610c46565b1115611892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611889906146b5565b60405180910390fd5b6010548160ff166118a1612076565b6118ab9190614704565b11156118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e3906147aa565b60405180910390fd5b60005b8260ff1681101561192657611902612471565b6119133361190e612076565b6124c8565b808061191e90614878565b9150506118ef565b505050565b600d805461193890613fe3565b80601f016020809104026020016040519081016040528092919081815260200182805461196490613fe3565b80156119b15780601f10611986576101008083540402835291602001916119b1565b820191906000526020600020905b81548152906001019060200180831161199457829003601f168201915b505050505081565b600e80546119c690613fe3565b80601f01602080910402602001604051908101604052809291908181526020018280546119f290613fe3565b8015611a3f5780601f10611a1457610100808354040283529160200191611a3f565b820191906000526020600020905b815481529060010190602001808311611a2257829003601f168201915b505050505081565b6060611a5282612169565b611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8890614a9c565b60405180910390fd5b6000611a9b6126d5565b90506000815111611abb5760405180602001604052806000815250611ae9565b80611ac584612767565b600e604051602001611ad993929190614b7b565b6040516020818303038152906040525b915050919050565b60105481565b8181601460009054906101000a900460ff1615611b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b40906145b7565b60405180910390fd5b601054611b54610c46565b1115611b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8c906146b5565b60405180910390fd5b60105482829050611ba4612076565b611bae9190614704565b1115611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be6906147aa565b60405180910390fd5b60005b82829050811015611dac573373ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e858585818110611c6557611c64614236565b5b905060200201356040518263ffffffff1660e01b8152600401611c889190613a2e565b602060405180830381865afa158015611ca5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc99190614bc1565b73ffffffffffffffffffffffffffffffffffffffff1614611d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1690614c60565b60405180910390fd5b60136000848484818110611d3657611d35614236565b5b90506020020135815260200190815260200160002060009054906101000a900460ff1615611d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9090614cf2565b60405180910390fd5b8080611da490614878565b915050611bf2565b5060005b84849050811015611e2c57611dc3612471565b611dd433611dcf612076565b6124c8565b600160136000878785818110611ded57611dec614236565b5b90506020020135815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611e2490614878565b915050611db0565b5050505050565b6060600d8054611e4290613fe3565b80601f0160208091040260200160405190810160405280929190818152602001828054611e6e90613fe3565b8015611ebb5780601f10611e9057610100808354040283529160200191611ebb565b820191906000526020600020905b815481529060010190602001808311611e9e57829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f876121d5565b73ffffffffffffffffffffffffffffffffffffffff16611fa561155e565b73ffffffffffffffffffffffffffffffffffffffff1614611ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff2906140f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361206a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206190614d84565b60405180910390fd5b612073816124e6565b50565b6000612082600b6128c7565b905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061215257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806121625750612161826128d5565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156122d7576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401612254929190614da4565b602060405180830381865afa158015612271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122959190614de2565b6122d657806040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016122cd919061393f565b60405180910390fd5b5b50565b60006122e582611007565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234c90614e81565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166123746121d5565b73ffffffffffffffffffffffffffffffffffffffff1614806123a357506123a28161239d6121d5565b611ec5565b5b6123e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d990614f13565b60405180910390fd5b6123ec838361293f565b505050565b6124026123fc6121d5565b826129f8565b612441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243890614fa5565b60405180910390fd5b61244c838383612ad6565b505050565b61246c838383604051806020016040528060008152506116c2565b505050565b60105461247c612076565b106124bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b390615037565b60405180910390fd5b6124c6600b612d3c565b565b6124e2828260405180602001604052806000815250612d52565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516125d290615088565b60006040518083038185875af1925050503d806000811461260f576040519150601f19603f3d011682016040523d82523d6000602084013e612614565b606091505b5050905080612658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264f906150e9565b60405180910390fd5b505050565b61266f6126686121d5565b8383612dad565b5050565b61268461267e6121d5565b836129f8565b6126c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ba90614fa5565b60405180910390fd5b6126cf84848484612f19565b50505050565b6060600c80546126e490613fe3565b80601f016020809104026020016040519081016040528092919081815260200182805461271090613fe3565b801561275d5780601f106127325761010080835404028352916020019161275d565b820191906000526020600020905b81548152906001019060200180831161274057829003601f168201915b5050505050905090565b6060600082036127ae576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128c2565b600082905060005b600082146127e05780806127c990614878565b915050600a826127d99190615138565b91506127b6565b60008167ffffffffffffffff8111156127fc576127fb613b4d565b5b6040519080825280601f01601f19166020018201604052801561282e5781602001600182028036833780820191505090505b5090505b600085146128bb576001826128479190615169565b9150600a85612856919061519d565b60306128629190614704565b60f81b81838151811061287857612877614236565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128b49190615138565b9450612832565b8093505050505b919050565b600081600001549050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166129b283611007565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612a0382612169565b612a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3990615240565b60405180910390fd5b6000612a4d83611007565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612abc57508373ffffffffffffffffffffffffffffffffffffffff16612aa484610a89565b73ffffffffffffffffffffffffffffffffffffffff16145b80612acd5750612acc8185611ec5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612af682611007565b73ffffffffffffffffffffffffffffffffffffffff1614612b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b43906152d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb290615364565b60405180910390fd5b612bc6838383612f75565b612bd160008261293f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c219190615169565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c789190614704565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d37838383613087565b505050565b6001816000016000828254019250508190555050565b612d5c838361308c565b612d696000848484613265565b612da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9f906153f6565b60405180910390fd5b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1290615462565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612f0c91906137ce565b60405180910390a3505050565b612f24848484612ad6565b612f3084848484613265565b612f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f66906153f6565b60405180910390fd5b50505050565b612f808383836133ec565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612fc257612fbd816133f1565b613001565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461300057612fff838261343a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130435761303e816135a7565b613082565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613081576130808282613678565b5b5b505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f2906154ce565b60405180910390fd5b61310481612169565b15613144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313b9061553a565b60405180910390fd5b61315060008383612f75565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131a09190614704565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461326160008383613087565b5050565b60006132868473ffffffffffffffffffffffffffffffffffffffff166136f7565b156133df578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132af6121d5565b8786866040518563ffffffff1660e01b81526004016132d194939291906155af565b6020604051808303816000875af192505050801561330d57506040513d601f19601f8201168201806040525081019061330a9190615610565b60015b61338f573d806000811461333d576040519150601f19603f3d011682016040523d82523d6000602084013e613342565b606091505b506000815103613387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337e906153f6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506133e4565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161344784611326565b6134519190615169565b9050600060076000848152602001908152602001600020549050818114613536576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506135bb9190615169565b90506000600960008481526020019081526020016000205490506000600883815481106135eb576135ea614236565b5b90600052602060002001549050806008838154811061360d5761360c614236565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061365c5761365b61563d565b5b6001900381819060005260206000200160009055905550505050565b600061368383611326565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6137638161372e565b811461376e57600080fd5b50565b6000813590506137808161375a565b92915050565b60006020828403121561379c5761379b613724565b5b60006137aa84828501613771565b91505092915050565b60008115159050919050565b6137c8816137b3565b82525050565b60006020820190506137e360008301846137bf565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613823578082015181840152602081019050613808565b60008484015250505050565b6000601f19601f8301169050919050565b600061384b826137e9565b61385581856137f4565b9350613865818560208601613805565b61386e8161382f565b840191505092915050565b600060208201905081810360008301526138938184613840565b905092915050565b6000819050919050565b6138ae8161389b565b81146138b957600080fd5b50565b6000813590506138cb816138a5565b92915050565b6000602082840312156138e7576138e6613724565b5b60006138f5848285016138bc565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613929826138fe565b9050919050565b6139398161391e565b82525050565b60006020820190506139546000830184613930565b92915050565b6139638161391e565b811461396e57600080fd5b50565b6000813590506139808161395a565b92915050565b6000806040838503121561399d5761399c613724565b5b60006139ab85828601613971565b92505060206139bc858286016138bc565b9150509250929050565b6139cf816137b3565b81146139da57600080fd5b50565b6000813590506139ec816139c6565b92915050565b600060208284031215613a0857613a07613724565b5b6000613a16848285016139dd565b91505092915050565b613a288161389b565b82525050565b6000602082019050613a436000830184613a1f565b92915050565b600080600060608486031215613a6257613a61613724565b5b6000613a7086828701613971565b9350506020613a8186828701613971565b9250506040613a92868287016138bc565b9150509250925092565b600060208284031215613ab257613ab1613724565b5b6000613ac084828501613971565b91505092915050565b6000819050919050565b6000613aee613ae9613ae4846138fe565b613ac9565b6138fe565b9050919050565b6000613b0082613ad3565b9050919050565b6000613b1282613af5565b9050919050565b613b2281613b07565b82525050565b6000602082019050613b3d6000830184613b19565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613b858261382f565b810181811067ffffffffffffffff82111715613ba457613ba3613b4d565b5b80604052505050565b6000613bb761371a565b9050613bc38282613b7c565b919050565b600067ffffffffffffffff821115613be357613be2613b4d565b5b613bec8261382f565b9050602081019050919050565b82818337600083830152505050565b6000613c1b613c1684613bc8565b613bad565b905082815260208101848484011115613c3757613c36613b48565b5b613c42848285613bf9565b509392505050565b600082601f830112613c5f57613c5e613b43565b5b8135613c6f848260208601613c08565b91505092915050565b600060208284031215613c8e57613c8d613724565b5b600082013567ffffffffffffffff811115613cac57613cab613729565b5b613cb884828501613c4a565b91505092915050565b600060ff82169050919050565b613cd781613cc1565b8114613ce257600080fd5b50565b600081359050613cf481613cce565b92915050565b600060208284031215613d1057613d0f613724565b5b6000613d1e84828501613ce5565b91505092915050565b60008060408385031215613d3e57613d3d613724565b5b6000613d4c85828601613971565b9250506020613d5d858286016139dd565b9150509250929050565b600067ffffffffffffffff821115613d8257613d81613b4d565b5b613d8b8261382f565b9050602081019050919050565b6000613dab613da684613d67565b613bad565b905082815260208101848484011115613dc757613dc6613b48565b5b613dd2848285613bf9565b509392505050565b600082601f830112613def57613dee613b43565b5b8135613dff848260208601613d98565b91505092915050565b60008060008060808587031215613e2257613e21613724565b5b6000613e3087828801613971565b9450506020613e4187828801613971565b9350506040613e52878288016138bc565b925050606085013567ffffffffffffffff811115613e7357613e72613729565b5b613e7f87828801613dda565b91505092959194509250565b600080fd5b600080fd5b60008083601f840112613eab57613eaa613b43565b5b8235905067ffffffffffffffff811115613ec857613ec7613e8b565b5b602083019150836020820283011115613ee457613ee3613e90565b5b9250929050565b60008060208385031215613f0257613f01613724565b5b600083013567ffffffffffffffff811115613f2057613f1f613729565b5b613f2c85828601613e95565b92509250509250929050565b60008060408385031215613f4f57613f4e613724565b5b6000613f5d85828601613971565b9250506020613f6e85828601613971565b9150509250929050565b6000613f8382613af5565b9050919050565b613f9381613f78565b82525050565b6000602082019050613fae6000830184613f8a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ffb57607f821691505b60208210810361400e5761400d613fb4565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614070602c836137f4565b915061407b82614014565b604082019050919050565b6000602082019050818103600083015261409f81614063565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006140dc6020836137f4565b91506140e7826140a6565b602082019050919050565b6000602082019050818103600083015261410b816140cf565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b600061416e602b836137f4565b915061417982614112565b604082019050919050565b6000602082019050818103600083015261419d81614161565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614200602c836137f4565b915061420b826141a4565b604082019050919050565b6000602082019050818103600083015261422f816141f3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026142c77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261428a565b6142d1868361428a565b95508019841693508086168417925050509392505050565b60006143046142ff6142fa8461389b565b613ac9565b61389b565b9050919050565b6000819050919050565b61431e836142e9565b61433261432a8261430b565b848454614297565b825550505050565b600090565b61434761433a565b614352818484614315565b505050565b5b818110156143765761436b60008261433f565b600181019050614358565b5050565b601f8211156143bb5761438c81614265565b6143958461427a565b810160208510156143a4578190505b6143b86143b08561427a565b830182614357565b50505b505050565b600082821c905092915050565b60006143de600019846008026143c0565b1980831691505092915050565b60006143f783836143cd565b9150826002028217905092915050565b614410826137e9565b67ffffffffffffffff81111561442957614428613b4d565b5b6144338254613fe3565b61443e82828561437a565b600060209050601f831160018114614471576000841561445f578287015190505b61446985826143eb565b8655506144d1565b601f19841661447f86614265565b60005b828110156144a757848901518255600182019150602085019450602081019050614482565b868310156144c457848901516144c0601f8916826143cd565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006145356029836137f4565b9150614540826144d9565b604082019050919050565b6000602082019050818103600083015261456481614528565b9050919050565b7f436f6e7472616374206973206e6f742061637469766521000000000000000000600082015250565b60006145a16017836137f4565b91506145ac8261456b565b602082019050919050565b600060208201905081810360008301526145d081614594565b9050919050565b7f496e76616c696420616d6f756e74206f72206d6178696d756d20746f6b656e2060008201527f6d696e7420616d6f756e74207265616368656421000000000000000000000000602082015250565b60006146336034836137f4565b915061463e826145d7565b604082019050919050565b6000602082019050818103600083015261466281614626565b9050919050565b7f4d617820737570706c7920726561636865642100000000000000000000000000600082015250565b600061469f6013836137f4565b91506146aa82614669565b602082019050919050565b600060208201905081810360008301526146ce81614692565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061470f8261389b565b915061471a8361389b565b9250828201905080821115614732576147316146d5565b5b92915050565b7f507572636861736520776f756c6420657863656564206d617820746f6b656e7360008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b60006147946021836137f4565b915061479f82614738565b604082019050919050565b600060208201905081810360008301526147c381614787565b9050919050565b60006147d58261389b565b91506147e08361389b565b92508282026147ee8161389b565b91508282048414831517614805576148046146d5565b5b5092915050565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637421600082015250565b60006148426020836137f4565b915061484d8261480c565b602082019050919050565b6000602082019050818103600083015261487181614835565b9050919050565b60006148838261389b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036148b5576148b46146d5565b5b600182019050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061491c602a836137f4565b9150614927826148c0565b604082019050919050565b6000602082019050818103600083015261494b8161490f565b9050919050565b7f696e73756666696369656e742066756e64732100000000000000000000000000600082015250565b60006149886013836137f4565b915061499382614952565b602082019050919050565b600060208201905081810360008301526149b78161497b565b9050919050565b7f496e76616c696420746f6b656e20616d6f756e74210000000000000000000000600082015250565b60006149f46015836137f4565b91506149ff826149be565b602082019050919050565b60006020820190508181036000830152614a23816149e7565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614a86602f836137f4565b9150614a9182614a2a565b604082019050919050565b60006020820190508181036000830152614ab581614a79565b9050919050565b600081905092915050565b6000614ad2826137e9565b614adc8185614abc565b9350614aec818560208601613805565b80840191505092915050565b60008154614b0581613fe3565b614b0f8186614abc565b94506001821660008114614b2a5760018114614b3f57614b72565b60ff1983168652811515820286019350614b72565b614b4885614265565b60005b83811015614b6a57815481890152600182019150602081019050614b4b565b838801955050505b50505092915050565b6000614b878286614ac7565b9150614b938285614ac7565b9150614b9f8284614af8565b9150819050949350505050565b600081519050614bbb8161395a565b92915050565b600060208284031215614bd757614bd6613724565b5b6000614be584828501614bac565b91505092915050565b7f4164647265737320646f6573206e6f74206f776e206f6e65206f66207468652060008201527f70726f7669646564204246545820746f6b656e20696473000000000000000000602082015250565b6000614c4a6037836137f4565b9150614c5582614bee565b604082019050919050565b60006020820190508181036000830152614c7981614c3d565b9050919050565b7f4f6e65206f66207468652070726f76696465642049647320697320616c72656160008201527f6479206d696e7465642100000000000000000000000000000000000000000000602082015250565b6000614cdc602a836137f4565b9150614ce782614c80565b604082019050919050565b60006020820190508181036000830152614d0b81614ccf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d6e6026836137f4565b9150614d7982614d12565b604082019050919050565b60006020820190508181036000830152614d9d81614d61565b9050919050565b6000604082019050614db96000830185613930565b614dc66020830184613930565b9392505050565b600081519050614ddc816139c6565b92915050565b600060208284031215614df857614df7613724565b5b6000614e0684828501614dcd565b91505092915050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e6b6021836137f4565b9150614e7682614e0f565b604082019050919050565b60006020820190508181036000830152614e9a81614e5e565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000614efd6038836137f4565b9150614f0882614ea1565b604082019050919050565b60006020820190508181036000830152614f2c81614ef0565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000614f8f6031836137f4565b9150614f9a82614f33565b604082019050919050565b60006020820190508181036000830152614fbe81614f82565b9050919050565b7f636f756e7465722063616e206e6f742065786365656420746865206d6178207060008201527f75626c696320737570706c790000000000000000000000000000000000000000602082015250565b6000615021602c836137f4565b915061502c82614fc5565b604082019050919050565b6000602082019050818103600083015261505081615014565b9050919050565b600081905092915050565b50565b6000615072600083615057565b915061507d82615062565b600082019050919050565b600061509382615065565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b60006150d36010836137f4565b91506150de8261509d565b602082019050919050565b60006020820190508181036000830152615102816150c6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151438261389b565b915061514e8361389b565b92508261515e5761515d615109565b5b828204905092915050565b60006151748261389b565b915061517f8361389b565b9250828203905081811115615197576151966146d5565b5b92915050565b60006151a88261389b565b91506151b38361389b565b9250826151c3576151c2615109565b5b828206905092915050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061522a602c836137f4565b9150615235826151ce565b604082019050919050565b600060208201905081810360008301526152598161521d565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006152bc6025836137f4565b91506152c782615260565b604082019050919050565b600060208201905081810360008301526152eb816152af565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061534e6024836137f4565b9150615359826152f2565b604082019050919050565b6000602082019050818103600083015261537d81615341565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006153e06032836137f4565b91506153eb82615384565b604082019050919050565b6000602082019050818103600083015261540f816153d3565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061544c6019836137f4565b915061545782615416565b602082019050919050565b6000602082019050818103600083015261547b8161543f565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006154b86020836137f4565b91506154c382615482565b602082019050919050565b600060208201905081810360008301526154e7816154ab565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615524601c836137f4565b915061552f826154ee565b602082019050919050565b6000602082019050818103600083015261555381615517565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006155818261555a565b61558b8185615565565b935061559b818560208601613805565b6155a48161382f565b840191505092915050565b60006080820190506155c46000830187613930565b6155d16020830186613930565b6155de6040830185613a1f565b81810360608301526155f08184615576565b905095945050505050565b60008151905061560a8161375a565b92915050565b60006020828403121561562657615625613724565b5b6000615634848285016155fb565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220c9e9c66b51f4ea853a44aae875e649bc1e259fe6dd2c840d7af8f31d540114b064736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000fb751688fb355b9dc9f41bb83cf39490022dbe23000000000000000000000000000000000000000000000000000000000000004168747470733a2f2f61766174617261706973746f726167652e626c6f622e636f72652e77696e646f77732e6e65742f736f72727973616d732f6d61696e6e65742f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005b68747470733a2f2f61766174617261706973746f726167652e626c6f622e636f72652e77696e646f77732e6e65742f736f72727973616d732f6d61696e6e65742f636f6e74726163742f7373745f636f6e74726163742e6a736f6e0000000000
-----Decoded View---------------
Arg [0] : _initBaseURI (string): https://avatarapistorage.blob.core.windows.net/sorrysams/mainnet/
Arg [1] : _initContractURI (string): https://avatarapistorage.blob.core.windows.net/sorrysams/mainnet/contract/sst_contract.json
Arg [2] : _referenceContract (address): 0xfB751688fB355b9DC9F41bB83Cf39490022Dbe23
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 000000000000000000000000fb751688fb355b9dc9f41bb83cf39490022dbe23
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000041
Arg [4] : 68747470733a2f2f61766174617261706973746f726167652e626c6f622e636f
Arg [5] : 72652e77696e646f77732e6e65742f736f72727973616d732f6d61696e6e6574
Arg [6] : 2f00000000000000000000000000000000000000000000000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000005b
Arg [8] : 68747470733a2f2f61766174617261706973746f726167652e626c6f622e636f
Arg [9] : 72652e77696e646f77732e6e65742f736f72727973616d732f6d61696e6e6574
Arg [10] : 2f636f6e74726163742f7373745f636f6e74726163742e6a736f6e0000000000
Deployed Bytecode Sourcemap
52454:6824:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46237:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33057:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34616:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57026:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58496:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57306:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46877:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52848:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58678:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56887:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46545:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57176:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2960:143;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58866:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47067:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56761:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52981:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32751:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55743:282;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52657:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32481:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11653:103;;;;;;;;;;;;;:::i;:::-;;52762:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57852:205;;;;;;;;;;;;;:::i;:::-;;11002:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55524:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33226:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58295:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59062:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52930:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56435:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52685:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52718:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55150:368;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52810:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56051:351;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55625:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35135:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52889:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11911:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57438:112;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46237:224;46339:4;46378:35;46363:50;;;:11;:50;;;;:90;;;;46417:36;46441:11;46417:23;:36::i;:::-;46363:90;46356:97;;46237:224;;;:::o;33057:100::-;33111:13;33144:5;33137:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33057:100;:::o;34616:221::-;34692:7;34720:16;34728:7;34720;:16::i;:::-;34712:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34805:15;:24;34821:7;34805:24;;;;;;;;;;;;;;;;;;;;;34798:31;;34616:221;;;:::o;57026:114::-;11233:12;:10;:12::i;:::-;11222:23;;:7;:5;:7::i;:::-;:23;;;11214:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57119:13:::1;57103;:29;;;;57026:114:::0;:::o;58496:174::-;58609:8;4481:30;4502:8;4481:20;:30::i;:::-;58630:32:::1;58644:8;58654:7;58630:13;:32::i;:::-;58496:174:::0;;;:::o;57306:87::-;11233:12;:10;:12::i;:::-;11222:23;;:7;:5;:7::i;:::-;:23;;;11214:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57377:8:::1;57368:6;;:17;;;;;;;;;;;;;;;;;;57306:87:::0;:::o;46877:113::-;46938:7;46965:10;:17;;;;46958:24;;46877:113;:::o;52848:32::-;;;;:::o;58678:180::-;58796:4;4309:10;4301:18;;:4;:18;;;4297:83;;4336:32;4357:10;4336:20;:32::i;:::-;4297:83;58813:37:::1;58832:4;58838:2;58842:7;58813:18;:37::i;:::-;58678:180:::0;;;;:::o;56887:104::-;11233:12;:10;:12::i;:::-;11222:23;;:7;:5;:7::i;:::-;:23;;;11214:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56975:8:::1;56959:13;:24;;;;56887:104:::0;:::o;46545:256::-;46642:7;46678:23;46695:5;46678:16;:23::i;:::-;46670:5;:31;46662:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;46767:12;:19;46780:5;46767:19;;;;;;;;;;;;;;;:26;46787:5;46767:26;;;;;;;;;;;;46760:33;;46545:256;;;;:::o;57176:104::-;11233:12;:10;:12::i;:::-;11222:23;;:7;:5;:7::i;:::-;:23;;;11214:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57262:10:::1;57252:7;;:20;;;;;;;;;;;;;;;;;;57176:104:::0;:::o;2960:143::-;3060:42;2960:143;:::o;58866:188::-;58988:4;4309:10;4301:18;;:4;:18;;;4297:83;;4336:32;4357:10;4336:20;:32::i;:::-;4297:83;59005:41:::1;59028:4;59034:2;59038:7;59005:22;:41::i;:::-;58866:188:::0;;;;:::o;47067:233::-;47142:7;47178:30;:28;:30::i;:::-;47170:5;:38;47162:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;47275:10;47286:5;47275:17;;;;;;;;:::i;:::-;;;;;;;;;;47268:24;;47067:233;;;:::o;56761:88::-;11233:12;:10;:12::i;:::-;11222:23;;:7;:5;:7::i;:::-;:23;;;11214:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56838:3:::1;56828:7;:13;;;;;;:::i;:::-;;56761:88:::0;:::o;52981:25::-;;;;;;;;;;;;;:::o;32751:239::-;32823:7;32843:13;32859:7;:16;32867:7;32859:16;;;;;;;;;;;;;;;;;;;;;32843:32;;32911:1;32894:19;;:5;:19;;;32886:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32977:5;32970:12;;;32751:239;;;:::o;55743:282::-;55816:14;53463:6;;;;;;;;;;;53462:7;53454:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;53533:1;53516:14;:18;;;:53;;;;;53556:13;;53538:14;:31;;;;53516:53;53508:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;53662:9;;53645:13;:11;:13::i;:::-;:26;;53637:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;53759:9;;53741:14;53714:41;;:24;:22;:24::i;:::-;:41;;;;:::i;:::-;:54;;53706:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;53859:9;53841:14;53825:30;;:13;;:30;;;;:::i;:::-;:43;;53817:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;55847:9:::1;55842:176;55866:14;55862:18;;:1;:18;55842:176;;;55914:30;:28;:30::i;:::-;55959:47;55969:10;55981:24;:22;:24::i;:::-;55959:9;:47::i;:::-;55882:3;;;;;:::i;:::-;;;;55842:176;;;;55743:282:::0;;:::o;52657:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32481:208::-;32553:7;32598:1;32581:19;;:5;:19;;;32573:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;32665:9;:16;32675:5;32665:16;;;;;;;;;;;;;;;;32658:23;;32481:208;;;:::o;11653:103::-;11233:12;:10;:12::i;:::-;11222:23;;:7;:5;:7::i;:::-;:23;;;11214:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11718:30:::1;11745:1;11718:18;:30::i;:::-;11653:103::o:0;52762:41::-;;;;:::o;57852:205::-;11233:12;:10;:12::i;:::-;11222:23;;:7;:5;:7::i;:::-;:23;;;11214:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57903:15:::1;57921:21;57903:39;;57971:1;57961:7;:11;57953:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;58007:42;58018:7;;;;;;;;;;;58027:21;58007:10;:42::i;:::-;57892:165;57852:205::o:0;11002:87::-;11048:7;11075:6;;;;;;;;;;;11068:13;;11002:87;:::o;55524:96::-;11233:12;:10;:12::i;:::-;11222:23;;:7;:5;:7::i;:::-;:23;;;11214:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55609:6:::1;55594:12;:21;;;;;;:::i;:::-;;55524:96:::0;:::o;33226:104::-;33282:13;33315:7;33308:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33226:104;:::o;58295:193::-;58416:8;4481:30;4502:8;4481:20;:30::i;:::-;58437:43:::1;58461:8;58471;58437:23;:43::i;:::-;58295:193:::0;;;:::o;59062:213::-;59203:4;4309:10;4301:18;;:4;:18;;;4297:83;;4336:32;4357:10;4336:20;:32::i;:::-;4297:83;59220:47:::1;59243:4;59249:2;59253:7;59262:4;59220:22;:47::i;:::-;59062:213:::0;;;;;:::o;52930:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;56435:276::-;11233:12;:10;:12::i;:::-;11222:23;;:7;:5;:7::i;:::-;:23;;;11214:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56512:14:::1;54654:6;;;;;;;;;;;54653:7;54645:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;54724:1;54707:14;:18;;;54699:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;54787:9;;54770:13;:11;:13::i;:::-;:26;;54762:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;54884:9;;54866:14;54839:41;;:24;:22;:24::i;:::-;:41;;;;:::i;:::-;:54;;54831:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;56545:9:::2;56540:164;56564:14;56560:18;;:1;:18;56540:164;;;56600:30;:28;:30::i;:::-;56645:47;56655:10;56667:24;:22;:24::i;:::-;56645:9;:47::i;:::-;56580:3;;;;;:::i;:::-;;;;56540:164;;;;11293:1:::1;56435:276:::0;:::o;52685:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;52718:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;55150:368::-;55223:13;55257:16;55265:7;55257;:16::i;:::-;55249:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;55336:28;55367:10;:8;:10::i;:::-;55336:41;;55426:1;55401:14;55395:28;:32;:115;;;;;;;;;;;;;;;;;55454:14;55470:18;:7;:16;:18::i;:::-;55490:13;55437:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55395:115;55388:122;;;55150:368;;;:::o;52810:31::-;;;;:::o;56051:351::-;56129:18;;54014:6;;;;;;;;;;;54013:7;54005:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;54084:9;;54067:13;:11;:13::i;:::-;:26;;54059:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;54192:9;;54163:18;;:25;;54136:24;:22;:24::i;:::-;:52;;;;:::i;:::-;:65;;54128:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;54254:9;54250:315;54273:18;;:25;;54269:1;:29;54250:315;;;54379:10;54327:62;;:17;;;;;;;;;;;:25;;;54353:18;;54372:1;54353:21;;;;;;;:::i;:::-;;;;;;;;54327:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:62;;;54319:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;54473:10;:33;54484:18;;54503:1;54484:21;;;;;;;:::i;:::-;;;;;;;;54473:33;;;;;;;;;;;;;;;;;;;;;54472:34;54464:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;54300:3;;;;;:::i;:::-;;;;54250:315;;;;56163:9:::1;56159:228;56182:18;;:25;;56178:1;:29;56159:228;;;56228:30;:28;:30::i;:::-;56273:47;56283:10;56295:24;:22;:24::i;:::-;56273:9;:47::i;:::-;56371:4;56335:10;:33;56346:18;;56365:1;56346:21;;;;;;;:::i;:::-;;;;;;;;56335:33;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;56209:3;;;;;:::i;:::-;;;;56159:228;;;;56051:351:::0;;;;:::o;55625:88::-;55669:13;55696:12;55689:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55625:88;:::o;35135:164::-;35232:4;35256:18;:25;35275:5;35256:25;;;;;;;;;;;;;;;:35;35282:8;35256:35;;;;;;;;;;;;;;;;;;;;;;;;;35249:42;;35135:164;;;;:::o;52889:32::-;;;;;;;;;;;;;:::o;11911:201::-;11233:12;:10;:12::i;:::-;11222:23;;:7;:5;:7::i;:::-;:23;;;11214:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12020:1:::1;12000:22;;:8;:22;;::::0;11992:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;12076:28;12095:8;12076:18;:28::i;:::-;11911:201:::0;:::o;57438:112::-;57493:7;57519:21;:11;:19;:21::i;:::-;57512:28;;57438:112;:::o;32112:305::-;32214:4;32266:25;32251:40;;;:11;:40;;;;:105;;;;32323:33;32308:48;;;:11;:48;;;;32251:105;:158;;;;32373:36;32397:11;32373:23;:36::i;:::-;32251:158;32231:178;;32112:305;;;:::o;37870:127::-;37935:4;37987:1;37959:30;;:7;:16;37967:7;37959:16;;;;;;;;;;;;;;;;;;;;;:30;;;;37952:37;;37870:127;;;:::o;9726:98::-;9779:7;9806:10;9799:17;;9726:98;:::o;4539:419::-;4778:1;3060:42;4730:45;;;:49;4726:225;;;3060:42;4801;;;4852:4;4859:8;4801:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4796:144;;4915:8;4896:28;;;;;;;;;;;:::i;:::-;;;;;;;;4796:144;4726:225;4539:419;:::o;34139:411::-;34220:13;34236:23;34251:7;34236:14;:23::i;:::-;34220:39;;34284:5;34278:11;;:2;:11;;;34270:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;34378:5;34362:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;34387:37;34404:5;34411:12;:10;:12::i;:::-;34387:16;:37::i;:::-;34362:62;34340:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;34521:21;34530:2;34534:7;34521:8;:21::i;:::-;34209:341;34139:411;;:::o;35366:339::-;35561:41;35580:12;:10;:12::i;:::-;35594:7;35561:18;:41::i;:::-;35553:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35669:28;35679:4;35685:2;35689:7;35669:9;:28::i;:::-;35366:339;;;:::o;35776:185::-;35914:39;35931:4;35937:2;35941:7;35914:39;;;;;;;;;;;;:16;:39::i;:::-;35776:185;;;:::o;57593:201::-;57687:9;;57660:24;:22;:24::i;:::-;:36;57652:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;57763:23;:11;:21;:23::i;:::-;57593:201::o;38854:110::-;38930:26;38940:2;38944:7;38930:26;;;;;;;;;;;;:9;:26::i;:::-;38854:110;;:::o;12272:191::-;12346:16;12365:6;;;;;;;;;;;12346:25;;12391:8;12382:6;;:17;;;;;;;;;;;;;;;;;;12446:8;12415:40;;12436:8;12415:40;;;;;;;;;;;;12335:128;12272:191;:::o;58063:181::-;58138:12;58156:8;:13;;58177:7;58156:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58137:52;;;58208:7;58200:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;58126:118;58063:181;;:::o;34909:155::-;35004:52;35023:12;:10;:12::i;:::-;35037:8;35047;35004:18;:52::i;:::-;34909:155;;:::o;36032:328::-;36207:41;36226:12;:10;:12::i;:::-;36240:7;36207:18;:41::i;:::-;36199:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;36313:39;36327:4;36333:2;36337:7;36346:5;36313:13;:39::i;:::-;36032:328;;;;:::o;55036:108::-;55096:13;55129:7;55122:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55036:108;:::o;7288:723::-;7344:13;7574:1;7565:5;:10;7561:53;;7592:10;;;;;;;;;;;;;;;;;;;;;7561:53;7624:12;7639:5;7624:20;;7655:14;7680:78;7695:1;7687:4;:9;7680:78;;7713:8;;;;;:::i;:::-;;;;7744:2;7736:10;;;;;:::i;:::-;;;7680:78;;;7768:19;7800:6;7790:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7768:39;;7818:154;7834:1;7825:5;:10;7818:154;;7862:1;7852:11;;;;;:::i;:::-;;;7929:2;7921:5;:10;;;;:::i;:::-;7908:2;:24;;;;:::i;:::-;7895:39;;7878:6;7885;7878:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;7958:2;7949:11;;;;;:::i;:::-;;;7818:154;;;7996:6;7982:21;;;;;7288:723;;;;:::o;6330:114::-;6395:7;6422;:14;;;6415:21;;6330:114;;;:::o;23786:157::-;23871:4;23910:25;23895:40;;;:11;:40;;;;23888:47;;23786:157;;;:::o;42016:174::-;42118:2;42091:15;:24;42107:7;42091:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;42174:7;42170:2;42136:46;;42145:23;42160:7;42145:14;:23::i;:::-;42136:46;;;;;;;;;;;;42016:174;;:::o;38164:348::-;38257:4;38282:16;38290:7;38282;:16::i;:::-;38274:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38358:13;38374:23;38389:7;38374:14;:23::i;:::-;38358:39;;38427:5;38416:16;;:7;:16;;;:51;;;;38460:7;38436:31;;:20;38448:7;38436:11;:20::i;:::-;:31;;;38416:51;:87;;;;38471:32;38488:5;38495:7;38471:16;:32::i;:::-;38416:87;38408:96;;;38164:348;;;;:::o;41273:625::-;41432:4;41405:31;;:23;41420:7;41405:14;:23::i;:::-;:31;;;41397:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;41511:1;41497:16;;:2;:16;;;41489:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;41567:39;41588:4;41594:2;41598:7;41567:20;:39::i;:::-;41671:29;41688:1;41692:7;41671:8;:29::i;:::-;41732:1;41713:9;:15;41723:4;41713:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;41761:1;41744:9;:13;41754:2;41744:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;41792:2;41773:7;:16;41781:7;41773:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41831:7;41827:2;41812:27;;41821:4;41812:27;;;;;;;;;;;;41852:38;41872:4;41878:2;41882:7;41852:19;:38::i;:::-;41273:625;;;:::o;6452:127::-;6559:1;6541:7;:14;;;:19;;;;;;;;;;;6452:127;:::o;39191:321::-;39321:18;39327:2;39331:7;39321:5;:18::i;:::-;39372:54;39403:1;39407:2;39411:7;39420:5;39372:22;:54::i;:::-;39350:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;39191:321;;;:::o;42332:315::-;42487:8;42478:17;;:5;:17;;;42470:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;42574:8;42536:18;:25;42555:5;42536:25;;;;;;;;;;;;;;;:35;42562:8;42536:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;42620:8;42598:41;;42613:5;42598:41;;;42630:8;42598:41;;;;;;:::i;:::-;;;;;;;;42332:315;;;:::o;37242:::-;37399:28;37409:4;37415:2;37419:7;37399:9;:28::i;:::-;37446:48;37469:4;37475:2;37479:7;37488:5;37446:22;:48::i;:::-;37438:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;37242:315;;;;:::o;47913:589::-;48057:45;48084:4;48090:2;48094:7;48057:26;:45::i;:::-;48135:1;48119:18;;:4;:18;;;48115:187;;48154:40;48186:7;48154:31;:40::i;:::-;48115:187;;;48224:2;48216:10;;:4;:10;;;48212:90;;48243:47;48276:4;48282:7;48243:32;:47::i;:::-;48212:90;48115:187;48330:1;48316:16;;:2;:16;;;48312:183;;48349:45;48386:7;48349:36;:45::i;:::-;48312:183;;;48422:4;48416:10;;:2;:10;;;48412:83;;48443:40;48471:2;48475:7;48443:27;:40::i;:::-;48412:83;48312:183;47913:589;;;:::o;45094:125::-;;;;:::o;39848:439::-;39942:1;39928:16;;:2;:16;;;39920:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;40001:16;40009:7;40001;:16::i;:::-;40000:17;39992:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;40063:45;40092:1;40096:2;40100:7;40063:20;:45::i;:::-;40138:1;40121:9;:13;40131:2;40121:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;40169:2;40150:7;:16;40158:7;40150:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;40214:7;40210:2;40189:33;;40206:1;40189:33;;;;;;;;;;;;40235:44;40263:1;40267:2;40271:7;40235:19;:44::i;:::-;39848:439;;:::o;43212:799::-;43367:4;43388:15;:2;:13;;;:15::i;:::-;43384:620;;;43440:2;43424:36;;;43461:12;:10;:12::i;:::-;43475:4;43481:7;43490:5;43424:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;43420:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43683:1;43666:6;:13;:18;43662:272;;43709:60;;;;;;;;;;:::i;:::-;;;;;;;;43662:272;43884:6;43878:13;43869:6;43865:2;43861:15;43854:38;43420:529;43557:41;;;43547:51;;;:6;:51;;;;43540:58;;;;;43384:620;43988:4;43981:11;;43212:799;;;;;;;:::o;44583:126::-;;;;:::o;49225:164::-;49329:10;:17;;;;49302:15;:24;49318:7;49302:24;;;;;;;;;;;:44;;;;49357:10;49373:7;49357:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49225:164;:::o;50016:988::-;50282:22;50332:1;50307:22;50324:4;50307:16;:22::i;:::-;:26;;;;:::i;:::-;50282:51;;50344:18;50365:17;:26;50383:7;50365:26;;;;;;;;;;;;50344:47;;50512:14;50498:10;:28;50494:328;;50543:19;50565:12;:18;50578:4;50565:18;;;;;;;;;;;;;;;:34;50584:14;50565:34;;;;;;;;;;;;50543:56;;50649:11;50616:12;:18;50629:4;50616:18;;;;;;;;;;;;;;;:30;50635:10;50616:30;;;;;;;;;;;:44;;;;50766:10;50733:17;:30;50751:11;50733:30;;;;;;;;;;;:43;;;;50528:294;50494:328;50918:17;:26;50936:7;50918:26;;;;;;;;;;;50911:33;;;50962:12;:18;50975:4;50962:18;;;;;;;;;;;;;;;:34;50981:14;50962:34;;;;;;;;;;;50955:41;;;50097:907;;50016:988;;:::o;51299:1079::-;51552:22;51597:1;51577:10;:17;;;;:21;;;;:::i;:::-;51552:46;;51609:18;51630:15;:24;51646:7;51630:24;;;;;;;;;;;;51609:45;;51981:19;52003:10;52014:14;52003:26;;;;;;;;:::i;:::-;;;;;;;;;;51981:48;;52067:11;52042:10;52053;52042:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;52178:10;52147:15;:28;52163:11;52147:28;;;;;;;;;;;:41;;;;52319:15;:24;52335:7;52319:24;;;;;;;;;;;52312:31;;;52354:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;51370:1008;;;51299:1079;:::o;48803:221::-;48888:14;48905:20;48922:2;48905:16;:20::i;:::-;48888:37;;48963:7;48936:12;:16;48949:2;48936:16;;;;;;;;;;;;;;;:24;48953:6;48936:24;;;;;;;;;;;:34;;;;49010:6;48981:17;:26;48999:7;48981:26;;;;;;;;;;;:35;;;;48877:147;48803:221;;:::o;13703:326::-;13763:4;14020:1;13998:7;:19;;;:23;13991:30;;13703:326;;;:::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:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:116::-;4960:21;4975:5;4960:21;:::i;:::-;4953:5;4950:32;4940:60;;4996:1;4993;4986:12;4940:60;4890:116;:::o;5012:133::-;5055:5;5093:6;5080:20;5071:29;;5109:30;5133:5;5109:30;:::i;:::-;5012:133;;;;:::o;5151:323::-;5207:6;5256:2;5244:9;5235:7;5231:23;5227:32;5224:119;;;5262:79;;:::i;:::-;5224:119;5382:1;5407:50;5449:7;5440:6;5429:9;5425:22;5407:50;:::i;:::-;5397:60;;5353:114;5151:323;;;;:::o;5480:118::-;5567:24;5585:5;5567:24;:::i;:::-;5562:3;5555:37;5480:118;;:::o;5604:222::-;5697:4;5735:2;5724:9;5720:18;5712:26;;5748:71;5816:1;5805:9;5801:17;5792:6;5748:71;:::i;:::-;5604:222;;;;:::o;5832:619::-;5909:6;5917;5925;5974:2;5962:9;5953:7;5949:23;5945:32;5942:119;;;5980:79;;:::i;:::-;5942:119;6100:1;6125:53;6170:7;6161:6;6150:9;6146:22;6125:53;:::i;:::-;6115:63;;6071:117;6227:2;6253:53;6298:7;6289:6;6278:9;6274:22;6253:53;:::i;:::-;6243:63;;6198:118;6355:2;6381:53;6426:7;6417:6;6406:9;6402:22;6381:53;:::i;:::-;6371:63;;6326:118;5832:619;;;;;:::o;6457:329::-;6516:6;6565:2;6553:9;6544:7;6540:23;6536:32;6533:119;;;6571:79;;:::i;:::-;6533:119;6691:1;6716:53;6761:7;6752:6;6741:9;6737:22;6716:53;:::i;:::-;6706:63;;6662:117;6457:329;;;;:::o;6792:60::-;6820:3;6841:5;6834:12;;6792:60;;;:::o;6858:142::-;6908:9;6941:53;6959:34;6968:24;6986:5;6968:24;:::i;:::-;6959:34;:::i;:::-;6941:53;:::i;:::-;6928:66;;6858:142;;;:::o;7006:126::-;7056:9;7089:37;7120:5;7089:37;:::i;:::-;7076:50;;7006:126;;;:::o;7138:157::-;7219:9;7252:37;7283:5;7252:37;:::i;:::-;7239:50;;7138:157;;;:::o;7301:193::-;7419:68;7481:5;7419:68;:::i;:::-;7414:3;7407:81;7301:193;;:::o;7500:284::-;7624:4;7662:2;7651:9;7647:18;7639:26;;7675:102;7774:1;7763:9;7759:17;7750:6;7675:102;:::i;:::-;7500:284;;;;:::o;7790:117::-;7899:1;7896;7889:12;7913:117;8022:1;8019;8012:12;8036:180;8084:77;8081:1;8074:88;8181:4;8178:1;8171:15;8205:4;8202:1;8195:15;8222:281;8305:27;8327:4;8305:27;:::i;:::-;8297:6;8293:40;8435:6;8423:10;8420:22;8399:18;8387:10;8384:34;8381:62;8378:88;;;8446:18;;:::i;:::-;8378:88;8486:10;8482:2;8475:22;8265:238;8222:281;;:::o;8509:129::-;8543:6;8570:20;;:::i;:::-;8560:30;;8599:33;8627:4;8619:6;8599:33;:::i;:::-;8509:129;;;:::o;8644:308::-;8706:4;8796:18;8788:6;8785:30;8782:56;;;8818:18;;:::i;:::-;8782:56;8856:29;8878:6;8856:29;:::i;:::-;8848:37;;8940:4;8934;8930:15;8922:23;;8644:308;;;:::o;8958:146::-;9055:6;9050:3;9045;9032:30;9096:1;9087:6;9082:3;9078:16;9071:27;8958:146;;;:::o;9110:425::-;9188:5;9213:66;9229:49;9271:6;9229:49;:::i;:::-;9213:66;:::i;:::-;9204:75;;9302:6;9295:5;9288:21;9340:4;9333:5;9329:16;9378:3;9369:6;9364:3;9360:16;9357:25;9354:112;;;9385:79;;:::i;:::-;9354:112;9475:54;9522:6;9517:3;9512;9475:54;:::i;:::-;9194:341;9110:425;;;;;:::o;9555:340::-;9611:5;9660:3;9653:4;9645:6;9641:17;9637:27;9627:122;;9668:79;;:::i;:::-;9627:122;9785:6;9772:20;9810:79;9885:3;9877:6;9870:4;9862:6;9858:17;9810:79;:::i;:::-;9801:88;;9617:278;9555:340;;;;:::o;9901:509::-;9970:6;10019:2;10007:9;9998:7;9994:23;9990:32;9987:119;;;10025:79;;:::i;:::-;9987:119;10173:1;10162:9;10158:17;10145:31;10203:18;10195:6;10192:30;10189:117;;;10225:79;;:::i;:::-;10189:117;10330:63;10385:7;10376:6;10365:9;10361:22;10330:63;:::i;:::-;10320:73;;10116:287;9901:509;;;;:::o;10416:86::-;10451:7;10491:4;10484:5;10480:16;10469:27;;10416:86;;;:::o;10508:118::-;10579:22;10595:5;10579:22;:::i;:::-;10572:5;10569:33;10559:61;;10616:1;10613;10606:12;10559:61;10508:118;:::o;10632:135::-;10676:5;10714:6;10701:20;10692:29;;10730:31;10755:5;10730:31;:::i;:::-;10632:135;;;;:::o;10773:325::-;10830:6;10879:2;10867:9;10858:7;10854:23;10850:32;10847:119;;;10885:79;;:::i;:::-;10847:119;11005:1;11030:51;11073:7;11064:6;11053:9;11049:22;11030:51;:::i;:::-;11020:61;;10976:115;10773:325;;;;:::o;11104:468::-;11169:6;11177;11226:2;11214:9;11205:7;11201:23;11197:32;11194:119;;;11232:79;;:::i;:::-;11194:119;11352:1;11377:53;11422:7;11413:6;11402:9;11398:22;11377:53;:::i;:::-;11367:63;;11323:117;11479:2;11505:50;11547:7;11538:6;11527:9;11523:22;11505:50;:::i;:::-;11495:60;;11450:115;11104:468;;;;;:::o;11578:307::-;11639:4;11729:18;11721:6;11718:30;11715:56;;;11751:18;;:::i;:::-;11715:56;11789:29;11811:6;11789:29;:::i;:::-;11781:37;;11873:4;11867;11863:15;11855:23;;11578:307;;;:::o;11891:423::-;11968:5;11993:65;12009:48;12050:6;12009:48;:::i;:::-;11993:65;:::i;:::-;11984:74;;12081:6;12074:5;12067:21;12119:4;12112:5;12108:16;12157:3;12148:6;12143:3;12139:16;12136:25;12133:112;;;12164:79;;:::i;:::-;12133:112;12254:54;12301:6;12296:3;12291;12254:54;:::i;:::-;11974:340;11891:423;;;;;:::o;12333:338::-;12388:5;12437:3;12430:4;12422:6;12418:17;12414:27;12404:122;;12445:79;;:::i;:::-;12404:122;12562:6;12549:20;12587:78;12661:3;12653:6;12646:4;12638:6;12634:17;12587:78;:::i;:::-;12578:87;;12394:277;12333:338;;;;:::o;12677:943::-;12772:6;12780;12788;12796;12845:3;12833:9;12824:7;12820:23;12816:33;12813:120;;;12852:79;;:::i;:::-;12813:120;12972:1;12997:53;13042:7;13033:6;13022:9;13018:22;12997:53;:::i;:::-;12987:63;;12943:117;13099:2;13125:53;13170:7;13161:6;13150:9;13146:22;13125:53;:::i;:::-;13115:63;;13070:118;13227:2;13253:53;13298:7;13289:6;13278:9;13274:22;13253:53;:::i;:::-;13243:63;;13198:118;13383:2;13372:9;13368:18;13355:32;13414:18;13406:6;13403:30;13400:117;;;13436:79;;:::i;:::-;13400:117;13541:62;13595:7;13586:6;13575:9;13571:22;13541:62;:::i;:::-;13531:72;;13326:287;12677:943;;;;;;;:::o;13626:117::-;13735:1;13732;13725:12;13749:117;13858:1;13855;13848:12;13889:568;13962:8;13972:6;14022:3;14015:4;14007:6;14003:17;13999:27;13989:122;;14030:79;;:::i;:::-;13989:122;14143:6;14130:20;14120:30;;14173:18;14165:6;14162:30;14159:117;;;14195:79;;:::i;:::-;14159:117;14309:4;14301:6;14297:17;14285:29;;14363:3;14355:4;14347:6;14343:17;14333:8;14329:32;14326:41;14323:128;;;14370:79;;:::i;:::-;14323:128;13889:568;;;;;:::o;14463:559::-;14549:6;14557;14606:2;14594:9;14585:7;14581:23;14577:32;14574:119;;;14612:79;;:::i;:::-;14574:119;14760:1;14749:9;14745:17;14732:31;14790:18;14782:6;14779:30;14776:117;;;14812:79;;:::i;:::-;14776:117;14925:80;14997:7;14988:6;14977:9;14973:22;14925:80;:::i;:::-;14907:98;;;;14703:312;14463:559;;;;;:::o;15028:474::-;15096:6;15104;15153:2;15141:9;15132:7;15128:23;15124:32;15121:119;;;15159:79;;:::i;:::-;15121:119;15279:1;15304:53;15349:7;15340:6;15329:9;15325:22;15304:53;:::i;:::-;15294:63;;15250:117;15406:2;15432:53;15477:7;15468:6;15457:9;15453:22;15432:53;:::i;:::-;15422:63;;15377:118;15028:474;;;;;:::o;15508:142::-;15574:9;15607:37;15638:5;15607:37;:::i;:::-;15594:50;;15508:142;;;:::o;15656:163::-;15759:53;15806:5;15759:53;:::i;:::-;15754:3;15747:66;15656:163;;:::o;15825:254::-;15934:4;15972:2;15961:9;15957:18;15949:26;;15985:87;16069:1;16058:9;16054:17;16045:6;15985:87;:::i;:::-;15825:254;;;;:::o;16085:180::-;16133:77;16130:1;16123:88;16230:4;16227:1;16220:15;16254:4;16251:1;16244:15;16271:320;16315:6;16352:1;16346:4;16342:12;16332:22;;16399:1;16393:4;16389:12;16420:18;16410:81;;16476:4;16468:6;16464:17;16454:27;;16410:81;16538:2;16530:6;16527:14;16507:18;16504:38;16501:84;;16557:18;;:::i;:::-;16501:84;16322:269;16271:320;;;:::o;16597:231::-;16737:34;16733:1;16725:6;16721:14;16714:58;16806:14;16801:2;16793:6;16789:15;16782:39;16597:231;:::o;16834:366::-;16976:3;16997:67;17061:2;17056:3;16997:67;:::i;:::-;16990:74;;17073:93;17162:3;17073:93;:::i;:::-;17191:2;17186:3;17182:12;17175:19;;16834:366;;;:::o;17206:419::-;17372:4;17410:2;17399:9;17395:18;17387:26;;17459:9;17453:4;17449:20;17445:1;17434:9;17430:17;17423:47;17487:131;17613:4;17487:131;:::i;:::-;17479:139;;17206:419;;;:::o;17631:182::-;17771:34;17767:1;17759:6;17755:14;17748:58;17631:182;:::o;17819:366::-;17961:3;17982:67;18046:2;18041:3;17982:67;:::i;:::-;17975:74;;18058:93;18147:3;18058:93;:::i;:::-;18176:2;18171:3;18167:12;18160:19;;17819:366;;;:::o;18191:419::-;18357:4;18395:2;18384:9;18380:18;18372:26;;18444:9;18438:4;18434:20;18430:1;18419:9;18415:17;18408:47;18472:131;18598:4;18472:131;:::i;:::-;18464:139;;18191:419;;;:::o;18616:230::-;18756:34;18752:1;18744:6;18740:14;18733:58;18825:13;18820:2;18812:6;18808:15;18801:38;18616:230;:::o;18852:366::-;18994:3;19015:67;19079:2;19074:3;19015:67;:::i;:::-;19008:74;;19091:93;19180:3;19091:93;:::i;:::-;19209:2;19204:3;19200:12;19193:19;;18852:366;;;:::o;19224:419::-;19390:4;19428:2;19417:9;19413:18;19405:26;;19477:9;19471:4;19467:20;19463:1;19452:9;19448:17;19441:47;19505:131;19631:4;19505:131;:::i;:::-;19497:139;;19224:419;;;:::o;19649:231::-;19789:34;19785:1;19777:6;19773:14;19766:58;19858:14;19853:2;19845:6;19841:15;19834:39;19649:231;:::o;19886:366::-;20028:3;20049:67;20113:2;20108:3;20049:67;:::i;:::-;20042:74;;20125:93;20214:3;20125:93;:::i;:::-;20243:2;20238:3;20234:12;20227:19;;19886:366;;;:::o;20258:419::-;20424:4;20462:2;20451:9;20447:18;20439:26;;20511:9;20505:4;20501:20;20497:1;20486:9;20482:17;20475:47;20539:131;20665:4;20539:131;:::i;:::-;20531:139;;20258:419;;;:::o;20683:180::-;20731:77;20728:1;20721:88;20828:4;20825:1;20818:15;20852:4;20849:1;20842:15;20869:141;20918:4;20941:3;20933:11;;20964:3;20961:1;20954:14;20998:4;20995:1;20985:18;20977:26;;20869:141;;;:::o;21016:93::-;21053:6;21100:2;21095;21088:5;21084:14;21080:23;21070:33;;21016:93;;;:::o;21115:107::-;21159:8;21209:5;21203:4;21199:16;21178:37;;21115:107;;;;:::o;21228:393::-;21297:6;21347:1;21335:10;21331:18;21370:97;21400:66;21389:9;21370:97;:::i;:::-;21488:39;21518:8;21507:9;21488:39;:::i;:::-;21476:51;;21560:4;21556:9;21549:5;21545:21;21536:30;;21609:4;21599:8;21595:19;21588:5;21585:30;21575:40;;21304:317;;21228:393;;;;;:::o;21627:142::-;21677:9;21710:53;21728:34;21737:24;21755:5;21737:24;:::i;:::-;21728:34;:::i;:::-;21710:53;:::i;:::-;21697:66;;21627:142;;;:::o;21775:75::-;21818:3;21839:5;21832:12;;21775:75;;;:::o;21856:269::-;21966:39;21997:7;21966:39;:::i;:::-;22027:91;22076:41;22100:16;22076:41;:::i;:::-;22068:6;22061:4;22055:11;22027:91;:::i;:::-;22021:4;22014:105;21932:193;21856:269;;;:::o;22131:73::-;22176:3;22131:73;:::o;22210:189::-;22287:32;;:::i;:::-;22328:65;22386:6;22378;22372:4;22328:65;:::i;:::-;22263:136;22210:189;;:::o;22405:186::-;22465:120;22482:3;22475:5;22472:14;22465:120;;;22536:39;22573:1;22566:5;22536:39;:::i;:::-;22509:1;22502:5;22498:13;22489:22;;22465:120;;;22405:186;;:::o;22597:543::-;22698:2;22693:3;22690:11;22687:446;;;22732:38;22764:5;22732:38;:::i;:::-;22816:29;22834:10;22816:29;:::i;:::-;22806:8;22802:44;22999:2;22987:10;22984:18;22981:49;;;23020:8;23005:23;;22981:49;23043:80;23099:22;23117:3;23099:22;:::i;:::-;23089:8;23085:37;23072:11;23043:80;:::i;:::-;22702:431;;22687:446;22597:543;;;:::o;23146:117::-;23200:8;23250:5;23244:4;23240:16;23219:37;;23146:117;;;;:::o;23269:169::-;23313:6;23346:51;23394:1;23390:6;23382:5;23379:1;23375:13;23346:51;:::i;:::-;23342:56;23427:4;23421;23417:15;23407:25;;23320:118;23269:169;;;;:::o;23443:295::-;23519:4;23665:29;23690:3;23684:4;23665:29;:::i;:::-;23657:37;;23727:3;23724:1;23720:11;23714:4;23711:21;23703:29;;23443:295;;;;:::o;23743:1395::-;23860:37;23893:3;23860:37;:::i;:::-;23962:18;23954:6;23951:30;23948:56;;;23984:18;;:::i;:::-;23948:56;24028:38;24060:4;24054:11;24028:38;:::i;:::-;24113:67;24173:6;24165;24159:4;24113:67;:::i;:::-;24207:1;24231:4;24218:17;;24263:2;24255:6;24252:14;24280:1;24275:618;;;;24937:1;24954:6;24951:77;;;25003:9;24998:3;24994:19;24988:26;24979:35;;24951:77;25054:67;25114:6;25107:5;25054:67;:::i;:::-;25048:4;25041:81;24910:222;24245:887;;24275:618;24327:4;24323:9;24315:6;24311:22;24361:37;24393:4;24361:37;:::i;:::-;24420:1;24434:208;24448:7;24445:1;24442:14;24434:208;;;24527:9;24522:3;24518:19;24512:26;24504:6;24497:42;24578:1;24570:6;24566:14;24556:24;;24625:2;24614:9;24610:18;24597:31;;24471:4;24468:1;24464:12;24459:17;;24434:208;;;24670:6;24661:7;24658:19;24655:179;;;24728:9;24723:3;24719:19;24713:26;24771:48;24813:4;24805:6;24801:17;24790:9;24771:48;:::i;:::-;24763:6;24756:64;24678:156;24655:179;24880:1;24876;24868:6;24864:14;24860:22;24854:4;24847:36;24282:611;;;24245:887;;23835:1303;;;23743:1395;;:::o;25144:228::-;25284:34;25280:1;25272:6;25268:14;25261:58;25353:11;25348:2;25340:6;25336:15;25329:36;25144:228;:::o;25378:366::-;25520:3;25541:67;25605:2;25600:3;25541:67;:::i;:::-;25534:74;;25617:93;25706:3;25617:93;:::i;:::-;25735:2;25730:3;25726:12;25719:19;;25378:366;;;:::o;25750:419::-;25916:4;25954:2;25943:9;25939:18;25931:26;;26003:9;25997:4;25993:20;25989:1;25978:9;25974:17;25967:47;26031:131;26157:4;26031:131;:::i;:::-;26023:139;;25750:419;;;:::o;26175:173::-;26315:25;26311:1;26303:6;26299:14;26292:49;26175:173;:::o;26354:366::-;26496:3;26517:67;26581:2;26576:3;26517:67;:::i;:::-;26510:74;;26593:93;26682:3;26593:93;:::i;:::-;26711:2;26706:3;26702:12;26695:19;;26354:366;;;:::o;26726:419::-;26892:4;26930:2;26919:9;26915:18;26907:26;;26979:9;26973:4;26969:20;26965:1;26954:9;26950:17;26943:47;27007:131;27133:4;27007:131;:::i;:::-;26999:139;;26726:419;;;:::o;27151:239::-;27291:34;27287:1;27279:6;27275:14;27268:58;27360:22;27355:2;27347:6;27343:15;27336:47;27151:239;:::o;27396:366::-;27538:3;27559:67;27623:2;27618:3;27559:67;:::i;:::-;27552:74;;27635:93;27724:3;27635:93;:::i;:::-;27753:2;27748:3;27744:12;27737:19;;27396:366;;;:::o;27768:419::-;27934:4;27972:2;27961:9;27957:18;27949:26;;28021:9;28015:4;28011:20;28007:1;27996:9;27992:17;27985:47;28049:131;28175:4;28049:131;:::i;:::-;28041:139;;27768:419;;;:::o;28193:169::-;28333:21;28329:1;28321:6;28317:14;28310:45;28193:169;:::o;28368:366::-;28510:3;28531:67;28595:2;28590:3;28531:67;:::i;:::-;28524:74;;28607:93;28696:3;28607:93;:::i;:::-;28725:2;28720:3;28716:12;28709:19;;28368:366;;;:::o;28740:419::-;28906:4;28944:2;28933:9;28929:18;28921:26;;28993:9;28987:4;28983:20;28979:1;28968:9;28964:17;28957:47;29021:131;29147:4;29021:131;:::i;:::-;29013:139;;28740:419;;;:::o;29165:180::-;29213:77;29210:1;29203:88;29310:4;29307:1;29300:15;29334:4;29331:1;29324:15;29351:191;29391:3;29410:20;29428:1;29410:20;:::i;:::-;29405:25;;29444:20;29462:1;29444:20;:::i;:::-;29439:25;;29487:1;29484;29480:9;29473:16;;29508:3;29505:1;29502:10;29499:36;;;29515:18;;:::i;:::-;29499:36;29351:191;;;;:::o;29548:220::-;29688:34;29684:1;29676:6;29672:14;29665:58;29757:3;29752:2;29744:6;29740:15;29733:28;29548:220;:::o;29774:366::-;29916:3;29937:67;30001:2;29996:3;29937:67;:::i;:::-;29930:74;;30013:93;30102:3;30013:93;:::i;:::-;30131:2;30126:3;30122:12;30115:19;;29774:366;;;:::o;30146:419::-;30312:4;30350:2;30339:9;30335:18;30327:26;;30399:9;30393:4;30389:20;30385:1;30374:9;30370:17;30363:47;30427:131;30553:4;30427:131;:::i;:::-;30419:139;;30146:419;;;:::o;30571:410::-;30611:7;30634:20;30652:1;30634:20;:::i;:::-;30629:25;;30668:20;30686:1;30668:20;:::i;:::-;30663:25;;30723:1;30720;30716:9;30745:30;30763:11;30745:30;:::i;:::-;30734:41;;30924:1;30915:7;30911:15;30908:1;30905:22;30885:1;30878:9;30858:83;30835:139;;30954:18;;:::i;:::-;30835:139;30619:362;30571:410;;;;:::o;30987:182::-;31127:34;31123:1;31115:6;31111:14;31104:58;30987:182;:::o;31175:366::-;31317:3;31338:67;31402:2;31397:3;31338:67;:::i;:::-;31331:74;;31414:93;31503:3;31414:93;:::i;:::-;31532:2;31527:3;31523:12;31516:19;;31175:366;;;:::o;31547:419::-;31713:4;31751:2;31740:9;31736:18;31728:26;;31800:9;31794:4;31790:20;31786:1;31775:9;31771:17;31764:47;31828:131;31954:4;31828:131;:::i;:::-;31820:139;;31547:419;;;:::o;31972:233::-;32011:3;32034:24;32052:5;32034:24;:::i;:::-;32025:33;;32080:66;32073:5;32070:77;32067:103;;32150:18;;:::i;:::-;32067:103;32197:1;32190:5;32186:13;32179:20;;31972:233;;;:::o;32211:229::-;32351:34;32347:1;32339:6;32335:14;32328:58;32420:12;32415:2;32407:6;32403:15;32396:37;32211:229;:::o;32446:366::-;32588:3;32609:67;32673:2;32668:3;32609:67;:::i;:::-;32602:74;;32685:93;32774:3;32685:93;:::i;:::-;32803:2;32798:3;32794:12;32787:19;;32446:366;;;:::o;32818:419::-;32984:4;33022:2;33011:9;33007:18;32999:26;;33071:9;33065:4;33061:20;33057:1;33046:9;33042:17;33035:47;33099:131;33225:4;33099:131;:::i;:::-;33091:139;;32818:419;;;:::o;33243:169::-;33383:21;33379:1;33371:6;33367:14;33360:45;33243:169;:::o;33418:366::-;33560:3;33581:67;33645:2;33640:3;33581:67;:::i;:::-;33574:74;;33657:93;33746:3;33657:93;:::i;:::-;33775:2;33770:3;33766:12;33759:19;;33418:366;;;:::o;33790:419::-;33956:4;33994:2;33983:9;33979:18;33971:26;;34043:9;34037:4;34033:20;34029:1;34018:9;34014:17;34007:47;34071:131;34197:4;34071:131;:::i;:::-;34063:139;;33790:419;;;:::o;34215:171::-;34355:23;34351:1;34343:6;34339:14;34332:47;34215:171;:::o;34392:366::-;34534:3;34555:67;34619:2;34614:3;34555:67;:::i;:::-;34548:74;;34631:93;34720:3;34631:93;:::i;:::-;34749:2;34744:3;34740:12;34733:19;;34392:366;;;:::o;34764:419::-;34930:4;34968:2;34957:9;34953:18;34945:26;;35017:9;35011:4;35007:20;35003:1;34992:9;34988:17;34981:47;35045:131;35171:4;35045:131;:::i;:::-;35037:139;;34764:419;;;:::o;35189:234::-;35329:34;35325:1;35317:6;35313:14;35306:58;35398:17;35393:2;35385:6;35381:15;35374:42;35189:234;:::o;35429:366::-;35571:3;35592:67;35656:2;35651:3;35592:67;:::i;:::-;35585:74;;35668:93;35757:3;35668:93;:::i;:::-;35786:2;35781:3;35777:12;35770:19;;35429:366;;;:::o;35801:419::-;35967:4;36005:2;35994:9;35990:18;35982:26;;36054:9;36048:4;36044:20;36040:1;36029:9;36025:17;36018:47;36082:131;36208:4;36082:131;:::i;:::-;36074:139;;35801:419;;;:::o;36226:148::-;36328:11;36365:3;36350:18;;36226:148;;;;:::o;36380:390::-;36486:3;36514:39;36547:5;36514:39;:::i;:::-;36569:89;36651:6;36646:3;36569:89;:::i;:::-;36562:96;;36667:65;36725:6;36720:3;36713:4;36706:5;36702:16;36667:65;:::i;:::-;36757:6;36752:3;36748:16;36741:23;;36490:280;36380:390;;;;:::o;36800:874::-;36903:3;36940:5;36934:12;36969:36;36995:9;36969:36;:::i;:::-;37021:89;37103:6;37098:3;37021:89;:::i;:::-;37014:96;;37141:1;37130:9;37126:17;37157:1;37152:166;;;;37332:1;37327:341;;;;37119:549;;37152:166;37236:4;37232:9;37221;37217:25;37212:3;37205:38;37298:6;37291:14;37284:22;37276:6;37272:35;37267:3;37263:45;37256:52;;37152:166;;37327:341;37394:38;37426:5;37394:38;:::i;:::-;37454:1;37468:154;37482:6;37479:1;37476:13;37468:154;;;37556:7;37550:14;37546:1;37541:3;37537:11;37530:35;37606:1;37597:7;37593:15;37582:26;;37504:4;37501:1;37497:12;37492:17;;37468:154;;;37651:6;37646:3;37642:16;37635:23;;37334:334;;37119:549;;36907:767;;36800:874;;;;:::o;37680:589::-;37905:3;37927:95;38018:3;38009:6;37927:95;:::i;:::-;37920:102;;38039:95;38130:3;38121:6;38039:95;:::i;:::-;38032:102;;38151:92;38239:3;38230:6;38151:92;:::i;:::-;38144:99;;38260:3;38253:10;;37680:589;;;;;;:::o;38275:143::-;38332:5;38363:6;38357:13;38348:22;;38379:33;38406:5;38379:33;:::i;:::-;38275:143;;;;:::o;38424:351::-;38494:6;38543:2;38531:9;38522:7;38518:23;38514:32;38511:119;;;38549:79;;:::i;:::-;38511:119;38669:1;38694:64;38750:7;38741:6;38730:9;38726:22;38694:64;:::i;:::-;38684:74;;38640:128;38424:351;;;;:::o;38781:242::-;38921:34;38917:1;38909:6;38905:14;38898:58;38990:25;38985:2;38977:6;38973:15;38966:50;38781:242;:::o;39029:366::-;39171:3;39192:67;39256:2;39251:3;39192:67;:::i;:::-;39185:74;;39268:93;39357:3;39268:93;:::i;:::-;39386:2;39381:3;39377:12;39370:19;;39029:366;;;:::o;39401:419::-;39567:4;39605:2;39594:9;39590:18;39582:26;;39654:9;39648:4;39644:20;39640:1;39629:9;39625:17;39618:47;39682:131;39808:4;39682:131;:::i;:::-;39674:139;;39401:419;;;:::o;39826:229::-;39966:34;39962:1;39954:6;39950:14;39943:58;40035:12;40030:2;40022:6;40018:15;40011:37;39826:229;:::o;40061:366::-;40203:3;40224:67;40288:2;40283:3;40224:67;:::i;:::-;40217:74;;40300:93;40389:3;40300:93;:::i;:::-;40418:2;40413:3;40409:12;40402:19;;40061:366;;;:::o;40433:419::-;40599:4;40637:2;40626:9;40622:18;40614:26;;40686:9;40680:4;40676:20;40672:1;40661:9;40657:17;40650:47;40714:131;40840:4;40714:131;:::i;:::-;40706:139;;40433:419;;;:::o;40858:225::-;40998:34;40994:1;40986:6;40982:14;40975:58;41067:8;41062:2;41054:6;41050:15;41043:33;40858:225;:::o;41089:366::-;41231:3;41252:67;41316:2;41311:3;41252:67;:::i;:::-;41245:74;;41328:93;41417:3;41328:93;:::i;:::-;41446:2;41441:3;41437:12;41430:19;;41089:366;;;:::o;41461:419::-;41627:4;41665:2;41654:9;41650:18;41642:26;;41714:9;41708:4;41704:20;41700:1;41689:9;41685:17;41678:47;41742:131;41868:4;41742:131;:::i;:::-;41734:139;;41461:419;;;:::o;41886:332::-;42007:4;42045:2;42034:9;42030:18;42022:26;;42058:71;42126:1;42115:9;42111:17;42102:6;42058:71;:::i;:::-;42139:72;42207:2;42196:9;42192:18;42183:6;42139:72;:::i;:::-;41886:332;;;;;:::o;42224:137::-;42278:5;42309:6;42303:13;42294:22;;42325:30;42349:5;42325:30;:::i;:::-;42224:137;;;;:::o;42367:345::-;42434:6;42483:2;42471:9;42462:7;42458:23;42454:32;42451:119;;;42489:79;;:::i;:::-;42451:119;42609:1;42634:61;42687:7;42678:6;42667:9;42663:22;42634:61;:::i;:::-;42624:71;;42580:125;42367:345;;;;:::o;42718:220::-;42858:34;42854:1;42846:6;42842:14;42835:58;42927:3;42922:2;42914:6;42910:15;42903:28;42718:220;:::o;42944:366::-;43086:3;43107:67;43171:2;43166:3;43107:67;:::i;:::-;43100:74;;43183:93;43272:3;43183:93;:::i;:::-;43301:2;43296:3;43292:12;43285:19;;42944:366;;;:::o;43316:419::-;43482:4;43520:2;43509:9;43505:18;43497:26;;43569:9;43563:4;43559:20;43555:1;43544:9;43540:17;43533:47;43597:131;43723:4;43597:131;:::i;:::-;43589:139;;43316:419;;;:::o;43741:243::-;43881:34;43877:1;43869:6;43865:14;43858:58;43950:26;43945:2;43937:6;43933:15;43926:51;43741:243;:::o;43990:366::-;44132:3;44153:67;44217:2;44212:3;44153:67;:::i;:::-;44146:74;;44229:93;44318:3;44229:93;:::i;:::-;44347:2;44342:3;44338:12;44331:19;;43990:366;;;:::o;44362:419::-;44528:4;44566:2;44555:9;44551:18;44543:26;;44615:9;44609:4;44605:20;44601:1;44590:9;44586:17;44579:47;44643:131;44769:4;44643:131;:::i;:::-;44635:139;;44362:419;;;:::o;44787:236::-;44927:34;44923:1;44915:6;44911:14;44904:58;44996:19;44991:2;44983:6;44979:15;44972:44;44787:236;:::o;45029:366::-;45171:3;45192:67;45256:2;45251:3;45192:67;:::i;:::-;45185:74;;45268:93;45357:3;45268:93;:::i;:::-;45386:2;45381:3;45377:12;45370:19;;45029:366;;;:::o;45401:419::-;45567:4;45605:2;45594:9;45590:18;45582:26;;45654:9;45648:4;45644:20;45640:1;45629:9;45625:17;45618:47;45682:131;45808:4;45682:131;:::i;:::-;45674:139;;45401:419;;;:::o;45826:231::-;45966:34;45962:1;45954:6;45950:14;45943:58;46035:14;46030:2;46022:6;46018:15;46011:39;45826:231;:::o;46063:366::-;46205:3;46226:67;46290:2;46285:3;46226:67;:::i;:::-;46219:74;;46302:93;46391:3;46302:93;:::i;:::-;46420:2;46415:3;46411:12;46404:19;;46063:366;;;:::o;46435:419::-;46601:4;46639:2;46628:9;46624:18;46616:26;;46688:9;46682:4;46678:20;46674:1;46663:9;46659:17;46652:47;46716:131;46842:4;46716:131;:::i;:::-;46708:139;;46435:419;;;:::o;46860:147::-;46961:11;46998:3;46983:18;;46860:147;;;;:::o;47013:114::-;;:::o;47133:398::-;47292:3;47313:83;47394:1;47389:3;47313:83;:::i;:::-;47306:90;;47405:93;47494:3;47405:93;:::i;:::-;47523:1;47518:3;47514:11;47507:18;;47133:398;;;:::o;47537:379::-;47721:3;47743:147;47886:3;47743:147;:::i;:::-;47736:154;;47907:3;47900:10;;47537:379;;;:::o;47922:166::-;48062:18;48058:1;48050:6;48046:14;48039:42;47922:166;:::o;48094:366::-;48236:3;48257:67;48321:2;48316:3;48257:67;:::i;:::-;48250:74;;48333:93;48422:3;48333:93;:::i;:::-;48451:2;48446:3;48442:12;48435:19;;48094:366;;;:::o;48466:419::-;48632:4;48670:2;48659:9;48655:18;48647:26;;48719:9;48713:4;48709:20;48705:1;48694:9;48690:17;48683:47;48747:131;48873:4;48747:131;:::i;:::-;48739:139;;48466:419;;;:::o;48891:180::-;48939:77;48936:1;48929:88;49036:4;49033:1;49026:15;49060:4;49057:1;49050:15;49077:185;49117:1;49134:20;49152:1;49134:20;:::i;:::-;49129:25;;49168:20;49186:1;49168:20;:::i;:::-;49163:25;;49207:1;49197:35;;49212:18;;:::i;:::-;49197:35;49254:1;49251;49247:9;49242:14;;49077:185;;;;:::o;49268:194::-;49308:4;49328:20;49346:1;49328:20;:::i;:::-;49323:25;;49362:20;49380:1;49362:20;:::i;:::-;49357:25;;49406:1;49403;49399:9;49391:17;;49430:1;49424:4;49421:11;49418:37;;;49435:18;;:::i;:::-;49418:37;49268:194;;;;:::o;49468:176::-;49500:1;49517:20;49535:1;49517:20;:::i;:::-;49512:25;;49551:20;49569:1;49551:20;:::i;:::-;49546:25;;49590:1;49580:35;;49595:18;;:::i;:::-;49580:35;49636:1;49633;49629:9;49624:14;;49468:176;;;;:::o;49650:231::-;49790:34;49786:1;49778:6;49774:14;49767:58;49859:14;49854:2;49846:6;49842:15;49835:39;49650:231;:::o;49887:366::-;50029:3;50050:67;50114:2;50109:3;50050:67;:::i;:::-;50043:74;;50126:93;50215:3;50126:93;:::i;:::-;50244:2;50239:3;50235:12;50228:19;;49887:366;;;:::o;50259:419::-;50425:4;50463:2;50452:9;50448:18;50440:26;;50512:9;50506:4;50502:20;50498:1;50487:9;50483:17;50476:47;50540:131;50666:4;50540:131;:::i;:::-;50532:139;;50259:419;;;:::o;50684:224::-;50824:34;50820:1;50812:6;50808:14;50801:58;50893:7;50888:2;50880:6;50876:15;50869:32;50684:224;:::o;50914:366::-;51056:3;51077:67;51141:2;51136:3;51077:67;:::i;:::-;51070:74;;51153:93;51242:3;51153:93;:::i;:::-;51271:2;51266:3;51262:12;51255:19;;50914:366;;;:::o;51286:419::-;51452:4;51490:2;51479:9;51475:18;51467:26;;51539:9;51533:4;51529:20;51525:1;51514:9;51510:17;51503:47;51567:131;51693:4;51567:131;:::i;:::-;51559:139;;51286:419;;;:::o;51711:223::-;51851:34;51847:1;51839:6;51835:14;51828:58;51920:6;51915:2;51907:6;51903:15;51896:31;51711:223;:::o;51940:366::-;52082:3;52103:67;52167:2;52162:3;52103:67;:::i;:::-;52096:74;;52179:93;52268:3;52179:93;:::i;:::-;52297:2;52292:3;52288:12;52281:19;;51940:366;;;:::o;52312:419::-;52478:4;52516:2;52505:9;52501:18;52493:26;;52565:9;52559:4;52555:20;52551:1;52540:9;52536:17;52529:47;52593:131;52719:4;52593:131;:::i;:::-;52585:139;;52312:419;;;:::o;52737:237::-;52877:34;52873:1;52865:6;52861:14;52854:58;52946:20;52941:2;52933:6;52929:15;52922:45;52737:237;:::o;52980:366::-;53122:3;53143:67;53207:2;53202:3;53143:67;:::i;:::-;53136:74;;53219:93;53308:3;53219:93;:::i;:::-;53337:2;53332:3;53328:12;53321:19;;52980:366;;;:::o;53352:419::-;53518:4;53556:2;53545:9;53541:18;53533:26;;53605:9;53599:4;53595:20;53591:1;53580:9;53576:17;53569:47;53633:131;53759:4;53633:131;:::i;:::-;53625:139;;53352:419;;;:::o;53777:175::-;53917:27;53913:1;53905:6;53901:14;53894:51;53777:175;:::o;53958:366::-;54100:3;54121:67;54185:2;54180:3;54121:67;:::i;:::-;54114:74;;54197:93;54286:3;54197:93;:::i;:::-;54315:2;54310:3;54306:12;54299:19;;53958:366;;;:::o;54330:419::-;54496:4;54534:2;54523:9;54519:18;54511:26;;54583:9;54577:4;54573:20;54569:1;54558:9;54554:17;54547:47;54611:131;54737:4;54611:131;:::i;:::-;54603:139;;54330:419;;;:::o;54755:182::-;54895:34;54891:1;54883:6;54879:14;54872:58;54755:182;:::o;54943:366::-;55085:3;55106:67;55170:2;55165:3;55106:67;:::i;:::-;55099:74;;55182:93;55271:3;55182:93;:::i;:::-;55300:2;55295:3;55291:12;55284:19;;54943:366;;;:::o;55315:419::-;55481:4;55519:2;55508:9;55504:18;55496:26;;55568:9;55562:4;55558:20;55554:1;55543:9;55539:17;55532:47;55596:131;55722:4;55596:131;:::i;:::-;55588:139;;55315:419;;;:::o;55740:178::-;55880:30;55876:1;55868:6;55864:14;55857:54;55740:178;:::o;55924:366::-;56066:3;56087:67;56151:2;56146:3;56087:67;:::i;:::-;56080:74;;56163:93;56252:3;56163:93;:::i;:::-;56281:2;56276:3;56272:12;56265:19;;55924:366;;;:::o;56296:419::-;56462:4;56500:2;56489:9;56485:18;56477:26;;56549:9;56543:4;56539:20;56535:1;56524:9;56520:17;56513:47;56577:131;56703:4;56577:131;:::i;:::-;56569:139;;56296:419;;;:::o;56721:98::-;56772:6;56806:5;56800:12;56790:22;;56721:98;;;:::o;56825:168::-;56908:11;56942:6;56937:3;56930:19;56982:4;56977:3;56973:14;56958:29;;56825:168;;;;:::o;56999:373::-;57085:3;57113:38;57145:5;57113:38;:::i;:::-;57167:70;57230:6;57225:3;57167:70;:::i;:::-;57160:77;;57246:65;57304:6;57299:3;57292:4;57285:5;57281:16;57246:65;:::i;:::-;57336:29;57358:6;57336:29;:::i;:::-;57331:3;57327:39;57320:46;;57089:283;56999:373;;;;:::o;57378:640::-;57573:4;57611:3;57600:9;57596:19;57588:27;;57625:71;57693:1;57682:9;57678:17;57669:6;57625:71;:::i;:::-;57706:72;57774:2;57763:9;57759:18;57750:6;57706:72;:::i;:::-;57788;57856:2;57845:9;57841:18;57832:6;57788:72;:::i;:::-;57907:9;57901:4;57897:20;57892:2;57881:9;57877:18;57870:48;57935:76;58006:4;57997:6;57935:76;:::i;:::-;57927:84;;57378:640;;;;;;;:::o;58024:141::-;58080:5;58111:6;58105:13;58096:22;;58127:32;58153:5;58127:32;:::i;:::-;58024:141;;;;:::o;58171:349::-;58240:6;58289:2;58277:9;58268:7;58264:23;58260:32;58257:119;;;58295:79;;:::i;:::-;58257:119;58415:1;58440:63;58495:7;58486:6;58475:9;58471:22;58440:63;:::i;:::-;58430:73;;58386:127;58171:349;;;;:::o;58526:180::-;58574:77;58571:1;58564:88;58671:4;58668:1;58661:15;58695:4;58692:1;58685:15
Swarm Source
ipfs://c9e9c66b51f4ea853a44aae875e649bc1e259fe6dd2c840d7af8f31d540114b0
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.