Token SQUIRES
Overview ERC-721
Total Supply:
3,999 SQUIRES
Holders:
897 addresses
Contract:
Balance
1 SQUIRES
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Squires
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan.io on 2022-04-17 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _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); } } // File: Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 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); } // File: IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: ERC721.sol pragma solidity ^0.8.10; abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; string private _name; string private _symbol; address[] internal _owners; mapping(uint256 => address) private _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); uint count = 0; uint length = _owners.length; for( uint i = 0; i < length; ++i ){ if( owner == _owners[i] ){ ++count; } } delete length; return count; } 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; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } 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); } function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } 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); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } 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); } function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } 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); } 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"); } function _exists(uint256 tokenId) internal view virtual returns (bool) { return tokenId < _owners.length && _owners[tokenId] != address(0); } 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)); } function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } 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" ); } function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _owners.push(to); emit Transfer(address(0), to, tokenId); } function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _owners[tokenId] = address(0); emit Transfer(owner, address(0), tokenId); } 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); _owners[tokenId] = to; emit Transfer(from, to, tokenId); } function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: ERC721Enumerable.sol pragma solidity ^0.8.10; abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256 tokenId) { require(index < ERC721.balanceOf(owner), "ERC721Enum: owner ioob"); uint count; for( uint i; i < _owners.length; ++i ){ if( owner == _owners[i] ){ if( count == index ) return i; else ++count; } } require(false, "ERC721Enum: owner ioob"); } function tokensOfOwner(address owner) public view returns (uint256[] memory) { require(0 < ERC721.balanceOf(owner), "ERC721Enum: owner ioob"); uint256 tokenCount = balanceOf(owner); uint256[] memory tokenIds = new uint256[](tokenCount); for (uint256 i = 0; i < tokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(owner, i); } return tokenIds; } function totalSupply() public view virtual override returns (uint256) { return _owners.length; } function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enum: global ioob"); return index; } } // File: Squries.sol pragma solidity ^0.8.2; contract Squires is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI = "http://kote-squires.s3-website-us-east-1.amazonaws.com/"; //settings uint256 public total = 3999; uint levelCap = 100; //allowed contracts for metadata upgrades mapping(address => bool) private allowedContracts; //mappings mapping(uint => uint256) private tokenIdSquireType; mapping(uint => uint256) private tokenIdSquireStrength; mapping(uint => uint256) private tokenIdSquireWisdom; mapping(uint => uint256) private tokenIdSquireLuck; mapping(uint => uint256) private tokenIdSquireFaith; mapping(uint256 => string) private tokenIdUpgradeAmount; //genesis mapping(uint => uint256) private genesisToken; constructor() ERC721("SQUIRES", "SQUIRES") { setBaseURI(baseURI); } function airdropSquire(address[] calldata addr, uint squireType, uint genesis, uint setStength, uint setWisdom, uint setLuck, uint setFaith) external onlyOwner { require(totalSupply() + addr.length <= total); for (uint256 i = 0; i < addr.length; i++) { uint256 s = totalSupply(); _safeMint(addr[i], s + i, ""); tokenIdSquireType[s] = squireType; tokenIdSquireStrength[s] = setStength; tokenIdSquireWisdom[s] = setWisdom; tokenIdSquireLuck[s] = setLuck; tokenIdSquireFaith[s] = setFaith; genesisToken[s] = genesis; } } //returns squire type function squireTypeByTokenId(uint256 tokenId) external view returns (uint) { require(_exists(tokenId), "Token has not been minted yet"); return tokenIdSquireType[tokenId]; } //contract calls to get trait totals function strengthByTokenId(uint256 tokenId) external view returns (uint) { require(_exists(tokenId), "Token has not been minted yet"); return tokenIdSquireStrength[tokenId]; } function luckByTokenId(uint256 tokenId) external view returns (uint) { require(_exists(tokenId), "Token has not been minted yet"); return tokenIdSquireLuck[tokenId]; } function wisdomByTokenId(uint256 tokenId) external view returns (uint) { require(_exists(tokenId), "Token has not been minted yet"); return tokenIdSquireWisdom[tokenId]; } function faithByTokenId(uint256 tokenId) external view returns (uint) { require(_exists(tokenId), "Token has not been minted yet"); return tokenIdSquireFaith[tokenId]; } //check genesis function genesisByTokenId(uint256 tokenId) external view returns (uint) { require(_exists(tokenId), "Token has not been minted yet"); return genesisToken[tokenId]; } //returns upgrade Amount function upgradeAmountByTokenId(uint256 tokenId) public view returns (string memory) { require(_exists(tokenId), "Token has not been minted yet"); return tokenIdUpgradeAmount[tokenId]; } //set upgrade function upgradeTokenFromQuesting(uint256 tokenId, uint stengthUpgrade, uint wisdomUpgrade, uint luckUpgrade, uint faithUpgrade) external { require(allowedContracts[msg.sender]); require(_exists(tokenId), "Token has not been minted yet"); //strength if(tokenIdSquireStrength[tokenId] + stengthUpgrade > levelCap){ tokenIdSquireStrength[tokenId] = levelCap; } else{ uint newStength = tokenIdSquireStrength[tokenId] + stengthUpgrade; tokenIdSquireStrength[tokenId] = newStength; } //wisdom if(tokenIdSquireWisdom[tokenId] + wisdomUpgrade > levelCap){ tokenIdSquireWisdom[tokenId] = levelCap; } else{ uint newWisdom = tokenIdSquireWisdom[tokenId] + wisdomUpgrade; tokenIdSquireWisdom[tokenId] = newWisdom; } //luck if(tokenIdSquireLuck[tokenId] + luckUpgrade > levelCap){ tokenIdSquireLuck[tokenId] = levelCap; } else{ uint newLuck = tokenIdSquireLuck[tokenId] + luckUpgrade; tokenIdSquireLuck[tokenId] = newLuck; } //fath if(tokenIdSquireFaith[tokenId] + faithUpgrade > levelCap){ tokenIdSquireFaith[tokenId] = levelCap; } else{ uint newFaith = tokenIdSquireFaith[tokenId] + faithUpgrade; tokenIdSquireFaith[tokenId] = newFaith; } } //write metadata function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } //read metadata function _BaseURI() internal view virtual returns (string memory) { return baseURI; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "Token has not been minted yet"); uint t = tokenIdSquireType[tokenId]; uint s = tokenIdSquireStrength[tokenId]; uint w = tokenIdSquireWisdom[tokenId]; uint l = tokenIdSquireLuck[tokenId]; uint f = tokenIdSquireFaith[tokenId]; uint g = genesisToken[tokenId]; return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, t.toString(),"-",g.toString(),"-",s.toString(),"-",w.toString(),"-",l.toString(),"-",f.toString())) : ""; } //set contract Address function setAllowedContracts(address[] calldata contracts) external onlyOwner { for (uint256 i; i < contracts.length; i++) { allowedContracts[contracts[i]] = true; } } //check allowed Contracts function checkAllowedContracts(address addr) public view returns (bool) { return allowedContracts[addr]; } //withdraw all function withdraw() public payable onlyOwner { (bool success, ) = payable(msg.sender).call{value: address(this).balance}(""); require(success); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"uint256","name":"squireType","type":"uint256"},{"internalType":"uint256","name":"genesis","type":"uint256"},{"internalType":"uint256","name":"setStength","type":"uint256"},{"internalType":"uint256","name":"setWisdom","type":"uint256"},{"internalType":"uint256","name":"setLuck","type":"uint256"},{"internalType":"uint256","name":"setFaith","type":"uint256"}],"name":"airdropSquire","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"checkAllowedContracts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"faithByTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"genesisByTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"tokenId","type":"uint256"}],"name":"luckByTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address[]","name":"contracts","type":"address[]"}],"name":"setAllowedContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"squireTypeByTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"strengthByTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","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":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"total","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"upgradeAmountByTokenId","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"stengthUpgrade","type":"uint256"},{"internalType":"uint256","name":"wisdomUpgrade","type":"uint256"},{"internalType":"uint256","name":"luckUpgrade","type":"uint256"},{"internalType":"uint256","name":"faithUpgrade","type":"uint256"}],"name":"upgradeTokenFromQuesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"wisdomByTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405260405180606001604052806037815260200162004ab26037913960069080519060200190620000359291906200035b565b50610f9f60075560646008553480156200004e57600080fd5b506040518060400160405280600781526020017f53515549524553000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f53515549524553000000000000000000000000000000000000000000000000008152508160009080519060200190620000d39291906200035b565b508060019080519060200190620000ec9291906200035b565b5050506200010f62000103620001b860201b60201c565b620001c060201b60201c565b620001b26006805462000122906200043a565b80601f016020809104026020016040519081016040528092919081815260200182805462000150906200043a565b8015620001a15780601f106200017557610100808354040283529160200191620001a1565b820191906000526020600020905b8154815290600101906020018083116200018357829003601f168201915b50505050506200028660201b60201c565b620004f3565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000296620001b860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002bc6200033160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000315576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200030c90620004d1565b60405180910390fd5b80600690805190602001906200032d9291906200035b565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000369906200043a565b90600052602060002090601f0160209004810192826200038d5760008555620003d9565b82601f10620003a857805160ff1916838001178555620003d9565b82800160010185558215620003d9579182015b82811115620003d8578251825591602001919060010190620003bb565b5b509050620003e89190620003ec565b5090565b5b8082111562000407576000816000905550600101620003ed565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200045357607f821691505b602082108114156200046a57620004696200040b565b5b50919050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620004b960208362000470565b9150620004c68262000481565b602082019050919050565b60006020820190508181036000830152620004ec81620004aa565b9050919050565b6145af80620005036000396000f3fe6080604052600436106102045760003560e01c8063715018a611610118578063b0bc729a116100a0578063cf14d2ae1161006f578063cf14d2ae146107ca578063e985e9c514610807578063ef80da8014610844578063f2fde38b1461086d578063f70fce521461089657610204565b8063b0bc729a146106ea578063b88d4fde14610727578063c87b56dd14610750578063cadf59c01461078d57610204565b80638462151c116100e75780638462151c146105f15780638da5cb5b1461062e57806395d89b4114610659578063a22cb46514610684578063ae6dde4b146106ad57610204565b8063715018a61461054b5780637fcee0971461056257806384103b991461059f578063843db83d146105c857610204565b80632f745c591161019b57806355f804b31161016a57806355f804b3146104405780636352211e14610469578063695ef955146104a65780636c0360eb146104e357806370a082311461050e57610204565b80632f745c59146103935780633ccfd60b146103d057806342842e0e146103da5780634f6ccce71461040357610204565b806318160ddd116101d757806318160ddd146102d75780631c0520341461030257806323b872dd1461033f5780632ddbd13a1461036857610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190612e30565b6108d3565b60405161023d9190612e78565b60405180910390f35b34801561025257600080fd5b5061025b61094d565b6040516102689190612f2c565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190612f84565b6109df565b6040516102a59190612ff2565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190613039565b610a64565b005b3480156102e357600080fd5b506102ec610b7c565b6040516102f99190613088565b60405180910390f35b34801561030e57600080fd5b5061032960048036038101906103249190612f84565b610b89565b6040516103369190613088565b60405180910390f35b34801561034b57600080fd5b50610366600480360381019061036191906130a3565b610bee565b005b34801561037457600080fd5b5061037d610c4e565b60405161038a9190613088565b60405180910390f35b34801561039f57600080fd5b506103ba60048036038101906103b59190613039565b610c54565b6040516103c79190613088565b60405180910390f35b6103d8610d9d565b005b3480156103e657600080fd5b5061040160048036038101906103fc91906130a3565b610e92565b005b34801561040f57600080fd5b5061042a60048036038101906104259190612f84565b610eb2565b6040516104379190613088565b60405180910390f35b34801561044c57600080fd5b506104676004803603810190610462919061322b565b610f05565b005b34801561047557600080fd5b50610490600480360381019061048b9190612f84565b610f9b565b60405161049d9190612ff2565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190613274565b611058565b6040516104da9190612e78565b60405180910390f35b3480156104ef57600080fd5b506104f86110ae565b6040516105059190612f2c565b60405180910390f35b34801561051a57600080fd5b5061053560048036038101906105309190613274565b61113c565b6040516105429190613088565b60405180910390f35b34801561055757600080fd5b50610560611262565b005b34801561056e57600080fd5b5061058960048036038101906105849190612f84565b6112ea565b6040516105969190612f2c565b60405180910390f35b3480156105ab57600080fd5b506105c660048036038101906105c191906132a1565b6113d7565b005b3480156105d457600080fd5b506105ef60048036038101906105ea919061337c565b61168c565b005b3480156105fd57600080fd5b5061061860048036038101906106139190613274565b6117ad565b6040516106259190613487565b60405180910390f35b34801561063a57600080fd5b506106436118a6565b6040516106509190612ff2565b60405180910390f35b34801561066557600080fd5b5061066e6118d0565b60405161067b9190612f2c565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a691906134d5565b611962565b005b3480156106b957600080fd5b506106d460048036038101906106cf9190612f84565b611ae3565b6040516106e19190613088565b60405180910390f35b3480156106f657600080fd5b50610711600480360381019061070c9190612f84565b611b48565b60405161071e9190613088565b60405180910390f35b34801561073357600080fd5b5061074e600480360381019061074991906135b6565b611bad565b005b34801561075c57600080fd5b5061077760048036038101906107729190612f84565b611c0f565b6040516107849190612f2c565b60405180910390f35b34801561079957600080fd5b506107b460048036038101906107af9190612f84565b611d7f565b6040516107c19190613088565b60405180910390f35b3480156107d657600080fd5b506107f160048036038101906107ec9190612f84565b611de4565b6040516107fe9190613088565b60405180910390f35b34801561081357600080fd5b5061082e60048036038101906108299190613639565b611e49565b60405161083b9190612e78565b60405180910390f35b34801561085057600080fd5b5061086b60048036038101906108669190613679565b611edd565b005b34801561087957600080fd5b50610894600480360381019061088f9190613274565b612092565b005b3480156108a257600080fd5b506108bd60048036038101906108b89190612f84565b61218a565b6040516108ca9190613088565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109465750610945826121ef565b5b9050919050565b60606000805461095c9061376a565b80601f01602080910402602001604051908101604052809291908181526020018280546109889061376a565b80156109d55780601f106109aa576101008083540402835291602001916109d5565b820191906000526020600020905b8154815290600101906020018083116109b857829003601f168201915b5050505050905090565b60006109ea826122d1565b610a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a209061380e565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a6f82610f9b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad7906138a0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aff612359565b73ffffffffffffffffffffffffffffffffffffffff161480610b2e5750610b2d81610b28612359565b611e49565b5b610b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6490613932565b60405180910390fd5b610b778383612361565b505050565b6000600280549050905090565b6000610b94826122d1565b610bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bca9061399e565b60405180910390fd5b60106000838152602001908152602001600020549050919050565b610bff610bf9612359565b8261241a565b610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3590613a30565b60405180910390fd5b610c498383836124f8565b505050565b60075481565b6000610c5f8361113c565b8210610ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9790613a9c565b60405180910390fd5b6000805b600280549050811015610d535760028181548110610cc557610cc4613abc565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610d425783821415610d35578092505050610d97565b81610d3f90613b1a565b91505b80610d4c90613b1a565b9050610ca4565b506000610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90613a9c565b60405180910390fd5b505b92915050565b610da5612359565b73ffffffffffffffffffffffffffffffffffffffff16610dc36118a6565b73ffffffffffffffffffffffffffffffffffffffff1614610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1090613baf565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610e3f90613c00565b60006040518083038185875af1925050503d8060008114610e7c576040519150601f19603f3d011682016040523d82523d6000602084013e610e81565b606091505b5050905080610e8f57600080fd5b50565b610ead83838360405180602001604052806000815250611bad565b505050565b6000610ebc610b7c565b8210610efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef490613c61565b60405180910390fd5b819050919050565b610f0d612359565b73ffffffffffffffffffffffffffffffffffffffff16610f2b6118a6565b73ffffffffffffffffffffffffffffffffffffffff1614610f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7890613baf565b60405180910390fd5b8060069080519060200190610f97929190612d21565b5050565b60008060028381548110610fb257610fb1613abc565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561104f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104690613cf3565b60405180910390fd5b80915050919050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600680546110bb9061376a565b80601f01602080910402602001604051908101604052809291908181526020018280546110e79061376a565b80156111345780601f1061110957610100808354040283529160200191611134565b820191906000526020600020905b81548152906001019060200180831161111757829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a490613d85565b60405180910390fd5b600080600280549050905060005b8181101561125357600281815481106111d7576111d6613abc565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611242578261123f90613b1a565b92505b8061124c90613b1a565b90506111bb565b50600090508192505050919050565b61126a612359565b73ffffffffffffffffffffffffffffffffffffffff166112886118a6565b73ffffffffffffffffffffffffffffffffffffffff16146112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d590613baf565b60405180910390fd5b6112e860006126b1565b565b60606112f5826122d1565b611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b9061399e565b60405180910390fd5b600f600083815260200190815260200160002080546113529061376a565b80601f016020809104026020016040519081016040528092919081815260200182805461137e9061376a565b80156113cb5780601f106113a0576101008083540402835291602001916113cb565b820191906000526020600020905b8154815290600101906020018083116113ae57829003601f168201915b50505050509050919050565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661142d57600080fd5b611436856122d1565b611475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146c9061399e565b60405180910390fd5b60085484600b6000888152602001908152602001600020546114979190613da5565b11156114bc57600854600b6000878152602001908152602001600020819055506114f9565b600084600b6000888152602001908152602001600020546114dd9190613da5565b905080600b600088815260200190815260200160002081905550505b60085483600c60008881526020019081526020016000205461151b9190613da5565b111561154057600854600c60008781526020019081526020016000208190555061157d565b600083600c6000888152602001908152602001600020546115619190613da5565b905080600c600088815260200190815260200160002081905550505b60085482600d60008881526020019081526020016000205461159f9190613da5565b11156115c457600854600d600087815260200190815260200160002081905550611601565b600082600d6000888152602001908152602001600020546115e59190613da5565b905080600d600088815260200190815260200160002081905550505b60085481600e6000888152602001908152602001600020546116239190613da5565b111561164857600854600e600087815260200190815260200160002081905550611685565b600081600e6000888152602001908152602001600020546116699190613da5565b905080600e600088815260200190815260200160002081905550505b5050505050565b611694612359565b73ffffffffffffffffffffffffffffffffffffffff166116b26118a6565b73ffffffffffffffffffffffffffffffffffffffff1614611708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ff90613baf565b60405180910390fd5b60005b828290508110156117a85760016009600085858581811061172f5761172e613abc565b5b90506020020160208101906117449190613274565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806117a090613b1a565b91505061170b565b505050565b60606117b88261113c565b6000106117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f190613a9c565b60405180910390fd5b60006118058361113c565b905060008167ffffffffffffffff81111561182357611822613100565b5b6040519080825280602002602001820160405280156118515781602001602082028036833780820191505090505b50905060005b8281101561189b576118698582610c54565b82828151811061187c5761187b613abc565b5b602002602001018181525050808061189390613b1a565b915050611857565b508092505050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546118df9061376a565b80601f016020809104026020016040519081016040528092919081815260200182805461190b9061376a565b80156119585780601f1061192d57610100808354040283529160200191611958565b820191906000526020600020905b81548152906001019060200180831161193b57829003601f168201915b5050505050905090565b61196a612359565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90613e47565b60405180910390fd5b80600460006119e5612359565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a92612359565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ad79190612e78565b60405180910390a35050565b6000611aee826122d1565b611b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b249061399e565b60405180910390fd5b600c6000838152602001908152602001600020549050919050565b6000611b53826122d1565b611b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b899061399e565b60405180910390fd5b600d6000838152602001908152602001600020549050919050565b611bbe611bb8612359565b8361241a565b611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf490613a30565b60405180910390fd5b611c0984848484612777565b50505050565b6060611c1a826122d1565b611c59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c509061399e565b60405180910390fd5b6000600a60008481526020019081526020016000205490506000600b60008581526020019081526020016000205490506000600c60008681526020019081526020016000205490506000600d60008781526020019081526020016000205490506000600e6000888152602001908152602001600020549050600060106000898152602001908152602001600020549050600060068054611cf89061376a565b905011611d145760405180602001604052806000815250611d72565b6006611d1f876127d3565b611d28836127d3565b611d31886127d3565b611d3a886127d3565b611d43886127d3565b611d4c886127d3565b604051602001611d629796959493929190613f83565b6040516020818303038152906040525b9650505050505050919050565b6000611d8a826122d1565b611dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc09061399e565b60405180910390fd5b600a6000838152602001908152602001600020549050919050565b6000611def826122d1565b611e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e259061399e565b60405180910390fd5b600b6000838152602001908152602001600020549050919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ee5612359565b73ffffffffffffffffffffffffffffffffffffffff16611f036118a6565b73ffffffffffffffffffffffffffffffffffffffff1614611f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5090613baf565b60405180910390fd5b60075488889050611f68610b7c565b611f729190613da5565b1115611f7d57600080fd5b60005b88889050811015612087576000611f95610b7c565b9050611fe38a8a84818110611fad57611fac613abc565b5b9050602002016020810190611fc29190613274565b8383611fce9190613da5565b60405180602001604052806000815250612934565b87600a60008381526020019081526020016000208190555085600b60008381526020019081526020016000208190555084600c60008381526020019081526020016000208190555083600d60008381526020019081526020016000208190555082600e60008381526020019081526020016000208190555086601060008381526020019081526020016000208190555050808061207f90613b1a565b915050611f80565b505050505050505050565b61209a612359565b73ffffffffffffffffffffffffffffffffffffffff166120b86118a6565b73ffffffffffffffffffffffffffffffffffffffff161461210e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210590613baf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561217e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217590614091565b60405180910390fd5b612187816126b1565b50565b6000612195826122d1565b6121d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cb9061399e565b60405180910390fd5b600e6000838152602001908152602001600020549050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122ba57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806122ca57506122c98261298f565b5b9050919050565b6000600280549050821080156123525750600073ffffffffffffffffffffffffffffffffffffffff166002838154811061230e5761230d613abc565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b600033905090565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123d483610f9b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612425826122d1565b612464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245b90614123565b60405180910390fd5b600061246f83610f9b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806124de57508373ffffffffffffffffffffffffffffffffffffffff166124c6846109df565b73ffffffffffffffffffffffffffffffffffffffff16145b806124ef57506124ee8185611e49565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661251882610f9b565b73ffffffffffffffffffffffffffffffffffffffff161461256e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612565906141b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d590614247565b60405180910390fd5b6125e98383836129f9565b6125f4600082612361565b816002828154811061260957612608613abc565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6127828484846124f8565b61278e848484846129fe565b6127cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c4906142d9565b60405180910390fd5b50505050565b6060600082141561281b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061292f565b600082905060005b6000821461284d57808061283690613b1a565b915050600a826128469190614328565b9150612823565b60008167ffffffffffffffff81111561286957612868613100565b5b6040519080825280601f01601f19166020018201604052801561289b5781602001600182028036833780820191505090505b5090505b60008514612928576001826128b49190614359565b9150600a856128c3919061438d565b60306128cf9190613da5565b60f81b8183815181106128e5576128e4613abc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129219190614328565b945061289f565b8093505050505b919050565b61293e8383612b86565b61294b60008484846129fe565b61298a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612981906142d9565b60405180910390fd5b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b6000612a1f8473ffffffffffffffffffffffffffffffffffffffff16612d0e565b15612b79578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a48612359565b8786866040518563ffffffff1660e01b8152600401612a6a9493929190614413565b6020604051808303816000875af1925050508015612aa657506040513d601f19601f82011682018060405250810190612aa39190614474565b60015b612b29573d8060008114612ad6576040519150601f19603f3d011682016040523d82523d6000602084013e612adb565b606091505b50600081511415612b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b18906142d9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b7e565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bed906144ed565b60405180910390fd5b612bff816122d1565b15612c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3690614559565b60405180910390fd5b612c4b600083836129f9565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612d2d9061376a565b90600052602060002090601f016020900481019282612d4f5760008555612d96565b82601f10612d6857805160ff1916838001178555612d96565b82800160010185558215612d96579182015b82811115612d95578251825591602001919060010190612d7a565b5b509050612da39190612da7565b5090565b5b80821115612dc0576000816000905550600101612da8565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e0d81612dd8565b8114612e1857600080fd5b50565b600081359050612e2a81612e04565b92915050565b600060208284031215612e4657612e45612dce565b5b6000612e5484828501612e1b565b91505092915050565b60008115159050919050565b612e7281612e5d565b82525050565b6000602082019050612e8d6000830184612e69565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ecd578082015181840152602081019050612eb2565b83811115612edc576000848401525b50505050565b6000601f19601f8301169050919050565b6000612efe82612e93565b612f088185612e9e565b9350612f18818560208601612eaf565b612f2181612ee2565b840191505092915050565b60006020820190508181036000830152612f468184612ef3565b905092915050565b6000819050919050565b612f6181612f4e565b8114612f6c57600080fd5b50565b600081359050612f7e81612f58565b92915050565b600060208284031215612f9a57612f99612dce565b5b6000612fa884828501612f6f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fdc82612fb1565b9050919050565b612fec81612fd1565b82525050565b60006020820190506130076000830184612fe3565b92915050565b61301681612fd1565b811461302157600080fd5b50565b6000813590506130338161300d565b92915050565b600080604083850312156130505761304f612dce565b5b600061305e85828601613024565b925050602061306f85828601612f6f565b9150509250929050565b61308281612f4e565b82525050565b600060208201905061309d6000830184613079565b92915050565b6000806000606084860312156130bc576130bb612dce565b5b60006130ca86828701613024565b93505060206130db86828701613024565b92505060406130ec86828701612f6f565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61313882612ee2565b810181811067ffffffffffffffff8211171561315757613156613100565b5b80604052505050565b600061316a612dc4565b9050613176828261312f565b919050565b600067ffffffffffffffff82111561319657613195613100565b5b61319f82612ee2565b9050602081019050919050565b82818337600083830152505050565b60006131ce6131c98461317b565b613160565b9050828152602081018484840111156131ea576131e96130fb565b5b6131f58482856131ac565b509392505050565b600082601f830112613212576132116130f6565b5b81356132228482602086016131bb565b91505092915050565b60006020828403121561324157613240612dce565b5b600082013567ffffffffffffffff81111561325f5761325e612dd3565b5b61326b848285016131fd565b91505092915050565b60006020828403121561328a57613289612dce565b5b600061329884828501613024565b91505092915050565b600080600080600060a086880312156132bd576132bc612dce565b5b60006132cb88828901612f6f565b95505060206132dc88828901612f6f565b94505060406132ed88828901612f6f565b93505060606132fe88828901612f6f565b925050608061330f88828901612f6f565b9150509295509295909350565b600080fd5b600080fd5b60008083601f84011261333c5761333b6130f6565b5b8235905067ffffffffffffffff8111156133595761335861331c565b5b60208301915083602082028301111561337557613374613321565b5b9250929050565b6000806020838503121561339357613392612dce565b5b600083013567ffffffffffffffff8111156133b1576133b0612dd3565b5b6133bd85828601613326565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6133fe81612f4e565b82525050565b600061341083836133f5565b60208301905092915050565b6000602082019050919050565b6000613434826133c9565b61343e81856133d4565b9350613449836133e5565b8060005b8381101561347a5781516134618882613404565b975061346c8361341c565b92505060018101905061344d565b5085935050505092915050565b600060208201905081810360008301526134a18184613429565b905092915050565b6134b281612e5d565b81146134bd57600080fd5b50565b6000813590506134cf816134a9565b92915050565b600080604083850312156134ec576134eb612dce565b5b60006134fa85828601613024565b925050602061350b858286016134c0565b9150509250929050565b600067ffffffffffffffff8211156135305761352f613100565b5b61353982612ee2565b9050602081019050919050565b600061355961355484613515565b613160565b905082815260208101848484011115613575576135746130fb565b5b6135808482856131ac565b509392505050565b600082601f83011261359d5761359c6130f6565b5b81356135ad848260208601613546565b91505092915050565b600080600080608085870312156135d0576135cf612dce565b5b60006135de87828801613024565b94505060206135ef87828801613024565b935050604061360087828801612f6f565b925050606085013567ffffffffffffffff81111561362157613620612dd3565b5b61362d87828801613588565b91505092959194509250565b600080604083850312156136505761364f612dce565b5b600061365e85828601613024565b925050602061366f85828601613024565b9150509250929050565b60008060008060008060008060e0898b03121561369957613698612dce565b5b600089013567ffffffffffffffff8111156136b7576136b6612dd3565b5b6136c38b828c01613326565b985098505060206136d68b828c01612f6f565b96505060406136e78b828c01612f6f565b95505060606136f88b828c01612f6f565b94505060806137098b828c01612f6f565b93505060a061371a8b828c01612f6f565b92505060c061372b8b828c01612f6f565b9150509295985092959890939650565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061378257607f821691505b602082108114156137965761379561373b565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006137f8602c83612e9e565b91506138038261379c565b604082019050919050565b60006020820190508181036000830152613827816137eb565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061388a602183612e9e565b91506138958261382e565b604082019050919050565b600060208201905081810360008301526138b98161387d565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061391c603883612e9e565b9150613927826138c0565b604082019050919050565b6000602082019050818103600083015261394b8161390f565b9050919050565b7f546f6b656e20686173206e6f74206265656e206d696e74656420796574000000600082015250565b6000613988601d83612e9e565b915061399382613952565b602082019050919050565b600060208201905081810360008301526139b78161397b565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613a1a603183612e9e565b9150613a25826139be565b604082019050919050565b60006020820190508181036000830152613a4981613a0d565b9050919050565b7f455243373231456e756d3a206f776e657220696f6f6200000000000000000000600082015250565b6000613a86601683612e9e565b9150613a9182613a50565b602082019050919050565b60006020820190508181036000830152613ab581613a79565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b2582612f4e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b5857613b57613aeb565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b99602083612e9e565b9150613ba482613b63565b602082019050919050565b60006020820190508181036000830152613bc881613b8c565b9050919050565b600081905092915050565b50565b6000613bea600083613bcf565b9150613bf582613bda565b600082019050919050565b6000613c0b82613bdd565b9150819050919050565b7f455243373231456e756d3a20676c6f62616c20696f6f62000000000000000000600082015250565b6000613c4b601783612e9e565b9150613c5682613c15565b602082019050919050565b60006020820190508181036000830152613c7a81613c3e565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613cdd602983612e9e565b9150613ce882613c81565b604082019050919050565b60006020820190508181036000830152613d0c81613cd0565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613d6f602a83612e9e565b9150613d7a82613d13565b604082019050919050565b60006020820190508181036000830152613d9e81613d62565b9050919050565b6000613db082612f4e565b9150613dbb83612f4e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613df057613def613aeb565b5b828201905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613e31601983612e9e565b9150613e3c82613dfb565b602082019050919050565b60006020820190508181036000830152613e6081613e24565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154613e948161376a565b613e9e8186613e67565b94506001821660008114613eb95760018114613eca57613efd565b60ff19831686528186019350613efd565b613ed385613e72565b60005b83811015613ef557815481890152600182019150602081019050613ed6565b838801955050505b50505092915050565b6000613f1182612e93565b613f1b8185613e67565b9350613f2b818560208601612eaf565b80840191505092915050565b7f2d00000000000000000000000000000000000000000000000000000000000000600082015250565b6000613f6d600183613e67565b9150613f7882613f37565b600182019050919050565b6000613f8f828a613e87565b9150613f9b8289613f06565b9150613fa682613f60565b9150613fb28288613f06565b9150613fbd82613f60565b9150613fc98287613f06565b9150613fd482613f60565b9150613fe08286613f06565b9150613feb82613f60565b9150613ff78285613f06565b915061400282613f60565b915061400e8284613f06565b915081905098975050505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061407b602683612e9e565b91506140868261401f565b604082019050919050565b600060208201905081810360008301526140aa8161406e565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061410d602c83612e9e565b9150614118826140b1565b604082019050919050565b6000602082019050818103600083015261413c81614100565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b600061419f602983612e9e565b91506141aa82614143565b604082019050919050565b600060208201905081810360008301526141ce81614192565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614231602483612e9e565b915061423c826141d5565b604082019050919050565b6000602082019050818103600083015261426081614224565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006142c3603283612e9e565b91506142ce82614267565b604082019050919050565b600060208201905081810360008301526142f2816142b6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061433382612f4e565b915061433e83612f4e565b92508261434e5761434d6142f9565b5b828204905092915050565b600061436482612f4e565b915061436f83612f4e565b92508282101561438257614381613aeb565b5b828203905092915050565b600061439882612f4e565b91506143a383612f4e565b9250826143b3576143b26142f9565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006143e5826143be565b6143ef81856143c9565b93506143ff818560208601612eaf565b61440881612ee2565b840191505092915050565b60006080820190506144286000830187612fe3565b6144356020830186612fe3565b6144426040830185613079565b818103606083015261445481846143da565b905095945050505050565b60008151905061446e81612e04565b92915050565b60006020828403121561448a57614489612dce565b5b60006144988482850161445f565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006144d7602083612e9e565b91506144e2826144a1565b602082019050919050565b60006020820190508181036000830152614506816144ca565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614543601c83612e9e565b915061454e8261450d565b602082019050919050565b6000602082019050818103600083015261457281614536565b905091905056fea2646970667358221220d0f6fb53a07716ba2457287c765d6a47f15272669b7d42834068c8a51700c11e64736f6c634300080b0033687474703a2f2f6b6f74652d737175697265732e73332d776562736974652d75732d656173742d312e616d617a6f6e6177732e636f6d2f
Deployed Bytecode
0x6080604052600436106102045760003560e01c8063715018a611610118578063b0bc729a116100a0578063cf14d2ae1161006f578063cf14d2ae146107ca578063e985e9c514610807578063ef80da8014610844578063f2fde38b1461086d578063f70fce521461089657610204565b8063b0bc729a146106ea578063b88d4fde14610727578063c87b56dd14610750578063cadf59c01461078d57610204565b80638462151c116100e75780638462151c146105f15780638da5cb5b1461062e57806395d89b4114610659578063a22cb46514610684578063ae6dde4b146106ad57610204565b8063715018a61461054b5780637fcee0971461056257806384103b991461059f578063843db83d146105c857610204565b80632f745c591161019b57806355f804b31161016a57806355f804b3146104405780636352211e14610469578063695ef955146104a65780636c0360eb146104e357806370a082311461050e57610204565b80632f745c59146103935780633ccfd60b146103d057806342842e0e146103da5780634f6ccce71461040357610204565b806318160ddd116101d757806318160ddd146102d75780631c0520341461030257806323b872dd1461033f5780632ddbd13a1461036857610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190612e30565b6108d3565b60405161023d9190612e78565b60405180910390f35b34801561025257600080fd5b5061025b61094d565b6040516102689190612f2c565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190612f84565b6109df565b6040516102a59190612ff2565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190613039565b610a64565b005b3480156102e357600080fd5b506102ec610b7c565b6040516102f99190613088565b60405180910390f35b34801561030e57600080fd5b5061032960048036038101906103249190612f84565b610b89565b6040516103369190613088565b60405180910390f35b34801561034b57600080fd5b50610366600480360381019061036191906130a3565b610bee565b005b34801561037457600080fd5b5061037d610c4e565b60405161038a9190613088565b60405180910390f35b34801561039f57600080fd5b506103ba60048036038101906103b59190613039565b610c54565b6040516103c79190613088565b60405180910390f35b6103d8610d9d565b005b3480156103e657600080fd5b5061040160048036038101906103fc91906130a3565b610e92565b005b34801561040f57600080fd5b5061042a60048036038101906104259190612f84565b610eb2565b6040516104379190613088565b60405180910390f35b34801561044c57600080fd5b506104676004803603810190610462919061322b565b610f05565b005b34801561047557600080fd5b50610490600480360381019061048b9190612f84565b610f9b565b60405161049d9190612ff2565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190613274565b611058565b6040516104da9190612e78565b60405180910390f35b3480156104ef57600080fd5b506104f86110ae565b6040516105059190612f2c565b60405180910390f35b34801561051a57600080fd5b5061053560048036038101906105309190613274565b61113c565b6040516105429190613088565b60405180910390f35b34801561055757600080fd5b50610560611262565b005b34801561056e57600080fd5b5061058960048036038101906105849190612f84565b6112ea565b6040516105969190612f2c565b60405180910390f35b3480156105ab57600080fd5b506105c660048036038101906105c191906132a1565b6113d7565b005b3480156105d457600080fd5b506105ef60048036038101906105ea919061337c565b61168c565b005b3480156105fd57600080fd5b5061061860048036038101906106139190613274565b6117ad565b6040516106259190613487565b60405180910390f35b34801561063a57600080fd5b506106436118a6565b6040516106509190612ff2565b60405180910390f35b34801561066557600080fd5b5061066e6118d0565b60405161067b9190612f2c565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a691906134d5565b611962565b005b3480156106b957600080fd5b506106d460048036038101906106cf9190612f84565b611ae3565b6040516106e19190613088565b60405180910390f35b3480156106f657600080fd5b50610711600480360381019061070c9190612f84565b611b48565b60405161071e9190613088565b60405180910390f35b34801561073357600080fd5b5061074e600480360381019061074991906135b6565b611bad565b005b34801561075c57600080fd5b5061077760048036038101906107729190612f84565b611c0f565b6040516107849190612f2c565b60405180910390f35b34801561079957600080fd5b506107b460048036038101906107af9190612f84565b611d7f565b6040516107c19190613088565b60405180910390f35b3480156107d657600080fd5b506107f160048036038101906107ec9190612f84565b611de4565b6040516107fe9190613088565b60405180910390f35b34801561081357600080fd5b5061082e60048036038101906108299190613639565b611e49565b60405161083b9190612e78565b60405180910390f35b34801561085057600080fd5b5061086b60048036038101906108669190613679565b611edd565b005b34801561087957600080fd5b50610894600480360381019061088f9190613274565b612092565b005b3480156108a257600080fd5b506108bd60048036038101906108b89190612f84565b61218a565b6040516108ca9190613088565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109465750610945826121ef565b5b9050919050565b60606000805461095c9061376a565b80601f01602080910402602001604051908101604052809291908181526020018280546109889061376a565b80156109d55780601f106109aa576101008083540402835291602001916109d5565b820191906000526020600020905b8154815290600101906020018083116109b857829003601f168201915b5050505050905090565b60006109ea826122d1565b610a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a209061380e565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a6f82610f9b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad7906138a0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aff612359565b73ffffffffffffffffffffffffffffffffffffffff161480610b2e5750610b2d81610b28612359565b611e49565b5b610b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6490613932565b60405180910390fd5b610b778383612361565b505050565b6000600280549050905090565b6000610b94826122d1565b610bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bca9061399e565b60405180910390fd5b60106000838152602001908152602001600020549050919050565b610bff610bf9612359565b8261241a565b610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3590613a30565b60405180910390fd5b610c498383836124f8565b505050565b60075481565b6000610c5f8361113c565b8210610ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9790613a9c565b60405180910390fd5b6000805b600280549050811015610d535760028181548110610cc557610cc4613abc565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610d425783821415610d35578092505050610d97565b81610d3f90613b1a565b91505b80610d4c90613b1a565b9050610ca4565b506000610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90613a9c565b60405180910390fd5b505b92915050565b610da5612359565b73ffffffffffffffffffffffffffffffffffffffff16610dc36118a6565b73ffffffffffffffffffffffffffffffffffffffff1614610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1090613baf565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610e3f90613c00565b60006040518083038185875af1925050503d8060008114610e7c576040519150601f19603f3d011682016040523d82523d6000602084013e610e81565b606091505b5050905080610e8f57600080fd5b50565b610ead83838360405180602001604052806000815250611bad565b505050565b6000610ebc610b7c565b8210610efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef490613c61565b60405180910390fd5b819050919050565b610f0d612359565b73ffffffffffffffffffffffffffffffffffffffff16610f2b6118a6565b73ffffffffffffffffffffffffffffffffffffffff1614610f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7890613baf565b60405180910390fd5b8060069080519060200190610f97929190612d21565b5050565b60008060028381548110610fb257610fb1613abc565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561104f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104690613cf3565b60405180910390fd5b80915050919050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600680546110bb9061376a565b80601f01602080910402602001604051908101604052809291908181526020018280546110e79061376a565b80156111345780601f1061110957610100808354040283529160200191611134565b820191906000526020600020905b81548152906001019060200180831161111757829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a490613d85565b60405180910390fd5b600080600280549050905060005b8181101561125357600281815481106111d7576111d6613abc565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611242578261123f90613b1a565b92505b8061124c90613b1a565b90506111bb565b50600090508192505050919050565b61126a612359565b73ffffffffffffffffffffffffffffffffffffffff166112886118a6565b73ffffffffffffffffffffffffffffffffffffffff16146112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d590613baf565b60405180910390fd5b6112e860006126b1565b565b60606112f5826122d1565b611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b9061399e565b60405180910390fd5b600f600083815260200190815260200160002080546113529061376a565b80601f016020809104026020016040519081016040528092919081815260200182805461137e9061376a565b80156113cb5780601f106113a0576101008083540402835291602001916113cb565b820191906000526020600020905b8154815290600101906020018083116113ae57829003601f168201915b50505050509050919050565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661142d57600080fd5b611436856122d1565b611475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146c9061399e565b60405180910390fd5b60085484600b6000888152602001908152602001600020546114979190613da5565b11156114bc57600854600b6000878152602001908152602001600020819055506114f9565b600084600b6000888152602001908152602001600020546114dd9190613da5565b905080600b600088815260200190815260200160002081905550505b60085483600c60008881526020019081526020016000205461151b9190613da5565b111561154057600854600c60008781526020019081526020016000208190555061157d565b600083600c6000888152602001908152602001600020546115619190613da5565b905080600c600088815260200190815260200160002081905550505b60085482600d60008881526020019081526020016000205461159f9190613da5565b11156115c457600854600d600087815260200190815260200160002081905550611601565b600082600d6000888152602001908152602001600020546115e59190613da5565b905080600d600088815260200190815260200160002081905550505b60085481600e6000888152602001908152602001600020546116239190613da5565b111561164857600854600e600087815260200190815260200160002081905550611685565b600081600e6000888152602001908152602001600020546116699190613da5565b905080600e600088815260200190815260200160002081905550505b5050505050565b611694612359565b73ffffffffffffffffffffffffffffffffffffffff166116b26118a6565b73ffffffffffffffffffffffffffffffffffffffff1614611708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ff90613baf565b60405180910390fd5b60005b828290508110156117a85760016009600085858581811061172f5761172e613abc565b5b90506020020160208101906117449190613274565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806117a090613b1a565b91505061170b565b505050565b60606117b88261113c565b6000106117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f190613a9c565b60405180910390fd5b60006118058361113c565b905060008167ffffffffffffffff81111561182357611822613100565b5b6040519080825280602002602001820160405280156118515781602001602082028036833780820191505090505b50905060005b8281101561189b576118698582610c54565b82828151811061187c5761187b613abc565b5b602002602001018181525050808061189390613b1a565b915050611857565b508092505050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546118df9061376a565b80601f016020809104026020016040519081016040528092919081815260200182805461190b9061376a565b80156119585780601f1061192d57610100808354040283529160200191611958565b820191906000526020600020905b81548152906001019060200180831161193b57829003601f168201915b5050505050905090565b61196a612359565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90613e47565b60405180910390fd5b80600460006119e5612359565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a92612359565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ad79190612e78565b60405180910390a35050565b6000611aee826122d1565b611b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b249061399e565b60405180910390fd5b600c6000838152602001908152602001600020549050919050565b6000611b53826122d1565b611b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b899061399e565b60405180910390fd5b600d6000838152602001908152602001600020549050919050565b611bbe611bb8612359565b8361241a565b611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf490613a30565b60405180910390fd5b611c0984848484612777565b50505050565b6060611c1a826122d1565b611c59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c509061399e565b60405180910390fd5b6000600a60008481526020019081526020016000205490506000600b60008581526020019081526020016000205490506000600c60008681526020019081526020016000205490506000600d60008781526020019081526020016000205490506000600e6000888152602001908152602001600020549050600060106000898152602001908152602001600020549050600060068054611cf89061376a565b905011611d145760405180602001604052806000815250611d72565b6006611d1f876127d3565b611d28836127d3565b611d31886127d3565b611d3a886127d3565b611d43886127d3565b611d4c886127d3565b604051602001611d629796959493929190613f83565b6040516020818303038152906040525b9650505050505050919050565b6000611d8a826122d1565b611dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc09061399e565b60405180910390fd5b600a6000838152602001908152602001600020549050919050565b6000611def826122d1565b611e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e259061399e565b60405180910390fd5b600b6000838152602001908152602001600020549050919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ee5612359565b73ffffffffffffffffffffffffffffffffffffffff16611f036118a6565b73ffffffffffffffffffffffffffffffffffffffff1614611f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5090613baf565b60405180910390fd5b60075488889050611f68610b7c565b611f729190613da5565b1115611f7d57600080fd5b60005b88889050811015612087576000611f95610b7c565b9050611fe38a8a84818110611fad57611fac613abc565b5b9050602002016020810190611fc29190613274565b8383611fce9190613da5565b60405180602001604052806000815250612934565b87600a60008381526020019081526020016000208190555085600b60008381526020019081526020016000208190555084600c60008381526020019081526020016000208190555083600d60008381526020019081526020016000208190555082600e60008381526020019081526020016000208190555086601060008381526020019081526020016000208190555050808061207f90613b1a565b915050611f80565b505050505050505050565b61209a612359565b73ffffffffffffffffffffffffffffffffffffffff166120b86118a6565b73ffffffffffffffffffffffffffffffffffffffff161461210e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210590613baf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561217e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217590614091565b60405180910390fd5b612187816126b1565b50565b6000612195826122d1565b6121d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cb9061399e565b60405180910390fd5b600e6000838152602001908152602001600020549050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122ba57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806122ca57506122c98261298f565b5b9050919050565b6000600280549050821080156123525750600073ffffffffffffffffffffffffffffffffffffffff166002838154811061230e5761230d613abc565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b600033905090565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123d483610f9b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612425826122d1565b612464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245b90614123565b60405180910390fd5b600061246f83610f9b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806124de57508373ffffffffffffffffffffffffffffffffffffffff166124c6846109df565b73ffffffffffffffffffffffffffffffffffffffff16145b806124ef57506124ee8185611e49565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661251882610f9b565b73ffffffffffffffffffffffffffffffffffffffff161461256e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612565906141b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d590614247565b60405180910390fd5b6125e98383836129f9565b6125f4600082612361565b816002828154811061260957612608613abc565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6127828484846124f8565b61278e848484846129fe565b6127cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c4906142d9565b60405180910390fd5b50505050565b6060600082141561281b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061292f565b600082905060005b6000821461284d57808061283690613b1a565b915050600a826128469190614328565b9150612823565b60008167ffffffffffffffff81111561286957612868613100565b5b6040519080825280601f01601f19166020018201604052801561289b5781602001600182028036833780820191505090505b5090505b60008514612928576001826128b49190614359565b9150600a856128c3919061438d565b60306128cf9190613da5565b60f81b8183815181106128e5576128e4613abc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129219190614328565b945061289f565b8093505050505b919050565b61293e8383612b86565b61294b60008484846129fe565b61298a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612981906142d9565b60405180910390fd5b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b6000612a1f8473ffffffffffffffffffffffffffffffffffffffff16612d0e565b15612b79578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a48612359565b8786866040518563ffffffff1660e01b8152600401612a6a9493929190614413565b6020604051808303816000875af1925050508015612aa657506040513d601f19601f82011682018060405250810190612aa39190614474565b60015b612b29573d8060008114612ad6576040519150601f19603f3d011682016040523d82523d6000602084013e612adb565b606091505b50600081511415612b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b18906142d9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b7e565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bed906144ed565b60405180910390fd5b612bff816122d1565b15612c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3690614559565b60405180910390fd5b612c4b600083836129f9565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612d2d9061376a565b90600052602060002090601f016020900481019282612d4f5760008555612d96565b82601f10612d6857805160ff1916838001178555612d96565b82800160010185558215612d96579182015b82811115612d95578251825591602001919060010190612d7a565b5b509050612da39190612da7565b5090565b5b80821115612dc0576000816000905550600101612da8565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e0d81612dd8565b8114612e1857600080fd5b50565b600081359050612e2a81612e04565b92915050565b600060208284031215612e4657612e45612dce565b5b6000612e5484828501612e1b565b91505092915050565b60008115159050919050565b612e7281612e5d565b82525050565b6000602082019050612e8d6000830184612e69565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ecd578082015181840152602081019050612eb2565b83811115612edc576000848401525b50505050565b6000601f19601f8301169050919050565b6000612efe82612e93565b612f088185612e9e565b9350612f18818560208601612eaf565b612f2181612ee2565b840191505092915050565b60006020820190508181036000830152612f468184612ef3565b905092915050565b6000819050919050565b612f6181612f4e565b8114612f6c57600080fd5b50565b600081359050612f7e81612f58565b92915050565b600060208284031215612f9a57612f99612dce565b5b6000612fa884828501612f6f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fdc82612fb1565b9050919050565b612fec81612fd1565b82525050565b60006020820190506130076000830184612fe3565b92915050565b61301681612fd1565b811461302157600080fd5b50565b6000813590506130338161300d565b92915050565b600080604083850312156130505761304f612dce565b5b600061305e85828601613024565b925050602061306f85828601612f6f565b9150509250929050565b61308281612f4e565b82525050565b600060208201905061309d6000830184613079565b92915050565b6000806000606084860312156130bc576130bb612dce565b5b60006130ca86828701613024565b93505060206130db86828701613024565b92505060406130ec86828701612f6f565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61313882612ee2565b810181811067ffffffffffffffff8211171561315757613156613100565b5b80604052505050565b600061316a612dc4565b9050613176828261312f565b919050565b600067ffffffffffffffff82111561319657613195613100565b5b61319f82612ee2565b9050602081019050919050565b82818337600083830152505050565b60006131ce6131c98461317b565b613160565b9050828152602081018484840111156131ea576131e96130fb565b5b6131f58482856131ac565b509392505050565b600082601f830112613212576132116130f6565b5b81356132228482602086016131bb565b91505092915050565b60006020828403121561324157613240612dce565b5b600082013567ffffffffffffffff81111561325f5761325e612dd3565b5b61326b848285016131fd565b91505092915050565b60006020828403121561328a57613289612dce565b5b600061329884828501613024565b91505092915050565b600080600080600060a086880312156132bd576132bc612dce565b5b60006132cb88828901612f6f565b95505060206132dc88828901612f6f565b94505060406132ed88828901612f6f565b93505060606132fe88828901612f6f565b925050608061330f88828901612f6f565b9150509295509295909350565b600080fd5b600080fd5b60008083601f84011261333c5761333b6130f6565b5b8235905067ffffffffffffffff8111156133595761335861331c565b5b60208301915083602082028301111561337557613374613321565b5b9250929050565b6000806020838503121561339357613392612dce565b5b600083013567ffffffffffffffff8111156133b1576133b0612dd3565b5b6133bd85828601613326565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6133fe81612f4e565b82525050565b600061341083836133f5565b60208301905092915050565b6000602082019050919050565b6000613434826133c9565b61343e81856133d4565b9350613449836133e5565b8060005b8381101561347a5781516134618882613404565b975061346c8361341c565b92505060018101905061344d565b5085935050505092915050565b600060208201905081810360008301526134a18184613429565b905092915050565b6134b281612e5d565b81146134bd57600080fd5b50565b6000813590506134cf816134a9565b92915050565b600080604083850312156134ec576134eb612dce565b5b60006134fa85828601613024565b925050602061350b858286016134c0565b9150509250929050565b600067ffffffffffffffff8211156135305761352f613100565b5b61353982612ee2565b9050602081019050919050565b600061355961355484613515565b613160565b905082815260208101848484011115613575576135746130fb565b5b6135808482856131ac565b509392505050565b600082601f83011261359d5761359c6130f6565b5b81356135ad848260208601613546565b91505092915050565b600080600080608085870312156135d0576135cf612dce565b5b60006135de87828801613024565b94505060206135ef87828801613024565b935050604061360087828801612f6f565b925050606085013567ffffffffffffffff81111561362157613620612dd3565b5b61362d87828801613588565b91505092959194509250565b600080604083850312156136505761364f612dce565b5b600061365e85828601613024565b925050602061366f85828601613024565b9150509250929050565b60008060008060008060008060e0898b03121561369957613698612dce565b5b600089013567ffffffffffffffff8111156136b7576136b6612dd3565b5b6136c38b828c01613326565b985098505060206136d68b828c01612f6f565b96505060406136e78b828c01612f6f565b95505060606136f88b828c01612f6f565b94505060806137098b828c01612f6f565b93505060a061371a8b828c01612f6f565b92505060c061372b8b828c01612f6f565b9150509295985092959890939650565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061378257607f821691505b602082108114156137965761379561373b565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006137f8602c83612e9e565b91506138038261379c565b604082019050919050565b60006020820190508181036000830152613827816137eb565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061388a602183612e9e565b91506138958261382e565b604082019050919050565b600060208201905081810360008301526138b98161387d565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061391c603883612e9e565b9150613927826138c0565b604082019050919050565b6000602082019050818103600083015261394b8161390f565b9050919050565b7f546f6b656e20686173206e6f74206265656e206d696e74656420796574000000600082015250565b6000613988601d83612e9e565b915061399382613952565b602082019050919050565b600060208201905081810360008301526139b78161397b565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613a1a603183612e9e565b9150613a25826139be565b604082019050919050565b60006020820190508181036000830152613a4981613a0d565b9050919050565b7f455243373231456e756d3a206f776e657220696f6f6200000000000000000000600082015250565b6000613a86601683612e9e565b9150613a9182613a50565b602082019050919050565b60006020820190508181036000830152613ab581613a79565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b2582612f4e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b5857613b57613aeb565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b99602083612e9e565b9150613ba482613b63565b602082019050919050565b60006020820190508181036000830152613bc881613b8c565b9050919050565b600081905092915050565b50565b6000613bea600083613bcf565b9150613bf582613bda565b600082019050919050565b6000613c0b82613bdd565b9150819050919050565b7f455243373231456e756d3a20676c6f62616c20696f6f62000000000000000000600082015250565b6000613c4b601783612e9e565b9150613c5682613c15565b602082019050919050565b60006020820190508181036000830152613c7a81613c3e565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613cdd602983612e9e565b9150613ce882613c81565b604082019050919050565b60006020820190508181036000830152613d0c81613cd0565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613d6f602a83612e9e565b9150613d7a82613d13565b604082019050919050565b60006020820190508181036000830152613d9e81613d62565b9050919050565b6000613db082612f4e565b9150613dbb83612f4e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613df057613def613aeb565b5b828201905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613e31601983612e9e565b9150613e3c82613dfb565b602082019050919050565b60006020820190508181036000830152613e6081613e24565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154613e948161376a565b613e9e8186613e67565b94506001821660008114613eb95760018114613eca57613efd565b60ff19831686528186019350613efd565b613ed385613e72565b60005b83811015613ef557815481890152600182019150602081019050613ed6565b838801955050505b50505092915050565b6000613f1182612e93565b613f1b8185613e67565b9350613f2b818560208601612eaf565b80840191505092915050565b7f2d00000000000000000000000000000000000000000000000000000000000000600082015250565b6000613f6d600183613e67565b9150613f7882613f37565b600182019050919050565b6000613f8f828a613e87565b9150613f9b8289613f06565b9150613fa682613f60565b9150613fb28288613f06565b9150613fbd82613f60565b9150613fc98287613f06565b9150613fd482613f60565b9150613fe08286613f06565b9150613feb82613f60565b9150613ff78285613f06565b915061400282613f60565b915061400e8284613f06565b915081905098975050505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061407b602683612e9e565b91506140868261401f565b604082019050919050565b600060208201905081810360008301526140aa8161406e565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061410d602c83612e9e565b9150614118826140b1565b604082019050919050565b6000602082019050818103600083015261413c81614100565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b600061419f602983612e9e565b91506141aa82614143565b604082019050919050565b600060208201905081810360008301526141ce81614192565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614231602483612e9e565b915061423c826141d5565b604082019050919050565b6000602082019050818103600083015261426081614224565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006142c3603283612e9e565b91506142ce82614267565b604082019050919050565b600060208201905081810360008301526142f2816142b6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061433382612f4e565b915061433e83612f4e565b92508261434e5761434d6142f9565b5b828204905092915050565b600061436482612f4e565b915061436f83612f4e565b92508282101561438257614381613aeb565b5b828203905092915050565b600061439882612f4e565b91506143a383612f4e565b9250826143b3576143b26142f9565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006143e5826143be565b6143ef81856143c9565b93506143ff818560208601612eaf565b61440881612ee2565b840191505092915050565b60006080820190506144286000830187612fe3565b6144356020830186612fe3565b6144426040830185613079565b818103606083015261445481846143da565b905095945050505050565b60008151905061446e81612e04565b92915050565b60006020828403121561448a57614489612dce565b5b60006144988482850161445f565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006144d7602083612e9e565b91506144e2826144a1565b602082019050919050565b60006020820190508181036000830152614506816144ca565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614543601c83612e9e565b915061454e8261450d565b602082019050919050565b6000602082019050818103600083015261457281614536565b905091905056fea2646970667358221220d0f6fb53a07716ba2457287c765d6a47f15272669b7d42834068c8a51700c11e64736f6c634300080b0033
Deployed ByteCode Sourcemap
31152:5584:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29612:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23693:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24326:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23909:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30770:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33609:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25024:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31342:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29842:499;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36579:152;;;:::i;:::-;;25369:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30886:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35374:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23448:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36436:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31237:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23028:414;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4466:94;;;;;;;;;;;;;:::i;:::-;;33821:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34044:1306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36197:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30347:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3815:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23799:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24553:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33211:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33023:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25560:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35587:577;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32597:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32828:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24854:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31993:574;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4715:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33402:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29612:224;29714:4;29753:35;29738:50;;;:11;:50;;;;:90;;;;29792:36;29816:11;29792:23;:36::i;:::-;29738:90;29731:97;;29612:224;;;:::o;23693:100::-;23747:13;23780:5;23773:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23693:100;:::o;24326:221::-;24402:7;24430:16;24438:7;24430;:16::i;:::-;24422:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24515:15;:24;24531:7;24515:24;;;;;;;;;;;;;;;;;;;;;24508:31;;24326:221;;;:::o;23909:411::-;23990:13;24006:23;24021:7;24006:14;:23::i;:::-;23990:39;;24054:5;24048:11;;:2;:11;;;;24040:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24148:5;24132:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24157:37;24174:5;24181:12;:10;:12::i;:::-;24157:16;:37::i;:::-;24132:62;24110:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24291:21;24300:2;24304:7;24291:8;:21::i;:::-;23979:341;23909:411;;:::o;30770:110::-;30831:7;30858;:14;;;;30851:21;;30770:110;:::o;33609:179::-;33675:4;33695:16;33703:7;33695;:16::i;:::-;33687:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33761:12;:21;33774:7;33761:21;;;;;;;;;;;;33754:28;;33609:179;;;:::o;25024:339::-;25219:41;25238:12;:10;:12::i;:::-;25252:7;25219:18;:41::i;:::-;25211:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25327:28;25337:4;25343:2;25347:7;25327:9;:28::i;:::-;25024:339;;;:::o;31342:27::-;;;;:::o;29842:499::-;29931:15;29975:23;29992:5;29975:16;:23::i;:::-;29967:5;:31;29959:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30036:10;30062:6;30057:226;30074:7;:14;;;;30070:1;:18;30057:226;;;30123:7;30131:1;30123:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30114:19;;:5;:19;;;30110:162;;;30167:5;30158;:14;30154:102;;;30203:1;30196:8;;;;;;30154:102;30249:7;;;;:::i;:::-;;;30110:162;30090:3;;;;:::i;:::-;;;30057:226;;;;30301:5;30293:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;29948:393;29842:499;;;;;:::o;36579:152::-;4046:12;:10;:12::i;:::-;4035:23;;:7;:5;:7::i;:::-;:23;;;4027:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36629:12:::1;36655:10;36647:24;;36679:21;36647:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36628:77;;;36718:7;36710:16;;;::::0;::::1;;36624:107;36579:152::o:0;25369:185::-;25507:39;25524:4;25530:2;25534:7;25507:39;;;;;;;;;;;;:16;:39::i;:::-;25369:185;;;:::o;30886:200::-;30961:7;30997:30;:28;:30::i;:::-;30989:5;:38;30981:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31073:5;31066:12;;30886:200;;;:::o;35374:95::-;4046:12;:10;:12::i;:::-;4035:23;;:7;:5;:7::i;:::-;:23;;;4027:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35453:11:::1;35443:7;:21;;;;;;;;;;;;:::i;:::-;;35374:95:::0;:::o;23448:239::-;23520:7;23540:13;23556:7;23564;23556:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23540:32;;23608:1;23591:19;;:5;:19;;;;23583:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23674:5;23667:12;;;23448:239;;;:::o;36436:118::-;36502:4;36524:16;:22;36541:4;36524:22;;;;;;;;;;;;;;;;;;;;;;;;;36517:29;;36436:118;;;:::o;31237:81::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23028:414::-;23100:7;23145:1;23128:19;;:5;:19;;;;23120:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23205:10;23230:11;23244:7;:14;;;;23230:28;;23274:6;23269:119;23290:6;23286:1;:10;23269:119;;;23329:7;23337:1;23329:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23320:19;;:5;:19;;;23316:61;;;23356:7;;;;:::i;:::-;;;23316:61;23298:3;;;;:::i;:::-;;;23269:119;;;;23398:13;;;23429:5;23422:12;;;;23028:414;;;:::o;4466:94::-;4046:12;:10;:12::i;:::-;4035:23;;:7;:5;:7::i;:::-;:23;;;4027:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4531:21:::1;4549:1;4531:9;:21::i;:::-;4466:94::o:0;33821:201::-;33891:13;33920:16;33928:7;33920;:16::i;:::-;33912:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33986:20;:29;34007:7;33986:29;;;;;;;;;;;33979:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33821:201;;;:::o;34044:1306::-;34198:16;:28;34215:10;34198:28;;;;;;;;;;;;;;;;;;;;;;;;;34190:37;;;;;;34241:16;34249:7;34241;:16::i;:::-;34233:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34372:8;;34355:14;34322:21;:30;34344:7;34322:30;;;;;;;;;;;;:47;;;;:::i;:::-;:58;34319:255;;;34420:8;;34387:21;:30;34409:7;34387:30;;;;;;;;;;;:41;;;;34319:255;;;34453:15;34504:14;34471:21;:30;34493:7;34471:30;;;;;;;;;;;;:47;;;;:::i;:::-;34453:65;;34558:10;34525:21;:30;34547:7;34525:30;;;;;;;;;;;:43;;;;34446:128;34319:255;34640:8;;34624:13;34593:19;:28;34613:7;34593:28;;;;;;;;;;;;:44;;;;:::i;:::-;:55;34590:243;;;34686:8;;34655:19;:28;34675:7;34655:28;;;;;;;;;;;:39;;;;34590:243;;;34719:14;34767:13;34736:19;:28;34756:7;34736:28;;;;;;;;;;;;:44;;;;:::i;:::-;34719:61;;34818:9;34787:19;:28;34807:7;34787:28;;;;;;;;;;;:40;;;;34712:121;34590:243;34893:8;;34879:11;34850:17;:26;34868:7;34850:26;;;;;;;;;;;;:40;;;;:::i;:::-;:51;34847:237;;;34937:8;;34908:17;:26;34926:7;34908:26;;;;;;;;;;;:37;;;;34847:237;;;34979:12;35023:11;34994:17;:26;35012:7;34994:26;;;;;;;;;;;;:40;;;;:::i;:::-;34979:55;;35070:7;35041:17;:26;35059:7;35041:26;;;;;;;;;;;:36;;;;34970:114;34847:237;35146:8;;35131:12;35101:18;:27;35120:7;35101:27;;;;;;;;;;;;:42;;;;:::i;:::-;:53;35098:247;;;35191:8;;35161:18;:27;35180:7;35161:27;;;;;;;;;;;:38;;;;35098:247;;;35233:13;35279:12;35249:18;:27;35268:7;35249:27;;;;;;;;;;;;:42;;;;:::i;:::-;35233:58;;35328:8;35298:18;:27;35317:7;35298:27;;;;;;;;;;;:38;;;;35224:121;35098:247;34044:1306;;;;;:::o;36197:203::-;4046:12;:10;:12::i;:::-;4035:23;;:7;:5;:7::i;:::-;:23;;;4027:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36291:9:::1;36286:107;36306:9;;:16;;36302:1;:20;36286:107;;;36377:4;36344:16;:30;36361:9;;36371:1;36361:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;36344:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;36324:3;;;;;:::i;:::-;;;;36286:107;;;;36197:203:::0;;:::o;30347:417::-;30406:16;30447:23;30464:5;30447:16;:23::i;:::-;30443:1;:27;30435:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30508:18;30529:16;30539:5;30529:9;:16::i;:::-;30508:37;;30556:25;30598:10;30584:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30556:53;;30625:9;30620:111;30644:10;30640:1;:14;30620:111;;;30690:29;30710:5;30717:1;30690:19;:29::i;:::-;30676:8;30685:1;30676:11;;;;;;;;:::i;:::-;;;;;;;:43;;;;;30656:3;;;;;:::i;:::-;;;;30620:111;;;;30748:8;30741:15;;;;30347:417;;;:::o;3815:87::-;3861:7;3888:6;;;;;;;;;;;3881:13;;3815:87;:::o;23799:104::-;23855:13;23888:7;23881:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23799:104;:::o;24553:295::-;24668:12;:10;:12::i;:::-;24656:24;;:8;:24;;;;24648:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24768:8;24723:18;:32;24742:12;:10;:12::i;:::-;24723:32;;;;;;;;;;;;;;;:42;24756:8;24723:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24821:8;24792:48;;24807:12;:10;:12::i;:::-;24792:48;;;24831:8;24792:48;;;;;;:::i;:::-;;;;;;;;24553:295;;:::o;33211:185::-;33276:4;33296:16;33304:7;33296;:16::i;:::-;33288:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33362:19;:28;33382:7;33362:28;;;;;;;;;;;;33355:35;;33211:185;;;:::o;33023:181::-;33086:4;33106:16;33114:7;33106;:16::i;:::-;33098:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33172:17;:26;33190:7;33172:26;;;;;;;;;;;;33165:33;;33023:181;;;:::o;25560:328::-;25735:41;25754:12;:10;:12::i;:::-;25768:7;25735:18;:41::i;:::-;25727:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25841:39;25855:4;25861:2;25865:7;25874:5;25841:13;:39::i;:::-;25560:328;;;;:::o;35587:577::-;35660:13;35688:16;35696:7;35688;:16::i;:::-;35680:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35743:6;35752:17;:26;35770:7;35752:26;;;;;;;;;;;;35743:35;;35783:6;35792:21;:30;35814:7;35792:30;;;;;;;;;;;;35783:39;;35827:6;35836:19;:28;35856:7;35836:28;;;;;;;;;;;;35827:37;;35869:6;35878:17;:26;35896:7;35878:26;;;;;;;;;;;;35869:35;;35909:6;35918:18;:27;35937:7;35918:27;;;;;;;;;;;;35909:36;;35950:6;35959:12;:21;35972:7;35959:21;;;;;;;;;;;;35950:30;;36018:1;36000:7;35994:21;;;;;:::i;:::-;;;:25;:165;;;;;;;;;;;;;;;;;36046:7;36055:12;:1;:10;:12::i;:::-;36072;:1;:10;:12::i;:::-;36089;:1;:10;:12::i;:::-;36106;:1;:10;:12::i;:::-;36123;:1;:10;:12::i;:::-;36140;:1;:10;:12::i;:::-;36029:124;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35994:165;35987:172;;;;;;;;35587:577;;;:::o;32597:187::-;32666:4;32686:16;32694:7;32686;:16::i;:::-;32678:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32752:17;:26;32770:7;32752:26;;;;;;;;;;;;32745:33;;32597:187;;;:::o;32828:189::-;32895:4;32915:16;32923:7;32915;:16::i;:::-;32907:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32981:21;:30;33003:7;32981:30;;;;;;;;;;;;32974:37;;32828:189;;;:::o;24854:164::-;24951:4;24975:18;:25;24994:5;24975:25;;;;;;;;;;;;;;;:35;25001:8;24975:35;;;;;;;;;;;;;;;;;;;;;;;;;24968:42;;24854:164;;;;:::o;31993:574::-;4046:12;:10;:12::i;:::-;4035:23;;:7;:5;:7::i;:::-;:23;;;4027:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32198:5:::1;;32183:4;;:11;;32167:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:36;;32159:45;;;::::0;::::1;;32217:9;32212:349;32236:4;;:11;;32232:1;:15;32212:349;;;32260:9;32272:13;:11;:13::i;:::-;32260:25;;32296:29;32306:4;;32311:1;32306:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;32319:1;32315;:5;;;;:::i;:::-;32296:29;;;;;;;;;;;::::0;:9:::1;:29::i;:::-;32354:10;32331:17;:20;32349:1;32331:20;;;;;;;;;;;:33;;;;32397:10;32370:21;:24;32392:1;32370:24;;;;;;;;;;;:37;;;;32438:9;32413:19;:22;32433:1;32413:22;;;;;;;;;;;:34;;;;32476:7;32453:17;:20;32471:1;32453:20;;;;;;;;;;;:30;;;;32513:8;32489:18;:21;32508:1;32489:21;;;;;;;;;;;:32;;;;32545:7;32527:12;:15;32540:1;32527:15;;;;;;;;;;;:25;;;;32254:307;32249:3;;;;;:::i;:::-;;;;32212:349;;;;31993:574:::0;;;;;;;;:::o;4715:192::-;4046:12;:10;:12::i;:::-;4035:23;;:7;:5;:7::i;:::-;:23;;;4027:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4824:1:::1;4804:22;;:8;:22;;;;4796:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4880:19;4890:8;4880:9;:19::i;:::-;4715:192:::0;:::o;33402:183::-;33466:4;33486:16;33494:7;33486;:16::i;:::-;33478:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33552:18;:27;33571:7;33552:27;;;;;;;;;;;;33545:34;;33402:183;;;:::o;22717:305::-;22819:4;22871:25;22856:40;;;:11;:40;;;;:105;;;;22928:33;22913:48;;;:11;:48;;;;22856:105;:158;;;;22978:36;23002:11;22978:23;:36::i;:::-;22856:158;22836:178;;22717:305;;;:::o;26217:155::-;26282:4;26316:7;:14;;;;26306:7;:24;:58;;;;;26362:1;26334:30;;:7;26342;26334:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:30;;;;26306:58;26299:65;;26217:155;;;:::o;2638:98::-;2691:7;2718:10;2711:17;;2638:98;:::o;28366:174::-;28468:2;28441:15;:24;28457:7;28441:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;28524:7;28520:2;28486:46;;28495:23;28510:7;28495:14;:23::i;:::-;28486:46;;;;;;;;;;;;28366:174;;:::o;26375:348::-;26468:4;26493:16;26501:7;26493;:16::i;:::-;26485:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26569:13;26585:23;26600:7;26585:14;:23::i;:::-;26569:39;;26638:5;26627:16;;:7;:16;;;:51;;;;26671:7;26647:31;;:20;26659:7;26647:11;:20::i;:::-;:31;;;26627:51;:87;;;;26682:32;26699:5;26706:7;26682:16;:32::i;:::-;26627:87;26619:96;;;26375:348;;;;:::o;27847:516::-;28006:4;27979:31;;:23;27994:7;27979:14;:23::i;:::-;:31;;;27971:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28089:1;28075:16;;:2;:16;;;;28067:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28145:39;28166:4;28172:2;28176:7;28145:20;:39::i;:::-;28249:29;28266:1;28270:7;28249:8;:29::i;:::-;28308:2;28289:7;28297;28289:16;;;;;;;;:::i;:::-;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28347:7;28343:2;28328:27;;28337:4;28328:27;;;;;;;;;;;;27847:516;;;:::o;4915:173::-;4971:16;4990:6;;;;;;;;;;;4971:25;;5016:8;5007:6;;:17;;;;;;;;;;;;;;;;;;5071:8;5040:40;;5061:8;5040:40;;;;;;;;;;;;4960:128;4915:173;:::o;25899:315::-;26056:28;26066:4;26072:2;26076:7;26056:9;:28::i;:::-;26103:48;26126:4;26132:2;26136:7;26145:5;26103:22;:48::i;:::-;26095:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25899:315;;;;:::o;286:723::-;342:13;572:1;563:5;:10;559:53;;;590:10;;;;;;;;;;;;;;;;;;;;;559:53;622:12;637:5;622:20;;653:14;678:78;693:1;685:4;:9;678:78;;711:8;;;;;:::i;:::-;;;;742:2;734:10;;;;;:::i;:::-;;;678:78;;;766:19;798:6;788:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;766:39;;816:154;832:1;823:5;:10;816:154;;860:1;850:11;;;;;:::i;:::-;;;927:2;919:5;:10;;;;:::i;:::-;906:2;:24;;;;:::i;:::-;893:39;;876:6;883;876:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;956:2;947:11;;;;;:::i;:::-;;;816:154;;;994:6;980:21;;;;;286:723;;;;:::o;26839:321::-;26969:18;26975:2;26979:7;26969:5;:18::i;:::-;27020:54;27051:1;27055:2;27059:7;27068:5;27020:22;:54::i;:::-;26998:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;26839:321;;;:::o;15638:157::-;15723:4;15762:25;15747:40;;;:11;:40;;;;15740:47;;15638:157;;;:::o;29345:126::-;;;;:::o;28543:799::-;28698:4;28719:15;:2;:13;;;:15::i;:::-;28715:620;;;28771:2;28755:36;;;28792:12;:10;:12::i;:::-;28806:4;28812:7;28821:5;28755:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;28751:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29014:1;28997:6;:13;:18;28993:272;;;29040:60;;;;;;;;;;:::i;:::-;;;;;;;;28993:272;29215:6;29209:13;29200:6;29196:2;29192:15;29185:38;28751:529;28888:41;;;28878:51;;;:6;:51;;;;28871:58;;;;;28715:620;29319:4;29312:11;;28543:799;;;;;;;:::o;27163:346::-;27257:1;27243:16;;:2;:16;;;;27235:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27316:16;27324:7;27316;:16::i;:::-;27315:17;27307:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27378:45;27407:1;27411:2;27415:7;27378:20;:45::i;:::-;27434:7;27447:2;27434:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27493:7;27489:2;27468:33;;27485:1;27468:33;;;;;;;;;;;;27163:346;;:::o;5829:387::-;5889:4;6097:12;6164:7;6152:20;6144:28;;6207:1;6200:4;:8;6193:15;;;5829:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:180;6209:77;6206:1;6199:88;6306:4;6303:1;6296:15;6330:4;6327:1;6320:15;6347:281;6430:27;6452:4;6430:27;:::i;:::-;6422:6;6418:40;6560:6;6548:10;6545:22;6524:18;6512:10;6509:34;6506:62;6503:88;;;6571:18;;:::i;:::-;6503:88;6611:10;6607:2;6600:22;6390:238;6347:281;;:::o;6634:129::-;6668:6;6695:20;;:::i;:::-;6685:30;;6724:33;6752:4;6744:6;6724:33;:::i;:::-;6634:129;;;:::o;6769:308::-;6831:4;6921:18;6913:6;6910:30;6907:56;;;6943:18;;:::i;:::-;6907:56;6981:29;7003:6;6981:29;:::i;:::-;6973:37;;7065:4;7059;7055:15;7047:23;;6769:308;;;:::o;7083:154::-;7167:6;7162:3;7157;7144:30;7229:1;7220:6;7215:3;7211:16;7204:27;7083:154;;;:::o;7243:412::-;7321:5;7346:66;7362:49;7404:6;7362:49;:::i;:::-;7346:66;:::i;:::-;7337:75;;7435:6;7428:5;7421:21;7473:4;7466:5;7462:16;7511:3;7502:6;7497:3;7493:16;7490:25;7487:112;;;7518:79;;:::i;:::-;7487:112;7608:41;7642:6;7637:3;7632;7608:41;:::i;:::-;7327:328;7243:412;;;;;:::o;7675:340::-;7731:5;7780:3;7773:4;7765:6;7761:17;7757:27;7747:122;;7788:79;;:::i;:::-;7747:122;7905:6;7892:20;7930:79;8005:3;7997:6;7990:4;7982:6;7978:17;7930:79;:::i;:::-;7921:88;;7737:278;7675:340;;;;:::o;8021:509::-;8090:6;8139:2;8127:9;8118:7;8114:23;8110:32;8107:119;;;8145:79;;:::i;:::-;8107:119;8293:1;8282:9;8278:17;8265:31;8323:18;8315:6;8312:30;8309:117;;;8345:79;;:::i;:::-;8309:117;8450:63;8505:7;8496:6;8485:9;8481:22;8450:63;:::i;:::-;8440:73;;8236:287;8021:509;;;;:::o;8536:329::-;8595:6;8644:2;8632:9;8623:7;8619:23;8615:32;8612:119;;;8650:79;;:::i;:::-;8612:119;8770:1;8795:53;8840:7;8831:6;8820:9;8816:22;8795:53;:::i;:::-;8785:63;;8741:117;8536:329;;;;:::o;8871:911::-;8966:6;8974;8982;8990;8998;9047:3;9035:9;9026:7;9022:23;9018:33;9015:120;;;9054:79;;:::i;:::-;9015:120;9174:1;9199:53;9244:7;9235:6;9224:9;9220:22;9199:53;:::i;:::-;9189:63;;9145:117;9301:2;9327:53;9372:7;9363:6;9352:9;9348:22;9327:53;:::i;:::-;9317:63;;9272:118;9429:2;9455:53;9500:7;9491:6;9480:9;9476:22;9455:53;:::i;:::-;9445:63;;9400:118;9557:2;9583:53;9628:7;9619:6;9608:9;9604:22;9583:53;:::i;:::-;9573:63;;9528:118;9685:3;9712:53;9757:7;9748:6;9737:9;9733:22;9712:53;:::i;:::-;9702:63;;9656:119;8871:911;;;;;;;;:::o;9788:117::-;9897:1;9894;9887:12;9911:117;10020:1;10017;10010:12;10051:568;10124:8;10134:6;10184:3;10177:4;10169:6;10165:17;10161:27;10151:122;;10192:79;;:::i;:::-;10151:122;10305:6;10292:20;10282:30;;10335:18;10327:6;10324:30;10321:117;;;10357:79;;:::i;:::-;10321:117;10471:4;10463:6;10459:17;10447:29;;10525:3;10517:4;10509:6;10505:17;10495:8;10491:32;10488:41;10485:128;;;10532:79;;:::i;:::-;10485:128;10051:568;;;;;:::o;10625:559::-;10711:6;10719;10768:2;10756:9;10747:7;10743:23;10739:32;10736:119;;;10774:79;;:::i;:::-;10736:119;10922:1;10911:9;10907:17;10894:31;10952:18;10944:6;10941:30;10938:117;;;10974:79;;:::i;:::-;10938:117;11087:80;11159:7;11150:6;11139:9;11135:22;11087:80;:::i;:::-;11069:98;;;;10865:312;10625:559;;;;;:::o;11190:114::-;11257:6;11291:5;11285:12;11275:22;;11190:114;;;:::o;11310:184::-;11409:11;11443:6;11438:3;11431:19;11483:4;11478:3;11474:14;11459:29;;11310:184;;;;:::o;11500:132::-;11567:4;11590:3;11582:11;;11620:4;11615:3;11611:14;11603:22;;11500:132;;;:::o;11638:108::-;11715:24;11733:5;11715:24;:::i;:::-;11710:3;11703:37;11638:108;;:::o;11752:179::-;11821:10;11842:46;11884:3;11876:6;11842:46;:::i;:::-;11920:4;11915:3;11911:14;11897:28;;11752:179;;;;:::o;11937:113::-;12007:4;12039;12034:3;12030:14;12022:22;;11937:113;;;:::o;12086:732::-;12205:3;12234:54;12282:5;12234:54;:::i;:::-;12304:86;12383:6;12378:3;12304:86;:::i;:::-;12297:93;;12414:56;12464:5;12414:56;:::i;:::-;12493:7;12524:1;12509:284;12534:6;12531:1;12528:13;12509:284;;;12610:6;12604:13;12637:63;12696:3;12681:13;12637:63;:::i;:::-;12630:70;;12723:60;12776:6;12723:60;:::i;:::-;12713:70;;12569:224;12556:1;12553;12549:9;12544:14;;12509:284;;;12513:14;12809:3;12802:10;;12210:608;;;12086:732;;;;:::o;12824:373::-;12967:4;13005:2;12994:9;12990:18;12982:26;;13054:9;13048:4;13044:20;13040:1;13029:9;13025:17;13018:47;13082:108;13185:4;13176:6;13082:108;:::i;:::-;13074:116;;12824:373;;;;:::o;13203:116::-;13273:21;13288:5;13273:21;:::i;:::-;13266:5;13263:32;13253:60;;13309:1;13306;13299:12;13253:60;13203:116;:::o;13325:133::-;13368:5;13406:6;13393:20;13384:29;;13422:30;13446:5;13422:30;:::i;:::-;13325:133;;;;:::o;13464:468::-;13529:6;13537;13586:2;13574:9;13565:7;13561:23;13557:32;13554:119;;;13592:79;;:::i;:::-;13554:119;13712:1;13737:53;13782:7;13773:6;13762:9;13758:22;13737:53;:::i;:::-;13727:63;;13683:117;13839:2;13865:50;13907:7;13898:6;13887:9;13883:22;13865:50;:::i;:::-;13855:60;;13810:115;13464:468;;;;;:::o;13938:307::-;13999:4;14089:18;14081:6;14078:30;14075:56;;;14111:18;;:::i;:::-;14075:56;14149:29;14171:6;14149:29;:::i;:::-;14141:37;;14233:4;14227;14223:15;14215:23;;13938:307;;;:::o;14251:410::-;14328:5;14353:65;14369:48;14410:6;14369:48;:::i;:::-;14353:65;:::i;:::-;14344:74;;14441:6;14434:5;14427:21;14479:4;14472:5;14468:16;14517:3;14508:6;14503:3;14499:16;14496:25;14493:112;;;14524:79;;:::i;:::-;14493:112;14614:41;14648:6;14643:3;14638;14614:41;:::i;:::-;14334:327;14251:410;;;;;:::o;14680:338::-;14735:5;14784:3;14777:4;14769:6;14765:17;14761:27;14751:122;;14792:79;;:::i;:::-;14751:122;14909:6;14896:20;14934:78;15008:3;15000:6;14993:4;14985:6;14981:17;14934:78;:::i;:::-;14925:87;;14741:277;14680:338;;;;:::o;15024:943::-;15119:6;15127;15135;15143;15192:3;15180:9;15171:7;15167:23;15163:33;15160:120;;;15199:79;;:::i;:::-;15160:120;15319:1;15344:53;15389:7;15380:6;15369:9;15365:22;15344:53;:::i;:::-;15334:63;;15290:117;15446:2;15472:53;15517:7;15508:6;15497:9;15493:22;15472:53;:::i;:::-;15462:63;;15417:118;15574:2;15600:53;15645:7;15636:6;15625:9;15621:22;15600:53;:::i;:::-;15590:63;;15545:118;15730:2;15719:9;15715:18;15702:32;15761:18;15753:6;15750:30;15747:117;;;15783:79;;:::i;:::-;15747:117;15888:62;15942:7;15933:6;15922:9;15918:22;15888:62;:::i;:::-;15878:72;;15673:287;15024:943;;;;;;;:::o;15973:474::-;16041:6;16049;16098:2;16086:9;16077:7;16073:23;16069:32;16066:119;;;16104:79;;:::i;:::-;16066:119;16224:1;16249:53;16294:7;16285:6;16274:9;16270:22;16249:53;:::i;:::-;16239:63;;16195:117;16351:2;16377:53;16422:7;16413:6;16402:9;16398:22;16377:53;:::i;:::-;16367:63;;16322:118;15973:474;;;;;:::o;16453:1433::-;16593:6;16601;16609;16617;16625;16633;16641;16649;16698:3;16686:9;16677:7;16673:23;16669:33;16666:120;;;16705:79;;:::i;:::-;16666:120;16853:1;16842:9;16838:17;16825:31;16883:18;16875:6;16872:30;16869:117;;;16905:79;;:::i;:::-;16869:117;17018:80;17090:7;17081:6;17070:9;17066:22;17018:80;:::i;:::-;17000:98;;;;16796:312;17147:2;17173:53;17218:7;17209:6;17198:9;17194:22;17173:53;:::i;:::-;17163:63;;17118:118;17275:2;17301:53;17346:7;17337:6;17326:9;17322:22;17301:53;:::i;:::-;17291:63;;17246:118;17403:2;17429:53;17474:7;17465:6;17454:9;17450:22;17429:53;:::i;:::-;17419:63;;17374:118;17531:3;17558:53;17603:7;17594:6;17583:9;17579:22;17558:53;:::i;:::-;17548:63;;17502:119;17660:3;17687:53;17732:7;17723:6;17712:9;17708:22;17687:53;:::i;:::-;17677:63;;17631:119;17789:3;17816:53;17861:7;17852:6;17841:9;17837:22;17816:53;:::i;:::-;17806:63;;17760:119;16453:1433;;;;;;;;;;;:::o;17892:180::-;17940:77;17937:1;17930:88;18037:4;18034:1;18027:15;18061:4;18058:1;18051:15;18078:320;18122:6;18159:1;18153:4;18149:12;18139:22;;18206:1;18200:4;18196:12;18227:18;18217:81;;18283:4;18275:6;18271:17;18261:27;;18217:81;18345:2;18337:6;18334:14;18314:18;18311:38;18308:84;;;18364:18;;:::i;:::-;18308:84;18129:269;18078:320;;;:::o;18404:231::-;18544:34;18540:1;18532:6;18528:14;18521:58;18613:14;18608:2;18600:6;18596:15;18589:39;18404:231;:::o;18641:366::-;18783:3;18804:67;18868:2;18863:3;18804:67;:::i;:::-;18797:74;;18880:93;18969:3;18880:93;:::i;:::-;18998:2;18993:3;18989:12;18982:19;;18641:366;;;:::o;19013:419::-;19179:4;19217:2;19206:9;19202:18;19194:26;;19266:9;19260:4;19256:20;19252:1;19241:9;19237:17;19230:47;19294:131;19420:4;19294:131;:::i;:::-;19286:139;;19013:419;;;:::o;19438:220::-;19578:34;19574:1;19566:6;19562:14;19555:58;19647:3;19642:2;19634:6;19630:15;19623:28;19438:220;:::o;19664:366::-;19806:3;19827:67;19891:2;19886:3;19827:67;:::i;:::-;19820:74;;19903:93;19992:3;19903:93;:::i;:::-;20021:2;20016:3;20012:12;20005:19;;19664:366;;;:::o;20036:419::-;20202:4;20240:2;20229:9;20225:18;20217:26;;20289:9;20283:4;20279:20;20275:1;20264:9;20260:17;20253:47;20317:131;20443:4;20317:131;:::i;:::-;20309:139;;20036:419;;;:::o;20461:243::-;20601:34;20597:1;20589:6;20585:14;20578:58;20670:26;20665:2;20657:6;20653:15;20646:51;20461:243;:::o;20710:366::-;20852:3;20873:67;20937:2;20932:3;20873:67;:::i;:::-;20866:74;;20949:93;21038:3;20949:93;:::i;:::-;21067:2;21062:3;21058:12;21051:19;;20710:366;;;:::o;21082:419::-;21248:4;21286:2;21275:9;21271:18;21263:26;;21335:9;21329:4;21325:20;21321:1;21310:9;21306:17;21299:47;21363:131;21489:4;21363:131;:::i;:::-;21355:139;;21082:419;;;:::o;21507:179::-;21647:31;21643:1;21635:6;21631:14;21624:55;21507:179;:::o;21692:366::-;21834:3;21855:67;21919:2;21914:3;21855:67;:::i;:::-;21848:74;;21931:93;22020:3;21931:93;:::i;:::-;22049:2;22044:3;22040:12;22033:19;;21692:366;;;:::o;22064:419::-;22230:4;22268:2;22257:9;22253:18;22245:26;;22317:9;22311:4;22307:20;22303:1;22292:9;22288:17;22281:47;22345:131;22471:4;22345:131;:::i;:::-;22337:139;;22064:419;;;:::o;22489:236::-;22629:34;22625:1;22617:6;22613:14;22606:58;22698:19;22693:2;22685:6;22681:15;22674:44;22489:236;:::o;22731:366::-;22873:3;22894:67;22958:2;22953:3;22894:67;:::i;:::-;22887:74;;22970:93;23059:3;22970:93;:::i;:::-;23088:2;23083:3;23079:12;23072:19;;22731:366;;;:::o;23103:419::-;23269:4;23307:2;23296:9;23292:18;23284:26;;23356:9;23350:4;23346:20;23342:1;23331:9;23327:17;23320:47;23384:131;23510:4;23384:131;:::i;:::-;23376:139;;23103:419;;;:::o;23528:172::-;23668:24;23664:1;23656:6;23652:14;23645:48;23528:172;:::o;23706:366::-;23848:3;23869:67;23933:2;23928:3;23869:67;:::i;:::-;23862:74;;23945:93;24034:3;23945:93;:::i;:::-;24063:2;24058:3;24054:12;24047:19;;23706:366;;;:::o;24078:419::-;24244:4;24282:2;24271:9;24267:18;24259:26;;24331:9;24325:4;24321:20;24317:1;24306:9;24302:17;24295:47;24359:131;24485:4;24359:131;:::i;:::-;24351:139;;24078:419;;;:::o;24503:180::-;24551:77;24548:1;24541:88;24648:4;24645:1;24638:15;24672:4;24669:1;24662:15;24689:180;24737:77;24734:1;24727:88;24834:4;24831:1;24824:15;24858:4;24855:1;24848:15;24875:233;24914:3;24937:24;24955:5;24937:24;:::i;:::-;24928:33;;24983:66;24976:5;24973:77;24970:103;;;25053:18;;:::i;:::-;24970:103;25100:1;25093:5;25089:13;25082:20;;24875:233;;;:::o;25114:182::-;25254:34;25250:1;25242:6;25238:14;25231:58;25114:182;:::o;25302:366::-;25444:3;25465:67;25529:2;25524:3;25465:67;:::i;:::-;25458:74;;25541:93;25630:3;25541:93;:::i;:::-;25659:2;25654:3;25650:12;25643:19;;25302:366;;;:::o;25674:419::-;25840:4;25878:2;25867:9;25863:18;25855:26;;25927:9;25921:4;25917:20;25913:1;25902:9;25898:17;25891:47;25955:131;26081:4;25955:131;:::i;:::-;25947:139;;25674:419;;;:::o;26099:147::-;26200:11;26237:3;26222:18;;26099:147;;;;:::o;26252:114::-;;:::o;26372:398::-;26531:3;26552:83;26633:1;26628:3;26552:83;:::i;:::-;26545:90;;26644:93;26733:3;26644:93;:::i;:::-;26762:1;26757:3;26753:11;26746:18;;26372:398;;;:::o;26776:379::-;26960:3;26982:147;27125:3;26982:147;:::i;:::-;26975:154;;27146:3;27139:10;;26776:379;;;:::o;27161:173::-;27301:25;27297:1;27289:6;27285:14;27278:49;27161:173;:::o;27340:366::-;27482:3;27503:67;27567:2;27562:3;27503:67;:::i;:::-;27496:74;;27579:93;27668:3;27579:93;:::i;:::-;27697:2;27692:3;27688:12;27681:19;;27340:366;;;:::o;27712:419::-;27878:4;27916:2;27905:9;27901:18;27893:26;;27965:9;27959:4;27955:20;27951:1;27940:9;27936:17;27929:47;27993:131;28119:4;27993:131;:::i;:::-;27985:139;;27712:419;;;:::o;28137:228::-;28277:34;28273:1;28265:6;28261:14;28254:58;28346:11;28341:2;28333:6;28329:15;28322:36;28137:228;:::o;28371:366::-;28513:3;28534:67;28598:2;28593:3;28534:67;:::i;:::-;28527:74;;28610:93;28699:3;28610:93;:::i;:::-;28728:2;28723:3;28719:12;28712:19;;28371:366;;;:::o;28743:419::-;28909:4;28947:2;28936:9;28932:18;28924:26;;28996:9;28990:4;28986:20;28982:1;28971:9;28967:17;28960:47;29024:131;29150:4;29024:131;:::i;:::-;29016:139;;28743:419;;;:::o;29168:229::-;29308:34;29304:1;29296:6;29292:14;29285:58;29377:12;29372:2;29364:6;29360:15;29353:37;29168:229;:::o;29403:366::-;29545:3;29566:67;29630:2;29625:3;29566:67;:::i;:::-;29559:74;;29642:93;29731:3;29642:93;:::i;:::-;29760:2;29755:3;29751:12;29744:19;;29403:366;;;:::o;29775:419::-;29941:4;29979:2;29968:9;29964:18;29956:26;;30028:9;30022:4;30018:20;30014:1;30003:9;29999:17;29992:47;30056:131;30182:4;30056:131;:::i;:::-;30048:139;;29775:419;;;:::o;30200:305::-;30240:3;30259:20;30277:1;30259:20;:::i;:::-;30254:25;;30293:20;30311:1;30293:20;:::i;:::-;30288:25;;30447:1;30379:66;30375:74;30372:1;30369:81;30366:107;;;30453:18;;:::i;:::-;30366:107;30497:1;30494;30490:9;30483:16;;30200:305;;;;:::o;30511:175::-;30651:27;30647:1;30639:6;30635:14;30628:51;30511:175;:::o;30692:366::-;30834:3;30855:67;30919:2;30914:3;30855:67;:::i;:::-;30848:74;;30931:93;31020:3;30931:93;:::i;:::-;31049:2;31044:3;31040:12;31033:19;;30692:366;;;:::o;31064:419::-;31230:4;31268:2;31257:9;31253:18;31245:26;;31317:9;31311:4;31307:20;31303:1;31292:9;31288:17;31281:47;31345:131;31471:4;31345:131;:::i;:::-;31337:139;;31064:419;;;:::o;31489:148::-;31591:11;31628:3;31613:18;;31489:148;;;;:::o;31643:141::-;31692:4;31715:3;31707:11;;31738:3;31735:1;31728:14;31772:4;31769:1;31759:18;31751:26;;31643:141;;;:::o;31814:845::-;31917:3;31954:5;31948:12;31983:36;32009:9;31983:36;:::i;:::-;32035:89;32117:6;32112:3;32035:89;:::i;:::-;32028:96;;32155:1;32144:9;32140:17;32171:1;32166:137;;;;32317:1;32312:341;;;;32133:520;;32166:137;32250:4;32246:9;32235;32231:25;32226:3;32219:38;32286:6;32281:3;32277:16;32270:23;;32166:137;;32312:341;32379:38;32411:5;32379:38;:::i;:::-;32439:1;32453:154;32467:6;32464:1;32461:13;32453:154;;;32541:7;32535:14;32531:1;32526:3;32522:11;32515:35;32591:1;32582:7;32578:15;32567:26;;32489:4;32486:1;32482:12;32477:17;;32453:154;;;32636:6;32631:3;32627:16;32620:23;;32319:334;;32133:520;;31921:738;;31814:845;;;;:::o;32665:377::-;32771:3;32799:39;32832:5;32799:39;:::i;:::-;32854:89;32936:6;32931:3;32854:89;:::i;:::-;32847:96;;32952:52;32997:6;32992:3;32985:4;32978:5;32974:16;32952:52;:::i;:::-;33029:6;33024:3;33020:16;33013:23;;32775:267;32665:377;;;;:::o;33048:151::-;33188:3;33184:1;33176:6;33172:14;33165:27;33048:151;:::o;33205:400::-;33365:3;33386:84;33468:1;33463:3;33386:84;:::i;:::-;33379:91;;33479:93;33568:3;33479:93;:::i;:::-;33597:1;33592:3;33588:11;33581:18;;33205:400;;;:::o;33611:2559::-;34533:3;34555:92;34643:3;34634:6;34555:92;:::i;:::-;34548:99;;34664:95;34755:3;34746:6;34664:95;:::i;:::-;34657:102;;34776:148;34920:3;34776:148;:::i;:::-;34769:155;;34941:95;35032:3;35023:6;34941:95;:::i;:::-;34934:102;;35053:148;35197:3;35053:148;:::i;:::-;35046:155;;35218:95;35309:3;35300:6;35218:95;:::i;:::-;35211:102;;35330:148;35474:3;35330:148;:::i;:::-;35323:155;;35495:95;35586:3;35577:6;35495:95;:::i;:::-;35488:102;;35607:148;35751:3;35607:148;:::i;:::-;35600:155;;35772:95;35863:3;35854:6;35772:95;:::i;:::-;35765:102;;35884:148;36028:3;35884:148;:::i;:::-;35877:155;;36049:95;36140:3;36131:6;36049:95;:::i;:::-;36042:102;;36161:3;36154:10;;33611:2559;;;;;;;;;;:::o;36176:225::-;36316:34;36312:1;36304:6;36300:14;36293:58;36385:8;36380:2;36372:6;36368:15;36361:33;36176:225;:::o;36407:366::-;36549:3;36570:67;36634:2;36629:3;36570:67;:::i;:::-;36563:74;;36646:93;36735:3;36646:93;:::i;:::-;36764:2;36759:3;36755:12;36748:19;;36407:366;;;:::o;36779:419::-;36945:4;36983:2;36972:9;36968:18;36960:26;;37032:9;37026:4;37022:20;37018:1;37007:9;37003:17;36996:47;37060:131;37186:4;37060:131;:::i;:::-;37052:139;;36779:419;;;:::o;37204:231::-;37344:34;37340:1;37332:6;37328:14;37321:58;37413:14;37408:2;37400:6;37396:15;37389:39;37204:231;:::o;37441:366::-;37583:3;37604:67;37668:2;37663:3;37604:67;:::i;:::-;37597:74;;37680:93;37769:3;37680:93;:::i;:::-;37798:2;37793:3;37789:12;37782:19;;37441:366;;;:::o;37813:419::-;37979:4;38017:2;38006:9;38002:18;37994:26;;38066:9;38060:4;38056:20;38052:1;38041:9;38037:17;38030:47;38094:131;38220:4;38094:131;:::i;:::-;38086:139;;37813:419;;;:::o;38238:228::-;38378:34;38374:1;38366:6;38362:14;38355:58;38447:11;38442:2;38434:6;38430:15;38423:36;38238:228;:::o;38472:366::-;38614:3;38635:67;38699:2;38694:3;38635:67;:::i;:::-;38628:74;;38711:93;38800:3;38711:93;:::i;:::-;38829:2;38824:3;38820:12;38813:19;;38472:366;;;:::o;38844:419::-;39010:4;39048:2;39037:9;39033:18;39025:26;;39097:9;39091:4;39087:20;39083:1;39072:9;39068:17;39061:47;39125:131;39251:4;39125:131;:::i;:::-;39117:139;;38844:419;;;:::o;39269:223::-;39409:34;39405:1;39397:6;39393:14;39386:58;39478:6;39473:2;39465:6;39461:15;39454:31;39269:223;:::o;39498:366::-;39640:3;39661:67;39725:2;39720:3;39661:67;:::i;:::-;39654:74;;39737:93;39826:3;39737:93;:::i;:::-;39855:2;39850:3;39846:12;39839:19;;39498:366;;;:::o;39870:419::-;40036:4;40074:2;40063:9;40059:18;40051:26;;40123:9;40117:4;40113:20;40109:1;40098:9;40094:17;40087:47;40151:131;40277:4;40151:131;:::i;:::-;40143:139;;39870:419;;;:::o;40295:237::-;40435:34;40431:1;40423:6;40419:14;40412:58;40504:20;40499:2;40491:6;40487:15;40480:45;40295:237;:::o;40538:366::-;40680:3;40701:67;40765:2;40760:3;40701:67;:::i;:::-;40694:74;;40777:93;40866:3;40777:93;:::i;:::-;40895:2;40890:3;40886:12;40879:19;;40538:366;;;:::o;40910:419::-;41076:4;41114:2;41103:9;41099:18;41091:26;;41163:9;41157:4;41153:20;41149:1;41138:9;41134:17;41127:47;41191:131;41317:4;41191:131;:::i;:::-;41183:139;;40910:419;;;:::o;41335:180::-;41383:77;41380:1;41373:88;41480:4;41477:1;41470:15;41504:4;41501:1;41494:15;41521:185;41561:1;41578:20;41596:1;41578:20;:::i;:::-;41573:25;;41612:20;41630:1;41612:20;:::i;:::-;41607:25;;41651:1;41641:35;;41656:18;;:::i;:::-;41641:35;41698:1;41695;41691:9;41686:14;;41521:185;;;;:::o;41712:191::-;41752:4;41772:20;41790:1;41772:20;:::i;:::-;41767:25;;41806:20;41824:1;41806:20;:::i;:::-;41801:25;;41845:1;41842;41839:8;41836:34;;;41850:18;;:::i;:::-;41836:34;41895:1;41892;41888:9;41880:17;;41712:191;;;;:::o;41909:176::-;41941:1;41958:20;41976:1;41958:20;:::i;:::-;41953:25;;41992:20;42010:1;41992:20;:::i;:::-;41987:25;;42031:1;42021:35;;42036:18;;:::i;:::-;42021:35;42077:1;42074;42070:9;42065:14;;41909:176;;;;:::o;42091:98::-;42142:6;42176:5;42170:12;42160:22;;42091:98;;;:::o;42195:168::-;42278:11;42312:6;42307:3;42300:19;42352:4;42347:3;42343:14;42328:29;;42195:168;;;;:::o;42369:360::-;42455:3;42483:38;42515:5;42483:38;:::i;:::-;42537:70;42600:6;42595:3;42537:70;:::i;:::-;42530:77;;42616:52;42661:6;42656:3;42649:4;42642:5;42638:16;42616:52;:::i;:::-;42693:29;42715:6;42693:29;:::i;:::-;42688:3;42684:39;42677:46;;42459:270;42369:360;;;;:::o;42735:640::-;42930:4;42968:3;42957:9;42953:19;42945:27;;42982:71;43050:1;43039:9;43035:17;43026:6;42982:71;:::i;:::-;43063:72;43131:2;43120:9;43116:18;43107:6;43063:72;:::i;:::-;43145;43213:2;43202:9;43198:18;43189:6;43145:72;:::i;:::-;43264:9;43258:4;43254:20;43249:2;43238:9;43234:18;43227:48;43292:76;43363:4;43354:6;43292:76;:::i;:::-;43284:84;;42735:640;;;;;;;:::o;43381:141::-;43437:5;43468:6;43462:13;43453:22;;43484:32;43510:5;43484:32;:::i;:::-;43381:141;;;;:::o;43528:349::-;43597:6;43646:2;43634:9;43625:7;43621:23;43617:32;43614:119;;;43652:79;;:::i;:::-;43614:119;43772:1;43797:63;43852:7;43843:6;43832:9;43828:22;43797:63;:::i;:::-;43787:73;;43743:127;43528:349;;;;:::o;43883:182::-;44023:34;44019:1;44011:6;44007:14;44000:58;43883:182;:::o;44071:366::-;44213:3;44234:67;44298:2;44293:3;44234:67;:::i;:::-;44227:74;;44310:93;44399:3;44310:93;:::i;:::-;44428:2;44423:3;44419:12;44412:19;;44071:366;;;:::o;44443:419::-;44609:4;44647:2;44636:9;44632:18;44624:26;;44696:9;44690:4;44686:20;44682:1;44671:9;44667:17;44660:47;44724:131;44850:4;44724:131;:::i;:::-;44716:139;;44443:419;;;:::o;44868:178::-;45008:30;45004:1;44996:6;44992:14;44985:54;44868:178;:::o;45052:366::-;45194:3;45215:67;45279:2;45274:3;45215:67;:::i;:::-;45208:74;;45291:93;45380:3;45291:93;:::i;:::-;45409:2;45404:3;45400:12;45393:19;;45052:366;;;:::o;45424:419::-;45590:4;45628:2;45617:9;45613:18;45605:26;;45677:9;45671:4;45667:20;45663:1;45652:9;45648:17;45641:47;45705:131;45831:4;45705:131;:::i;:::-;45697:139;;45424:419;;;:::o
Metadata Hash
ipfs://d0f6fb53a07716ba2457287c765d6a47f15272669b7d42834068c8a51700c11e