Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 437 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer From | 20200321 | 78 days ago | IN | 0 ETH | 0.00008288 | ||||
Transfer From | 20200317 | 78 days ago | IN | 0 ETH | 0.0000786 | ||||
Transfer From | 20200313 | 78 days ago | IN | 0 ETH | 0.00008447 | ||||
Transfer From | 20200310 | 78 days ago | IN | 0 ETH | 0.00009037 | ||||
Set Approval For... | 19455543 | 183 days ago | IN | 0 ETH | 0.00167161 | ||||
Approve | 18644990 | 296 days ago | IN | 0 ETH | 0.0011615 | ||||
Approve | 18644977 | 296 days ago | IN | 0 ETH | 0.00114588 | ||||
Approve | 18609815 | 301 days ago | IN | 0 ETH | 0.0010238 | ||||
Approve | 18609650 | 301 days ago | IN | 0 ETH | 0.00101486 | ||||
Approve | 18602472 | 302 days ago | IN | 0 ETH | 0.00085495 | ||||
Approve | 18602468 | 302 days ago | IN | 0 ETH | 0.00088368 | ||||
Approve | 18602463 | 302 days ago | IN | 0 ETH | 0.00084849 | ||||
Set Approval For... | 18263101 | 350 days ago | IN | 0 ETH | 0.00044178 | ||||
Set Approval For... | 17707100 | 428 days ago | IN | 0 ETH | 0.00042307 | ||||
Set Approval For... | 16957355 | 533 days ago | IN | 0 ETH | 0.00081286 | ||||
Set Approval For... | 16825498 | 552 days ago | IN | 0 ETH | 0.00088584 | ||||
Set Approval For... | 16531944 | 593 days ago | IN | 0 ETH | 0.00073924 | ||||
Set Approval For... | 16307932 | 624 days ago | IN | 0 ETH | 0.00067369 | ||||
Set Approval For... | 16081861 | 656 days ago | IN | 0 ETH | 0.00052052 | ||||
Set Approval For... | 15955159 | 674 days ago | IN | 0 ETH | 0.00066606 | ||||
Set Approval For... | 15263736 | 776 days ago | IN | 0 ETH | 0.00095684 | ||||
Set Approval For... | 15086387 | 803 days ago | IN | 0 ETH | 0.0009644 | ||||
Set Approval For... | 15074165 | 805 days ago | IN | 0 ETH | 0.00031534 | ||||
Set Approval For... | 15071273 | 806 days ago | IN | 0 ETH | 0.00155231 | ||||
Set Approval For... | 14567822 | 888 days ago | IN | 0 ETH | 0.00247013 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
13906104 | 991 days ago | 0.064 ETH | ||||
13906104 | 991 days ago | 0.10016 ETH | ||||
13906104 | 991 days ago | 0.10016 ETH | ||||
13906104 | 991 days ago | 0.05568 ETH | ||||
13860437 | 998 days ago | 0.176 ETH | ||||
13860437 | 998 days ago | 0.27544 ETH | ||||
13860437 | 998 days ago | 0.27544 ETH | ||||
13860437 | 998 days ago | 0.15312 ETH | ||||
13852724 | 999 days ago | 0.208 ETH | ||||
13852724 | 999 days ago | 0.32552 ETH | ||||
13852724 | 999 days ago | 0.32552 ETH | ||||
13852724 | 999 days ago | 0.18096 ETH | ||||
13847078 | 1000 days ago | 0.752 ETH | ||||
13847078 | 1000 days ago | 1.17688 ETH | ||||
13847078 | 1000 days ago | 1.17688 ETH | ||||
13847078 | 1000 days ago | 0.65424 ETH | ||||
13838892 | 1001 days ago | 0.64 ETH | ||||
13838892 | 1001 days ago | 1.0016 ETH | ||||
13838892 | 1001 days ago | 1.0016 ETH | ||||
13838892 | 1001 days ago | 0.5568 ETH | ||||
13835452 | 1002 days ago | 0.528 ETH | ||||
13835452 | 1002 days ago | 0.82632 ETH | ||||
13835452 | 1002 days ago | 0.82632 ETH | ||||
13835452 | 1002 days ago | 0.45936 ETH | ||||
13832312 | 1002 days ago | 1.408 ETH |
Loading...
Loading
Contract Name:
KRAKEN
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-17 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File @openzeppelin/contracts/utils/introspection/[email protected] pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[email protected] 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/[email protected] 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/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/introspection/[email protected] 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/utils/[email protected] 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/access/[email protected] pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.10; //*********************** //Developed by Mercurial //*********************** abstract contract ERC721BaseTKC is Context, ERC165, IERC721, IERC721Metadata { using Address for address; string private _name; string private _symbol; // Mapping from token ID to owner address address[] internal _owners; // 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 Returns the total supplied tokens. Note we are not supporting IERC721Enumerable in the supportsInterface call. */ function totalSupply() public view virtual returns (uint256) { return _owners.length; } /** * @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"); uint count = 0; uint length = _owners.length; for(uint i = 0; i < length; ++i){ if(owner == _owners[i]){ ++count; } } delete length; return count; } /** * @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 {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721BaseTKC.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return tokenId < _owners.length && _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 = ERC721BaseTKC.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); _owners.push(to); emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721BaseTKC.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _owners[tokenId] = address(0); emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721BaseTKC.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721BaseTKC.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.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 {} } pragma solidity ^0.8.10; //**************************************** //Developed by Mercurial (@Mercurial__me) //**************************************** contract KRAKEN is ERC721BaseTKC, Ownable, ReentrancyGuard{ using Strings for uint256; string public provenanceHash; string private _tokenBaseURI; // Sale params uint256 public cost = 0.08 ether; uint256 public tokensMaxPerTx = 8; // Public sale uint256 public tokensMaxPerWallet = 4; // Presale uint256 public tokensReserved = 88; uint256 public tokensMaxPresaleSupply = 500; uint256 public tokensMaxSupply = 888; uint256 public totalGifted; bool public isPublicSaleActive = false; bool public isPresaleActive = false; mapping(address => uint256) public presaleAllowlist; constructor() ERC721BaseTKC("The Kraken Collective", "KRAKEN") { } function mint(uint256 _mintQty) external payable nonReentrant{ require(isPublicSaleActive, "SALE NOT ACTIVE"); require(_mintQty <= tokensMaxPerTx, "EXCEEDING MINT LIMIT OF 8/TX"); require(msg.value >= cost * _mintQty , "INSUFFICIENT ETH"); uint256 supply = _owners.length; require(supply + tokensReserved + _mintQty - totalGifted <= tokensMaxSupply, "EXCEEDING TOTAL SUPPLY"); for(uint256 i; i < _mintQty; i++) { _safeMint(msg.sender, supply++, ""); } } function mintPresale(uint256 _mintQty) external payable { require(isPresaleActive, "PRESALE NOT ACTIVE"); require(msg.value >= cost * _mintQty , "INSUFFICIENT ETH"); uint256 reserve = presaleAllowlist[msg.sender]; require(reserve > 0, "LOW RESERVE OR USER NOT WHITELISTED"); require(_mintQty <= reserve, "TRY LESS"); uint256 supply = _owners.length; require(supply + _mintQty - totalGifted <= tokensMaxPresaleSupply, "EXCEEDING MAX PRESALE SUPPLY"); presaleAllowlist[msg.sender] = reserve - _mintQty; delete reserve; for(uint256 i; i < _mintQty; i++) { _safeMint( msg.sender, supply++, ""); } } function gift(address[] calldata recipient, uint[] calldata quantity) external onlyOwner{ require(recipient.length == quantity.length, "RECIPIENT AND QUANTITY NOT EQUAL LENGTH"); uint256 totalQuantity = 0; uint256 supply = _owners.length; for(uint256 i=0; i < quantity.length; i++){ totalQuantity += quantity[i]; } require(totalQuantity <= tokensReserved, "EXCEEDING RESERVED SUPPLY TXN"); require(supply + totalQuantity <= tokensMaxSupply, "EXCEEDING TOTAL SUPPLY"); delete totalQuantity; for(uint256 i; i < recipient.length; i++){ for(uint256 j; j < quantity[i]; j++){ totalGifted++; _safeMint(recipient[i], supply++, ""); } } } function withdraw() external onlyOwner { uint256 sendAmount = address(this).balance; bool success; address wade = payable(0x096a9d16AFFD7fB6b881dA383723bB10180Cc333); address tim = payable(0x1435Db7390300EB252C806df378ecC882c041641); address mark = payable(0x1e16870873b28d956f8EBCb5179E518f8A9f89B5); address community = payable(0x14967Af4019989557489E2621b22C76d6404D2Cd); (success, ) = wade.call{value: (sendAmount * 174/1000)}(""); require(success, "Transaction Unsuccessful"); (success, ) = tim.call{value: (sendAmount * 313/1000)}(""); require(success, "Transaction Unsuccessful"); (success, ) = mark.call{value: (sendAmount * 313/1000)}(""); require(success, "Transaction Unsuccessful"); (success, ) = community.call{value: (sendAmount * 200/1000)}(""); require(success, "Transaction Unsuccessful"); } function tokenURI(uint256 tokenId) external view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); return string(abi.encodePacked(_tokenBaseURI, tokenId.toString())); } // Setters function setBaseURI(string calldata URI) external onlyOwner { _tokenBaseURI = URI; } function setprovenanceHash(string calldata _newHash) external onlyOwner { provenanceHash = _newHash; } function settokensMaxSupply(uint256 _newMax) external onlyOwner { tokensMaxSupply = _newMax; } function settokensMaxPresaleSupply(uint256 _newMax) external onlyOwner { tokensMaxPresaleSupply = _newMax; } function settokensMaxPerWallet(uint256 _newMax) external onlyOwner { tokensMaxPerWallet = _newMax; } function presaleSet(address[] calldata _addresses) external onlyOwner { for(uint256 i; i < _addresses.length; i++){ presaleAllowlist[_addresses[i]] = tokensMaxPerWallet; } } function setPreSaleState(bool _newState) public onlyOwner { isPresaleActive = _newState; } function setPublicSaleStatus(bool _newState) public onlyOwner { isPublicSaleActive = _newState; } receive() external payable {} fallback() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipient","type":"address[]"},{"internalType":"uint256[]","name":"quantity","type":"uint256[]"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","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":"isPresaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintQty","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintQty","type":"uint256"}],"name":"mintPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleAllowlist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"presaleSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"provenanceHash","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"bool","name":"_newState","type":"bool"}],"name":"setPreSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_newState","type":"bool"}],"name":"setPublicSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newHash","type":"string"}],"name":"setprovenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMax","type":"uint256"}],"name":"settokensMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMax","type":"uint256"}],"name":"settokensMaxPresaleSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMax","type":"uint256"}],"name":"settokensMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensMaxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensMaxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensMaxPresaleSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensReserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalGifted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405267011c37937e0800006009556008600a556004600b556058600c556101f4600d55610378600e556000601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff0219169083151502179055503480156200006e57600080fd5b506040518060400160405280601581526020017f546865204b72616b656e20436f6c6c65637469766500000000000000000000008152506040518060400160405280600681526020017f4b52414b454e00000000000000000000000000000000000000000000000000008152508160009080519060200190620000f39291906200020b565b5080600190805190602001906200010c9291906200020b565b5050506200012f620001236200013d60201b60201c565b6200014560201b60201c565b600160068190555062000320565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200021990620002ea565b90600052602060002090601f0160209004810192826200023d576000855562000289565b82601f106200025857805160ff191683800117855562000289565b8280016001018555821562000289579182015b82811115620002885782518255916020019190600101906200026b565b5b5090506200029891906200029c565b5090565b5b80821115620002b75760008160009055506001016200029d565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200030357607f821691505b602082108114156200031a5762000319620002bb565b5b50919050565b614a5580620003306000396000f3fe60806040526004361061023f5760003560e01c8063711e9c0d1161012e578063c6ab67a3116100ab578063e985e9c51161006f578063e985e9c514610832578063ed5936631461086f578063f2fde38b146108ac578063f5d2a658146108d5578063f759867a146108fe57610246565b8063c6ab67a31461074d578063c87b56dd14610778578063cb9b547b146107b5578063cf086030146107e0578063e22738661461080957610246565b8063a0712d68116100f2578063a0712d681461068d578063a22cb465146106a9578063b07ac52f146106d2578063b423fe67146106fb578063b88d4fde1461072457610246565b8063711e9c0d146105cc578063715018a6146105f75780637705f9b51461060e5780638da5cb5b1461063757806395d89b411461066257610246565b8063208da780116101bc578063433adb0511610180578063433adb05146104d357806355f804b3146104fe57806360d938dc146105275780636352211e1461055257806370a082311461058f57610246565b8063208da7801461041657806323b872dd146104415780633ca6fb8c1461046a5780633ccfd60b1461049357806342842e0e146104aa57610246565b80630d920bfa116102035780630d920bfa1461033f57806313faede61461036a57806318160ddd146103955780631a9b8155146103c05780631e84c413146103eb57610246565b806301ffc9a71461024857806306fdde0314610285578063081812fc146102b0578063095ea7b3146102ed5780630a6e6d8d1461031657610246565b3661024657005b005b34801561025457600080fd5b5061026f600480360381019061026a9190612ff6565b61091a565b60405161027c919061303e565b60405180910390f35b34801561029157600080fd5b5061029a6109fc565b6040516102a791906130f2565b60405180910390f35b3480156102bc57600080fd5b506102d760048036038101906102d2919061314a565b610a8e565b6040516102e491906131b8565b60405180910390f35b3480156102f957600080fd5b50610314600480360381019061030f91906131ff565b610b13565b005b34801561032257600080fd5b5061033d600480360381019061033891906132a4565b610c2b565b005b34801561034b57600080fd5b50610354610d3a565b6040516103619190613300565b60405180910390f35b34801561037657600080fd5b5061037f610d40565b60405161038c9190613300565b60405180910390f35b3480156103a157600080fd5b506103aa610d46565b6040516103b79190613300565b60405180910390f35b3480156103cc57600080fd5b506103d5610d53565b6040516103e29190613300565b60405180910390f35b3480156103f757600080fd5b50610400610d59565b60405161040d919061303e565b60405180910390f35b34801561042257600080fd5b5061042b610d6c565b6040516104389190613300565b60405180910390f35b34801561044d57600080fd5b506104686004803603810190610463919061331b565b610d72565b005b34801561047657600080fd5b50610491600480360381019061048c919061339a565b610dd2565b005b34801561049f57600080fd5b506104a8610e6b565b005b3480156104b657600080fd5b506104d160048036038101906104cc919061331b565b61126f565b005b3480156104df57600080fd5b506104e861128f565b6040516104f59190613300565b60405180910390f35b34801561050a57600080fd5b506105256004803603810190610520919061341d565b611295565b005b34801561053357600080fd5b5061053c611327565b604051610549919061303e565b60405180910390f35b34801561055e57600080fd5b506105796004803603810190610574919061314a565b61133a565b60405161058691906131b8565b60405180910390f35b34801561059b57600080fd5b506105b660048036038101906105b1919061346a565b6113f7565b6040516105c39190613300565b60405180910390f35b3480156105d857600080fd5b506105e161151d565b6040516105ee9190613300565b60405180910390f35b34801561060357600080fd5b5061060c611523565b005b34801561061a57600080fd5b50610635600480360381019061063091906134ed565b6115ab565b005b34801561064357600080fd5b5061064c611823565b60405161065991906131b8565b60405180910390f35b34801561066e57600080fd5b5061067761184d565b60405161068491906130f2565b60405180910390f35b6106a760048036038101906106a2919061314a565b6118df565b005b3480156106b557600080fd5b506106d060048036038101906106cb919061356e565b611ad6565b005b3480156106de57600080fd5b506106f960048036038101906106f4919061314a565b611c57565b005b34801561070757600080fd5b50610722600480360381019061071d919061339a565b611cdd565b005b34801561073057600080fd5b5061074b600480360381019061074691906136de565b611d76565b005b34801561075957600080fd5b50610762611dd8565b60405161076f91906130f2565b60405180910390f35b34801561078457600080fd5b5061079f600480360381019061079a919061314a565b611e66565b6040516107ac91906130f2565b60405180910390f35b3480156107c157600080fd5b506107ca611ee2565b6040516107d79190613300565b60405180910390f35b3480156107ec57600080fd5b506108076004803603810190610802919061341d565b611ee8565b005b34801561081557600080fd5b50610830600480360381019061082b919061314a565b611f7a565b005b34801561083e57600080fd5b5061085960048036038101906108549190613761565b612000565b604051610866919061303e565b60405180910390f35b34801561087b57600080fd5b506108966004803603810190610891919061346a565b612094565b6040516108a39190613300565b60405180910390f35b3480156108b857600080fd5b506108d360048036038101906108ce919061346a565b6120ac565b005b3480156108e157600080fd5b506108fc60048036038101906108f7919061314a565b6121a4565b005b6109186004803603810190610913919061314a565b61222a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109e557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109f557506109f482612497565b5b9050919050565b606060008054610a0b906137d0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a37906137d0565b8015610a845780601f10610a5957610100808354040283529160200191610a84565b820191906000526020600020905b815481529060010190602001808311610a6757829003601f168201915b5050505050905090565b6000610a9982612501565b610ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acf90613874565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b1e8261133a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8690613906565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bae612589565b73ffffffffffffffffffffffffffffffffffffffff161480610bdd5750610bdc81610bd7612589565b612000565b5b610c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1390613998565b60405180910390fd5b610c268383612591565b505050565b610c33612589565b73ffffffffffffffffffffffffffffffffffffffff16610c51611823565b73ffffffffffffffffffffffffffffffffffffffff1614610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90613a04565b60405180910390fd5b60005b82829050811015610d3557600b5460116000858585818110610ccf57610cce613a24565b5b9050602002016020810190610ce4919061346a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610d2d90613a82565b915050610caa565b505050565b600a5481565b60095481565b6000600280549050905090565b600f5481565b601060009054906101000a900460ff1681565b600e5481565b610d83610d7d612589565b8261264a565b610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db990613b3d565b60405180910390fd5b610dcd838383612728565b505050565b610dda612589565b73ffffffffffffffffffffffffffffffffffffffff16610df8611823565b73ffffffffffffffffffffffffffffffffffffffff1614610e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4590613a04565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b610e73612589565b73ffffffffffffffffffffffffffffffffffffffff16610e91611823565b73ffffffffffffffffffffffffffffffffffffffff1614610ee7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ede90613a04565b60405180910390fd5b600047905060008073096a9d16affd7fb6b881da383723bb10180cc33390506000731435db7390300eb252c806df378ecc882c04164190506000731e16870873b28d956f8ebcb5179e518f8a9f89b5905060007314967af4019989557489e2621b22c76d6404d2cd90508373ffffffffffffffffffffffffffffffffffffffff166103e860ae88610f789190613b5d565b610f829190613be6565b604051610f8e90613c48565b60006040518083038185875af1925050503d8060008114610fcb576040519150601f19603f3d011682016040523d82523d6000602084013e610fd0565b606091505b50508095505084611016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100d90613ca9565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166103e86101398861103e9190613b5d565b6110489190613be6565b60405161105490613c48565b60006040518083038185875af1925050503d8060008114611091576040519150601f19603f3d011682016040523d82523d6000602084013e611096565b606091505b505080955050846110dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d390613ca9565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166103e8610139886111049190613b5d565b61110e9190613be6565b60405161111a90613c48565b60006040518083038185875af1925050503d8060008114611157576040519150601f19603f3d011682016040523d82523d6000602084013e61115c565b606091505b505080955050846111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119990613ca9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166103e860c8886111c99190613b5d565b6111d39190613be6565b6040516111df90613c48565b60006040518083038185875af1925050503d806000811461121c576040519150601f19603f3d011682016040523d82523d6000602084013e611221565b606091505b50508095505084611267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125e90613ca9565b60405180910390fd5b505050505050565b61128a83838360405180602001604052806000815250611d76565b505050565b600c5481565b61129d612589565b73ffffffffffffffffffffffffffffffffffffffff166112bb611823565b73ffffffffffffffffffffffffffffffffffffffff1614611311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130890613a04565b60405180910390fd5b818160089190611322929190612ee7565b505050565b601060019054906101000a900460ff1681565b6000806002838154811061135157611350613a24565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e590613d3b565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f90613dcd565b60405180910390fd5b600080600280549050905060005b8181101561150e576002818154811061149257611491613a24565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156114fd57826114fa90613a82565b92505b8061150790613a82565b9050611476565b50600090508192505050919050565b600b5481565b61152b612589565b73ffffffffffffffffffffffffffffffffffffffff16611549611823565b73ffffffffffffffffffffffffffffffffffffffff161461159f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159690613a04565b60405180910390fd5b6115a960006128e1565b565b6115b3612589565b73ffffffffffffffffffffffffffffffffffffffff166115d1611823565b73ffffffffffffffffffffffffffffffffffffffff1614611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161e90613a04565b60405180910390fd5b81819050848490501461166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166690613e5f565b60405180910390fd5b600080600280549050905060005b848490508110156116c25784848281811061169b5761169a613a24565b5b90506020020135836116ad9190613e7f565b925080806116ba90613a82565b91505061167d565b50600c54821115611708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ff90613f21565b60405180910390fd5b600e5482826117179190613e7f565b1115611758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174f90613f8d565b60405180910390fd5b6000915060005b8686905081101561181a5760005b8585838181106117805761177f613a24565b5b9050602002013581101561180657600f60008154809291906117a190613a82565b91905055506117f38888848181106117bc576117bb613a24565b5b90506020020160208101906117d1919061346a565b84806117dc90613a82565b9550604051806020016040528060008152506129a7565b80806117fe90613a82565b91505061176d565b50808061181290613a82565b91505061175f565b50505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461185c906137d0565b80601f0160208091040260200160405190810160405280929190818152602001828054611888906137d0565b80156118d55780601f106118aa576101008083540402835291602001916118d5565b820191906000526020600020905b8154815290600101906020018083116118b857829003601f168201915b5050505050905090565b60026006541415611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c90613ff9565b60405180910390fd5b6002600681905550601060009054906101000a900460ff1661197c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197390614065565b60405180910390fd5b600a548111156119c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b8906140d1565b60405180910390fd5b806009546119cf9190613b5d565b341015611a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a089061413d565b60405180910390fd5b60006002805490509050600e54600f5483600c5484611a309190613e7f565b611a3a9190613e7f565b611a44919061415d565b1115611a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7c90613f8d565b60405180910390fd5b60005b82811015611ac957611ab6338380611a9f90613a82565b9450604051806020016040528060008152506129a7565b8080611ac190613a82565b915050611a88565b5050600160068190555050565b611ade612589565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b43906141dd565b60405180910390fd5b8060046000611b59612589565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c06612589565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c4b919061303e565b60405180910390a35050565b611c5f612589565b73ffffffffffffffffffffffffffffffffffffffff16611c7d611823565b73ffffffffffffffffffffffffffffffffffffffff1614611cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cca90613a04565b60405180910390fd5b80600d8190555050565b611ce5612589565b73ffffffffffffffffffffffffffffffffffffffff16611d03611823565b73ffffffffffffffffffffffffffffffffffffffff1614611d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5090613a04565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b611d87611d81612589565b8361264a565b611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd90613b3d565b60405180910390fd5b611dd284848484612a02565b50505050565b60078054611de5906137d0565b80601f0160208091040260200160405190810160405280929190818152602001828054611e11906137d0565b8015611e5e5780601f10611e3357610100808354040283529160200191611e5e565b820191906000526020600020905b815481529060010190602001808311611e4157829003601f168201915b505050505081565b6060611e7182612501565b611eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea79061426f565b60405180910390fd5b6008611ebb83612a5e565b604051602001611ecc92919061435f565b6040516020818303038152906040529050919050565b600d5481565b611ef0612589565b73ffffffffffffffffffffffffffffffffffffffff16611f0e611823565b73ffffffffffffffffffffffffffffffffffffffff1614611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b90613a04565b60405180910390fd5b818160079190611f75929190612ee7565b505050565b611f82612589565b73ffffffffffffffffffffffffffffffffffffffff16611fa0611823565b73ffffffffffffffffffffffffffffffffffffffff1614611ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fed90613a04565b60405180910390fd5b80600e8190555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60116020528060005260406000206000915090505481565b6120b4612589565b73ffffffffffffffffffffffffffffffffffffffff166120d2611823565b73ffffffffffffffffffffffffffffffffffffffff1614612128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211f90613a04565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218f906143f5565b60405180910390fd5b6121a1816128e1565b50565b6121ac612589565b73ffffffffffffffffffffffffffffffffffffffff166121ca611823565b73ffffffffffffffffffffffffffffffffffffffff1614612220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221790613a04565b60405180910390fd5b80600b8190555050565b601060019054906101000a900460ff16612279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227090614461565b60405180910390fd5b806009546122879190613b5d565b3410156122c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c09061413d565b60405180910390fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111612350576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612347906144f3565b60405180910390fd5b80821115612393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238a9061455f565b60405180910390fd5b60006002805490509050600d54600f5484836123af9190613e7f565b6123b9919061415d565b11156123fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f1906145cb565b60405180910390fd5b8282612406919061415d565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000915060005b838110156124915761247e33838061246790613a82565b9450604051806020016040528060008152506129a7565b808061248990613a82565b915050612450565b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000600280549050821080156125825750600073ffffffffffffffffffffffffffffffffffffffff166002838154811061253e5761253d613a24565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b600033905090565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126048361133a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061265582612501565b612694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268b9061465d565b60405180910390fd5b600061269f8361133a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061270e57508373ffffffffffffffffffffffffffffffffffffffff166126f684610a8e565b73ffffffffffffffffffffffffffffffffffffffff16145b8061271f575061271e8185612000565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166127488261133a565b73ffffffffffffffffffffffffffffffffffffffff161461279e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612795906146ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561280e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280590614781565b60405180910390fd5b612819838383612bbf565b612824600082612591565b816002828154811061283957612838613a24565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6129b18383612bc4565b6129be6000848484612d4c565b6129fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f490614813565b60405180910390fd5b505050565b612a0d848484612728565b612a1984848484612d4c565b612a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4f90614813565b60405180910390fd5b50505050565b60606000821415612aa6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612bba565b600082905060005b60008214612ad8578080612ac190613a82565b915050600a82612ad19190613be6565b9150612aae565b60008167ffffffffffffffff811115612af457612af36135b3565b5b6040519080825280601f01601f191660200182016040528015612b265781602001600182028036833780820191505090505b5090505b60008514612bb357600182612b3f919061415d565b9150600a85612b4e9190614833565b6030612b5a9190613e7f565b60f81b818381518110612b7057612b6f613a24565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612bac9190613be6565b9450612b2a565b8093505050505b919050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2b906148b0565b60405180910390fd5b612c3d81612501565b15612c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c749061491c565b60405180910390fd5b612c8960008383612bbf565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612d6d8473ffffffffffffffffffffffffffffffffffffffff16612ed4565b15612ec7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d96612589565b8786866040518563ffffffff1660e01b8152600401612db89493929190614991565b6020604051808303816000875af1925050508015612df457506040513d601f19601f82011682018060405250810190612df191906149f2565b60015b612e77573d8060008114612e24576040519150601f19603f3d011682016040523d82523d6000602084013e612e29565b606091505b50600081511415612e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6690614813565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ecc565b600190505b949350505050565b600080823b905060008111915050919050565b828054612ef3906137d0565b90600052602060002090601f016020900481019282612f155760008555612f5c565b82601f10612f2e57803560ff1916838001178555612f5c565b82800160010185558215612f5c579182015b82811115612f5b578235825591602001919060010190612f40565b5b509050612f699190612f6d565b5090565b5b80821115612f86576000816000905550600101612f6e565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612fd381612f9e565b8114612fde57600080fd5b50565b600081359050612ff081612fca565b92915050565b60006020828403121561300c5761300b612f94565b5b600061301a84828501612fe1565b91505092915050565b60008115159050919050565b61303881613023565b82525050565b6000602082019050613053600083018461302f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613093578082015181840152602081019050613078565b838111156130a2576000848401525b50505050565b6000601f19601f8301169050919050565b60006130c482613059565b6130ce8185613064565b93506130de818560208601613075565b6130e7816130a8565b840191505092915050565b6000602082019050818103600083015261310c81846130b9565b905092915050565b6000819050919050565b61312781613114565b811461313257600080fd5b50565b6000813590506131448161311e565b92915050565b6000602082840312156131605761315f612f94565b5b600061316e84828501613135565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006131a282613177565b9050919050565b6131b281613197565b82525050565b60006020820190506131cd60008301846131a9565b92915050565b6131dc81613197565b81146131e757600080fd5b50565b6000813590506131f9816131d3565b92915050565b6000806040838503121561321657613215612f94565b5b6000613224858286016131ea565b925050602061323585828601613135565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126132645761326361323f565b5b8235905067ffffffffffffffff81111561328157613280613244565b5b60208301915083602082028301111561329d5761329c613249565b5b9250929050565b600080602083850312156132bb576132ba612f94565b5b600083013567ffffffffffffffff8111156132d9576132d8612f99565b5b6132e58582860161324e565b92509250509250929050565b6132fa81613114565b82525050565b600060208201905061331560008301846132f1565b92915050565b60008060006060848603121561333457613333612f94565b5b6000613342868287016131ea565b9350506020613353868287016131ea565b925050604061336486828701613135565b9150509250925092565b61337781613023565b811461338257600080fd5b50565b6000813590506133948161336e565b92915050565b6000602082840312156133b0576133af612f94565b5b60006133be84828501613385565b91505092915050565b60008083601f8401126133dd576133dc61323f565b5b8235905067ffffffffffffffff8111156133fa576133f9613244565b5b60208301915083600182028301111561341657613415613249565b5b9250929050565b6000806020838503121561343457613433612f94565b5b600083013567ffffffffffffffff81111561345257613451612f99565b5b61345e858286016133c7565b92509250509250929050565b6000602082840312156134805761347f612f94565b5b600061348e848285016131ea565b91505092915050565b60008083601f8401126134ad576134ac61323f565b5b8235905067ffffffffffffffff8111156134ca576134c9613244565b5b6020830191508360208202830111156134e6576134e5613249565b5b9250929050565b6000806000806040858703121561350757613506612f94565b5b600085013567ffffffffffffffff81111561352557613524612f99565b5b6135318782880161324e565b9450945050602085013567ffffffffffffffff81111561355457613553612f99565b5b61356087828801613497565b925092505092959194509250565b6000806040838503121561358557613584612f94565b5b6000613593858286016131ea565b92505060206135a485828601613385565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6135eb826130a8565b810181811067ffffffffffffffff8211171561360a576136096135b3565b5b80604052505050565b600061361d612f8a565b905061362982826135e2565b919050565b600067ffffffffffffffff821115613649576136486135b3565b5b613652826130a8565b9050602081019050919050565b82818337600083830152505050565b600061368161367c8461362e565b613613565b90508281526020810184848401111561369d5761369c6135ae565b5b6136a884828561365f565b509392505050565b600082601f8301126136c5576136c461323f565b5b81356136d584826020860161366e565b91505092915050565b600080600080608085870312156136f8576136f7612f94565b5b6000613706878288016131ea565b9450506020613717878288016131ea565b935050604061372887828801613135565b925050606085013567ffffffffffffffff81111561374957613748612f99565b5b613755878288016136b0565b91505092959194509250565b6000806040838503121561377857613777612f94565b5b6000613786858286016131ea565b9250506020613797858286016131ea565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137e857607f821691505b602082108114156137fc576137fb6137a1565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061385e602c83613064565b915061386982613802565b604082019050919050565b6000602082019050818103600083015261388d81613851565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006138f0602183613064565b91506138fb82613894565b604082019050919050565b6000602082019050818103600083015261391f816138e3565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613982603883613064565b915061398d82613926565b604082019050919050565b600060208201905081810360008301526139b181613975565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139ee602083613064565b91506139f9826139b8565b602082019050919050565b60006020820190508181036000830152613a1d816139e1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a8d82613114565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ac057613abf613a53565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613b27603183613064565b9150613b3282613acb565b604082019050919050565b60006020820190508181036000830152613b5681613b1a565b9050919050565b6000613b6882613114565b9150613b7383613114565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bac57613bab613a53565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613bf182613114565b9150613bfc83613114565b925082613c0c57613c0b613bb7565b5b828204905092915050565b600081905092915050565b50565b6000613c32600083613c17565b9150613c3d82613c22565b600082019050919050565b6000613c5382613c25565b9150819050919050565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b6000613c93601883613064565b9150613c9e82613c5d565b602082019050919050565b60006020820190508181036000830152613cc281613c86565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613d25602983613064565b9150613d3082613cc9565b604082019050919050565b60006020820190508181036000830152613d5481613d18565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613db7602a83613064565b9150613dc282613d5b565b604082019050919050565b60006020820190508181036000830152613de681613daa565b9050919050565b7f524543495049454e5420414e44205155414e54495459204e4f5420455155414c60008201527f204c454e47544800000000000000000000000000000000000000000000000000602082015250565b6000613e49602783613064565b9150613e5482613ded565b604082019050919050565b60006020820190508181036000830152613e7881613e3c565b9050919050565b6000613e8a82613114565b9150613e9583613114565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613eca57613ec9613a53565b5b828201905092915050565b7f455843454544494e4720524553455256454420535550504c592054584e000000600082015250565b6000613f0b601d83613064565b9150613f1682613ed5565b602082019050919050565b60006020820190508181036000830152613f3a81613efe565b9050919050565b7f455843454544494e4720544f54414c20535550504c5900000000000000000000600082015250565b6000613f77601683613064565b9150613f8282613f41565b602082019050919050565b60006020820190508181036000830152613fa681613f6a565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613fe3601f83613064565b9150613fee82613fad565b602082019050919050565b6000602082019050818103600083015261401281613fd6565b9050919050565b7f53414c45204e4f54204143544956450000000000000000000000000000000000600082015250565b600061404f600f83613064565b915061405a82614019565b602082019050919050565b6000602082019050818103600083015261407e81614042565b9050919050565b7f455843454544494e47204d494e54204c494d4954204f4620382f545800000000600082015250565b60006140bb601c83613064565b91506140c682614085565b602082019050919050565b600060208201905081810360008301526140ea816140ae565b9050919050565b7f494e53554646494349454e542045544800000000000000000000000000000000600082015250565b6000614127601083613064565b9150614132826140f1565b602082019050919050565b600060208201905081810360008301526141568161411a565b9050919050565b600061416882613114565b915061417383613114565b92508282101561418657614185613a53565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006141c7601983613064565b91506141d282614191565b602082019050919050565b600060208201905081810360008301526141f6816141ba565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614259602f83613064565b9150614264826141fd565b604082019050919050565b600060208201905081810360008301526142888161424c565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546142bc816137d0565b6142c6818661428f565b945060018216600081146142e157600181146142f257614325565b60ff19831686528186019350614325565b6142fb8561429a565b60005b8381101561431d578154818901526001820191506020810190506142fe565b838801955050505b50505092915050565b600061433982613059565b614343818561428f565b9350614353818560208601613075565b80840191505092915050565b600061436b82856142af565b9150614377828461432e565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006143df602683613064565b91506143ea82614383565b604082019050919050565b6000602082019050818103600083015261440e816143d2565b9050919050565b7f50524553414c45204e4f54204143544956450000000000000000000000000000600082015250565b600061444b601283613064565b915061445682614415565b602082019050919050565b6000602082019050818103600083015261447a8161443e565b9050919050565b7f4c4f572052455345525645204f522055534552204e4f542057484954454c495360008201527f5445440000000000000000000000000000000000000000000000000000000000602082015250565b60006144dd602383613064565b91506144e882614481565b604082019050919050565b6000602082019050818103600083015261450c816144d0565b9050919050565b7f545259204c455353000000000000000000000000000000000000000000000000600082015250565b6000614549600883613064565b915061455482614513565b602082019050919050565b600060208201905081810360008301526145788161453c565b9050919050565b7f455843454544494e47204d41582050524553414c4520535550504c5900000000600082015250565b60006145b5601c83613064565b91506145c08261457f565b602082019050919050565b600060208201905081810360008301526145e4816145a8565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614647602c83613064565b9150614652826145eb565b604082019050919050565b600060208201905081810360008301526146768161463a565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006146d9602983613064565b91506146e48261467d565b604082019050919050565b60006020820190508181036000830152614708816146cc565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061476b602483613064565b91506147768261470f565b604082019050919050565b6000602082019050818103600083015261479a8161475e565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006147fd603283613064565b9150614808826147a1565b604082019050919050565b6000602082019050818103600083015261482c816147f0565b9050919050565b600061483e82613114565b915061484983613114565b92508261485957614858613bb7565b5b828206905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061489a602083613064565b91506148a582614864565b602082019050919050565b600060208201905081810360008301526148c98161488d565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614906601c83613064565b9150614911826148d0565b602082019050919050565b60006020820190508181036000830152614935816148f9565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006149638261493c565b61496d8185614947565b935061497d818560208601613075565b614986816130a8565b840191505092915050565b60006080820190506149a660008301876131a9565b6149b360208301866131a9565b6149c060408301856132f1565b81810360608301526149d28184614958565b905095945050505050565b6000815190506149ec81612fca565b92915050565b600060208284031215614a0857614a07612f94565b5b6000614a16848285016149dd565b9150509291505056fea2646970667358221220eb0b4efd59efb84aba06fe2bc49f0264223443bef75e21463b22d8e859d148cf64736f6c634300080a0033
Deployed Bytecode
0x60806040526004361061023f5760003560e01c8063711e9c0d1161012e578063c6ab67a3116100ab578063e985e9c51161006f578063e985e9c514610832578063ed5936631461086f578063f2fde38b146108ac578063f5d2a658146108d5578063f759867a146108fe57610246565b8063c6ab67a31461074d578063c87b56dd14610778578063cb9b547b146107b5578063cf086030146107e0578063e22738661461080957610246565b8063a0712d68116100f2578063a0712d681461068d578063a22cb465146106a9578063b07ac52f146106d2578063b423fe67146106fb578063b88d4fde1461072457610246565b8063711e9c0d146105cc578063715018a6146105f75780637705f9b51461060e5780638da5cb5b1461063757806395d89b411461066257610246565b8063208da780116101bc578063433adb0511610180578063433adb05146104d357806355f804b3146104fe57806360d938dc146105275780636352211e1461055257806370a082311461058f57610246565b8063208da7801461041657806323b872dd146104415780633ca6fb8c1461046a5780633ccfd60b1461049357806342842e0e146104aa57610246565b80630d920bfa116102035780630d920bfa1461033f57806313faede61461036a57806318160ddd146103955780631a9b8155146103c05780631e84c413146103eb57610246565b806301ffc9a71461024857806306fdde0314610285578063081812fc146102b0578063095ea7b3146102ed5780630a6e6d8d1461031657610246565b3661024657005b005b34801561025457600080fd5b5061026f600480360381019061026a9190612ff6565b61091a565b60405161027c919061303e565b60405180910390f35b34801561029157600080fd5b5061029a6109fc565b6040516102a791906130f2565b60405180910390f35b3480156102bc57600080fd5b506102d760048036038101906102d2919061314a565b610a8e565b6040516102e491906131b8565b60405180910390f35b3480156102f957600080fd5b50610314600480360381019061030f91906131ff565b610b13565b005b34801561032257600080fd5b5061033d600480360381019061033891906132a4565b610c2b565b005b34801561034b57600080fd5b50610354610d3a565b6040516103619190613300565b60405180910390f35b34801561037657600080fd5b5061037f610d40565b60405161038c9190613300565b60405180910390f35b3480156103a157600080fd5b506103aa610d46565b6040516103b79190613300565b60405180910390f35b3480156103cc57600080fd5b506103d5610d53565b6040516103e29190613300565b60405180910390f35b3480156103f757600080fd5b50610400610d59565b60405161040d919061303e565b60405180910390f35b34801561042257600080fd5b5061042b610d6c565b6040516104389190613300565b60405180910390f35b34801561044d57600080fd5b506104686004803603810190610463919061331b565b610d72565b005b34801561047657600080fd5b50610491600480360381019061048c919061339a565b610dd2565b005b34801561049f57600080fd5b506104a8610e6b565b005b3480156104b657600080fd5b506104d160048036038101906104cc919061331b565b61126f565b005b3480156104df57600080fd5b506104e861128f565b6040516104f59190613300565b60405180910390f35b34801561050a57600080fd5b506105256004803603810190610520919061341d565b611295565b005b34801561053357600080fd5b5061053c611327565b604051610549919061303e565b60405180910390f35b34801561055e57600080fd5b506105796004803603810190610574919061314a565b61133a565b60405161058691906131b8565b60405180910390f35b34801561059b57600080fd5b506105b660048036038101906105b1919061346a565b6113f7565b6040516105c39190613300565b60405180910390f35b3480156105d857600080fd5b506105e161151d565b6040516105ee9190613300565b60405180910390f35b34801561060357600080fd5b5061060c611523565b005b34801561061a57600080fd5b50610635600480360381019061063091906134ed565b6115ab565b005b34801561064357600080fd5b5061064c611823565b60405161065991906131b8565b60405180910390f35b34801561066e57600080fd5b5061067761184d565b60405161068491906130f2565b60405180910390f35b6106a760048036038101906106a2919061314a565b6118df565b005b3480156106b557600080fd5b506106d060048036038101906106cb919061356e565b611ad6565b005b3480156106de57600080fd5b506106f960048036038101906106f4919061314a565b611c57565b005b34801561070757600080fd5b50610722600480360381019061071d919061339a565b611cdd565b005b34801561073057600080fd5b5061074b600480360381019061074691906136de565b611d76565b005b34801561075957600080fd5b50610762611dd8565b60405161076f91906130f2565b60405180910390f35b34801561078457600080fd5b5061079f600480360381019061079a919061314a565b611e66565b6040516107ac91906130f2565b60405180910390f35b3480156107c157600080fd5b506107ca611ee2565b6040516107d79190613300565b60405180910390f35b3480156107ec57600080fd5b506108076004803603810190610802919061341d565b611ee8565b005b34801561081557600080fd5b50610830600480360381019061082b919061314a565b611f7a565b005b34801561083e57600080fd5b5061085960048036038101906108549190613761565b612000565b604051610866919061303e565b60405180910390f35b34801561087b57600080fd5b506108966004803603810190610891919061346a565b612094565b6040516108a39190613300565b60405180910390f35b3480156108b857600080fd5b506108d360048036038101906108ce919061346a565b6120ac565b005b3480156108e157600080fd5b506108fc60048036038101906108f7919061314a565b6121a4565b005b6109186004803603810190610913919061314a565b61222a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109e557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109f557506109f482612497565b5b9050919050565b606060008054610a0b906137d0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a37906137d0565b8015610a845780601f10610a5957610100808354040283529160200191610a84565b820191906000526020600020905b815481529060010190602001808311610a6757829003601f168201915b5050505050905090565b6000610a9982612501565b610ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acf90613874565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b1e8261133a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8690613906565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bae612589565b73ffffffffffffffffffffffffffffffffffffffff161480610bdd5750610bdc81610bd7612589565b612000565b5b610c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1390613998565b60405180910390fd5b610c268383612591565b505050565b610c33612589565b73ffffffffffffffffffffffffffffffffffffffff16610c51611823565b73ffffffffffffffffffffffffffffffffffffffff1614610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90613a04565b60405180910390fd5b60005b82829050811015610d3557600b5460116000858585818110610ccf57610cce613a24565b5b9050602002016020810190610ce4919061346a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610d2d90613a82565b915050610caa565b505050565b600a5481565b60095481565b6000600280549050905090565b600f5481565b601060009054906101000a900460ff1681565b600e5481565b610d83610d7d612589565b8261264a565b610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db990613b3d565b60405180910390fd5b610dcd838383612728565b505050565b610dda612589565b73ffffffffffffffffffffffffffffffffffffffff16610df8611823565b73ffffffffffffffffffffffffffffffffffffffff1614610e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4590613a04565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b610e73612589565b73ffffffffffffffffffffffffffffffffffffffff16610e91611823565b73ffffffffffffffffffffffffffffffffffffffff1614610ee7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ede90613a04565b60405180910390fd5b600047905060008073096a9d16affd7fb6b881da383723bb10180cc33390506000731435db7390300eb252c806df378ecc882c04164190506000731e16870873b28d956f8ebcb5179e518f8a9f89b5905060007314967af4019989557489e2621b22c76d6404d2cd90508373ffffffffffffffffffffffffffffffffffffffff166103e860ae88610f789190613b5d565b610f829190613be6565b604051610f8e90613c48565b60006040518083038185875af1925050503d8060008114610fcb576040519150601f19603f3d011682016040523d82523d6000602084013e610fd0565b606091505b50508095505084611016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100d90613ca9565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166103e86101398861103e9190613b5d565b6110489190613be6565b60405161105490613c48565b60006040518083038185875af1925050503d8060008114611091576040519150601f19603f3d011682016040523d82523d6000602084013e611096565b606091505b505080955050846110dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d390613ca9565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166103e8610139886111049190613b5d565b61110e9190613be6565b60405161111a90613c48565b60006040518083038185875af1925050503d8060008114611157576040519150601f19603f3d011682016040523d82523d6000602084013e61115c565b606091505b505080955050846111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119990613ca9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166103e860c8886111c99190613b5d565b6111d39190613be6565b6040516111df90613c48565b60006040518083038185875af1925050503d806000811461121c576040519150601f19603f3d011682016040523d82523d6000602084013e611221565b606091505b50508095505084611267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125e90613ca9565b60405180910390fd5b505050505050565b61128a83838360405180602001604052806000815250611d76565b505050565b600c5481565b61129d612589565b73ffffffffffffffffffffffffffffffffffffffff166112bb611823565b73ffffffffffffffffffffffffffffffffffffffff1614611311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130890613a04565b60405180910390fd5b818160089190611322929190612ee7565b505050565b601060019054906101000a900460ff1681565b6000806002838154811061135157611350613a24565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e590613d3b565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f90613dcd565b60405180910390fd5b600080600280549050905060005b8181101561150e576002818154811061149257611491613a24565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156114fd57826114fa90613a82565b92505b8061150790613a82565b9050611476565b50600090508192505050919050565b600b5481565b61152b612589565b73ffffffffffffffffffffffffffffffffffffffff16611549611823565b73ffffffffffffffffffffffffffffffffffffffff161461159f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159690613a04565b60405180910390fd5b6115a960006128e1565b565b6115b3612589565b73ffffffffffffffffffffffffffffffffffffffff166115d1611823565b73ffffffffffffffffffffffffffffffffffffffff1614611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161e90613a04565b60405180910390fd5b81819050848490501461166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166690613e5f565b60405180910390fd5b600080600280549050905060005b848490508110156116c25784848281811061169b5761169a613a24565b5b90506020020135836116ad9190613e7f565b925080806116ba90613a82565b91505061167d565b50600c54821115611708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ff90613f21565b60405180910390fd5b600e5482826117179190613e7f565b1115611758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174f90613f8d565b60405180910390fd5b6000915060005b8686905081101561181a5760005b8585838181106117805761177f613a24565b5b9050602002013581101561180657600f60008154809291906117a190613a82565b91905055506117f38888848181106117bc576117bb613a24565b5b90506020020160208101906117d1919061346a565b84806117dc90613a82565b9550604051806020016040528060008152506129a7565b80806117fe90613a82565b91505061176d565b50808061181290613a82565b91505061175f565b50505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461185c906137d0565b80601f0160208091040260200160405190810160405280929190818152602001828054611888906137d0565b80156118d55780601f106118aa576101008083540402835291602001916118d5565b820191906000526020600020905b8154815290600101906020018083116118b857829003601f168201915b5050505050905090565b60026006541415611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c90613ff9565b60405180910390fd5b6002600681905550601060009054906101000a900460ff1661197c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197390614065565b60405180910390fd5b600a548111156119c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b8906140d1565b60405180910390fd5b806009546119cf9190613b5d565b341015611a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a089061413d565b60405180910390fd5b60006002805490509050600e54600f5483600c5484611a309190613e7f565b611a3a9190613e7f565b611a44919061415d565b1115611a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7c90613f8d565b60405180910390fd5b60005b82811015611ac957611ab6338380611a9f90613a82565b9450604051806020016040528060008152506129a7565b8080611ac190613a82565b915050611a88565b5050600160068190555050565b611ade612589565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b43906141dd565b60405180910390fd5b8060046000611b59612589565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c06612589565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c4b919061303e565b60405180910390a35050565b611c5f612589565b73ffffffffffffffffffffffffffffffffffffffff16611c7d611823565b73ffffffffffffffffffffffffffffffffffffffff1614611cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cca90613a04565b60405180910390fd5b80600d8190555050565b611ce5612589565b73ffffffffffffffffffffffffffffffffffffffff16611d03611823565b73ffffffffffffffffffffffffffffffffffffffff1614611d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5090613a04565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b611d87611d81612589565b8361264a565b611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd90613b3d565b60405180910390fd5b611dd284848484612a02565b50505050565b60078054611de5906137d0565b80601f0160208091040260200160405190810160405280929190818152602001828054611e11906137d0565b8015611e5e5780601f10611e3357610100808354040283529160200191611e5e565b820191906000526020600020905b815481529060010190602001808311611e4157829003601f168201915b505050505081565b6060611e7182612501565b611eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea79061426f565b60405180910390fd5b6008611ebb83612a5e565b604051602001611ecc92919061435f565b6040516020818303038152906040529050919050565b600d5481565b611ef0612589565b73ffffffffffffffffffffffffffffffffffffffff16611f0e611823565b73ffffffffffffffffffffffffffffffffffffffff1614611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b90613a04565b60405180910390fd5b818160079190611f75929190612ee7565b505050565b611f82612589565b73ffffffffffffffffffffffffffffffffffffffff16611fa0611823565b73ffffffffffffffffffffffffffffffffffffffff1614611ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fed90613a04565b60405180910390fd5b80600e8190555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60116020528060005260406000206000915090505481565b6120b4612589565b73ffffffffffffffffffffffffffffffffffffffff166120d2611823565b73ffffffffffffffffffffffffffffffffffffffff1614612128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211f90613a04565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218f906143f5565b60405180910390fd5b6121a1816128e1565b50565b6121ac612589565b73ffffffffffffffffffffffffffffffffffffffff166121ca611823565b73ffffffffffffffffffffffffffffffffffffffff1614612220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221790613a04565b60405180910390fd5b80600b8190555050565b601060019054906101000a900460ff16612279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227090614461565b60405180910390fd5b806009546122879190613b5d565b3410156122c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c09061413d565b60405180910390fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111612350576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612347906144f3565b60405180910390fd5b80821115612393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238a9061455f565b60405180910390fd5b60006002805490509050600d54600f5484836123af9190613e7f565b6123b9919061415d565b11156123fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f1906145cb565b60405180910390fd5b8282612406919061415d565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000915060005b838110156124915761247e33838061246790613a82565b9450604051806020016040528060008152506129a7565b808061248990613a82565b915050612450565b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000600280549050821080156125825750600073ffffffffffffffffffffffffffffffffffffffff166002838154811061253e5761253d613a24565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b600033905090565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126048361133a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061265582612501565b612694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268b9061465d565b60405180910390fd5b600061269f8361133a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061270e57508373ffffffffffffffffffffffffffffffffffffffff166126f684610a8e565b73ffffffffffffffffffffffffffffffffffffffff16145b8061271f575061271e8185612000565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166127488261133a565b73ffffffffffffffffffffffffffffffffffffffff161461279e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612795906146ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561280e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280590614781565b60405180910390fd5b612819838383612bbf565b612824600082612591565b816002828154811061283957612838613a24565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6129b18383612bc4565b6129be6000848484612d4c565b6129fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f490614813565b60405180910390fd5b505050565b612a0d848484612728565b612a1984848484612d4c565b612a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4f90614813565b60405180910390fd5b50505050565b60606000821415612aa6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612bba565b600082905060005b60008214612ad8578080612ac190613a82565b915050600a82612ad19190613be6565b9150612aae565b60008167ffffffffffffffff811115612af457612af36135b3565b5b6040519080825280601f01601f191660200182016040528015612b265781602001600182028036833780820191505090505b5090505b60008514612bb357600182612b3f919061415d565b9150600a85612b4e9190614833565b6030612b5a9190613e7f565b60f81b818381518110612b7057612b6f613a24565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612bac9190613be6565b9450612b2a565b8093505050505b919050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2b906148b0565b60405180910390fd5b612c3d81612501565b15612c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c749061491c565b60405180910390fd5b612c8960008383612bbf565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612d6d8473ffffffffffffffffffffffffffffffffffffffff16612ed4565b15612ec7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d96612589565b8786866040518563ffffffff1660e01b8152600401612db89493929190614991565b6020604051808303816000875af1925050508015612df457506040513d601f19601f82011682018060405250810190612df191906149f2565b60015b612e77573d8060008114612e24576040519150601f19603f3d011682016040523d82523d6000602084013e612e29565b606091505b50600081511415612e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6690614813565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ecc565b600190505b949350505050565b600080823b905060008111915050919050565b828054612ef3906137d0565b90600052602060002090601f016020900481019282612f155760008555612f5c565b82601f10612f2e57803560ff1916838001178555612f5c565b82800160010185558215612f5c579182015b82811115612f5b578235825591602001919060010190612f40565b5b509050612f699190612f6d565b5090565b5b80821115612f86576000816000905550600101612f6e565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612fd381612f9e565b8114612fde57600080fd5b50565b600081359050612ff081612fca565b92915050565b60006020828403121561300c5761300b612f94565b5b600061301a84828501612fe1565b91505092915050565b60008115159050919050565b61303881613023565b82525050565b6000602082019050613053600083018461302f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613093578082015181840152602081019050613078565b838111156130a2576000848401525b50505050565b6000601f19601f8301169050919050565b60006130c482613059565b6130ce8185613064565b93506130de818560208601613075565b6130e7816130a8565b840191505092915050565b6000602082019050818103600083015261310c81846130b9565b905092915050565b6000819050919050565b61312781613114565b811461313257600080fd5b50565b6000813590506131448161311e565b92915050565b6000602082840312156131605761315f612f94565b5b600061316e84828501613135565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006131a282613177565b9050919050565b6131b281613197565b82525050565b60006020820190506131cd60008301846131a9565b92915050565b6131dc81613197565b81146131e757600080fd5b50565b6000813590506131f9816131d3565b92915050565b6000806040838503121561321657613215612f94565b5b6000613224858286016131ea565b925050602061323585828601613135565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126132645761326361323f565b5b8235905067ffffffffffffffff81111561328157613280613244565b5b60208301915083602082028301111561329d5761329c613249565b5b9250929050565b600080602083850312156132bb576132ba612f94565b5b600083013567ffffffffffffffff8111156132d9576132d8612f99565b5b6132e58582860161324e565b92509250509250929050565b6132fa81613114565b82525050565b600060208201905061331560008301846132f1565b92915050565b60008060006060848603121561333457613333612f94565b5b6000613342868287016131ea565b9350506020613353868287016131ea565b925050604061336486828701613135565b9150509250925092565b61337781613023565b811461338257600080fd5b50565b6000813590506133948161336e565b92915050565b6000602082840312156133b0576133af612f94565b5b60006133be84828501613385565b91505092915050565b60008083601f8401126133dd576133dc61323f565b5b8235905067ffffffffffffffff8111156133fa576133f9613244565b5b60208301915083600182028301111561341657613415613249565b5b9250929050565b6000806020838503121561343457613433612f94565b5b600083013567ffffffffffffffff81111561345257613451612f99565b5b61345e858286016133c7565b92509250509250929050565b6000602082840312156134805761347f612f94565b5b600061348e848285016131ea565b91505092915050565b60008083601f8401126134ad576134ac61323f565b5b8235905067ffffffffffffffff8111156134ca576134c9613244565b5b6020830191508360208202830111156134e6576134e5613249565b5b9250929050565b6000806000806040858703121561350757613506612f94565b5b600085013567ffffffffffffffff81111561352557613524612f99565b5b6135318782880161324e565b9450945050602085013567ffffffffffffffff81111561355457613553612f99565b5b61356087828801613497565b925092505092959194509250565b6000806040838503121561358557613584612f94565b5b6000613593858286016131ea565b92505060206135a485828601613385565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6135eb826130a8565b810181811067ffffffffffffffff8211171561360a576136096135b3565b5b80604052505050565b600061361d612f8a565b905061362982826135e2565b919050565b600067ffffffffffffffff821115613649576136486135b3565b5b613652826130a8565b9050602081019050919050565b82818337600083830152505050565b600061368161367c8461362e565b613613565b90508281526020810184848401111561369d5761369c6135ae565b5b6136a884828561365f565b509392505050565b600082601f8301126136c5576136c461323f565b5b81356136d584826020860161366e565b91505092915050565b600080600080608085870312156136f8576136f7612f94565b5b6000613706878288016131ea565b9450506020613717878288016131ea565b935050604061372887828801613135565b925050606085013567ffffffffffffffff81111561374957613748612f99565b5b613755878288016136b0565b91505092959194509250565b6000806040838503121561377857613777612f94565b5b6000613786858286016131ea565b9250506020613797858286016131ea565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137e857607f821691505b602082108114156137fc576137fb6137a1565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061385e602c83613064565b915061386982613802565b604082019050919050565b6000602082019050818103600083015261388d81613851565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006138f0602183613064565b91506138fb82613894565b604082019050919050565b6000602082019050818103600083015261391f816138e3565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613982603883613064565b915061398d82613926565b604082019050919050565b600060208201905081810360008301526139b181613975565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139ee602083613064565b91506139f9826139b8565b602082019050919050565b60006020820190508181036000830152613a1d816139e1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a8d82613114565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ac057613abf613a53565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613b27603183613064565b9150613b3282613acb565b604082019050919050565b60006020820190508181036000830152613b5681613b1a565b9050919050565b6000613b6882613114565b9150613b7383613114565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bac57613bab613a53565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613bf182613114565b9150613bfc83613114565b925082613c0c57613c0b613bb7565b5b828204905092915050565b600081905092915050565b50565b6000613c32600083613c17565b9150613c3d82613c22565b600082019050919050565b6000613c5382613c25565b9150819050919050565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b6000613c93601883613064565b9150613c9e82613c5d565b602082019050919050565b60006020820190508181036000830152613cc281613c86565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613d25602983613064565b9150613d3082613cc9565b604082019050919050565b60006020820190508181036000830152613d5481613d18565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613db7602a83613064565b9150613dc282613d5b565b604082019050919050565b60006020820190508181036000830152613de681613daa565b9050919050565b7f524543495049454e5420414e44205155414e54495459204e4f5420455155414c60008201527f204c454e47544800000000000000000000000000000000000000000000000000602082015250565b6000613e49602783613064565b9150613e5482613ded565b604082019050919050565b60006020820190508181036000830152613e7881613e3c565b9050919050565b6000613e8a82613114565b9150613e9583613114565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613eca57613ec9613a53565b5b828201905092915050565b7f455843454544494e4720524553455256454420535550504c592054584e000000600082015250565b6000613f0b601d83613064565b9150613f1682613ed5565b602082019050919050565b60006020820190508181036000830152613f3a81613efe565b9050919050565b7f455843454544494e4720544f54414c20535550504c5900000000000000000000600082015250565b6000613f77601683613064565b9150613f8282613f41565b602082019050919050565b60006020820190508181036000830152613fa681613f6a565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613fe3601f83613064565b9150613fee82613fad565b602082019050919050565b6000602082019050818103600083015261401281613fd6565b9050919050565b7f53414c45204e4f54204143544956450000000000000000000000000000000000600082015250565b600061404f600f83613064565b915061405a82614019565b602082019050919050565b6000602082019050818103600083015261407e81614042565b9050919050565b7f455843454544494e47204d494e54204c494d4954204f4620382f545800000000600082015250565b60006140bb601c83613064565b91506140c682614085565b602082019050919050565b600060208201905081810360008301526140ea816140ae565b9050919050565b7f494e53554646494349454e542045544800000000000000000000000000000000600082015250565b6000614127601083613064565b9150614132826140f1565b602082019050919050565b600060208201905081810360008301526141568161411a565b9050919050565b600061416882613114565b915061417383613114565b92508282101561418657614185613a53565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006141c7601983613064565b91506141d282614191565b602082019050919050565b600060208201905081810360008301526141f6816141ba565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614259602f83613064565b9150614264826141fd565b604082019050919050565b600060208201905081810360008301526142888161424c565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546142bc816137d0565b6142c6818661428f565b945060018216600081146142e157600181146142f257614325565b60ff19831686528186019350614325565b6142fb8561429a565b60005b8381101561431d578154818901526001820191506020810190506142fe565b838801955050505b50505092915050565b600061433982613059565b614343818561428f565b9350614353818560208601613075565b80840191505092915050565b600061436b82856142af565b9150614377828461432e565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006143df602683613064565b91506143ea82614383565b604082019050919050565b6000602082019050818103600083015261440e816143d2565b9050919050565b7f50524553414c45204e4f54204143544956450000000000000000000000000000600082015250565b600061444b601283613064565b915061445682614415565b602082019050919050565b6000602082019050818103600083015261447a8161443e565b9050919050565b7f4c4f572052455345525645204f522055534552204e4f542057484954454c495360008201527f5445440000000000000000000000000000000000000000000000000000000000602082015250565b60006144dd602383613064565b91506144e882614481565b604082019050919050565b6000602082019050818103600083015261450c816144d0565b9050919050565b7f545259204c455353000000000000000000000000000000000000000000000000600082015250565b6000614549600883613064565b915061455482614513565b602082019050919050565b600060208201905081810360008301526145788161453c565b9050919050565b7f455843454544494e47204d41582050524553414c4520535550504c5900000000600082015250565b60006145b5601c83613064565b91506145c08261457f565b602082019050919050565b600060208201905081810360008301526145e4816145a8565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614647602c83613064565b9150614652826145eb565b604082019050919050565b600060208201905081810360008301526146768161463a565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006146d9602983613064565b91506146e48261467d565b604082019050919050565b60006020820190508181036000830152614708816146cc565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061476b602483613064565b91506147768261470f565b604082019050919050565b6000602082019050818103600083015261479a8161475e565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006147fd603283613064565b9150614808826147a1565b604082019050919050565b6000602082019050818103600083015261482c816147f0565b9050919050565b600061483e82613114565b915061484983613114565b92508261485957614858613bb7565b5b828206905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061489a602083613064565b91506148a582614864565b602082019050919050565b600060208201905081810360008301526148c98161488d565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614906601c83613064565b9150614911826148d0565b602082019050919050565b60006020820190508181036000830152614935816148f9565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006149638261493c565b61496d8185614947565b935061497d818560208601613075565b614986816130a8565b840191505092915050565b60006080820190506149a660008301876131a9565b6149b360208301866131a9565b6149c060408301856132f1565b81810360608301526149d28184614958565b905095945050505050565b6000815190506149ec81612fca565b92915050565b600060208284031215614a0857614a07612f94565b5b6000614a16848285016149dd565b9150509291505056fea2646970667358221220eb0b4efd59efb84aba06fe2bc49f0264223443bef75e21463b22d8e859d148cf64736f6c634300080a0033
Deployed Bytecode Sourcemap
37141:5129:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25455:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26606:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27425:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26941:418;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41760:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37373:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37334:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25284:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37617:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37650:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37574:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28317:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41975:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39932:950;;;;;;;;;;;;;:::i;:::-;;28727:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37483:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41172:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37695:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26300:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25824:414;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37428:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23670:94;;;;;;;;;;;;;:::i;:::-;;39128:798;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23019:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26775:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37871:534;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27718:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41512:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42085:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28983:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37238:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40888:262;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37524:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41276:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41398:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28084:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37739:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23919:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41640:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38411:711;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25455:305;25557:4;25609:25;25594:40;;;:11;:40;;;;:105;;;;25666:33;25651:48;;;:11;:48;;;;25594:105;:158;;;;25716:36;25740:11;25716:23;:36::i;:::-;25594:158;25574:178;;25455:305;;;:::o;26606:100::-;26660:13;26693:5;26686:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26606:100;:::o;27425:221::-;27501:7;27529:16;27537:7;27529;:16::i;:::-;27521:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27614:15;:24;27630:7;27614:24;;;;;;;;;;;;;;;;;;;;;27607:31;;27425:221;;;:::o;26941:418::-;27022:13;27038:30;27060:7;27038:21;:30::i;:::-;27022:46;;27093:5;27087:11;;:2;:11;;;;27079:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27187:5;27171:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27196:37;27213:5;27220:12;:10;:12::i;:::-;27196:16;:37::i;:::-;27171:62;27149:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27330:21;27339:2;27343:7;27330:8;:21::i;:::-;27011:348;26941:418;;:::o;41760:209::-;23250:12;:10;:12::i;:::-;23239:23;;:7;:5;:7::i;:::-;:23;;;23231:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41845:9:::1;41841:121;41860:10;;:17;;41856:1;:21;41841:121;;;41932:18;;41898:16;:31;41915:10;;41926:1;41915:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;41898:31;;;;;;;;;;;;;;;:52;;;;41879:3;;;;;:::i;:::-;;;;41841:121;;;;41760:209:::0;;:::o;37373:33::-;;;;:::o;37334:32::-;;;;:::o;25284:101::-;25336:7;25363;:14;;;;25356:21;;25284:101;:::o;37617:26::-;;;;:::o;37650:38::-;;;;;;;;;;;;;:::o;37574:36::-;;;;:::o;28317:339::-;28512:41;28531:12;:10;:12::i;:::-;28545:7;28512:18;:41::i;:::-;28504:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28620:28;28630:4;28636:2;28640:7;28620:9;:28::i;:::-;28317:339;;;:::o;41975:104::-;23250:12;:10;:12::i;:::-;23239:23;;:7;:5;:7::i;:::-;:23;;;23231:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42062:9:::1;42044:15;;:27;;;;;;;;;;;;;;;;;;41975:104:::0;:::o;39932:950::-;23250:12;:10;:12::i;:::-;23239:23;;:7;:5;:7::i;:::-;:23;;;23231:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39982:18:::1;40003:21;39982:42;;40035:12;40060::::0;40083:42:::1;40060:66;;40137:11;40159:42;40137:65;;40213:12;40236:42;40213:66;;40290:17;40318:42;40290:71;;40389:4;:9;;40424:4;40420:3;40407:10;:16;;;;:::i;:::-;:21;;;;:::i;:::-;40389:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40375:59;;;;;40453:7;40445:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;40516:3;:8;;40550:4;40546:3;40533:10;:16;;;;:::i;:::-;:21;;;;:::i;:::-;40516:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40502:58;;;;;40579:7;40571:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;40642:4;:9;;40677:4;40673:3;40660:10;:16;;;;:::i;:::-;:21;;;;:::i;:::-;40642:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40628:59;;;;;40706:7;40698:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;40769:9;:14;;40809:4;40805:3;40792:10;:16;;;;:::i;:::-;:21;;;;:::i;:::-;40769:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40755:64;;;;;40838:7;40830:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;39971:911;;;;;;39932:950::o:0;28727:185::-;28865:39;28882:4;28888:2;28892:7;28865:39;;;;;;;;;;;;:16;:39::i;:::-;28727:185;;;:::o;37483:34::-;;;;:::o;41172:98::-;23250:12;:10;:12::i;:::-;23239:23;;:7;:5;:7::i;:::-;:23;;;23231:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41259:3:::1;;41243:13;:19;;;;;;;:::i;:::-;;41172:98:::0;;:::o;37695:35::-;;;;;;;;;;;;;:::o;26300:239::-;26372:7;26392:13;26408:7;26416;26408:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26392:32;;26460:1;26443:19;;:5;:19;;;;26435:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26526:5;26519:12;;;26300:239;;;:::o;25824:414::-;25896:7;25941:1;25924:19;;:5;:19;;;;25916:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26003:10;26028:11;26042:7;:14;;;;26028:28;;26071:6;26067:115;26087:6;26083:1;:10;26067:115;;;26124:7;26132:1;26124:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26115:19;;:5;:19;;;26112:59;;;26150:7;;;;:::i;:::-;;;26112:59;26095:3;;;;:::i;:::-;;;26067:115;;;;26194:13;;;26225:5;26218:12;;;;25824:414;;;:::o;37428:37::-;;;;:::o;23670:94::-;23250:12;:10;:12::i;:::-;23239:23;;:7;:5;:7::i;:::-;:23;;;23231:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23735:21:::1;23753:1;23735:9;:21::i;:::-;23670:94::o:0;39128:798::-;23250:12;:10;:12::i;:::-;23239:23;;:7;:5;:7::i;:::-;:23;;;23231:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39255:8:::1;;:15;;39235:9;;:16;;:35;39227:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39325:21;39361:14:::0;39378:7:::1;:14;;;;39361:31;;39407:9;39403:97;39424:8;;:15;;39420:1;:19;39403:97;;;39477:8;;39486:1;39477:11;;;;;;;:::i;:::-;;;;;;;;39460:28;;;;;:::i;:::-;;;39441:3;;;;;:::i;:::-;;;;39403:97;;;;39535:14;;39518:13;:31;;39510:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;39628:15;;39611:13;39602:6;:22;;;;:::i;:::-;:41;;39594:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;39681:20;;;39716:9;39712:207;39731:9;;:16;;39727:1;:20;39712:207;;;39772:9;39768:140;39787:8;;39796:1;39787:11;;;;;;;:::i;:::-;;;;;;;;39783:1;:15;39768:140;;;39823:11;;:13;;;;;;;;;:::i;:::-;;;;;;39855:37;39865:9;;39875:1;39865:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;39879:8;;;;;:::i;:::-;;;39855:37;;;;;;;;;;;::::0;:9:::1;:37::i;:::-;39800:3;;;;;:::i;:::-;;;;39768:140;;;;39749:3;;;;;:::i;:::-;;;;39712:207;;;;39216:710;;39128:798:::0;;;;:::o;23019:87::-;23065:7;23092:6;;;;;;;;;;;23085:13;;23019:87;:::o;26775:104::-;26831:13;26864:7;26857:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26775:104;:::o;37871:534::-;1713:1;2309:7;;:19;;2301:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1713:1;2442:7;:18;;;;37951::::1;;;;;;;;;;;37943:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;38020:14;;38008:8;:26;;38000:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38106:8;38099:4;;:15;;;;:::i;:::-;38086:9;:28;;38078:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38147:14;38164:7;:14;;;;38147:31;;38249:15;;38234:11;;38223:8;38206:14;;38197:6;:23;;;;:::i;:::-;:34;;;;:::i;:::-;:48;;;;:::i;:::-;:67;;38189:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;38306:9;38302:96;38321:8;38317:1;:12;38302:96;;;38351:35;38361:10;38373:8;;;;;:::i;:::-;;;38351:35;;;;;;;;;;;::::0;:9:::1;:35::i;:::-;38331:3;;;;;:::i;:::-;;;;38302:96;;;;37932:473;1669:1:::0;2621:7;:22;;;;37871:534;:::o;27718:295::-;27833:12;:10;:12::i;:::-;27821:24;;:8;:24;;;;27813:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27933:8;27888:18;:32;27907:12;:10;:12::i;:::-;27888:32;;;;;;;;;;;;;;;:42;27921:8;27888:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27986:8;27957:48;;27972:12;:10;:12::i;:::-;27957:48;;;27996:8;27957:48;;;;;;:::i;:::-;;;;;;;;27718:295;;:::o;41512:122::-;23250:12;:10;:12::i;:::-;23239:23;;:7;:5;:7::i;:::-;:23;;;23231:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41619:7:::1;41594:22;:32;;;;41512:122:::0;:::o;42085:111::-;23250:12;:10;:12::i;:::-;23239:23;;:7;:5;:7::i;:::-;:23;;;23231:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42179:9:::1;42158:18;;:30;;;;;;;;;;;;;;;;;;42085:111:::0;:::o;28983:328::-;29158:41;29177:12;:10;:12::i;:::-;29191:7;29158:18;:41::i;:::-;29150:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29264:39;29278:4;29284:2;29288:7;29297:5;29264:13;:39::i;:::-;28983:328;;;;:::o;37238:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40888:262::-;40963:13;40997:16;41005:7;40997;:16::i;:::-;40989:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;41107:13;41122:18;:7;:16;:18::i;:::-;41090:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41076:66;;40888:262;;;:::o;37524:43::-;;;;:::o;41276:116::-;23250:12;:10;:12::i;:::-;23239:23;;:7;:5;:7::i;:::-;:23;;;23231:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41376:8:::1;;41359:14;:25;;;;;;;:::i;:::-;;41276:116:::0;;:::o;41398:108::-;23250:12;:10;:12::i;:::-;23239:23;;:7;:5;:7::i;:::-;:23;;;23231:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41491:7:::1;41473:15;:25;;;;41398:108:::0;:::o;28084:164::-;28181:4;28205:18;:25;28224:5;28205:25;;;;;;;;;;;;;;;:35;28231:8;28205:35;;;;;;;;;;;;;;;;;;;;;;;;;28198:42;;28084:164;;;;:::o;37739:51::-;;;;;;;;;;;;;;;;;:::o;23919:192::-;23250:12;:10;:12::i;:::-;23239:23;;:7;:5;:7::i;:::-;:23;;;23231:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24028:1:::1;24008:22;;:8;:22;;;;24000:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24084:19;24094:8;24084:9;:19::i;:::-;23919:192:::0;:::o;41640:114::-;23250:12;:10;:12::i;:::-;23239:23;;:7;:5;:7::i;:::-;:23;;;23231:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41739:7:::1;41718:18;:28;;;;41640:114:::0;:::o;38411:711::-;38486:15;;;;;;;;;;;38478:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;38563:8;38556:4;;:15;;;;:::i;:::-;38543:9;:28;;38535:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38604:15;38622:16;:28;38639:10;38622:28;;;;;;;;;;;;;;;;38604:46;;38679:1;38669:7;:11;38661:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;38751:7;38739:8;:19;;38731:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;38782:14;38799:7;:14;;;;38782:31;;38867:22;;38852:11;;38841:8;38832:6;:17;;;;:::i;:::-;:31;;;;:::i;:::-;:57;;38824:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;38974:8;38964:7;:18;;;;:::i;:::-;38933:16;:28;38950:10;38933:28;;;;;;;;;;;;;;;:49;;;;38993:14;;;39022:9;39018:97;39037:8;39033:1;:12;39018:97;;;39067:36;39078:10;39090:8;;;;;:::i;:::-;;;39067:36;;;;;;;;;;;;:9;:36::i;:::-;39047:3;;;;;:::i;:::-;;;;39018:97;;;;38467:655;;38411:711;:::o;19779:157::-;19864:4;19903:25;19888:40;;;:11;:40;;;;19881:47;;19779:157;;;:::o;30821:155::-;30886:4;30920:7;:14;;;;30910:7;:24;:58;;;;;30966:1;30938:30;;:7;30946;30938:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:30;;;;30910:58;30903:65;;30821:155;;;:::o;18761:98::-;18814:7;18841:10;18834:17;;18761:98;:::o;34728:181::-;34830:2;34803:15;:24;34819:7;34803:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34893:7;34889:2;34848:53;;34857:30;34879:7;34857:21;:30::i;:::-;34848:53;;;;;;;;;;;;34728:181;;:::o;31143:355::-;31236:4;31261:16;31269:7;31261;:16::i;:::-;31253:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31337:13;31353:30;31375:7;31353:21;:30::i;:::-;31337:46;;31413:5;31402:16;;:7;:16;;;:51;;;;31446:7;31422:31;;:20;31434:7;31422:11;:20::i;:::-;:31;;;31402:51;:87;;;;31457:32;31474:5;31481:7;31457:16;:32::i;:::-;31402:87;31394:96;;;31143:355;;;;:::o;34087:523::-;34253:4;34219:38;;:30;34241:7;34219:21;:30::i;:::-;:38;;;34211:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;34336:1;34322:16;;:2;:16;;;;34314:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34392:39;34413:4;34419:2;34423:7;34392:20;:39::i;:::-;34496:29;34513:1;34517:7;34496:8;:29::i;:::-;34555:2;34536:7;34544;34536:16;;;;;;;;:::i;:::-;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34594:7;34590:2;34575:27;;34584:4;34575:27;;;;;;;;;;;;34087:523;;;:::o;24119:173::-;24175:16;24194:6;;;;;;;;;;;24175:25;;24220:8;24211:6;;:17;;;;;;;;;;;;;;;;;;24275:8;24244:40;;24265:8;24244:40;;;;;;;;;;;;24164:128;24119:173;:::o;32179:321::-;32309:18;32315:2;32319:7;32309:5;:18::i;:::-;32360:54;32391:1;32395:2;32399:7;32408:5;32360:22;:54::i;:::-;32338:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32179:321;;;:::o;30193:315::-;30350:28;30360:4;30366:2;30370:7;30350:9;:28::i;:::-;30397:48;30420:4;30426:2;30430:7;30439:5;30397:22;:48::i;:::-;30389:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30193:315;;;;:::o;20256:723::-;20312:13;20542:1;20533:5;:10;20529:53;;;20560:10;;;;;;;;;;;;;;;;;;;;;20529:53;20592:12;20607:5;20592:20;;20623:14;20648:78;20663:1;20655:4;:9;20648:78;;20681:8;;;;;:::i;:::-;;;;20712:2;20704:10;;;;;:::i;:::-;;;20648:78;;;20736:19;20768:6;20758:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20736:39;;20786:154;20802:1;20793:5;:10;20786:154;;20830:1;20820:11;;;;;:::i;:::-;;;20897:2;20889:5;:10;;;;:::i;:::-;20876:2;:24;;;;:::i;:::-;20863:39;;20846:6;20853;20846:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;20926:2;20917:11;;;;;:::i;:::-;;;20786:154;;;20964:6;20950:21;;;;;20256:723;;;;:::o;36847:126::-;;;;:::o;32836:346::-;32930:1;32916:16;;:2;:16;;;;32908:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32989:16;32997:7;32989;:16::i;:::-;32988:17;32980:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33051:45;33080:1;33084:2;33088:7;33051:20;:45::i;:::-;33107:7;33120:2;33107:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33166:7;33162:2;33141:33;;33158:1;33141:33;;;;;;;;;;;;32836:346;;:::o;35476:799::-;35631:4;35652:15;:2;:13;;;:15::i;:::-;35648:620;;;35704:2;35688:36;;;35725:12;:10;:12::i;:::-;35739:4;35745:7;35754:5;35688:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35684:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35947:1;35930:6;:13;:18;35926:272;;;35973:60;;;;;;;;;;:::i;:::-;;;;;;;;35926:272;36148:6;36142:13;36133:6;36129:2;36125:15;36118:38;35684:529;35821:41;;;35811:51;;;:6;:51;;;;35804:58;;;;;35648:620;36252:4;36245:11;;35476:799;;;;;;;:::o;10797:387::-;10857:4;11065:12;11132:7;11120:20;11112:28;;11175:1;11168:4;:8;11161:15;;;10797:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:117::-;5047:1;5044;5037:12;5061:117;5170:1;5167;5160:12;5184:117;5293:1;5290;5283:12;5324:568;5397:8;5407:6;5457:3;5450:4;5442:6;5438:17;5434:27;5424:122;;5465:79;;:::i;:::-;5424:122;5578:6;5565:20;5555:30;;5608:18;5600:6;5597:30;5594:117;;;5630:79;;:::i;:::-;5594:117;5744:4;5736:6;5732:17;5720:29;;5798:3;5790:4;5782:6;5778:17;5768:8;5764:32;5761:41;5758:128;;;5805:79;;:::i;:::-;5758:128;5324:568;;;;;:::o;5898:559::-;5984:6;5992;6041:2;6029:9;6020:7;6016:23;6012:32;6009:119;;;6047:79;;:::i;:::-;6009:119;6195:1;6184:9;6180:17;6167:31;6225:18;6217:6;6214:30;6211:117;;;6247:79;;:::i;:::-;6211:117;6360:80;6432:7;6423:6;6412:9;6408:22;6360:80;:::i;:::-;6342:98;;;;6138:312;5898:559;;;;;:::o;6463:118::-;6550:24;6568:5;6550:24;:::i;:::-;6545:3;6538:37;6463:118;;:::o;6587:222::-;6680:4;6718:2;6707:9;6703:18;6695:26;;6731:71;6799:1;6788:9;6784:17;6775:6;6731:71;:::i;:::-;6587:222;;;;:::o;6815:619::-;6892:6;6900;6908;6957:2;6945:9;6936:7;6932:23;6928:32;6925:119;;;6963:79;;:::i;:::-;6925:119;7083:1;7108:53;7153:7;7144:6;7133:9;7129:22;7108:53;:::i;:::-;7098:63;;7054:117;7210:2;7236:53;7281:7;7272:6;7261:9;7257:22;7236:53;:::i;:::-;7226:63;;7181:118;7338:2;7364:53;7409:7;7400:6;7389:9;7385:22;7364:53;:::i;:::-;7354:63;;7309:118;6815:619;;;;;:::o;7440:116::-;7510:21;7525:5;7510:21;:::i;:::-;7503:5;7500:32;7490:60;;7546:1;7543;7536:12;7490:60;7440:116;:::o;7562:133::-;7605:5;7643:6;7630:20;7621:29;;7659:30;7683:5;7659:30;:::i;:::-;7562:133;;;;:::o;7701:323::-;7757:6;7806:2;7794:9;7785:7;7781:23;7777:32;7774:119;;;7812:79;;:::i;:::-;7774:119;7932:1;7957:50;7999:7;7990:6;7979:9;7975:22;7957:50;:::i;:::-;7947:60;;7903:114;7701:323;;;;:::o;8044:553::-;8102:8;8112:6;8162:3;8155:4;8147:6;8143:17;8139:27;8129:122;;8170:79;;:::i;:::-;8129:122;8283:6;8270:20;8260:30;;8313:18;8305:6;8302:30;8299:117;;;8335:79;;:::i;:::-;8299:117;8449:4;8441:6;8437:17;8425:29;;8503:3;8495:4;8487:6;8483:17;8473:8;8469:32;8466:41;8463:128;;;8510:79;;:::i;:::-;8463:128;8044:553;;;;;:::o;8603:529::-;8674:6;8682;8731:2;8719:9;8710:7;8706:23;8702:32;8699:119;;;8737:79;;:::i;:::-;8699:119;8885:1;8874:9;8870:17;8857:31;8915:18;8907:6;8904:30;8901:117;;;8937:79;;:::i;:::-;8901:117;9050:65;9107:7;9098:6;9087:9;9083:22;9050:65;:::i;:::-;9032:83;;;;8828:297;8603:529;;;;;:::o;9138:329::-;9197:6;9246:2;9234:9;9225:7;9221:23;9217:32;9214:119;;;9252:79;;:::i;:::-;9214:119;9372:1;9397:53;9442:7;9433:6;9422:9;9418:22;9397:53;:::i;:::-;9387:63;;9343:117;9138:329;;;;:::o;9490:568::-;9563:8;9573:6;9623:3;9616:4;9608:6;9604:17;9600:27;9590:122;;9631:79;;:::i;:::-;9590:122;9744:6;9731:20;9721:30;;9774:18;9766:6;9763:30;9760:117;;;9796:79;;:::i;:::-;9760:117;9910:4;9902:6;9898:17;9886:29;;9964:3;9956:4;9948:6;9944:17;9934:8;9930:32;9927:41;9924:128;;;9971:79;;:::i;:::-;9924:128;9490:568;;;;;:::o;10064:934::-;10186:6;10194;10202;10210;10259:2;10247:9;10238:7;10234:23;10230:32;10227:119;;;10265:79;;:::i;:::-;10227:119;10413:1;10402:9;10398:17;10385:31;10443:18;10435:6;10432:30;10429:117;;;10465:79;;:::i;:::-;10429:117;10578:80;10650:7;10641:6;10630:9;10626:22;10578:80;:::i;:::-;10560:98;;;;10356:312;10735:2;10724:9;10720:18;10707:32;10766:18;10758:6;10755:30;10752:117;;;10788:79;;:::i;:::-;10752:117;10901:80;10973:7;10964:6;10953:9;10949:22;10901:80;:::i;:::-;10883:98;;;;10678:313;10064:934;;;;;;;:::o;11004:468::-;11069:6;11077;11126:2;11114:9;11105:7;11101:23;11097:32;11094:119;;;11132:79;;:::i;:::-;11094:119;11252:1;11277:53;11322:7;11313:6;11302:9;11298:22;11277:53;:::i;:::-;11267:63;;11223:117;11379:2;11405:50;11447:7;11438:6;11427:9;11423:22;11405:50;:::i;:::-;11395:60;;11350:115;11004:468;;;;;:::o;11478:117::-;11587:1;11584;11577:12;11601:180;11649:77;11646:1;11639:88;11746:4;11743:1;11736:15;11770:4;11767:1;11760:15;11787:281;11870:27;11892:4;11870:27;:::i;:::-;11862:6;11858:40;12000:6;11988:10;11985:22;11964:18;11952:10;11949:34;11946:62;11943:88;;;12011:18;;:::i;:::-;11943:88;12051:10;12047:2;12040:22;11830:238;11787:281;;:::o;12074:129::-;12108:6;12135:20;;:::i;:::-;12125:30;;12164:33;12192:4;12184:6;12164:33;:::i;:::-;12074:129;;;:::o;12209:307::-;12270:4;12360:18;12352:6;12349:30;12346:56;;;12382:18;;:::i;:::-;12346:56;12420:29;12442:6;12420:29;:::i;:::-;12412:37;;12504:4;12498;12494:15;12486:23;;12209:307;;;:::o;12522:154::-;12606:6;12601:3;12596;12583:30;12668:1;12659:6;12654:3;12650:16;12643:27;12522:154;;;:::o;12682:410::-;12759:5;12784:65;12800:48;12841:6;12800:48;:::i;:::-;12784:65;:::i;:::-;12775:74;;12872:6;12865:5;12858:21;12910:4;12903:5;12899:16;12948:3;12939:6;12934:3;12930:16;12927:25;12924:112;;;12955:79;;:::i;:::-;12924:112;13045:41;13079:6;13074:3;13069;13045:41;:::i;:::-;12765:327;12682:410;;;;;:::o;13111:338::-;13166:5;13215:3;13208:4;13200:6;13196:17;13192:27;13182:122;;13223:79;;:::i;:::-;13182:122;13340:6;13327:20;13365:78;13439:3;13431:6;13424:4;13416:6;13412:17;13365:78;:::i;:::-;13356:87;;13172:277;13111:338;;;;:::o;13455:943::-;13550:6;13558;13566;13574;13623:3;13611:9;13602:7;13598:23;13594:33;13591:120;;;13630:79;;:::i;:::-;13591:120;13750:1;13775:53;13820:7;13811:6;13800:9;13796:22;13775:53;:::i;:::-;13765:63;;13721:117;13877:2;13903:53;13948:7;13939:6;13928:9;13924:22;13903:53;:::i;:::-;13893:63;;13848:118;14005:2;14031:53;14076:7;14067:6;14056:9;14052:22;14031:53;:::i;:::-;14021:63;;13976:118;14161:2;14150:9;14146:18;14133:32;14192:18;14184:6;14181:30;14178:117;;;14214:79;;:::i;:::-;14178:117;14319:62;14373:7;14364:6;14353:9;14349:22;14319:62;:::i;:::-;14309:72;;14104:287;13455:943;;;;;;;:::o;14404:474::-;14472:6;14480;14529:2;14517:9;14508:7;14504:23;14500:32;14497:119;;;14535:79;;:::i;:::-;14497:119;14655:1;14680:53;14725:7;14716:6;14705:9;14701:22;14680:53;:::i;:::-;14670:63;;14626:117;14782:2;14808:53;14853:7;14844:6;14833:9;14829:22;14808:53;:::i;:::-;14798:63;;14753:118;14404:474;;;;;:::o;14884:180::-;14932:77;14929:1;14922:88;15029:4;15026:1;15019:15;15053:4;15050:1;15043:15;15070:320;15114:6;15151:1;15145:4;15141:12;15131:22;;15198:1;15192:4;15188:12;15219:18;15209:81;;15275:4;15267:6;15263:17;15253:27;;15209:81;15337:2;15329:6;15326:14;15306:18;15303:38;15300:84;;;15356:18;;:::i;:::-;15300:84;15121:269;15070:320;;;:::o;15396:231::-;15536:34;15532:1;15524:6;15520:14;15513:58;15605:14;15600:2;15592:6;15588:15;15581:39;15396:231;:::o;15633:366::-;15775:3;15796:67;15860:2;15855:3;15796:67;:::i;:::-;15789:74;;15872:93;15961:3;15872:93;:::i;:::-;15990:2;15985:3;15981:12;15974:19;;15633:366;;;:::o;16005:419::-;16171:4;16209:2;16198:9;16194:18;16186:26;;16258:9;16252:4;16248:20;16244:1;16233:9;16229:17;16222:47;16286:131;16412:4;16286:131;:::i;:::-;16278:139;;16005:419;;;:::o;16430:220::-;16570:34;16566:1;16558:6;16554:14;16547:58;16639:3;16634:2;16626:6;16622:15;16615:28;16430:220;:::o;16656:366::-;16798:3;16819:67;16883:2;16878:3;16819:67;:::i;:::-;16812:74;;16895:93;16984:3;16895:93;:::i;:::-;17013:2;17008:3;17004:12;16997:19;;16656:366;;;:::o;17028:419::-;17194:4;17232:2;17221:9;17217:18;17209:26;;17281:9;17275:4;17271:20;17267:1;17256:9;17252:17;17245:47;17309:131;17435:4;17309:131;:::i;:::-;17301:139;;17028:419;;;:::o;17453:243::-;17593:34;17589:1;17581:6;17577:14;17570:58;17662:26;17657:2;17649:6;17645:15;17638:51;17453:243;:::o;17702:366::-;17844:3;17865:67;17929:2;17924:3;17865:67;:::i;:::-;17858:74;;17941:93;18030:3;17941:93;:::i;:::-;18059:2;18054:3;18050:12;18043:19;;17702:366;;;:::o;18074:419::-;18240:4;18278:2;18267:9;18263:18;18255:26;;18327:9;18321:4;18317:20;18313:1;18302:9;18298:17;18291:47;18355:131;18481:4;18355:131;:::i;:::-;18347:139;;18074:419;;;:::o;18499:182::-;18639:34;18635:1;18627:6;18623:14;18616:58;18499:182;:::o;18687:366::-;18829:3;18850:67;18914:2;18909:3;18850:67;:::i;:::-;18843:74;;18926:93;19015:3;18926:93;:::i;:::-;19044:2;19039:3;19035:12;19028:19;;18687:366;;;:::o;19059:419::-;19225:4;19263:2;19252:9;19248:18;19240:26;;19312:9;19306:4;19302:20;19298:1;19287:9;19283:17;19276:47;19340:131;19466:4;19340:131;:::i;:::-;19332:139;;19059:419;;;:::o;19484:180::-;19532:77;19529:1;19522:88;19629:4;19626:1;19619:15;19653:4;19650:1;19643:15;19670:180;19718:77;19715:1;19708:88;19815:4;19812:1;19805:15;19839:4;19836:1;19829:15;19856:233;19895:3;19918:24;19936:5;19918:24;:::i;:::-;19909:33;;19964:66;19957:5;19954:77;19951:103;;;20034:18;;:::i;:::-;19951:103;20081:1;20074:5;20070:13;20063:20;;19856:233;;;:::o;20095:236::-;20235:34;20231:1;20223:6;20219:14;20212:58;20304:19;20299:2;20291:6;20287:15;20280:44;20095:236;:::o;20337:366::-;20479:3;20500:67;20564:2;20559:3;20500:67;:::i;:::-;20493:74;;20576:93;20665:3;20576:93;:::i;:::-;20694:2;20689:3;20685:12;20678:19;;20337:366;;;:::o;20709:419::-;20875:4;20913:2;20902:9;20898:18;20890:26;;20962:9;20956:4;20952:20;20948:1;20937:9;20933:17;20926:47;20990:131;21116:4;20990:131;:::i;:::-;20982:139;;20709:419;;;:::o;21134:348::-;21174:7;21197:20;21215:1;21197:20;:::i;:::-;21192:25;;21231:20;21249:1;21231:20;:::i;:::-;21226:25;;21419:1;21351:66;21347:74;21344:1;21341:81;21336:1;21329:9;21322:17;21318:105;21315:131;;;21426:18;;:::i;:::-;21315:131;21474:1;21471;21467:9;21456:20;;21134:348;;;;:::o;21488:180::-;21536:77;21533:1;21526:88;21633:4;21630:1;21623:15;21657:4;21654:1;21647:15;21674:185;21714:1;21731:20;21749:1;21731:20;:::i;:::-;21726:25;;21765:20;21783:1;21765:20;:::i;:::-;21760:25;;21804:1;21794:35;;21809:18;;:::i;:::-;21794:35;21851:1;21848;21844:9;21839:14;;21674:185;;;;:::o;21865:147::-;21966:11;22003:3;21988:18;;21865:147;;;;:::o;22018:114::-;;:::o;22138:398::-;22297:3;22318:83;22399:1;22394:3;22318:83;:::i;:::-;22311:90;;22410:93;22499:3;22410:93;:::i;:::-;22528:1;22523:3;22519:11;22512:18;;22138:398;;;:::o;22542:379::-;22726:3;22748:147;22891:3;22748:147;:::i;:::-;22741:154;;22912:3;22905:10;;22542:379;;;:::o;22927:174::-;23067:26;23063:1;23055:6;23051:14;23044:50;22927:174;:::o;23107:366::-;23249:3;23270:67;23334:2;23329:3;23270:67;:::i;:::-;23263:74;;23346:93;23435:3;23346:93;:::i;:::-;23464:2;23459:3;23455:12;23448:19;;23107:366;;;:::o;23479:419::-;23645:4;23683:2;23672:9;23668:18;23660:26;;23732:9;23726:4;23722:20;23718:1;23707:9;23703:17;23696:47;23760:131;23886:4;23760:131;:::i;:::-;23752:139;;23479:419;;;:::o;23904:228::-;24044:34;24040:1;24032:6;24028:14;24021:58;24113:11;24108:2;24100:6;24096:15;24089:36;23904:228;:::o;24138:366::-;24280:3;24301:67;24365:2;24360:3;24301:67;:::i;:::-;24294:74;;24377:93;24466:3;24377:93;:::i;:::-;24495:2;24490:3;24486:12;24479:19;;24138:366;;;:::o;24510:419::-;24676:4;24714:2;24703:9;24699:18;24691:26;;24763:9;24757:4;24753:20;24749:1;24738:9;24734:17;24727:47;24791:131;24917:4;24791:131;:::i;:::-;24783:139;;24510:419;;;:::o;24935:229::-;25075:34;25071:1;25063:6;25059:14;25052:58;25144:12;25139:2;25131:6;25127:15;25120:37;24935:229;:::o;25170:366::-;25312:3;25333:67;25397:2;25392:3;25333:67;:::i;:::-;25326:74;;25409:93;25498:3;25409:93;:::i;:::-;25527:2;25522:3;25518:12;25511:19;;25170:366;;;:::o;25542:419::-;25708:4;25746:2;25735:9;25731:18;25723:26;;25795:9;25789:4;25785:20;25781:1;25770:9;25766:17;25759:47;25823:131;25949:4;25823:131;:::i;:::-;25815:139;;25542:419;;;:::o;25967:226::-;26107:34;26103:1;26095:6;26091:14;26084:58;26176:9;26171:2;26163:6;26159:15;26152:34;25967:226;:::o;26199:366::-;26341:3;26362:67;26426:2;26421:3;26362:67;:::i;:::-;26355:74;;26438:93;26527:3;26438:93;:::i;:::-;26556:2;26551:3;26547:12;26540:19;;26199:366;;;:::o;26571:419::-;26737:4;26775:2;26764:9;26760:18;26752:26;;26824:9;26818:4;26814:20;26810:1;26799:9;26795:17;26788:47;26852:131;26978:4;26852:131;:::i;:::-;26844:139;;26571:419;;;:::o;26996:305::-;27036:3;27055:20;27073:1;27055:20;:::i;:::-;27050:25;;27089:20;27107:1;27089:20;:::i;:::-;27084:25;;27243:1;27175:66;27171:74;27168:1;27165:81;27162:107;;;27249:18;;:::i;:::-;27162:107;27293:1;27290;27286:9;27279:16;;26996:305;;;;:::o;27307:179::-;27447:31;27443:1;27435:6;27431:14;27424:55;27307:179;:::o;27492:366::-;27634:3;27655:67;27719:2;27714:3;27655:67;:::i;:::-;27648:74;;27731:93;27820:3;27731:93;:::i;:::-;27849:2;27844:3;27840:12;27833:19;;27492:366;;;:::o;27864:419::-;28030:4;28068:2;28057:9;28053:18;28045:26;;28117:9;28111:4;28107:20;28103:1;28092:9;28088:17;28081:47;28145:131;28271:4;28145:131;:::i;:::-;28137:139;;27864:419;;;:::o;28289:172::-;28429:24;28425:1;28417:6;28413:14;28406:48;28289:172;:::o;28467:366::-;28609:3;28630:67;28694:2;28689:3;28630:67;:::i;:::-;28623:74;;28706:93;28795:3;28706:93;:::i;:::-;28824:2;28819:3;28815:12;28808:19;;28467:366;;;:::o;28839:419::-;29005:4;29043:2;29032:9;29028:18;29020:26;;29092:9;29086:4;29082:20;29078:1;29067:9;29063:17;29056:47;29120:131;29246:4;29120:131;:::i;:::-;29112:139;;28839:419;;;:::o;29264:181::-;29404:33;29400:1;29392:6;29388:14;29381:57;29264:181;:::o;29451:366::-;29593:3;29614:67;29678:2;29673:3;29614:67;:::i;:::-;29607:74;;29690:93;29779:3;29690:93;:::i;:::-;29808:2;29803:3;29799:12;29792:19;;29451:366;;;:::o;29823:419::-;29989:4;30027:2;30016:9;30012:18;30004:26;;30076:9;30070:4;30066:20;30062:1;30051:9;30047:17;30040:47;30104:131;30230:4;30104:131;:::i;:::-;30096:139;;29823:419;;;:::o;30248:165::-;30388:17;30384:1;30376:6;30372:14;30365:41;30248:165;:::o;30419:366::-;30561:3;30582:67;30646:2;30641:3;30582:67;:::i;:::-;30575:74;;30658:93;30747:3;30658:93;:::i;:::-;30776:2;30771:3;30767:12;30760:19;;30419:366;;;:::o;30791:419::-;30957:4;30995:2;30984:9;30980:18;30972:26;;31044:9;31038:4;31034:20;31030:1;31019:9;31015:17;31008:47;31072:131;31198:4;31072:131;:::i;:::-;31064:139;;30791:419;;;:::o;31216:178::-;31356:30;31352:1;31344:6;31340:14;31333:54;31216:178;:::o;31400:366::-;31542:3;31563:67;31627:2;31622:3;31563:67;:::i;:::-;31556:74;;31639:93;31728:3;31639:93;:::i;:::-;31757:2;31752:3;31748:12;31741:19;;31400:366;;;:::o;31772:419::-;31938:4;31976:2;31965:9;31961:18;31953:26;;32025:9;32019:4;32015:20;32011:1;32000:9;31996:17;31989:47;32053:131;32179:4;32053:131;:::i;:::-;32045:139;;31772:419;;;:::o;32197:166::-;32337:18;32333:1;32325:6;32321:14;32314:42;32197:166;:::o;32369:366::-;32511:3;32532:67;32596:2;32591:3;32532:67;:::i;:::-;32525:74;;32608:93;32697:3;32608:93;:::i;:::-;32726:2;32721:3;32717:12;32710:19;;32369:366;;;:::o;32741:419::-;32907:4;32945:2;32934:9;32930:18;32922:26;;32994:9;32988:4;32984:20;32980:1;32969:9;32965:17;32958:47;33022:131;33148:4;33022:131;:::i;:::-;33014:139;;32741:419;;;:::o;33166:191::-;33206:4;33226:20;33244:1;33226:20;:::i;:::-;33221:25;;33260:20;33278:1;33260:20;:::i;:::-;33255:25;;33299:1;33296;33293:8;33290:34;;;33304:18;;:::i;:::-;33290:34;33349:1;33346;33342:9;33334:17;;33166:191;;;;:::o;33363:175::-;33503:27;33499:1;33491:6;33487:14;33480:51;33363:175;:::o;33544:366::-;33686:3;33707:67;33771:2;33766:3;33707:67;:::i;:::-;33700:74;;33783:93;33872:3;33783:93;:::i;:::-;33901:2;33896:3;33892:12;33885:19;;33544:366;;;:::o;33916:419::-;34082:4;34120:2;34109:9;34105:18;34097:26;;34169:9;34163:4;34159:20;34155:1;34144:9;34140:17;34133:47;34197:131;34323:4;34197:131;:::i;:::-;34189:139;;33916:419;;;:::o;34341:234::-;34481:34;34477:1;34469:6;34465:14;34458:58;34550:17;34545:2;34537:6;34533:15;34526:42;34341:234;:::o;34581:366::-;34723:3;34744:67;34808:2;34803:3;34744:67;:::i;:::-;34737:74;;34820:93;34909:3;34820:93;:::i;:::-;34938:2;34933:3;34929:12;34922:19;;34581:366;;;:::o;34953:419::-;35119:4;35157:2;35146:9;35142:18;35134:26;;35206:9;35200:4;35196:20;35192:1;35181:9;35177:17;35170:47;35234:131;35360:4;35234:131;:::i;:::-;35226:139;;34953:419;;;:::o;35378:148::-;35480:11;35517:3;35502:18;;35378:148;;;;:::o;35532:141::-;35581:4;35604:3;35596:11;;35627:3;35624:1;35617:14;35661:4;35658:1;35648:18;35640:26;;35532:141;;;:::o;35703:845::-;35806:3;35843:5;35837:12;35872:36;35898:9;35872:36;:::i;:::-;35924:89;36006:6;36001:3;35924:89;:::i;:::-;35917:96;;36044:1;36033:9;36029:17;36060:1;36055:137;;;;36206:1;36201:341;;;;36022:520;;36055:137;36139:4;36135:9;36124;36120:25;36115:3;36108:38;36175:6;36170:3;36166:16;36159:23;;36055:137;;36201:341;36268:38;36300:5;36268:38;:::i;:::-;36328:1;36342:154;36356:6;36353:1;36350:13;36342:154;;;36430:7;36424:14;36420:1;36415:3;36411:11;36404:35;36480:1;36471:7;36467:15;36456:26;;36378:4;36375:1;36371:12;36366:17;;36342:154;;;36525:6;36520:3;36516:16;36509:23;;36208:334;;36022:520;;35810:738;;35703:845;;;;:::o;36554:377::-;36660:3;36688:39;36721:5;36688:39;:::i;:::-;36743:89;36825:6;36820:3;36743:89;:::i;:::-;36736:96;;36841:52;36886:6;36881:3;36874:4;36867:5;36863:16;36841:52;:::i;:::-;36918:6;36913:3;36909:16;36902:23;;36664:267;36554:377;;;;:::o;36937:429::-;37114:3;37136:92;37224:3;37215:6;37136:92;:::i;:::-;37129:99;;37245:95;37336:3;37327:6;37245:95;:::i;:::-;37238:102;;37357:3;37350:10;;36937:429;;;;;:::o;37372:225::-;37512:34;37508:1;37500:6;37496:14;37489:58;37581:8;37576:2;37568:6;37564:15;37557:33;37372:225;:::o;37603:366::-;37745:3;37766:67;37830:2;37825:3;37766:67;:::i;:::-;37759:74;;37842:93;37931:3;37842:93;:::i;:::-;37960:2;37955:3;37951:12;37944:19;;37603:366;;;:::o;37975:419::-;38141:4;38179:2;38168:9;38164:18;38156:26;;38228:9;38222:4;38218:20;38214:1;38203:9;38199:17;38192:47;38256:131;38382:4;38256:131;:::i;:::-;38248:139;;37975:419;;;:::o;38400:168::-;38540:20;38536:1;38528:6;38524:14;38517:44;38400:168;:::o;38574:366::-;38716:3;38737:67;38801:2;38796:3;38737:67;:::i;:::-;38730:74;;38813:93;38902:3;38813:93;:::i;:::-;38931:2;38926:3;38922:12;38915:19;;38574:366;;;:::o;38946:419::-;39112:4;39150:2;39139:9;39135:18;39127:26;;39199:9;39193:4;39189:20;39185:1;39174:9;39170:17;39163:47;39227:131;39353:4;39227:131;:::i;:::-;39219:139;;38946:419;;;:::o;39371:222::-;39511:34;39507:1;39499:6;39495:14;39488:58;39580:5;39575:2;39567:6;39563:15;39556:30;39371:222;:::o;39599:366::-;39741:3;39762:67;39826:2;39821:3;39762:67;:::i;:::-;39755:74;;39838:93;39927:3;39838:93;:::i;:::-;39956:2;39951:3;39947:12;39940:19;;39599:366;;;:::o;39971:419::-;40137:4;40175:2;40164:9;40160:18;40152:26;;40224:9;40218:4;40214:20;40210:1;40199:9;40195:17;40188:47;40252:131;40378:4;40252:131;:::i;:::-;40244:139;;39971:419;;;:::o;40396:158::-;40536:10;40532:1;40524:6;40520:14;40513:34;40396:158;:::o;40560:365::-;40702:3;40723:66;40787:1;40782:3;40723:66;:::i;:::-;40716:73;;40798:93;40887:3;40798:93;:::i;:::-;40916:2;40911:3;40907:12;40900:19;;40560:365;;;:::o;40931:419::-;41097:4;41135:2;41124:9;41120:18;41112:26;;41184:9;41178:4;41174:20;41170:1;41159:9;41155:17;41148:47;41212:131;41338:4;41212:131;:::i;:::-;41204:139;;40931:419;;;:::o;41356:178::-;41496:30;41492:1;41484:6;41480:14;41473:54;41356:178;:::o;41540:366::-;41682:3;41703:67;41767:2;41762:3;41703:67;:::i;:::-;41696:74;;41779:93;41868:3;41779:93;:::i;:::-;41897:2;41892:3;41888:12;41881:19;;41540:366;;;:::o;41912:419::-;42078:4;42116:2;42105:9;42101:18;42093:26;;42165:9;42159:4;42155:20;42151:1;42140:9;42136:17;42129:47;42193:131;42319:4;42193:131;:::i;:::-;42185:139;;41912:419;;;:::o;42337:231::-;42477:34;42473:1;42465:6;42461:14;42454:58;42546:14;42541:2;42533:6;42529:15;42522:39;42337:231;:::o;42574:366::-;42716:3;42737:67;42801:2;42796:3;42737:67;:::i;:::-;42730:74;;42813:93;42902:3;42813:93;:::i;:::-;42931:2;42926:3;42922:12;42915:19;;42574:366;;;:::o;42946:419::-;43112:4;43150:2;43139:9;43135:18;43127:26;;43199:9;43193:4;43189:20;43185:1;43174:9;43170:17;43163:47;43227:131;43353:4;43227:131;:::i;:::-;43219:139;;42946:419;;;:::o;43371:228::-;43511:34;43507:1;43499:6;43495:14;43488:58;43580:11;43575:2;43567:6;43563:15;43556:36;43371:228;:::o;43605:366::-;43747:3;43768:67;43832:2;43827:3;43768:67;:::i;:::-;43761:74;;43844:93;43933:3;43844:93;:::i;:::-;43962:2;43957:3;43953:12;43946:19;;43605:366;;;:::o;43977:419::-;44143:4;44181:2;44170:9;44166:18;44158:26;;44230:9;44224:4;44220:20;44216:1;44205:9;44201:17;44194:47;44258:131;44384:4;44258:131;:::i;:::-;44250:139;;43977:419;;;:::o;44402:223::-;44542:34;44538:1;44530:6;44526:14;44519:58;44611:6;44606:2;44598:6;44594:15;44587:31;44402:223;:::o;44631:366::-;44773:3;44794:67;44858:2;44853:3;44794:67;:::i;:::-;44787:74;;44870:93;44959:3;44870:93;:::i;:::-;44988:2;44983:3;44979:12;44972:19;;44631:366;;;:::o;45003:419::-;45169:4;45207:2;45196:9;45192:18;45184:26;;45256:9;45250:4;45246:20;45242:1;45231:9;45227:17;45220:47;45284:131;45410:4;45284:131;:::i;:::-;45276:139;;45003:419;;;:::o;45428:237::-;45568:34;45564:1;45556:6;45552:14;45545:58;45637:20;45632:2;45624:6;45620:15;45613:45;45428:237;:::o;45671:366::-;45813:3;45834:67;45898:2;45893:3;45834:67;:::i;:::-;45827:74;;45910:93;45999:3;45910:93;:::i;:::-;46028:2;46023:3;46019:12;46012:19;;45671:366;;;:::o;46043:419::-;46209:4;46247:2;46236:9;46232:18;46224:26;;46296:9;46290:4;46286:20;46282:1;46271:9;46267:17;46260:47;46324:131;46450:4;46324:131;:::i;:::-;46316:139;;46043:419;;;:::o;46468:176::-;46500:1;46517:20;46535:1;46517:20;:::i;:::-;46512:25;;46551:20;46569:1;46551:20;:::i;:::-;46546:25;;46590:1;46580:35;;46595:18;;:::i;:::-;46580:35;46636:1;46633;46629:9;46624:14;;46468:176;;;;:::o;46650:182::-;46790:34;46786:1;46778:6;46774:14;46767:58;46650:182;:::o;46838:366::-;46980:3;47001:67;47065:2;47060:3;47001:67;:::i;:::-;46994:74;;47077:93;47166:3;47077:93;:::i;:::-;47195:2;47190:3;47186:12;47179:19;;46838:366;;;:::o;47210:419::-;47376:4;47414:2;47403:9;47399:18;47391:26;;47463:9;47457:4;47453:20;47449:1;47438:9;47434:17;47427:47;47491:131;47617:4;47491:131;:::i;:::-;47483:139;;47210:419;;;:::o;47635:178::-;47775:30;47771:1;47763:6;47759:14;47752:54;47635:178;:::o;47819:366::-;47961:3;47982:67;48046:2;48041:3;47982:67;:::i;:::-;47975:74;;48058:93;48147:3;48058:93;:::i;:::-;48176:2;48171:3;48167:12;48160:19;;47819:366;;;:::o;48191:419::-;48357:4;48395:2;48384:9;48380:18;48372:26;;48444:9;48438:4;48434:20;48430:1;48419:9;48415:17;48408:47;48472:131;48598:4;48472:131;:::i;:::-;48464:139;;48191:419;;;:::o;48616:98::-;48667:6;48701:5;48695:12;48685:22;;48616:98;;;:::o;48720:168::-;48803:11;48837:6;48832:3;48825:19;48877:4;48872:3;48868:14;48853:29;;48720:168;;;;:::o;48894:360::-;48980:3;49008:38;49040:5;49008:38;:::i;:::-;49062:70;49125:6;49120:3;49062:70;:::i;:::-;49055:77;;49141:52;49186:6;49181:3;49174:4;49167:5;49163:16;49141:52;:::i;:::-;49218:29;49240:6;49218:29;:::i;:::-;49213:3;49209:39;49202:46;;48984:270;48894:360;;;;:::o;49260:640::-;49455:4;49493:3;49482:9;49478:19;49470:27;;49507:71;49575:1;49564:9;49560:17;49551:6;49507:71;:::i;:::-;49588:72;49656:2;49645:9;49641:18;49632:6;49588:72;:::i;:::-;49670;49738:2;49727:9;49723:18;49714:6;49670:72;:::i;:::-;49789:9;49783:4;49779:20;49774:2;49763:9;49759:18;49752:48;49817:76;49888:4;49879:6;49817:76;:::i;:::-;49809:84;;49260:640;;;;;;;:::o;49906:141::-;49962:5;49993:6;49987:13;49978:22;;50009:32;50035:5;50009:32;:::i;:::-;49906:141;;;;:::o;50053:349::-;50122:6;50171:2;50159:9;50150:7;50146:23;50142:32;50139:119;;;50177:79;;:::i;:::-;50139:119;50297:1;50322:63;50377:7;50368:6;50357:9;50353:22;50322:63;:::i;:::-;50312:73;;50268:127;50053:349;;;;:::o
Swarm Source
ipfs://eb0b4efd59efb84aba06fe2bc49f0264223443bef75e21463b22d8e859d148cf
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
POL | 100.00% | $0.376302 | 0.08 | $0.030104 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.