More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 9,617 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 64771266 | 147 days ago | IN | 0 POL | 0.00139923 | ||||
Set Approval For... | 64239383 | 160 days ago | IN | 0 POL | 0.00930749 | ||||
Set Approval For... | 62597067 | 201 days ago | IN | 0 POL | 0.00080223 | ||||
Set Approval For... | 62597065 | 201 days ago | IN | 0 POL | 0.00139923 | ||||
Set Approval For... | 59683109 | 274 days ago | IN | 0 POL | 0.00139923 | ||||
Set Approval For... | 59112073 | 288 days ago | IN | 0 POL | 0.02454005 | ||||
Set Approval For... | 57634214 | 326 days ago | IN | 0 POL | 0.00139923 | ||||
Set Approval For... | 57599783 | 326 days ago | IN | 0 POL | 0.00139923 | ||||
Set Price | 57473635 | 330 days ago | IN | 0 POL | 0.00101587 | ||||
Set Price | 57393441 | 332 days ago | IN | 0 POL | 0.00101587 | ||||
Set Price | 57393428 | 332 days ago | IN | 0 POL | 0.00101713 | ||||
Set Price | 57371005 | 332 days ago | IN | 0 POL | 0.00101588 | ||||
Set Price | 57224853 | 336 days ago | IN | 0 POL | 0.00146489 | ||||
Set Price | 56932947 | 344 days ago | IN | 0 POL | 0.00101616 | ||||
Set Price | 56576035 | 353 days ago | IN | 0 POL | 0.00101587 | ||||
Set Price | 56511711 | 355 days ago | IN | 0 POL | 0.00101587 | ||||
Set Price | 56511700 | 355 days ago | IN | 0 POL | 0.00101713 | ||||
Safe Transfer Fr... | 56306490 | 360 days ago | IN | 0 POL | 0.01777734 | ||||
Safe Transfer Fr... | 56302919 | 361 days ago | IN | 0 POL | 0.01264977 | ||||
Safe Transfer Fr... | 56294688 | 361 days ago | IN | 0 POL | 0.08831832 | ||||
Set Price | 56078235 | 366 days ago | IN | 0 POL | 0.00421401 | ||||
Safe Transfer Fr... | 56040156 | 367 days ago | IN | 0 POL | 0.04935098 | ||||
Safe Transfer Fr... | 55928762 | 370 days ago | IN | 0 POL | 0.0454016 | ||||
Set Price | 55743089 | 375 days ago | IN | 0 POL | 0.01039769 | ||||
Mint Using Token... | 55626383 | 378 days ago | IN | 0 POL | 0.0036137 |
Latest 20 internal transactions
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
40842910 | 757 days ago | 1,229.22 POL | ||||
38495590 | 819 days ago | 746.50999999 POL | ||||
38236721 | 825 days ago | 2,349.16999999 POL | ||||
38099324 | 829 days ago | 39,609.69999999 POL | ||||
37983596 | 831 days ago | 1,464.72999999 POL | ||||
35616384 | 890 days ago | 2,046.78 POL | ||||
34716453 | 912 days ago | 4,886.05 POL | ||||
32675805 | 961 days ago | 3,436.86 POL | ||||
32305907 | 971 days ago | 3,856 POL | ||||
32296678 | 972 days ago | 2,592.54 POL | ||||
32245109 | 973 days ago | 825.93 POL | ||||
31450457 | 994 days ago | 1,000 POL | ||||
31098668 | 1003 days ago | 12,725 POL | ||||
25064542 | 1160 days ago | 13,450 POL | ||||
24727700 | 1168 days ago | 6,300 POL | ||||
24125352 | 1184 days ago | 6,450 POL | ||||
23820948 | 1191 days ago | 2,725 POL | ||||
23042122 | 1212 days ago | 1,100 POL | ||||
22885252 | 1216 days ago | 5,400 POL | ||||
22220973 | 1233 days ago | 5,150 POL |
Loading...
Loading
Contract Name:
TwoHundredKeys
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-11-06 */ /** *Submitted for verification at Etherscan.io on 2021-09-15 */ // SPDX-License-Identifier: MIT 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; } } /** * @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); } } /** * @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); } /** * @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; } /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } /** * @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; } } /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; _afterTokenTransfer(address(0), to); emit Transfer(address(0), to, tokenId); } // function _mintDirect(address to, uint256 tokenId) internal virtual { // address owner0 = _owners[tokenId] // _beforeTokenTransfer(owner0, to, tokenId); // _balances[to] += 1; // _owners[tokenId] = to; // _afterTokenTransfer(address(0), to); // emit Transfer(address(0), to, tokenId); // } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; _afterTokenTransfer(owner, 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(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; _afterTokenTransfer(from, to); emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} function _afterTokenTransfer( address from, address to ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/utils/Strings.sol /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol /** * @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); } interface IUnlockToken { function updateNFTsHeld(address account) external; function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); //function burn(address account, uint256 amount) external returns (bool); function burnFrom(address account, uint256 amount) external; } contract TwoHundredKeys is ERC721, ERC721Enumerable, Ownable { uint public constant MAX_SUPPLY = 10000; uint private constant MAX_MINT_PER_CALL = 20; bool public saleActive = false; uint256 private _price = 50000000000000000000; // 50 MATIC string private _baseTokenURI = "http://meta.200keys.com/"; IUnlockToken public tokenUnlock; constructor() ERC721("200 Keys", "KEYS") { } function _baseURI() internal view override(ERC721) returns (string memory) { return _baseTokenURI; } function setBaseURI(string memory baseURI) public onlyOwner { _baseTokenURI = baseURI; } function getBaseURI() external view returns(string memory) { return _baseTokenURI; } function setPrice(uint256 price) public onlyOwner { _price = price; } function getPrice() external view returns(uint256) { return _price; } function tokensOfHolder(address _holder) external view returns(uint256[] memory ) { uint256 tokenCount = balanceOf(_holder); if (tokenCount == 0) { // Return an empty array return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 index; for (index = 0; index < tokenCount; index++) { result[index] = tokenOfOwnerByIndex(_holder, index); } return result; } } function mint(uint256 numNFTs) public payable { require(saleActive, "Sale is not active"); require(MAX_SUPPLY > totalSupply(), "Minting has already finished"); require(numNFTs > 0 && numNFTs <= MAX_MINT_PER_CALL, "Mint exceeds MAX_MINT_PER_CALL"); require(MAX_SUPPLY >= totalSupply() + numNFTs, "Mint would exceed MAX_SUPPLY"); require(msg.value >= _price * numNFTs, "Too little ETH sent"); for (uint i = 0; i < numNFTs; i++) { uint mintIndex = totalSupply() + 1; // +1 so it doesn't start on index 0. _safeMint(msg.sender, mintIndex); } } function mintTo(address to) public onlyOwner { require(MAX_SUPPLY > totalSupply(), "Minting has already finished"); uint mintIndex = totalSupply() + 1; // +1 so it doesn't start on index 0. _safeMint(to, mintIndex); } // function mintTo(address to, uint256 tokenId) public onlyOwner { // _mintDirect(to, tokenId ); // } function mintUsingTokens(uint256 numNFTs) public{ require(saleActive, "Sale is not active"); require(MAX_SUPPLY > totalSupply(), "Minting has already finished"); require(numNFTs > 0 && numNFTs <= MAX_MINT_PER_CALL, "Mint exceeds MAX_MINT_PER_CALL"); require(MAX_SUPPLY >= totalSupply() + numNFTs, "Mint would exceed MAX_SUPPLY"); uint256 tokenAmount = numNFTs * tokensNeededForMinting; tokenUnlock.transferFrom(msg.sender, address(this), tokenAmount); //Burn tokenUnlock.approve(address(this), tokenAmount); tokenUnlock.burnFrom(address(this), tokenAmount); for (uint i = 0; i < numNFTs; i++) { uint mintIndex = totalSupply() + 1; // +1 so it doesn't start on index 0. _safeMint(msg.sender, mintIndex); } } function setTokenAdress(address token) public onlyOwner { tokenUnlock = IUnlockToken(token); } function toggleSaleState() public onlyOwner { saleActive = !saleActive; } uint256 public tokensNeededForMinting; function setTokensRequiredForMinting(uint256 _tokensNeededForMinting) public onlyOwner { tokensNeededForMinting = _tokensNeededForMinting; } function withdraw() public onlyOwner { require(payable(msg.sender).send(address(this).balance)); } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function _afterTokenTransfer(address from, address to) internal override(ERC721) { tokenUnlock.updateNFTsHeld(from); tokenUnlock.updateNFTsHeld(to); } function _burn(uint256 tokenId) internal override(ERC721) { super._burn(tokenId); } function tokenURI(uint256 tokenId) public view override(ERC721) returns (string memory) { return super.tokenURI(tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numNFTs","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mintTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numNFTs","type":"uint256"}],"name":"mintUsingTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"setTokenAdress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokensNeededForMinting","type":"uint256"}],"name":"setTokensRequiredForMinting","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":[],"name":"toggleSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenUnlock","outputs":[{"internalType":"contract IUnlockToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensNeededForMinting","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"tokensOfHolder","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"}]
Contract Creation Code
60806040526000600a60146101000a81548160ff0219169083151502179055506802b5e3af16b1880000600b556040518060400160405280601881526020017f687474703a2f2f6d6574612e3230306b6579732e636f6d2f0000000000000000815250600c9080519060200190620000799291906200021c565b503480156200008757600080fd5b506040518060400160405280600881526020017f323030204b6579730000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4b4559530000000000000000000000000000000000000000000000000000000081525081600090805190602001906200010c9291906200021c565b508060019080519060200190620001259291906200021c565b505050620001486200013c6200014e60201b60201c565b6200015660201b60201c565b62000331565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200022a90620002cc565b90600052602060002090601f0160209004810192826200024e57600085556200029a565b82601f106200026957805160ff19168380011785556200029a565b828001600101855582156200029a579182015b82811115620002995782518255916020019190600101906200027c565b5b509050620002a99190620002ad565b5090565b5b80821115620002c8576000816000905550600101620002ae565b5090565b60006002820490506001821680620002e557607f821691505b60208210811415620002fc57620002fb62000302565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6149e880620003416000396000f3fe6080604052600436106102045760003560e01c8063714c539811610118578063a0712d68116100a0578063b88d4fde1161006f578063b88d4fde14610746578063c87b56dd1461076f578063daaeec86146107ac578063e985e9c5146107c3578063f2fde38b1461080057610204565b8063a0712d68146106ab578063a22cb465146106c7578063a99b7f42146106f0578063b19094b71461071b57610204565b80638bb0d810116100e75780638bb0d810146105d85780638da5cb5b1461060157806391b7f5ed1461062c57806395d89b411461065557806398d5fdca1461068057610204565b8063714c539814610544578063715018a61461056f578063744afbef14610586578063755edd17146105af57610204565b806332cb6b0c1161019b5780634f6ccce71161016a5780634f6ccce71461043957806355f804b3146104765780636352211e1461049f57806368428a1b146104dc57806370a082311461050757610204565b806332cb6b0c146103a55780633ccfd60b146103d057806342842e0e146103e75780634452299c1461041057610204565b806318160ddd116101d757806318160ddd146102d757806323b872dd14610302578063283bf7201461032b5780632f745c591461036857610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b919061368d565b610829565b60405161023d919061418e565b60405180910390f35b34801561025257600080fd5b5061025b61083b565b60405161026891906141c4565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190613720565b6108cd565b6040516102a591906140a5565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190613628565b610952565b005b3480156102e357600080fd5b506102ec610a6a565b6040516102f991906144c6565b60405180910390f35b34801561030e57600080fd5b5061032960048036038101906103249190613522565b610a77565b005b34801561033757600080fd5b50610352600480360381019061034d91906134bd565b610ad7565b60405161035f919061416c565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a9190613628565b610c53565b60405161039c91906144c6565b60405180910390f35b3480156103b157600080fd5b506103ba610cf8565b6040516103c791906144c6565b60405180910390f35b3480156103dc57600080fd5b506103e5610cfe565b005b3480156103f357600080fd5b5061040e60048036038101906104099190613522565b610dba565b005b34801561041c57600080fd5b5061043760048036038101906104329190613720565b610dda565b005b34801561044557600080fd5b50610460600480360381019061045b9190613720565b610e60565b60405161046d91906144c6565b60405180910390f35b34801561048257600080fd5b5061049d600480360381019061049891906136df565b610ef7565b005b3480156104ab57600080fd5b506104c660048036038101906104c19190613720565b610f8d565b6040516104d391906140a5565b60405180910390f35b3480156104e857600080fd5b506104f161103f565b6040516104fe919061418e565b60405180910390f35b34801561051357600080fd5b5061052e600480360381019061052991906134bd565b611052565b60405161053b91906144c6565b60405180910390f35b34801561055057600080fd5b5061055961110a565b60405161056691906141c4565b60405180910390f35b34801561057b57600080fd5b5061058461119c565b005b34801561059257600080fd5b506105ad60048036038101906105a89190613720565b611224565b005b3480156105bb57600080fd5b506105d660048036038101906105d191906134bd565b6115ae565b005b3480156105e457600080fd5b506105ff60048036038101906105fa91906134bd565b61169b565b005b34801561060d57600080fd5b5061061661175b565b60405161062391906140a5565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e9190613720565b611785565b005b34801561066157600080fd5b5061066a61180b565b60405161067791906141c4565b60405180910390f35b34801561068c57600080fd5b5061069561189d565b6040516106a291906144c6565b60405180910390f35b6106c560048036038101906106c09190613720565b6118a7565b005b3480156106d357600080fd5b506106ee60048036038101906106e991906135ec565b611a7d565b005b3480156106fc57600080fd5b50610705611bfe565b60405161071291906144c6565b60405180910390f35b34801561072757600080fd5b50610730611c04565b60405161073d91906141a9565b60405180910390f35b34801561075257600080fd5b5061076d60048036038101906107689190613571565b611c2a565b005b34801561077b57600080fd5b5061079660048036038101906107919190613720565b611c8c565b6040516107a391906141c4565b60405180910390f35b3480156107b857600080fd5b506107c1611c9e565b005b3480156107cf57600080fd5b506107ea60048036038101906107e591906134e6565b611d46565b6040516107f7919061418e565b60405180910390f35b34801561080c57600080fd5b50610827600480360381019061082291906134bd565b611dda565b005b600061083482611ed2565b9050919050565b60606000805461084a906147dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610876906147dd565b80156108c35780601f10610898576101008083540402835291602001916108c3565b820191906000526020600020905b8154815290600101906020018083116108a657829003601f168201915b5050505050905090565b60006108d882611f4c565b610917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090e906143e6565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061095d82610f8d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c590614466565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109ed611fb8565b73ffffffffffffffffffffffffffffffffffffffff161480610a1c5750610a1b81610a16611fb8565b611d46565b5b610a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5290614326565b60405180910390fd5b610a658383611fc0565b505050565b6000600880549050905090565b610a88610a82611fb8565b82612079565b610ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abe90614486565b60405180910390fd5b610ad2838383612157565b505050565b60606000610ae483611052565b90506000811415610b6757600067ffffffffffffffff811115610b30577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610b5e5781602001602082028036833780820191505090505b50915050610c4e565b60008167ffffffffffffffff811115610ba9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610bd75781602001602082028036833780820191505090505b50905060005b82811015610c4757610bef8582610c53565b828281518110610c28577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610c3f9061480f565b915050610bdd565b8193505050505b919050565b6000610c5e83611052565b8210610c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c96906141e6565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61271081565b610d06611fb8565b73ffffffffffffffffffffffffffffffffffffffff16610d2461175b565b73ffffffffffffffffffffffffffffffffffffffff1614610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7190614406565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610db857600080fd5b565b610dd583838360405180602001604052806000815250611c2a565b505050565b610de2611fb8565b73ffffffffffffffffffffffffffffffffffffffff16610e0061175b565b73ffffffffffffffffffffffffffffffffffffffff1614610e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4d90614406565b60405180910390fd5b80600e8190555050565b6000610e6a610a6a565b8210610eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea2906144a6565b60405180910390fd5b60088281548110610ee5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610eff611fb8565b73ffffffffffffffffffffffffffffffffffffffff16610f1d61175b565b73ffffffffffffffffffffffffffffffffffffffff1614610f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6a90614406565b60405180910390fd5b80600c9080519060200190610f899291906132cc565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d90614366565b60405180910390fd5b80915050919050565b600a60149054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba90614346565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600c8054611119906147dd565b80601f0160208091040260200160405190810160405280929190818152602001828054611145906147dd565b80156111925780601f1061116757610100808354040283529160200191611192565b820191906000526020600020905b81548152906001019060200180831161117557829003601f168201915b5050505050905090565b6111a4611fb8565b73ffffffffffffffffffffffffffffffffffffffff166111c261175b565b73ffffffffffffffffffffffffffffffffffffffff1614611218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120f90614406565b60405180910390fd5b61122260006123bd565b565b600a60149054906101000a900460ff16611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a906142a6565b60405180910390fd5b61127b610a6a565b612710116112be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b590614306565b60405180910390fd5b6000811180156112cf575060148111155b61130e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611305906143a6565b60405180910390fd5b80611317610a6a565b61132191906145ee565b6127101015611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c906142c6565b60405180910390fd5b6000600e54826113759190614675565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016113d6939291906140c0565b602060405180830381600087803b1580156113f057600080fd5b505af1158015611404573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114289190613664565b50600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b330836040518363ffffffff1660e01b8152600401611486929190614143565b602060405180830381600087803b1580156114a057600080fd5b505af11580156114b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d89190613664565b50600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379cc679030836040518363ffffffff1660e01b8152600401611536929190614143565b600060405180830381600087803b15801561155057600080fd5b505af1158015611564573d6000803e3d6000fd5b5050505060005b828110156115a9576000600161157f610a6a565b61158991906145ee565b90506115953382612483565b5080806115a19061480f565b91505061156b565b505050565b6115b6611fb8565b73ffffffffffffffffffffffffffffffffffffffff166115d461175b565b73ffffffffffffffffffffffffffffffffffffffff161461162a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162190614406565b60405180910390fd5b611632610a6a565b61271011611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166c90614306565b60405180910390fd5b60006001611681610a6a565b61168b91906145ee565b90506116978282612483565b5050565b6116a3611fb8565b73ffffffffffffffffffffffffffffffffffffffff166116c161175b565b73ffffffffffffffffffffffffffffffffffffffff1614611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e90614406565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61178d611fb8565b73ffffffffffffffffffffffffffffffffffffffff166117ab61175b565b73ffffffffffffffffffffffffffffffffffffffff1614611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f890614406565b60405180910390fd5b80600b8190555050565b60606001805461181a906147dd565b80601f0160208091040260200160405190810160405280929190818152602001828054611846906147dd565b80156118935780601f1061186857610100808354040283529160200191611893565b820191906000526020600020905b81548152906001019060200180831161187657829003601f168201915b5050505050905090565b6000600b54905090565b600a60149054906101000a900460ff166118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed906142a6565b60405180910390fd5b6118fe610a6a565b61271011611941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193890614306565b60405180910390fd5b600081118015611952575060148111155b611991576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611988906143a6565b60405180910390fd5b8061199a610a6a565b6119a491906145ee565b61271010156119e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119df906142c6565b60405180910390fd5b80600b546119f69190614675565b341015611a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2f90614386565b60405180910390fd5b60005b81811015611a795760006001611a4f610a6a565b611a5991906145ee565b9050611a653382612483565b508080611a719061480f565b915050611a3b565b5050565b611a85611fb8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aea90614286565b60405180910390fd5b8060056000611b00611fb8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611bad611fb8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bf2919061418e565b60405180910390a35050565b600e5481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c3b611c35611fb8565b83612079565b611c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7190614486565b60405180910390fd5b611c86848484846124a1565b50505050565b6060611c97826124fd565b9050919050565b611ca6611fb8565b73ffffffffffffffffffffffffffffffffffffffff16611cc461175b565b73ffffffffffffffffffffffffffffffffffffffff1614611d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1190614406565b60405180910390fd5b600a60149054906101000a900460ff1615600a60146101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611de2611fb8565b73ffffffffffffffffffffffffffffffffffffffff16611e0061175b565b73ffffffffffffffffffffffffffffffffffffffff1614611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614406565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebd90614226565b60405180910390fd5b611ecf816123bd565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611f455750611f44826125a4565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661203383610f8d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061208482611f4c565b6120c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ba906142e6565b60405180910390fd5b60006120ce83610f8d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061213d57508373ffffffffffffffffffffffffffffffffffffffff16612125846108cd565b73ffffffffffffffffffffffffffffffffffffffff16145b8061214e575061214d8185611d46565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661217782610f8d565b73ffffffffffffffffffffffffffffffffffffffff16146121cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c490614426565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561223d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223490614266565b60405180910390fd5b612248838383612686565b612253600082611fc0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122a391906146cf565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122fa91906145ee565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061235d8383612696565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61249d8282604051806020016040528060008152506127b4565b5050565b6124ac848484612157565b6124b88484848461280f565b6124f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ee90614206565b60405180910390fd5b50505050565b606061250882611f4c565b612547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253e90614446565b60405180910390fd5b60006125516129a6565b90506000815111612571576040518060200160405280600081525061259c565b8061257b84612a38565b60405160200161258c929190614081565b6040516020818303038152906040525b915050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061266f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061267f575061267e82612be5565b5b9050919050565b612691838383612c4f565b505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d3c2aa9d836040518263ffffffff1660e01b81526004016126f191906140a5565b600060405180830381600087803b15801561270b57600080fd5b505af115801561271f573d6000803e3d6000fd5b50505050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d3c2aa9d826040518263ffffffff1660e01b815260040161277e91906140a5565b600060405180830381600087803b15801561279857600080fd5b505af11580156127ac573d6000803e3d6000fd5b505050505050565b6127be8383612d63565b6127cb600084848461280f565b61280a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280190614206565b60405180910390fd5b505050565b60006128308473ffffffffffffffffffffffffffffffffffffffff16612f3c565b15612999578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612859611fb8565b8786866040518563ffffffff1660e01b815260040161287b94939291906140f7565b602060405180830381600087803b15801561289557600080fd5b505af19250505080156128c657506040513d601f19601f820116820180604052508101906128c391906136b6565b60015b612949573d80600081146128f6576040519150601f19603f3d011682016040523d82523d6000602084013e6128fb565b606091505b50600081511415612941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293890614206565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061299e565b600190505b949350505050565b6060600c80546129b5906147dd565b80601f01602080910402602001604051908101604052809291908181526020018280546129e1906147dd565b8015612a2e5780601f10612a0357610100808354040283529160200191612a2e565b820191906000526020600020905b815481529060010190602001808311612a1157829003601f168201915b5050505050905090565b60606000821415612a80576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612be0565b600082905060005b60008214612ab2578080612a9b9061480f565b915050600a82612aab9190614644565b9150612a88565b60008167ffffffffffffffff811115612af4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612b265781602001600182028036833780820191505090505b5090505b60008514612bd957600182612b3f91906146cf565b9150600a85612b4e9190614858565b6030612b5a91906145ee565b60f81b818381518110612b96577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612bd29190614644565b9450612b2a565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c5a838383612f4f565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c9d57612c9881612f54565b612cdc565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612cdb57612cda8382612f9d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d1f57612d1a8161310a565b612d5e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612d5d57612d5c828261324d565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dca906143c6565b60405180910390fd5b612ddc81611f4c565b15612e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1390614246565b60405180910390fd5b612e2860008383612686565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e7891906145ee565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612edc600083612696565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612faa84611052565b612fb491906146cf565b9050600060076000848152602001908152602001600020549050818114613099576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061311e91906146cf565b9050600060096000848152602001908152602001600020549050600060088381548110613174577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106131bc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613231577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061325883611052565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546132d8906147dd565b90600052602060002090601f0160209004810192826132fa5760008555613341565b82601f1061331357805160ff1916838001178555613341565b82800160010185558215613341579182015b82811115613340578251825591602001919060010190613325565b5b50905061334e9190613352565b5090565b5b8082111561336b576000816000905550600101613353565b5090565b600061338261337d84614512565b6144e1565b90508281526020810184848401111561339a57600080fd5b6133a584828561479b565b509392505050565b60006133c06133bb84614542565b6144e1565b9050828152602081018484840111156133d857600080fd5b6133e384828561479b565b509392505050565b6000813590506133fa81614956565b92915050565b60008135905061340f8161496d565b92915050565b6000815190506134248161496d565b92915050565b60008135905061343981614984565b92915050565b60008151905061344e81614984565b92915050565b600082601f83011261346557600080fd5b813561347584826020860161336f565b91505092915050565b600082601f83011261348f57600080fd5b813561349f8482602086016133ad565b91505092915050565b6000813590506134b78161499b565b92915050565b6000602082840312156134cf57600080fd5b60006134dd848285016133eb565b91505092915050565b600080604083850312156134f957600080fd5b6000613507858286016133eb565b9250506020613518858286016133eb565b9150509250929050565b60008060006060848603121561353757600080fd5b6000613545868287016133eb565b9350506020613556868287016133eb565b9250506040613567868287016134a8565b9150509250925092565b6000806000806080858703121561358757600080fd5b6000613595878288016133eb565b94505060206135a6878288016133eb565b93505060406135b7878288016134a8565b925050606085013567ffffffffffffffff8111156135d457600080fd5b6135e087828801613454565b91505092959194509250565b600080604083850312156135ff57600080fd5b600061360d858286016133eb565b925050602061361e85828601613400565b9150509250929050565b6000806040838503121561363b57600080fd5b6000613649858286016133eb565b925050602061365a858286016134a8565b9150509250929050565b60006020828403121561367657600080fd5b600061368484828501613415565b91505092915050565b60006020828403121561369f57600080fd5b60006136ad8482850161342a565b91505092915050565b6000602082840312156136c857600080fd5b60006136d68482850161343f565b91505092915050565b6000602082840312156136f157600080fd5b600082013567ffffffffffffffff81111561370b57600080fd5b6137178482850161347e565b91505092915050565b60006020828403121561373257600080fd5b6000613740848285016134a8565b91505092915050565b60006137558383614063565b60208301905092915050565b61376a81614703565b82525050565b600061377b82614582565b61378581856145b0565b935061379083614572565b8060005b838110156137c15781516137a88882613749565b97506137b3836145a3565b925050600181019050613794565b5085935050505092915050565b6137d781614715565b82525050565b60006137e88261458d565b6137f281856145c1565b93506138028185602086016147aa565b61380b81614945565b840191505092915050565b61381f81614777565b82525050565b600061383082614598565b61383a81856145d2565b935061384a8185602086016147aa565b61385381614945565b840191505092915050565b600061386982614598565b61387381856145e3565b93506138838185602086016147aa565b80840191505092915050565b600061389c602b836145d2565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006139026032836145d2565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006139686026836145d2565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139ce601c836145d2565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613a0e6024836145d2565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a746019836145d2565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613ab46012836145d2565b91507f53616c65206973206e6f742061637469766500000000000000000000000000006000830152602082019050919050565b6000613af4601c836145d2565b91507f4d696e7420776f756c6420657863656564204d41585f535550504c59000000006000830152602082019050919050565b6000613b34602c836145d2565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613b9a601c836145d2565b91507f4d696e74696e672068617320616c72656164792066696e6973686564000000006000830152602082019050919050565b6000613bda6038836145d2565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613c40602a836145d2565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ca66029836145d2565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d0c6013836145d2565b91507f546f6f206c6974746c65204554482073656e74000000000000000000000000006000830152602082019050919050565b6000613d4c601e836145d2565b91507f4d696e742065786365656473204d41585f4d494e545f5045525f43414c4c00006000830152602082019050919050565b6000613d8c6020836145d2565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613dcc602c836145d2565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613e326020836145d2565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613e726029836145d2565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ed8602f836145d2565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613f3e6021836145d2565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613fa46031836145d2565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b600061400a602c836145d2565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b61406c8161476d565b82525050565b61407b8161476d565b82525050565b600061408d828561385e565b9150614099828461385e565b91508190509392505050565b60006020820190506140ba6000830184613761565b92915050565b60006060820190506140d56000830186613761565b6140e26020830185613761565b6140ef6040830184614072565b949350505050565b600060808201905061410c6000830187613761565b6141196020830186613761565b6141266040830185614072565b818103606083015261413881846137dd565b905095945050505050565b60006040820190506141586000830185613761565b6141656020830184614072565b9392505050565b600060208201905081810360008301526141868184613770565b905092915050565b60006020820190506141a360008301846137ce565b92915050565b60006020820190506141be6000830184613816565b92915050565b600060208201905081810360008301526141de8184613825565b905092915050565b600060208201905081810360008301526141ff8161388f565b9050919050565b6000602082019050818103600083015261421f816138f5565b9050919050565b6000602082019050818103600083015261423f8161395b565b9050919050565b6000602082019050818103600083015261425f816139c1565b9050919050565b6000602082019050818103600083015261427f81613a01565b9050919050565b6000602082019050818103600083015261429f81613a67565b9050919050565b600060208201905081810360008301526142bf81613aa7565b9050919050565b600060208201905081810360008301526142df81613ae7565b9050919050565b600060208201905081810360008301526142ff81613b27565b9050919050565b6000602082019050818103600083015261431f81613b8d565b9050919050565b6000602082019050818103600083015261433f81613bcd565b9050919050565b6000602082019050818103600083015261435f81613c33565b9050919050565b6000602082019050818103600083015261437f81613c99565b9050919050565b6000602082019050818103600083015261439f81613cff565b9050919050565b600060208201905081810360008301526143bf81613d3f565b9050919050565b600060208201905081810360008301526143df81613d7f565b9050919050565b600060208201905081810360008301526143ff81613dbf565b9050919050565b6000602082019050818103600083015261441f81613e25565b9050919050565b6000602082019050818103600083015261443f81613e65565b9050919050565b6000602082019050818103600083015261445f81613ecb565b9050919050565b6000602082019050818103600083015261447f81613f31565b9050919050565b6000602082019050818103600083015261449f81613f97565b9050919050565b600060208201905081810360008301526144bf81613ffd565b9050919050565b60006020820190506144db6000830184614072565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561450857614507614916565b5b8060405250919050565b600067ffffffffffffffff82111561452d5761452c614916565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561455d5761455c614916565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006145f98261476d565b91506146048361476d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561463957614638614889565b5b828201905092915050565b600061464f8261476d565b915061465a8361476d565b92508261466a576146696148b8565b5b828204905092915050565b60006146808261476d565b915061468b8361476d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146c4576146c3614889565b5b828202905092915050565b60006146da8261476d565b91506146e58361476d565b9250828210156146f8576146f7614889565b5b828203905092915050565b600061470e8261474d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061478282614789565b9050919050565b60006147948261474d565b9050919050565b82818337600083830152505050565b60005b838110156147c85780820151818401526020810190506147ad565b838111156147d7576000848401525b50505050565b600060028204905060018216806147f557607f821691505b60208210811415614809576148086148e7565b5b50919050565b600061481a8261476d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561484d5761484c614889565b5b600182019050919050565b60006148638261476d565b915061486e8361476d565b92508261487e5761487d6148b8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61495f81614703565b811461496a57600080fd5b50565b61497681614715565b811461498157600080fd5b50565b61498d81614721565b811461499857600080fd5b50565b6149a48161476d565b81146149af57600080fd5b5056fea26469706673582212206d944f0a9d5992341c845fb5501748e493a8cc58ed6d2854319eeb76ca172ab964736f6c63430008000033
Deployed Bytecode
0x6080604052600436106102045760003560e01c8063714c539811610118578063a0712d68116100a0578063b88d4fde1161006f578063b88d4fde14610746578063c87b56dd1461076f578063daaeec86146107ac578063e985e9c5146107c3578063f2fde38b1461080057610204565b8063a0712d68146106ab578063a22cb465146106c7578063a99b7f42146106f0578063b19094b71461071b57610204565b80638bb0d810116100e75780638bb0d810146105d85780638da5cb5b1461060157806391b7f5ed1461062c57806395d89b411461065557806398d5fdca1461068057610204565b8063714c539814610544578063715018a61461056f578063744afbef14610586578063755edd17146105af57610204565b806332cb6b0c1161019b5780634f6ccce71161016a5780634f6ccce71461043957806355f804b3146104765780636352211e1461049f57806368428a1b146104dc57806370a082311461050757610204565b806332cb6b0c146103a55780633ccfd60b146103d057806342842e0e146103e75780634452299c1461041057610204565b806318160ddd116101d757806318160ddd146102d757806323b872dd14610302578063283bf7201461032b5780632f745c591461036857610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b919061368d565b610829565b60405161023d919061418e565b60405180910390f35b34801561025257600080fd5b5061025b61083b565b60405161026891906141c4565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190613720565b6108cd565b6040516102a591906140a5565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190613628565b610952565b005b3480156102e357600080fd5b506102ec610a6a565b6040516102f991906144c6565b60405180910390f35b34801561030e57600080fd5b5061032960048036038101906103249190613522565b610a77565b005b34801561033757600080fd5b50610352600480360381019061034d91906134bd565b610ad7565b60405161035f919061416c565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a9190613628565b610c53565b60405161039c91906144c6565b60405180910390f35b3480156103b157600080fd5b506103ba610cf8565b6040516103c791906144c6565b60405180910390f35b3480156103dc57600080fd5b506103e5610cfe565b005b3480156103f357600080fd5b5061040e60048036038101906104099190613522565b610dba565b005b34801561041c57600080fd5b5061043760048036038101906104329190613720565b610dda565b005b34801561044557600080fd5b50610460600480360381019061045b9190613720565b610e60565b60405161046d91906144c6565b60405180910390f35b34801561048257600080fd5b5061049d600480360381019061049891906136df565b610ef7565b005b3480156104ab57600080fd5b506104c660048036038101906104c19190613720565b610f8d565b6040516104d391906140a5565b60405180910390f35b3480156104e857600080fd5b506104f161103f565b6040516104fe919061418e565b60405180910390f35b34801561051357600080fd5b5061052e600480360381019061052991906134bd565b611052565b60405161053b91906144c6565b60405180910390f35b34801561055057600080fd5b5061055961110a565b60405161056691906141c4565b60405180910390f35b34801561057b57600080fd5b5061058461119c565b005b34801561059257600080fd5b506105ad60048036038101906105a89190613720565b611224565b005b3480156105bb57600080fd5b506105d660048036038101906105d191906134bd565b6115ae565b005b3480156105e457600080fd5b506105ff60048036038101906105fa91906134bd565b61169b565b005b34801561060d57600080fd5b5061061661175b565b60405161062391906140a5565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e9190613720565b611785565b005b34801561066157600080fd5b5061066a61180b565b60405161067791906141c4565b60405180910390f35b34801561068c57600080fd5b5061069561189d565b6040516106a291906144c6565b60405180910390f35b6106c560048036038101906106c09190613720565b6118a7565b005b3480156106d357600080fd5b506106ee60048036038101906106e991906135ec565b611a7d565b005b3480156106fc57600080fd5b50610705611bfe565b60405161071291906144c6565b60405180910390f35b34801561072757600080fd5b50610730611c04565b60405161073d91906141a9565b60405180910390f35b34801561075257600080fd5b5061076d60048036038101906107689190613571565b611c2a565b005b34801561077b57600080fd5b5061079660048036038101906107919190613720565b611c8c565b6040516107a391906141c4565b60405180910390f35b3480156107b857600080fd5b506107c1611c9e565b005b3480156107cf57600080fd5b506107ea60048036038101906107e591906134e6565b611d46565b6040516107f7919061418e565b60405180910390f35b34801561080c57600080fd5b50610827600480360381019061082291906134bd565b611dda565b005b600061083482611ed2565b9050919050565b60606000805461084a906147dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610876906147dd565b80156108c35780601f10610898576101008083540402835291602001916108c3565b820191906000526020600020905b8154815290600101906020018083116108a657829003601f168201915b5050505050905090565b60006108d882611f4c565b610917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090e906143e6565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061095d82610f8d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c590614466565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109ed611fb8565b73ffffffffffffffffffffffffffffffffffffffff161480610a1c5750610a1b81610a16611fb8565b611d46565b5b610a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5290614326565b60405180910390fd5b610a658383611fc0565b505050565b6000600880549050905090565b610a88610a82611fb8565b82612079565b610ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abe90614486565b60405180910390fd5b610ad2838383612157565b505050565b60606000610ae483611052565b90506000811415610b6757600067ffffffffffffffff811115610b30577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610b5e5781602001602082028036833780820191505090505b50915050610c4e565b60008167ffffffffffffffff811115610ba9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610bd75781602001602082028036833780820191505090505b50905060005b82811015610c4757610bef8582610c53565b828281518110610c28577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610c3f9061480f565b915050610bdd565b8193505050505b919050565b6000610c5e83611052565b8210610c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c96906141e6565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61271081565b610d06611fb8565b73ffffffffffffffffffffffffffffffffffffffff16610d2461175b565b73ffffffffffffffffffffffffffffffffffffffff1614610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7190614406565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610db857600080fd5b565b610dd583838360405180602001604052806000815250611c2a565b505050565b610de2611fb8565b73ffffffffffffffffffffffffffffffffffffffff16610e0061175b565b73ffffffffffffffffffffffffffffffffffffffff1614610e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4d90614406565b60405180910390fd5b80600e8190555050565b6000610e6a610a6a565b8210610eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea2906144a6565b60405180910390fd5b60088281548110610ee5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610eff611fb8565b73ffffffffffffffffffffffffffffffffffffffff16610f1d61175b565b73ffffffffffffffffffffffffffffffffffffffff1614610f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6a90614406565b60405180910390fd5b80600c9080519060200190610f899291906132cc565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d90614366565b60405180910390fd5b80915050919050565b600a60149054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba90614346565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600c8054611119906147dd565b80601f0160208091040260200160405190810160405280929190818152602001828054611145906147dd565b80156111925780601f1061116757610100808354040283529160200191611192565b820191906000526020600020905b81548152906001019060200180831161117557829003601f168201915b5050505050905090565b6111a4611fb8565b73ffffffffffffffffffffffffffffffffffffffff166111c261175b565b73ffffffffffffffffffffffffffffffffffffffff1614611218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120f90614406565b60405180910390fd5b61122260006123bd565b565b600a60149054906101000a900460ff16611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a906142a6565b60405180910390fd5b61127b610a6a565b612710116112be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b590614306565b60405180910390fd5b6000811180156112cf575060148111155b61130e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611305906143a6565b60405180910390fd5b80611317610a6a565b61132191906145ee565b6127101015611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c906142c6565b60405180910390fd5b6000600e54826113759190614675565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016113d6939291906140c0565b602060405180830381600087803b1580156113f057600080fd5b505af1158015611404573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114289190613664565b50600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b330836040518363ffffffff1660e01b8152600401611486929190614143565b602060405180830381600087803b1580156114a057600080fd5b505af11580156114b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d89190613664565b50600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379cc679030836040518363ffffffff1660e01b8152600401611536929190614143565b600060405180830381600087803b15801561155057600080fd5b505af1158015611564573d6000803e3d6000fd5b5050505060005b828110156115a9576000600161157f610a6a565b61158991906145ee565b90506115953382612483565b5080806115a19061480f565b91505061156b565b505050565b6115b6611fb8565b73ffffffffffffffffffffffffffffffffffffffff166115d461175b565b73ffffffffffffffffffffffffffffffffffffffff161461162a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162190614406565b60405180910390fd5b611632610a6a565b61271011611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166c90614306565b60405180910390fd5b60006001611681610a6a565b61168b91906145ee565b90506116978282612483565b5050565b6116a3611fb8565b73ffffffffffffffffffffffffffffffffffffffff166116c161175b565b73ffffffffffffffffffffffffffffffffffffffff1614611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e90614406565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61178d611fb8565b73ffffffffffffffffffffffffffffffffffffffff166117ab61175b565b73ffffffffffffffffffffffffffffffffffffffff1614611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f890614406565b60405180910390fd5b80600b8190555050565b60606001805461181a906147dd565b80601f0160208091040260200160405190810160405280929190818152602001828054611846906147dd565b80156118935780601f1061186857610100808354040283529160200191611893565b820191906000526020600020905b81548152906001019060200180831161187657829003601f168201915b5050505050905090565b6000600b54905090565b600a60149054906101000a900460ff166118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed906142a6565b60405180910390fd5b6118fe610a6a565b61271011611941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193890614306565b60405180910390fd5b600081118015611952575060148111155b611991576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611988906143a6565b60405180910390fd5b8061199a610a6a565b6119a491906145ee565b61271010156119e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119df906142c6565b60405180910390fd5b80600b546119f69190614675565b341015611a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2f90614386565b60405180910390fd5b60005b81811015611a795760006001611a4f610a6a565b611a5991906145ee565b9050611a653382612483565b508080611a719061480f565b915050611a3b565b5050565b611a85611fb8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aea90614286565b60405180910390fd5b8060056000611b00611fb8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611bad611fb8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bf2919061418e565b60405180910390a35050565b600e5481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c3b611c35611fb8565b83612079565b611c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7190614486565b60405180910390fd5b611c86848484846124a1565b50505050565b6060611c97826124fd565b9050919050565b611ca6611fb8565b73ffffffffffffffffffffffffffffffffffffffff16611cc461175b565b73ffffffffffffffffffffffffffffffffffffffff1614611d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1190614406565b60405180910390fd5b600a60149054906101000a900460ff1615600a60146101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611de2611fb8565b73ffffffffffffffffffffffffffffffffffffffff16611e0061175b565b73ffffffffffffffffffffffffffffffffffffffff1614611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90614406565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebd90614226565b60405180910390fd5b611ecf816123bd565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611f455750611f44826125a4565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661203383610f8d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061208482611f4c565b6120c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ba906142e6565b60405180910390fd5b60006120ce83610f8d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061213d57508373ffffffffffffffffffffffffffffffffffffffff16612125846108cd565b73ffffffffffffffffffffffffffffffffffffffff16145b8061214e575061214d8185611d46565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661217782610f8d565b73ffffffffffffffffffffffffffffffffffffffff16146121cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c490614426565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561223d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223490614266565b60405180910390fd5b612248838383612686565b612253600082611fc0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122a391906146cf565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122fa91906145ee565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061235d8383612696565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61249d8282604051806020016040528060008152506127b4565b5050565b6124ac848484612157565b6124b88484848461280f565b6124f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ee90614206565b60405180910390fd5b50505050565b606061250882611f4c565b612547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253e90614446565b60405180910390fd5b60006125516129a6565b90506000815111612571576040518060200160405280600081525061259c565b8061257b84612a38565b60405160200161258c929190614081565b6040516020818303038152906040525b915050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061266f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061267f575061267e82612be5565b5b9050919050565b612691838383612c4f565b505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d3c2aa9d836040518263ffffffff1660e01b81526004016126f191906140a5565b600060405180830381600087803b15801561270b57600080fd5b505af115801561271f573d6000803e3d6000fd5b50505050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d3c2aa9d826040518263ffffffff1660e01b815260040161277e91906140a5565b600060405180830381600087803b15801561279857600080fd5b505af11580156127ac573d6000803e3d6000fd5b505050505050565b6127be8383612d63565b6127cb600084848461280f565b61280a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280190614206565b60405180910390fd5b505050565b60006128308473ffffffffffffffffffffffffffffffffffffffff16612f3c565b15612999578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612859611fb8565b8786866040518563ffffffff1660e01b815260040161287b94939291906140f7565b602060405180830381600087803b15801561289557600080fd5b505af19250505080156128c657506040513d601f19601f820116820180604052508101906128c391906136b6565b60015b612949573d80600081146128f6576040519150601f19603f3d011682016040523d82523d6000602084013e6128fb565b606091505b50600081511415612941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293890614206565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061299e565b600190505b949350505050565b6060600c80546129b5906147dd565b80601f01602080910402602001604051908101604052809291908181526020018280546129e1906147dd565b8015612a2e5780601f10612a0357610100808354040283529160200191612a2e565b820191906000526020600020905b815481529060010190602001808311612a1157829003601f168201915b5050505050905090565b60606000821415612a80576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612be0565b600082905060005b60008214612ab2578080612a9b9061480f565b915050600a82612aab9190614644565b9150612a88565b60008167ffffffffffffffff811115612af4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612b265781602001600182028036833780820191505090505b5090505b60008514612bd957600182612b3f91906146cf565b9150600a85612b4e9190614858565b6030612b5a91906145ee565b60f81b818381518110612b96577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612bd29190614644565b9450612b2a565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c5a838383612f4f565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c9d57612c9881612f54565b612cdc565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612cdb57612cda8382612f9d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d1f57612d1a8161310a565b612d5e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612d5d57612d5c828261324d565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dca906143c6565b60405180910390fd5b612ddc81611f4c565b15612e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1390614246565b60405180910390fd5b612e2860008383612686565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e7891906145ee565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612edc600083612696565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612faa84611052565b612fb491906146cf565b9050600060076000848152602001908152602001600020549050818114613099576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061311e91906146cf565b9050600060096000848152602001908152602001600020549050600060088381548110613174577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106131bc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613231577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061325883611052565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546132d8906147dd565b90600052602060002090601f0160209004810192826132fa5760008555613341565b82601f1061331357805160ff1916838001178555613341565b82800160010185558215613341579182015b82811115613340578251825591602001919060010190613325565b5b50905061334e9190613352565b5090565b5b8082111561336b576000816000905550600101613353565b5090565b600061338261337d84614512565b6144e1565b90508281526020810184848401111561339a57600080fd5b6133a584828561479b565b509392505050565b60006133c06133bb84614542565b6144e1565b9050828152602081018484840111156133d857600080fd5b6133e384828561479b565b509392505050565b6000813590506133fa81614956565b92915050565b60008135905061340f8161496d565b92915050565b6000815190506134248161496d565b92915050565b60008135905061343981614984565b92915050565b60008151905061344e81614984565b92915050565b600082601f83011261346557600080fd5b813561347584826020860161336f565b91505092915050565b600082601f83011261348f57600080fd5b813561349f8482602086016133ad565b91505092915050565b6000813590506134b78161499b565b92915050565b6000602082840312156134cf57600080fd5b60006134dd848285016133eb565b91505092915050565b600080604083850312156134f957600080fd5b6000613507858286016133eb565b9250506020613518858286016133eb565b9150509250929050565b60008060006060848603121561353757600080fd5b6000613545868287016133eb565b9350506020613556868287016133eb565b9250506040613567868287016134a8565b9150509250925092565b6000806000806080858703121561358757600080fd5b6000613595878288016133eb565b94505060206135a6878288016133eb565b93505060406135b7878288016134a8565b925050606085013567ffffffffffffffff8111156135d457600080fd5b6135e087828801613454565b91505092959194509250565b600080604083850312156135ff57600080fd5b600061360d858286016133eb565b925050602061361e85828601613400565b9150509250929050565b6000806040838503121561363b57600080fd5b6000613649858286016133eb565b925050602061365a858286016134a8565b9150509250929050565b60006020828403121561367657600080fd5b600061368484828501613415565b91505092915050565b60006020828403121561369f57600080fd5b60006136ad8482850161342a565b91505092915050565b6000602082840312156136c857600080fd5b60006136d68482850161343f565b91505092915050565b6000602082840312156136f157600080fd5b600082013567ffffffffffffffff81111561370b57600080fd5b6137178482850161347e565b91505092915050565b60006020828403121561373257600080fd5b6000613740848285016134a8565b91505092915050565b60006137558383614063565b60208301905092915050565b61376a81614703565b82525050565b600061377b82614582565b61378581856145b0565b935061379083614572565b8060005b838110156137c15781516137a88882613749565b97506137b3836145a3565b925050600181019050613794565b5085935050505092915050565b6137d781614715565b82525050565b60006137e88261458d565b6137f281856145c1565b93506138028185602086016147aa565b61380b81614945565b840191505092915050565b61381f81614777565b82525050565b600061383082614598565b61383a81856145d2565b935061384a8185602086016147aa565b61385381614945565b840191505092915050565b600061386982614598565b61387381856145e3565b93506138838185602086016147aa565b80840191505092915050565b600061389c602b836145d2565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006139026032836145d2565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006139686026836145d2565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139ce601c836145d2565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613a0e6024836145d2565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a746019836145d2565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613ab46012836145d2565b91507f53616c65206973206e6f742061637469766500000000000000000000000000006000830152602082019050919050565b6000613af4601c836145d2565b91507f4d696e7420776f756c6420657863656564204d41585f535550504c59000000006000830152602082019050919050565b6000613b34602c836145d2565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613b9a601c836145d2565b91507f4d696e74696e672068617320616c72656164792066696e6973686564000000006000830152602082019050919050565b6000613bda6038836145d2565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613c40602a836145d2565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ca66029836145d2565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d0c6013836145d2565b91507f546f6f206c6974746c65204554482073656e74000000000000000000000000006000830152602082019050919050565b6000613d4c601e836145d2565b91507f4d696e742065786365656473204d41585f4d494e545f5045525f43414c4c00006000830152602082019050919050565b6000613d8c6020836145d2565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613dcc602c836145d2565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613e326020836145d2565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613e726029836145d2565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ed8602f836145d2565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613f3e6021836145d2565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613fa46031836145d2565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b600061400a602c836145d2565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b61406c8161476d565b82525050565b61407b8161476d565b82525050565b600061408d828561385e565b9150614099828461385e565b91508190509392505050565b60006020820190506140ba6000830184613761565b92915050565b60006060820190506140d56000830186613761565b6140e26020830185613761565b6140ef6040830184614072565b949350505050565b600060808201905061410c6000830187613761565b6141196020830186613761565b6141266040830185614072565b818103606083015261413881846137dd565b905095945050505050565b60006040820190506141586000830185613761565b6141656020830184614072565b9392505050565b600060208201905081810360008301526141868184613770565b905092915050565b60006020820190506141a360008301846137ce565b92915050565b60006020820190506141be6000830184613816565b92915050565b600060208201905081810360008301526141de8184613825565b905092915050565b600060208201905081810360008301526141ff8161388f565b9050919050565b6000602082019050818103600083015261421f816138f5565b9050919050565b6000602082019050818103600083015261423f8161395b565b9050919050565b6000602082019050818103600083015261425f816139c1565b9050919050565b6000602082019050818103600083015261427f81613a01565b9050919050565b6000602082019050818103600083015261429f81613a67565b9050919050565b600060208201905081810360008301526142bf81613aa7565b9050919050565b600060208201905081810360008301526142df81613ae7565b9050919050565b600060208201905081810360008301526142ff81613b27565b9050919050565b6000602082019050818103600083015261431f81613b8d565b9050919050565b6000602082019050818103600083015261433f81613bcd565b9050919050565b6000602082019050818103600083015261435f81613c33565b9050919050565b6000602082019050818103600083015261437f81613c99565b9050919050565b6000602082019050818103600083015261439f81613cff565b9050919050565b600060208201905081810360008301526143bf81613d3f565b9050919050565b600060208201905081810360008301526143df81613d7f565b9050919050565b600060208201905081810360008301526143ff81613dbf565b9050919050565b6000602082019050818103600083015261441f81613e25565b9050919050565b6000602082019050818103600083015261443f81613e65565b9050919050565b6000602082019050818103600083015261445f81613ecb565b9050919050565b6000602082019050818103600083015261447f81613f31565b9050919050565b6000602082019050818103600083015261449f81613f97565b9050919050565b600060208201905081810360008301526144bf81613ffd565b9050919050565b60006020820190506144db6000830184614072565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561450857614507614916565b5b8060405250919050565b600067ffffffffffffffff82111561452d5761452c614916565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561455d5761455c614916565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006145f98261476d565b91506146048361476d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561463957614638614889565b5b828201905092915050565b600061464f8261476d565b915061465a8361476d565b92508261466a576146696148b8565b5b828204905092915050565b60006146808261476d565b915061468b8361476d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146c4576146c3614889565b5b828202905092915050565b60006146da8261476d565b91506146e58361476d565b9250828210156146f8576146f7614889565b5b828203905092915050565b600061470e8261474d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061478282614789565b9050919050565b60006147948261474d565b9050919050565b82818337600083830152505050565b60005b838110156147c85780820151818401526020810190506147ad565b838111156147d7576000848401525b50505050565b600060028204905060018216806147f557607f821691505b60208210811415614809576148086148e7565b5b50919050565b600061481a8261476d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561484d5761484c614889565b5b600182019050919050565b60006148638261476d565b915061486e8361476d565b92508261487e5761487d6148b8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61495f81614703565b811461496a57600080fd5b50565b61497681614715565b811461498157600080fd5b50565b61498d81614721565b811461499857600080fd5b50565b6149a48161476d565b81146149af57600080fd5b5056fea26469706673582212206d944f0a9d5992341c845fb5501748e493a8cc58ed6d2854319eeb76ca172ab964736f6c63430008000033
Deployed Bytecode Sourcemap
43672:4486:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47965:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13132:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14691:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14214:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26461:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15581:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44582:476;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26129:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43740:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47214:106;;;;;;;;;;;;;:::i;:::-;;15991:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47060:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26651:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44209:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12826:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43835:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12556:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44311:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2449:94;;;;;;;;;;;;;:::i;:::-;;46023:790;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45663:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46819:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1798:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44413:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13301:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44496:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45064:593;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14984:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47016:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43998:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16247:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47803:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46929:81;;;;;;;;;;;;;:::i;:::-;;15350:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2698:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47965:188;48088:4;48111:36;48135:11;48111:23;:36::i;:::-;48104:43;;47965:188;;;:::o;13132:100::-;13186:13;13219:5;13212:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13132:100;:::o;14691:221::-;14767:7;14795:16;14803:7;14795;:16::i;:::-;14787:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;14880:15;:24;14896:7;14880:24;;;;;;;;;;;;;;;;;;;;;14873:31;;14691:221;;;:::o;14214:411::-;14295:13;14311:23;14326:7;14311:14;:23::i;:::-;14295:39;;14359:5;14353:11;;:2;:11;;;;14345:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;14453:5;14437:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;14462:37;14479:5;14486:12;:10;:12::i;:::-;14462:16;:37::i;:::-;14437:62;14415:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;14596:21;14605:2;14609:7;14596:8;:21::i;:::-;14214:411;;;:::o;26461:113::-;26522:7;26549:10;:17;;;;26542:24;;26461:113;:::o;15581:339::-;15776:41;15795:12;:10;:12::i;:::-;15809:7;15776:18;:41::i;:::-;15768:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;15884:28;15894:4;15900:2;15904:7;15884:9;:28::i;:::-;15581:339;;;:::o;44582:476::-;44645:16;44671:18;44692;44702:7;44692:9;:18::i;:::-;44671:39;;44735:1;44721:10;:15;44717:336;;;44800:1;44786:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44779:23;;;;;44717:336;44825:23;44865:10;44851:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44825:51;;44885:13;44907:117;44931:10;44923:5;:18;44907:117;;;44979:35;44999:7;45008:5;44979:19;:35::i;:::-;44963:6;44970:5;44963:13;;;;;;;;;;;;;;;;;;;;;:51;;;;;44943:7;;;;;:::i;:::-;;;;44907:117;;;45039:6;45032:13;;;;;44582:476;;;;:::o;26129:256::-;26226:7;26262:23;26279:5;26262:16;:23::i;:::-;26254:5;:31;26246:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;26351:12;:19;26364:5;26351:19;;;;;;;;;;;;;;;:26;26371:5;26351:26;;;;;;;;;;;;26344:33;;26129:256;;;;:::o;43740:39::-;43774:5;43740:39;:::o;47214:106::-;2029:12;:10;:12::i;:::-;2018:23;;:7;:5;:7::i;:::-;:23;;;2010:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47274:10:::1;47266:24;;:47;47291:21;47266:47;;;;;;;;;;;;;;;;;;;;;;;47258:56;;;::::0;::::1;;47214:106::o:0;15991:185::-;16129:39;16146:4;16152:2;16156:7;16129:39;;;;;;;;;;;;:16;:39::i;:::-;15991:185;;;:::o;47060:148::-;2029:12;:10;:12::i;:::-;2018:23;;:7;:5;:7::i;:::-;:23;;;2010:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47179:23:::1;47154:22;:48;;;;47060:148:::0;:::o;26651:233::-;26726:7;26762:30;:28;:30::i;:::-;26754:5;:38;26746:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;26859:10;26870:5;26859:17;;;;;;;;;;;;;;;;;;;;;;;;26852:24;;26651:233;;;:::o;44209:96::-;2029:12;:10;:12::i;:::-;2018:23;;:7;:5;:7::i;:::-;:23;;;2010:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44292:7:::1;44276:13;:23;;;;;;;;;;;;:::i;:::-;;44209:96:::0;:::o;12826:239::-;12898:7;12918:13;12934:7;:16;12942:7;12934:16;;;;;;;;;;;;;;;;;;;;;12918:32;;12986:1;12969:19;;:5;:19;;;;12961:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13052:5;13045:12;;;12826:239;;;:::o;43835:30::-;;;;;;;;;;;;;:::o;12556:208::-;12628:7;12673:1;12656:19;;:5;:19;;;;12648:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12740:9;:16;12750:5;12740:16;;;;;;;;;;;;;;;;12733:23;;12556:208;;;:::o;44311:92::-;44355:13;44384;44377:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44311:92;:::o;2449:94::-;2029:12;:10;:12::i;:::-;2018:23;;:7;:5;:7::i;:::-;:23;;;2010:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2514:21:::1;2532:1;2514:9;:21::i;:::-;2449:94::o:0;46023:790::-;46086:10;;;;;;;;;;;46078:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;46147:13;:11;:13::i;:::-;43774:5;46134:26;46126:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46218:1;46208:7;:11;:43;;;;;43826:2;46223:7;:28;;46208:43;46200:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;46331:7;46315:13;:11;:13::i;:::-;:23;;;;:::i;:::-;43774:5;46301:37;;46293:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;46380:19;46412:22;;46402:7;:32;;;;:::i;:::-;46380:54;;46447:11;;;;;;;;;;;:24;;;46472:10;46492:4;46499:11;46447:64;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46532:11;;;;;;;;;;;:19;;;46560:4;46567:11;46532:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46586:11;;;;;;;;;;;:20;;;46615:4;46622:11;46586:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46648:6;46643:165;46664:7;46660:1;:11;46643:165;;;46687:14;46720:1;46704:13;:11;:13::i;:::-;:17;;;;:::i;:::-;46687:34;;46768:32;46778:10;46790:9;46768;:32::i;:::-;46643:165;46673:3;;;;;:::i;:::-;;;;46643:165;;;;46023:790;;:::o;45663:237::-;2029:12;:10;:12::i;:::-;2018:23;;:7;:5;:7::i;:::-;:23;;;2010:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45736:13:::1;:11;:13::i;:::-;43774:5;45723:26;45715:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45791:14;45824:1;45808:13;:11;:13::i;:::-;:17;;;;:::i;:::-;45791:34;;45870:24;45880:2;45884:9;45870;:24::i;:::-;2089:1;45663:237:::0;:::o;46819:102::-;2029:12;:10;:12::i;:::-;2018:23;;:7;:5;:7::i;:::-;:23;;;2010:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46909:5:::1;46882:11;;:33;;;;;;;;;;;;;;;;;;46819:102:::0;:::o;1798:87::-;1844:7;1871:6;;;;;;;;;;;1864:13;;1798:87;:::o;44413:77::-;2029:12;:10;:12::i;:::-;2018:23;;:7;:5;:7::i;:::-;:23;;;2010:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44479:5:::1;44470:6;:14;;;;44413:77:::0;:::o;13301:104::-;13357:13;13390:7;13383:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13301:104;:::o;44496:77::-;44538:7;44561:6;;44554:13;;44496:77;:::o;45064:593::-;45125:10;;;;;;;;;;;45117:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;45186:13;:11;:13::i;:::-;43774:5;45173:26;45165:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45257:1;45247:7;:11;:43;;;;;43826:2;45262:7;:28;;45247:43;45239:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;45370:7;45354:13;:11;:13::i;:::-;:23;;;;:::i;:::-;43774:5;45340:37;;45332:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;45447:7;45438:6;;:16;;;;:::i;:::-;45425:9;:29;;45417:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;45492:6;45487:165;45508:7;45504:1;:11;45487:165;;;45531:14;45564:1;45548:13;:11;:13::i;:::-;:17;;;;:::i;:::-;45531:34;;45612:32;45622:10;45634:9;45612;:32::i;:::-;45487:165;45517:3;;;;;:::i;:::-;;;;45487:165;;;;45064:593;:::o;14984:295::-;15099:12;:10;:12::i;:::-;15087:24;;:8;:24;;;;15079:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;15199:8;15154:18;:32;15173:12;:10;:12::i;:::-;15154:32;;;;;;;;;;;;;;;:42;15187:8;15154:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;15252:8;15223:48;;15238:12;:10;:12::i;:::-;15223:48;;;15262:8;15223:48;;;;;;:::i;:::-;;;;;;;;14984:295;;:::o;47016:37::-;;;;:::o;43998:31::-;;;;;;;;;;;;;:::o;16247:328::-;16422:41;16441:12;:10;:12::i;:::-;16455:7;16422:18;:41::i;:::-;16414:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;16528:39;16542:4;16548:2;16552:7;16561:5;16528:13;:39::i;:::-;16247:328;;;;:::o;47803:154::-;47896:13;47928:23;47943:7;47928:14;:23::i;:::-;47921:30;;47803:154;;;:::o;46929:81::-;2029:12;:10;:12::i;:::-;2018:23;;:7;:5;:7::i;:::-;:23;;;2010:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46994:10:::1;;;;;;;;;;;46993:11;46980:10;;:24;;;;;;;;;;;;;;;;;;46929:81::o:0;15350:164::-;15447:4;15471:18;:25;15490:5;15471:25;;;;;;;;;;;;;;;:35;15497:8;15471:35;;;;;;;;;;;;;;;;;;;;;;;;;15464:42;;15350:164;;;;:::o;2698:192::-;2029:12;:10;:12::i;:::-;2018:23;;:7;:5;:7::i;:::-;:23;;;2010:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2807:1:::1;2787:22;;:8;:22;;;;2779:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2863:19;2873:8;2863:9;:19::i;:::-;2698:192:::0;:::o;25821:224::-;25923:4;25962:35;25947:50;;;:11;:50;;;;:90;;;;26001:36;26025:11;26001:23;:36::i;:::-;25947:90;25940:97;;25821:224;;;:::o;18085:127::-;18150:4;18202:1;18174:30;;:7;:16;18182:7;18174:16;;;;;;;;;;;;;;;;;;;;;:30;;;;18167:37;;18085:127;;;:::o;674:98::-;727:7;754:10;747:17;;674:98;:::o;22574:174::-;22676:2;22649:15;:24;22665:7;22649:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;22732:7;22728:2;22694:46;;22703:23;22718:7;22703:14;:23::i;:::-;22694:46;;;;;;;;;;;;22574:174;;:::o;18379:348::-;18472:4;18497:16;18505:7;18497;:16::i;:::-;18489:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18573:13;18589:23;18604:7;18589:14;:23::i;:::-;18573:39;;18642:5;18631:16;;:7;:16;;;:51;;;;18675:7;18651:31;;:20;18663:7;18651:11;:20::i;:::-;:31;;;18631:51;:87;;;;18686:32;18703:5;18710:7;18686:16;:32::i;:::-;18631:87;18623:96;;;18379:348;;;;:::o;21838:618::-;21997:4;21970:31;;:23;21985:7;21970:14;:23::i;:::-;:31;;;21962:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;22080:1;22066:16;;:2;:16;;;;22058:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22136:39;22157:4;22163:2;22167:7;22136:20;:39::i;:::-;22240:29;22257:1;22261:7;22240:8;:29::i;:::-;22301:1;22282:9;:15;22292:4;22282:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;22330:1;22313:9;:13;22323:2;22313:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;22361:2;22342:7;:16;22350:7;22342:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;22376:29;22396:4;22402:2;22376:19;:29::i;:::-;22440:7;22436:2;22421:27;;22430:4;22421:27;;;;;;;;;;;;21838:618;;;:::o;2898:173::-;2954:16;2973:6;;;;;;;;;;;2954:25;;2999:8;2990:6;;:17;;;;;;;;;;;;;;;;;;3054:8;3023:40;;3044:8;3023:40;;;;;;;;;;;;2898:173;;:::o;19069:110::-;19145:26;19155:2;19159:7;19145:26;;;;;;;;;;;;:9;:26::i;:::-;19069:110;;:::o;17457:315::-;17614:28;17624:4;17630:2;17634:7;17614:9;:28::i;:::-;17661:48;17684:4;17690:2;17694:7;17703:5;17661:22;:48::i;:::-;17653:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17457:315;;;;:::o;13476:334::-;13549:13;13583:16;13591:7;13583;:16::i;:::-;13575:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;13664:21;13688:10;:8;:10::i;:::-;13664:34;;13740:1;13722:7;13716:21;:25;:86;;;;;;;;;;;;;;;;;13768:7;13777:18;:7;:16;:18::i;:::-;13751:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;13716:86;13709:93;;;13476:334;;;:::o;12187:305::-;12289:4;12341:25;12326:40;;;:11;:40;;;;:105;;;;12398:33;12383:48;;;:11;:48;;;;12326:105;:158;;;;12448:36;12472:11;12448:23;:36::i;:::-;12326:158;12306:178;;12187:305;;;:::o;47326:188::-;47463:45;47490:4;47496:2;47500:7;47463:26;:45::i;:::-;47326:188;;;:::o;47520:180::-;47623:11;;;;;;;;;;;:26;;;47650:4;47623:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47664:11;;;;;;;;;;;:26;;;47691:2;47664:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47520:180;;:::o;19406:321::-;19536:18;19542:2;19546:7;19536:5;:18::i;:::-;19587:54;19618:1;19622:2;19626:7;19635:5;19587:22;:54::i;:::-;19565:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;19406:321;;;:::o;23313:803::-;23468:4;23489:15;:2;:13;;;:15::i;:::-;23485:624;;;23541:2;23525:36;;;23562:12;:10;:12::i;:::-;23576:4;23582:7;23591:5;23525:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;23521:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23788:1;23771:6;:13;:18;23767:272;;;23814:60;;;;;;;;;;:::i;:::-;;;;;;;;23767:272;23989:6;23983:13;23974:6;23970:2;23966:15;23959:38;23521:533;23658:45;;;23648:55;;;:6;:55;;;;23641:62;;;;;23485:624;24093:4;24086:11;;23313:803;;;;;;;:::o;44095:108::-;44155:13;44184;44177:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44095:108;:::o;32247:723::-;32303:13;32533:1;32524:5;:10;32520:53;;;32551:10;;;;;;;;;;;;;;;;;;;;;32520:53;32583:12;32598:5;32583:20;;32614:14;32639:78;32654:1;32646:4;:9;32639:78;;32672:8;;;;;:::i;:::-;;;;32703:2;32695:10;;;;;:::i;:::-;;;32639:78;;;32727:19;32759:6;32749:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32727:39;;32777:154;32793:1;32784:5;:10;32777:154;;32821:1;32811:11;;;;;:::i;:::-;;;32888:2;32880:5;:10;;;;:::i;:::-;32867:2;:24;;;;:::i;:::-;32854:39;;32837:6;32844;32837:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;32917:2;32908:11;;;;;:::i;:::-;;;32777:154;;;32955:6;32941:21;;;;;32247:723;;;;:::o;10109:157::-;10194:4;10233:25;10218:40;;;:11;:40;;;;10211:47;;10109:157;;;:::o;27497:589::-;27641:45;27668:4;27674:2;27678:7;27641:26;:45::i;:::-;27719:1;27703:18;;:4;:18;;;27699:187;;;27738:40;27770:7;27738:31;:40::i;:::-;27699:187;;;27808:2;27800:10;;:4;:10;;;27796:90;;27827:47;27860:4;27866:7;27827:32;:47::i;:::-;27796:90;27699:187;27914:1;27900:16;;:2;:16;;;27896:183;;;27933:45;27970:7;27933:36;:45::i;:::-;27896:183;;;28006:4;28000:10;;:2;:10;;;27996:83;;28027:40;28055:2;28059:7;28027:27;:40::i;:::-;27996:83;27896:183;27497:589;;;:::o;20063:428::-;20157:1;20143:16;;:2;:16;;;;20135:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;20216:16;20224:7;20216;:16::i;:::-;20215:17;20207:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;20278:45;20307:1;20311:2;20315:7;20278:20;:45::i;:::-;20353:1;20336:9;:13;20346:2;20336:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;20384:2;20365:7;:16;20373:7;20365:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;20399:35;20427:1;20431:2;20399:19;:35::i;:::-;20475:7;20471:2;20450:33;;20467:1;20450:33;;;;;;;;;;;;20063:428;;:::o;34739:387::-;34799:4;35007:12;35074:7;35062:20;35054:28;;35117:1;35110:4;:8;35103:15;;;34739:387;;;:::o;24688:126::-;;;;:::o;28809:164::-;28913:10;:17;;;;28886:15;:24;28902:7;28886:24;;;;;;;;;;;:44;;;;28941:10;28957:7;28941:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28809:164;:::o;29600:988::-;29866:22;29916:1;29891:22;29908:4;29891:16;:22::i;:::-;:26;;;;:::i;:::-;29866:51;;29928:18;29949:17;:26;29967:7;29949:26;;;;;;;;;;;;29928:47;;30096:14;30082:10;:28;30078:328;;30127:19;30149:12;:18;30162:4;30149:18;;;;;;;;;;;;;;;:34;30168:14;30149:34;;;;;;;;;;;;30127:56;;30233:11;30200:12;:18;30213:4;30200:18;;;;;;;;;;;;;;;:30;30219:10;30200:30;;;;;;;;;;;:44;;;;30350:10;30317:17;:30;30335:11;30317:30;;;;;;;;;;;:43;;;;30078:328;;30502:17;:26;30520:7;30502:26;;;;;;;;;;;30495:33;;;30546:12;:18;30559:4;30546:18;;;;;;;;;;;;;;;:34;30565:14;30546:34;;;;;;;;;;;30539:41;;;29600:988;;;;:::o;30883:1079::-;31136:22;31181:1;31161:10;:17;;;;:21;;;;:::i;:::-;31136:46;;31193:18;31214:15;:24;31230:7;31214:24;;;;;;;;;;;;31193:45;;31565:19;31587:10;31598:14;31587:26;;;;;;;;;;;;;;;;;;;;;;;;31565:48;;31651:11;31626:10;31637;31626:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;31762:10;31731:15;:28;31747:11;31731:28;;;;;;;;;;;:41;;;;31903:15;:24;31919:7;31903:24;;;;;;;;;;;31896:31;;;31938:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30883:1079;;;;:::o;28387:221::-;28472:14;28489:20;28506:2;28489:16;:20::i;:::-;28472:37;;28547:7;28520:12;:16;28533:2;28520:16;;;;;;;;;;;;;;;:24;28537:6;28520:24;;;;;;;;;;;:34;;;;28594:6;28565:17;:26;28583:7;28565:26;;;;;;;;;;;:35;;;;28387:221;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1074:6;1068:13;1059:22;;1090:30;1114:5;1090:30;:::i;:::-;1049:77;;;;:::o;1132:137::-;;1215:6;1202:20;1193:29;;1231:32;1257:5;1231:32;:::i;:::-;1183:86;;;;:::o;1275:141::-;;1362:6;1356:13;1347:22;;1378:32;1404:5;1378:32;:::i;:::-;1337:79;;;;:::o;1435:271::-;;1539:3;1532:4;1524:6;1520:17;1516:27;1506:2;;1557:1;1554;1547:12;1506:2;1597:6;1584:20;1622:78;1696:3;1688:6;1681:4;1673:6;1669:17;1622:78;:::i;:::-;1613:87;;1496:210;;;;;:::o;1726:273::-;;1831:3;1824:4;1816:6;1812:17;1808:27;1798:2;;1849:1;1846;1839:12;1798:2;1889:6;1876:20;1914:79;1989:3;1981:6;1974:4;1966:6;1962:17;1914:79;:::i;:::-;1905:88;;1788:211;;;;;:::o;2005:139::-;;2089:6;2076:20;2067:29;;2105:33;2132:5;2105:33;:::i;:::-;2057:87;;;;:::o;2150:262::-;;2258:2;2246:9;2237:7;2233:23;2229:32;2226:2;;;2274:1;2271;2264:12;2226:2;2317:1;2342:53;2387:7;2378:6;2367:9;2363:22;2342:53;:::i;:::-;2332:63;;2288:117;2216:196;;;;:::o;2418:407::-;;;2543:2;2531:9;2522:7;2518:23;2514:32;2511:2;;;2559:1;2556;2549:12;2511:2;2602:1;2627:53;2672:7;2663:6;2652:9;2648:22;2627:53;:::i;:::-;2617:63;;2573:117;2729:2;2755:53;2800:7;2791:6;2780:9;2776:22;2755:53;:::i;:::-;2745:63;;2700:118;2501:324;;;;;:::o;2831:552::-;;;;2973:2;2961:9;2952:7;2948:23;2944:32;2941:2;;;2989:1;2986;2979:12;2941:2;3032:1;3057:53;3102:7;3093:6;3082:9;3078:22;3057:53;:::i;:::-;3047:63;;3003:117;3159:2;3185:53;3230:7;3221:6;3210:9;3206:22;3185:53;:::i;:::-;3175:63;;3130:118;3287:2;3313:53;3358:7;3349:6;3338:9;3334:22;3313:53;:::i;:::-;3303:63;;3258:118;2931:452;;;;;:::o;3389:809::-;;;;;3557:3;3545:9;3536:7;3532:23;3528:33;3525:2;;;3574:1;3571;3564:12;3525:2;3617:1;3642:53;3687:7;3678:6;3667:9;3663:22;3642:53;:::i;:::-;3632:63;;3588:117;3744:2;3770:53;3815:7;3806:6;3795:9;3791:22;3770:53;:::i;:::-;3760:63;;3715:118;3872:2;3898:53;3943:7;3934:6;3923:9;3919:22;3898:53;:::i;:::-;3888:63;;3843:118;4028:2;4017:9;4013:18;4000:32;4059:18;4051:6;4048:30;4045:2;;;4091:1;4088;4081:12;4045:2;4119:62;4173:7;4164:6;4153:9;4149:22;4119:62;:::i;:::-;4109:72;;3971:220;3515:683;;;;;;;:::o;4204:401::-;;;4326:2;4314:9;4305:7;4301:23;4297:32;4294:2;;;4342:1;4339;4332:12;4294:2;4385:1;4410:53;4455:7;4446:6;4435:9;4431:22;4410:53;:::i;:::-;4400:63;;4356:117;4512:2;4538:50;4580:7;4571:6;4560:9;4556:22;4538:50;:::i;:::-;4528:60;;4483:115;4284:321;;;;;:::o;4611:407::-;;;4736:2;4724:9;4715:7;4711:23;4707:32;4704:2;;;4752:1;4749;4742:12;4704:2;4795:1;4820:53;4865:7;4856:6;4845:9;4841:22;4820:53;:::i;:::-;4810:63;;4766:117;4922:2;4948:53;4993:7;4984:6;4973:9;4969:22;4948:53;:::i;:::-;4938:63;;4893:118;4694:324;;;;;:::o;5024:278::-;;5140:2;5128:9;5119:7;5115:23;5111:32;5108:2;;;5156:1;5153;5146:12;5108:2;5199:1;5224:61;5277:7;5268:6;5257:9;5253:22;5224:61;:::i;:::-;5214:71;;5170:125;5098:204;;;;:::o;5308:260::-;;5415:2;5403:9;5394:7;5390:23;5386:32;5383:2;;;5431:1;5428;5421:12;5383:2;5474:1;5499:52;5543:7;5534:6;5523:9;5519:22;5499:52;:::i;:::-;5489:62;;5445:116;5373:195;;;;:::o;5574:282::-;;5692:2;5680:9;5671:7;5667:23;5663:32;5660:2;;;5708:1;5705;5698:12;5660:2;5751:1;5776:63;5831:7;5822:6;5811:9;5807:22;5776:63;:::i;:::-;5766:73;;5722:127;5650:206;;;;:::o;5862:375::-;;5980:2;5968:9;5959:7;5955:23;5951:32;5948:2;;;5996:1;5993;5986:12;5948:2;6067:1;6056:9;6052:17;6039:31;6097:18;6089:6;6086:30;6083:2;;;6129:1;6126;6119:12;6083:2;6157:63;6212:7;6203:6;6192:9;6188:22;6157:63;:::i;:::-;6147:73;;6010:220;5938:299;;;;:::o;6243:262::-;;6351:2;6339:9;6330:7;6326:23;6322:32;6319:2;;;6367:1;6364;6357:12;6319:2;6410:1;6435:53;6480:7;6471:6;6460:9;6456:22;6435:53;:::i;:::-;6425:63;;6381:117;6309:196;;;;:::o;6511:179::-;;6601:46;6643:3;6635:6;6601:46;:::i;:::-;6679:4;6674:3;6670:14;6656:28;;6591:99;;;;:::o;6696:118::-;6783:24;6801:5;6783:24;:::i;:::-;6778:3;6771:37;6761:53;;:::o;6850:732::-;;6998:54;7046:5;6998:54;:::i;:::-;7068:86;7147:6;7142:3;7068:86;:::i;:::-;7061:93;;7178:56;7228:5;7178:56;:::i;:::-;7257:7;7288:1;7273:284;7298:6;7295:1;7292:13;7273:284;;;7374:6;7368:13;7401:63;7460:3;7445:13;7401:63;:::i;:::-;7394:70;;7487:60;7540:6;7487:60;:::i;:::-;7477:70;;7333:224;7320:1;7317;7313:9;7308:14;;7273:284;;;7277:14;7573:3;7566:10;;6974:608;;;;;;;:::o;7588:109::-;7669:21;7684:5;7669:21;:::i;:::-;7664:3;7657:34;7647:50;;:::o;7703:360::-;;7817:38;7849:5;7817:38;:::i;:::-;7871:70;7934:6;7929:3;7871:70;:::i;:::-;7864:77;;7950:52;7995:6;7990:3;7983:4;7976:5;7972:16;7950:52;:::i;:::-;8027:29;8049:6;8027:29;:::i;:::-;8022:3;8018:39;8011:46;;7793:270;;;;;:::o;8069:173::-;8177:58;8229:5;8177:58;:::i;:::-;8172:3;8165:71;8155:87;;:::o;8248:364::-;;8364:39;8397:5;8364:39;:::i;:::-;8419:71;8483:6;8478:3;8419:71;:::i;:::-;8412:78;;8499:52;8544:6;8539:3;8532:4;8525:5;8521:16;8499:52;:::i;:::-;8576:29;8598:6;8576:29;:::i;:::-;8571:3;8567:39;8560:46;;8340:272;;;;;:::o;8618:377::-;;8752:39;8785:5;8752:39;:::i;:::-;8807:89;8889:6;8884:3;8807:89;:::i;:::-;8800:96;;8905:52;8950:6;8945:3;8938:4;8931:5;8927:16;8905:52;:::i;:::-;8982:6;8977:3;8973:16;8966:23;;8728:267;;;;;:::o;9001:375::-;;9164:67;9228:2;9223:3;9164:67;:::i;:::-;9157:74;;9261:34;9257:1;9252:3;9248:11;9241:55;9327:13;9322:2;9317:3;9313:12;9306:35;9367:2;9362:3;9358:12;9351:19;;9147:229;;;:::o;9382:382::-;;9545:67;9609:2;9604:3;9545:67;:::i;:::-;9538:74;;9642:34;9638:1;9633:3;9629:11;9622:55;9708:20;9703:2;9698:3;9694:12;9687:42;9755:2;9750:3;9746:12;9739:19;;9528:236;;;:::o;9770:370::-;;9933:67;9997:2;9992:3;9933:67;:::i;:::-;9926:74;;10030:34;10026:1;10021:3;10017:11;10010:55;10096:8;10091:2;10086:3;10082:12;10075:30;10131:2;10126:3;10122:12;10115:19;;9916:224;;;:::o;10146:326::-;;10309:67;10373:2;10368:3;10309:67;:::i;:::-;10302:74;;10406:30;10402:1;10397:3;10393:11;10386:51;10463:2;10458:3;10454:12;10447:19;;10292:180;;;:::o;10478:368::-;;10641:67;10705:2;10700:3;10641:67;:::i;:::-;10634:74;;10738:34;10734:1;10729:3;10725:11;10718:55;10804:6;10799:2;10794:3;10790:12;10783:28;10837:2;10832:3;10828:12;10821:19;;10624:222;;;:::o;10852:323::-;;11015:67;11079:2;11074:3;11015:67;:::i;:::-;11008:74;;11112:27;11108:1;11103:3;11099:11;11092:48;11166:2;11161:3;11157:12;11150:19;;10998:177;;;:::o;11181:316::-;;11344:67;11408:2;11403:3;11344:67;:::i;:::-;11337:74;;11441:20;11437:1;11432:3;11428:11;11421:41;11488:2;11483:3;11479:12;11472:19;;11327:170;;;:::o;11503:326::-;;11666:67;11730:2;11725:3;11666:67;:::i;:::-;11659:74;;11763:30;11759:1;11754:3;11750:11;11743:51;11820:2;11815:3;11811:12;11804:19;;11649:180;;;:::o;11835:376::-;;11998:67;12062:2;12057:3;11998:67;:::i;:::-;11991:74;;12095:34;12091:1;12086:3;12082:11;12075:55;12161:14;12156:2;12151:3;12147:12;12140:36;12202:2;12197:3;12193:12;12186:19;;11981:230;;;:::o;12217:326::-;;12380:67;12444:2;12439:3;12380:67;:::i;:::-;12373:74;;12477:30;12473:1;12468:3;12464:11;12457:51;12534:2;12529:3;12525:12;12518:19;;12363:180;;;:::o;12549:388::-;;12712:67;12776:2;12771:3;12712:67;:::i;:::-;12705:74;;12809:34;12805:1;12800:3;12796:11;12789:55;12875:26;12870:2;12865:3;12861:12;12854:48;12928:2;12923:3;12919:12;12912:19;;12695:242;;;:::o;12943:374::-;;13106:67;13170:2;13165:3;13106:67;:::i;:::-;13099:74;;13203:34;13199:1;13194:3;13190:11;13183:55;13269:12;13264:2;13259:3;13255:12;13248:34;13308:2;13303:3;13299:12;13292:19;;13089:228;;;:::o;13323:373::-;;13486:67;13550:2;13545:3;13486:67;:::i;:::-;13479:74;;13583:34;13579:1;13574:3;13570:11;13563:55;13649:11;13644:2;13639:3;13635:12;13628:33;13687:2;13682:3;13678:12;13671:19;;13469:227;;;:::o;13702:317::-;;13865:67;13929:2;13924:3;13865:67;:::i;:::-;13858:74;;13962:21;13958:1;13953:3;13949:11;13942:42;14010:2;14005:3;14001:12;13994:19;;13848:171;;;:::o;14025:328::-;;14188:67;14252:2;14247:3;14188:67;:::i;:::-;14181:74;;14285:32;14281:1;14276:3;14272:11;14265:53;14344:2;14339:3;14335:12;14328:19;;14171:182;;;:::o;14359:330::-;;14522:67;14586:2;14581:3;14522:67;:::i;:::-;14515:74;;14619:34;14615:1;14610:3;14606:11;14599:55;14680:2;14675:3;14671:12;14664:19;;14505:184;;;:::o;14695:376::-;;14858:67;14922:2;14917:3;14858:67;:::i;:::-;14851:74;;14955:34;14951:1;14946:3;14942:11;14935:55;15021:14;15016:2;15011:3;15007:12;15000:36;15062:2;15057:3;15053:12;15046:19;;14841:230;;;:::o;15077:330::-;;15240:67;15304:2;15299:3;15240:67;:::i;:::-;15233:74;;15337:34;15333:1;15328:3;15324:11;15317:55;15398:2;15393:3;15389:12;15382:19;;15223:184;;;:::o;15413:373::-;;15576:67;15640:2;15635:3;15576:67;:::i;:::-;15569:74;;15673:34;15669:1;15664:3;15660:11;15653:55;15739:11;15734:2;15729:3;15725:12;15718:33;15777:2;15772:3;15768:12;15761:19;;15559:227;;;:::o;15792:379::-;;15955:67;16019:2;16014:3;15955:67;:::i;:::-;15948:74;;16052:34;16048:1;16043:3;16039:11;16032:55;16118:17;16113:2;16108:3;16104:12;16097:39;16162:2;16157:3;16153:12;16146:19;;15938:233;;;:::o;16177:365::-;;16340:67;16404:2;16399:3;16340:67;:::i;:::-;16333:74;;16437:34;16433:1;16428:3;16424:11;16417:55;16503:3;16498:2;16493:3;16489:12;16482:25;16533:2;16528:3;16524:12;16517:19;;16323:219;;;:::o;16548:381::-;;16711:67;16775:2;16770:3;16711:67;:::i;:::-;16704:74;;16808:34;16804:1;16799:3;16795:11;16788:55;16874:19;16869:2;16864:3;16860:12;16853:41;16920:2;16915:3;16911:12;16904:19;;16694:235;;;:::o;16935:376::-;;17098:67;17162:2;17157:3;17098:67;:::i;:::-;17091:74;;17195:34;17191:1;17186:3;17182:11;17175:55;17261:14;17256:2;17251:3;17247:12;17240:36;17302:2;17297:3;17293:12;17286:19;;17081:230;;;:::o;17317:108::-;17394:24;17412:5;17394:24;:::i;:::-;17389:3;17382:37;17372:53;;:::o;17431:118::-;17518:24;17536:5;17518:24;:::i;:::-;17513:3;17506:37;17496:53;;:::o;17555:435::-;;17757:95;17848:3;17839:6;17757:95;:::i;:::-;17750:102;;17869:95;17960:3;17951:6;17869:95;:::i;:::-;17862:102;;17981:3;17974:10;;17739:251;;;;;:::o;17996:222::-;;18127:2;18116:9;18112:18;18104:26;;18140:71;18208:1;18197:9;18193:17;18184:6;18140:71;:::i;:::-;18094:124;;;;:::o;18224:442::-;;18411:2;18400:9;18396:18;18388:26;;18424:71;18492:1;18481:9;18477:17;18468:6;18424:71;:::i;:::-;18505:72;18573:2;18562:9;18558:18;18549:6;18505:72;:::i;:::-;18587;18655:2;18644:9;18640:18;18631:6;18587:72;:::i;:::-;18378:288;;;;;;:::o;18672:640::-;;18905:3;18894:9;18890:19;18882:27;;18919:71;18987:1;18976:9;18972:17;18963:6;18919:71;:::i;:::-;19000:72;19068:2;19057:9;19053:18;19044:6;19000:72;:::i;:::-;19082;19150:2;19139:9;19135:18;19126:6;19082:72;:::i;:::-;19201:9;19195:4;19191:20;19186:2;19175:9;19171:18;19164:48;19229:76;19300:4;19291:6;19229:76;:::i;:::-;19221:84;;18872:440;;;;;;;:::o;19318:332::-;;19477:2;19466:9;19462:18;19454:26;;19490:71;19558:1;19547:9;19543:17;19534:6;19490:71;:::i;:::-;19571:72;19639:2;19628:9;19624:18;19615:6;19571:72;:::i;:::-;19444:206;;;;;:::o;19656:373::-;;19837:2;19826:9;19822:18;19814:26;;19886:9;19880:4;19876:20;19872:1;19861:9;19857:17;19850:47;19914:108;20017:4;20008:6;19914:108;:::i;:::-;19906:116;;19804:225;;;;:::o;20035:210::-;;20160:2;20149:9;20145:18;20137:26;;20173:65;20235:1;20224:9;20220:17;20211:6;20173:65;:::i;:::-;20127:118;;;;:::o;20251:264::-;;20403:2;20392:9;20388:18;20380:26;;20416:92;20505:1;20494:9;20490:17;20481:6;20416:92;:::i;:::-;20370:145;;;;:::o;20521:313::-;;20672:2;20661:9;20657:18;20649:26;;20721:9;20715:4;20711:20;20707:1;20696:9;20692:17;20685:47;20749:78;20822:4;20813:6;20749:78;:::i;:::-;20741:86;;20639:195;;;;:::o;20840:419::-;;21044:2;21033:9;21029:18;21021:26;;21093:9;21087:4;21083:20;21079:1;21068:9;21064:17;21057:47;21121:131;21247:4;21121:131;:::i;:::-;21113:139;;21011:248;;;:::o;21265:419::-;;21469:2;21458:9;21454:18;21446:26;;21518:9;21512:4;21508:20;21504:1;21493:9;21489:17;21482:47;21546:131;21672:4;21546:131;:::i;:::-;21538:139;;21436:248;;;:::o;21690:419::-;;21894:2;21883:9;21879:18;21871:26;;21943:9;21937:4;21933:20;21929:1;21918:9;21914:17;21907:47;21971:131;22097:4;21971:131;:::i;:::-;21963:139;;21861:248;;;:::o;22115:419::-;;22319:2;22308:9;22304:18;22296:26;;22368:9;22362:4;22358:20;22354:1;22343:9;22339:17;22332:47;22396:131;22522:4;22396:131;:::i;:::-;22388:139;;22286:248;;;:::o;22540:419::-;;22744:2;22733:9;22729:18;22721:26;;22793:9;22787:4;22783:20;22779:1;22768:9;22764:17;22757:47;22821:131;22947:4;22821:131;:::i;:::-;22813:139;;22711:248;;;:::o;22965:419::-;;23169:2;23158:9;23154:18;23146:26;;23218:9;23212:4;23208:20;23204:1;23193:9;23189:17;23182:47;23246:131;23372:4;23246:131;:::i;:::-;23238:139;;23136:248;;;:::o;23390:419::-;;23594:2;23583:9;23579:18;23571:26;;23643:9;23637:4;23633:20;23629:1;23618:9;23614:17;23607:47;23671:131;23797:4;23671:131;:::i;:::-;23663:139;;23561:248;;;:::o;23815:419::-;;24019:2;24008:9;24004:18;23996:26;;24068:9;24062:4;24058:20;24054:1;24043:9;24039:17;24032:47;24096:131;24222:4;24096:131;:::i;:::-;24088:139;;23986:248;;;:::o;24240:419::-;;24444:2;24433:9;24429:18;24421:26;;24493:9;24487:4;24483:20;24479:1;24468:9;24464:17;24457:47;24521:131;24647:4;24521:131;:::i;:::-;24513:139;;24411:248;;;:::o;24665:419::-;;24869:2;24858:9;24854:18;24846:26;;24918:9;24912:4;24908:20;24904:1;24893:9;24889:17;24882:47;24946:131;25072:4;24946:131;:::i;:::-;24938:139;;24836:248;;;:::o;25090:419::-;;25294:2;25283:9;25279:18;25271:26;;25343:9;25337:4;25333:20;25329:1;25318:9;25314:17;25307:47;25371:131;25497:4;25371:131;:::i;:::-;25363:139;;25261:248;;;:::o;25515:419::-;;25719:2;25708:9;25704:18;25696:26;;25768:9;25762:4;25758:20;25754:1;25743:9;25739:17;25732:47;25796:131;25922:4;25796:131;:::i;:::-;25788:139;;25686:248;;;:::o;25940:419::-;;26144:2;26133:9;26129:18;26121:26;;26193:9;26187:4;26183:20;26179:1;26168:9;26164:17;26157:47;26221:131;26347:4;26221:131;:::i;:::-;26213:139;;26111:248;;;:::o;26365:419::-;;26569:2;26558:9;26554:18;26546:26;;26618:9;26612:4;26608:20;26604:1;26593:9;26589:17;26582:47;26646:131;26772:4;26646:131;:::i;:::-;26638:139;;26536:248;;;:::o;26790:419::-;;26994:2;26983:9;26979:18;26971:26;;27043:9;27037:4;27033:20;27029:1;27018:9;27014:17;27007:47;27071:131;27197:4;27071:131;:::i;:::-;27063:139;;26961:248;;;:::o;27215:419::-;;27419:2;27408:9;27404:18;27396:26;;27468:9;27462:4;27458:20;27454:1;27443:9;27439:17;27432:47;27496:131;27622:4;27496:131;:::i;:::-;27488:139;;27386:248;;;:::o;27640:419::-;;27844:2;27833:9;27829:18;27821:26;;27893:9;27887:4;27883:20;27879:1;27868:9;27864:17;27857:47;27921:131;28047:4;27921:131;:::i;:::-;27913:139;;27811:248;;;:::o;28065:419::-;;28269:2;28258:9;28254:18;28246:26;;28318:9;28312:4;28308:20;28304:1;28293:9;28289:17;28282:47;28346:131;28472:4;28346:131;:::i;:::-;28338:139;;28236:248;;;:::o;28490:419::-;;28694:2;28683:9;28679:18;28671:26;;28743:9;28737:4;28733:20;28729:1;28718:9;28714:17;28707:47;28771:131;28897:4;28771:131;:::i;:::-;28763:139;;28661:248;;;:::o;28915:419::-;;29119:2;29108:9;29104:18;29096:26;;29168:9;29162:4;29158:20;29154:1;29143:9;29139:17;29132:47;29196:131;29322:4;29196:131;:::i;:::-;29188:139;;29086:248;;;:::o;29340:419::-;;29544:2;29533:9;29529:18;29521:26;;29593:9;29587:4;29583:20;29579:1;29568:9;29564:17;29557:47;29621:131;29747:4;29621:131;:::i;:::-;29613:139;;29511:248;;;:::o;29765:419::-;;29969:2;29958:9;29954:18;29946:26;;30018:9;30012:4;30008:20;30004:1;29993:9;29989:17;29982:47;30046:131;30172:4;30046:131;:::i;:::-;30038:139;;29936:248;;;:::o;30190:419::-;;30394:2;30383:9;30379:18;30371:26;;30443:9;30437:4;30433:20;30429:1;30418:9;30414:17;30407:47;30471:131;30597:4;30471:131;:::i;:::-;30463:139;;30361:248;;;:::o;30615:222::-;;30746:2;30735:9;30731:18;30723:26;;30759:71;30827:1;30816:9;30812:17;30803:6;30759:71;:::i;:::-;30713:124;;;;:::o;30843:283::-;;30909:2;30903:9;30893:19;;30951:4;30943:6;30939:17;31058:6;31046:10;31043:22;31022:18;31010:10;31007:34;31004:62;31001:2;;;31069:18;;:::i;:::-;31001:2;31109:10;31105:2;31098:22;30883:243;;;;:::o;31132:331::-;;31283:18;31275:6;31272:30;31269:2;;;31305:18;;:::i;:::-;31269:2;31390:4;31386:9;31379:4;31371:6;31367:17;31363:33;31355:41;;31451:4;31445;31441:15;31433:23;;31198:265;;;:::o;31469:332::-;;31621:18;31613:6;31610:30;31607:2;;;31643:18;;:::i;:::-;31607:2;31728:4;31724:9;31717:4;31709:6;31705:17;31701:33;31693:41;;31789:4;31783;31779:15;31771:23;;31536:265;;;:::o;31807:132::-;;31897:3;31889:11;;31927:4;31922:3;31918:14;31910:22;;31879:60;;;:::o;31945:114::-;;32046:5;32040:12;32030:22;;32019:40;;;:::o;32065:98::-;;32150:5;32144:12;32134:22;;32123:40;;;:::o;32169:99::-;;32255:5;32249:12;32239:22;;32228:40;;;:::o;32274:113::-;;32376:4;32371:3;32367:14;32359:22;;32349:38;;;:::o;32393:184::-;;32526:6;32521:3;32514:19;32566:4;32561:3;32557:14;32542:29;;32504:73;;;;:::o;32583:168::-;;32700:6;32695:3;32688:19;32740:4;32735:3;32731:14;32716:29;;32678:73;;;;:::o;32757:169::-;;32875:6;32870:3;32863:19;32915:4;32910:3;32906:14;32891:29;;32853:73;;;;:::o;32932:148::-;;33071:3;33056:18;;33046:34;;;;:::o;33086:305::-;;33145:20;33163:1;33145:20;:::i;:::-;33140:25;;33179:20;33197:1;33179:20;:::i;:::-;33174:25;;33333:1;33265:66;33261:74;33258:1;33255:81;33252:2;;;33339:18;;:::i;:::-;33252:2;33383:1;33380;33376:9;33369:16;;33130:261;;;;:::o;33397:185::-;;33454:20;33472:1;33454:20;:::i;:::-;33449:25;;33488:20;33506:1;33488:20;:::i;:::-;33483:25;;33527:1;33517:2;;33532:18;;:::i;:::-;33517:2;33574:1;33571;33567:9;33562:14;;33439:143;;;;:::o;33588:348::-;;33651:20;33669:1;33651:20;:::i;:::-;33646:25;;33685:20;33703:1;33685:20;:::i;:::-;33680:25;;33873:1;33805:66;33801:74;33798:1;33795:81;33790:1;33783:9;33776:17;33772:105;33769:2;;;33880:18;;:::i;:::-;33769:2;33928:1;33925;33921:9;33910:20;;33636:300;;;;:::o;33942:191::-;;34002:20;34020:1;34002:20;:::i;:::-;33997:25;;34036:20;34054:1;34036:20;:::i;:::-;34031:25;;34075:1;34072;34069:8;34066:2;;;34080:18;;:::i;:::-;34066:2;34125:1;34122;34118:9;34110:17;;33987:146;;;;:::o;34139:96::-;;34205:24;34223:5;34205:24;:::i;:::-;34194:35;;34184:51;;;:::o;34241:90::-;;34318:5;34311:13;34304:21;34293:32;;34283:48;;;:::o;34337:149::-;;34413:66;34406:5;34402:78;34391:89;;34381:105;;;:::o;34492:126::-;;34569:42;34562:5;34558:54;34547:65;;34537:81;;;:::o;34624:77::-;;34690:5;34679:16;;34669:32;;;:::o;34707:168::-;;34811:58;34863:5;34811:58;:::i;:::-;34798:71;;34788:87;;;:::o;34881:134::-;;34985:24;35003:5;34985:24;:::i;:::-;34972:37;;34962:53;;;:::o;35021:154::-;35105:6;35100:3;35095;35082:30;35167:1;35158:6;35153:3;35149:16;35142:27;35072:103;;;:::o;35181:307::-;35249:1;35259:113;35273:6;35270:1;35267:13;35259:113;;;35358:1;35353:3;35349:11;35343:18;35339:1;35334:3;35330:11;35323:39;35295:2;35292:1;35288:10;35283:15;;35259:113;;;35390:6;35387:1;35384:13;35381:2;;;35470:1;35461:6;35456:3;35452:16;35445:27;35381:2;35230:258;;;;:::o;35494:320::-;;35575:1;35569:4;35565:12;35555:22;;35622:1;35616:4;35612:12;35643:18;35633:2;;35699:4;35691:6;35687:17;35677:27;;35633:2;35761;35753:6;35750:14;35730:18;35727:38;35724:2;;;35780:18;;:::i;:::-;35724:2;35545:269;;;;:::o;35820:233::-;;35882:24;35900:5;35882:24;:::i;:::-;35873:33;;35928:66;35921:5;35918:77;35915:2;;;35998:18;;:::i;:::-;35915:2;36045:1;36038:5;36034:13;36027:20;;35863:190;;;:::o;36059:176::-;;36108:20;36126:1;36108:20;:::i;:::-;36103:25;;36142:20;36160:1;36142:20;:::i;:::-;36137:25;;36181:1;36171:2;;36186:18;;:::i;:::-;36171:2;36227:1;36224;36220:9;36215:14;;36093:142;;;;:::o;36241:180::-;36289:77;36286:1;36279:88;36386:4;36383:1;36376:15;36410:4;36407:1;36400:15;36427:180;36475:77;36472:1;36465:88;36572:4;36569:1;36562:15;36596:4;36593:1;36586:15;36613:180;36661:77;36658:1;36651:88;36758:4;36755:1;36748:15;36782:4;36779:1;36772:15;36799:180;36847:77;36844:1;36837:88;36944:4;36941:1;36934:15;36968:4;36965:1;36958:15;36985:102;;37077:2;37073:7;37068:2;37061:5;37057:14;37053:28;37043:38;;37033:54;;;:::o;37093:122::-;37166:24;37184:5;37166:24;:::i;:::-;37159:5;37156:35;37146:2;;37205:1;37202;37195:12;37146:2;37136:79;:::o;37221:116::-;37291:21;37306:5;37291:21;:::i;:::-;37284:5;37281:32;37271:2;;37327:1;37324;37317:12;37271:2;37261:76;:::o;37343:120::-;37415:23;37432:5;37415:23;:::i;:::-;37408:5;37405:34;37395:2;;37453:1;37450;37443:12;37395:2;37385:78;:::o;37469:122::-;37542:24;37560:5;37542:24;:::i;:::-;37535:5;37532:35;37522:2;;37581:1;37578;37571:12;37522:2;37512:79;:::o
Swarm Source
ipfs://6d944f0a9d5992341c845fb5501748e493a8cc58ed6d2854319eeb76ca172ab9
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
POL | 100.00% | $0.217312 | 407.24 | $88.5 |
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.