More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 23,353 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Safe Transfer Fr... | 70580806 | 39 hrs ago | IN | 0 POL | 0.00160994 | ||||
Safe Transfer Fr... | 69511477 | 28 days ago | IN | 0 POL | 0.00167682 | ||||
Safe Transfer Fr... | 69511474 | 28 days ago | IN | 0 POL | 0.00173987 | ||||
Safe Transfer Fr... | 69511472 | 28 days ago | IN | 0 POL | 0.00173987 | ||||
Safe Transfer Fr... | 69511469 | 28 days ago | IN | 0 POL | 0.00173987 | ||||
Safe Transfer Fr... | 69511233 | 28 days ago | IN | 0 POL | 0.00185598 | ||||
Safe Transfer Fr... | 69511232 | 28 days ago | IN | 0 POL | 0.00185598 | ||||
Safe Transfer Fr... | 69511232 | 28 days ago | IN | 0 POL | 0.00180726 | ||||
Safe Transfer Fr... | 69511231 | 28 days ago | IN | 0 POL | 0.00180726 | ||||
Safe Transfer Fr... | 69511231 | 28 days ago | IN | 0 POL | 0.00180726 | ||||
Safe Transfer Fr... | 69511231 | 28 days ago | IN | 0 POL | 0.00180726 | ||||
Safe Transfer Fr... | 69511216 | 28 days ago | IN | 0 POL | 0.00180726 | ||||
Safe Transfer Fr... | 69511213 | 28 days ago | IN | 0 POL | 0.00180726 | ||||
Safe Transfer Fr... | 69511209 | 28 days ago | IN | 0 POL | 0.00173987 | ||||
Safe Transfer Fr... | 69511205 | 28 days ago | IN | 0 POL | 0.00173987 | ||||
Safe Transfer Fr... | 69511202 | 28 days ago | IN | 0 POL | 0.00174057 | ||||
Safe Transfer Fr... | 69511199 | 28 days ago | IN | 0 POL | 0.00160446 | ||||
Safe Transfer Fr... | 69511196 | 28 days ago | IN | 0 POL | 0.00160446 | ||||
Safe Transfer Fr... | 69511193 | 28 days ago | IN | 0 POL | 0.00160601 | ||||
Safe Transfer Fr... | 69511190 | 28 days ago | IN | 0 POL | 0.00160601 | ||||
Safe Transfer Fr... | 69511187 | 28 days ago | IN | 0 POL | 0.00160601 | ||||
Safe Transfer Fr... | 69511184 | 28 days ago | IN | 0 POL | 0.00160601 | ||||
Safe Transfer Fr... | 69511181 | 28 days ago | IN | 0 POL | 0.00173987 | ||||
Safe Transfer Fr... | 69511177 | 28 days ago | IN | 0 POL | 0.00173987 | ||||
Safe Transfer Fr... | 69511174 | 28 days ago | IN | 0 POL | 0.00200835 |
Loading...
Loading
Contract Name:
GFCGenesisWeapon
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-12-08 */ // File: contracts/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: contracts/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: contracts/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: contracts/Whitelist.sol pragma solidity ^0.8.0; contract Whitelist is Ownable { // address[] private whitelisted; mapping(address => bool) private whitelisted; function addWhitelistedAddress(address addr) public onlyOwner { whitelisted[addr] = true; } function removeWhitelistedAddress(address addr) public onlyOwner { whitelisted[addr] = false; } function checkWhitelist(address addr) internal view returns (bool) { return msg.sender == owner() || whitelisted[addr]; } modifier isWhitelisted { require(checkWhitelist(msg.sender), "Only whitelisted address can call this"); _; } } // File: contracts/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: contracts/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: contracts/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: contracts/IERC1155Receiver.sol pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: contracts/IERC1155.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: contracts/IERC1155MetadataURI.sol pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: contracts/ERC1155.sol pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(_msgSender() != operator, "ERC1155: setting approval status for self"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`. * * Emits a {TransferSingle} event. * * Requirements: * * - `account` cannot be the zero address. * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address account, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(account != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][account] += amount; emit TransferSingle(operator, address(0), account, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `account` * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens of token type `id`. */ function _burn( address account, uint256 id, uint256 amount ) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 accountBalance = _balances[id][account]; require(accountBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][account] = accountBalance - amount; } emit TransferSingle(operator, account, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address account, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 accountBalance = _balances[id][account]; require(accountBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][account] = accountBalance - amount; } } emit TransferBatch(operator, account, address(0), ids, amounts); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: contracts/ERC1155Burnable.sol pragma solidity ^0.8.0; /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. * * _Available since v3.1._ */ abstract contract ERC1155Burnable is ERC1155 { function burn( address account, uint256 id, uint256 value ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burn(account, id, value); } function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burnBatch(account, ids, values); } } // File: contracts/GFCGenesisWeapon.sol pragma solidity ^0.8.4; contract GFCGenesisWeapon is ERC1155Burnable, Ownable, Whitelist { using Strings for uint256; //OpenSea's Proxy contract for ERC1155 on Polygon address public OPEN_SEA = 0x207Fa8Df3a17D96Ca7EA4f2893fcdCb78a304101; //probability arrays uint16[][2] public PROBs; //arrays of total number of melee weapons in each tier uint16[] public meleeWeaponCount; //arrays of total number of ranged weapons in each tier uint16[] public rangedWeaponCount; constructor(string memory path) ERC1155(path){ //Initialise the probabilities //Probability for Tiers with Tier 1 keys PROBs[0] = [0, 0, 44, 35, 15, 6]; //Probability for Tiers with Tier 2/3 keys PROBs[1] = [0, 45, 30, 18, 6, 1]; //Initalise the total number of weapons meleeWeaponCount = [0, 3, 2, 1, 2, 1]; rangedWeaponCount = [0, 2, 4, 11, 5, 6]; } function mintWeapon(address account, uint256 weaponId, uint256 amount) public isWhitelisted returns (uint256){ _mint(account, weaponId, amount, ""); return weaponId; } function MintTier1KeyMeleeWeapon(address account, uint256 amount, uint256 ranNum) external isWhitelisted returns (uint256){ uint256[] memory ranNums = expand(ranNum, 2); uint8 weaponTier = rarityGen(ranNums[0] % 100, 0); uint256 weaponType = ranNums[1] % meleeWeaponCount[weaponTier]; uint256 weaponId = 1*10000 + weaponTier*1000 + weaponType; _mint(account, weaponId, amount, ""); return weaponId; } function MintTier1KeyRangedWeapon(address account, uint256 amount, uint256 ranNum) external isWhitelisted returns (uint256){ uint256[] memory ranNums = expand(ranNum, 2); uint8 weaponTier = rarityGen(ranNums[0] % 100, 0); uint256 weaponType = ranNums[1] % rangedWeaponCount[weaponTier]; uint256 weaponId = 1*20000 + weaponTier*1000 + weaponType; _mint(account, weaponId, amount, ""); return weaponId; } function MintTier2KeyRangedWeapon(address account, uint256 amount, uint256 ranNum) external isWhitelisted returns (uint256){ uint256[] memory ranNums = expand(ranNum, 2); uint8 weaponTier = rarityGen(ranNums[0] % 100, 1); uint256 weaponType = ranNums[1] % rangedWeaponCount[weaponTier]; uint256 weaponId = 1*20000 + weaponTier*1000 + weaponType; _mint(account, weaponId, amount, ""); return weaponId; } function MintTier3KeyMeleeWeapon(address account, uint256 amount, uint256 ranNum) external isWhitelisted returns (uint256){ uint256[] memory ranNums = expand(ranNum, 2); uint8 weaponTier = rarityGen(ranNums[0] % 100, 1); uint256 weaponType = ranNums[1] % meleeWeaponCount[weaponTier]; uint256 weaponId = 1*10000 + weaponTier*1000 + weaponType; _mint(account, weaponId, amount, ""); return weaponId; } function expand(uint256 randomValue, uint256 n) public pure returns (uint256[] memory expandedValues) { expandedValues = new uint256[](n); for (uint256 i = 0; i < n; i++) { expandedValues[i] = uint256(keccak256(abi.encode(randomValue, i))); } return expandedValues; } /** * @dev Converts a digit from 0 - 10000 into its corresponding rarity based on the given rarity tier. * @param _randinput The input from 0 - 10000 to use for rarity gen. */ function rarityGen(uint256 _randinput, uint256 number) internal view returns (uint8) { uint16 currentLowerBound = 0; for (uint8 i = 0; i < PROBs[number].length; i++) { uint16 thisPercentage = PROBs[number][i]; if(thisPercentage == 0){ continue; } if ( _randinput >= currentLowerBound && _randinput < currentLowerBound + thisPercentage ) return i; currentLowerBound = currentLowerBound + thisPercentage; } return 1; } function setProbability(uint256 index, uint16[] calldata array) public onlyOwner{ PROBs[index] = array; } function setMeleeCount(uint16[] calldata array) public onlyOwner{ meleeWeaponCount = array; } function setRangedCount(uint16[] calldata array) public onlyOwner{ rangedWeaponCount = array; } function setOpenSea(address addr) public onlyOwner { OPEN_SEA = addr; } function setURI(string memory newURI) public onlyOwner { _setURI(newURI); } function name() external pure returns (string memory) { return "GFCGenesisWeapon"; } function symbol() external pure returns (string memory) { return "GFCGW"; } function uri(uint256 tokenId) public view override returns (string memory) { string memory baseURI = ERC1155.uri(tokenId); return string(abi.encodePacked(baseURI, Strings.toString(tokenId))); } /** * Override isApprovedForAll to auto-approve OS's proxy contract */ function isApprovedForAll( address _owner, address _operator ) public override view returns (bool isOperator) { // if OpenSea's ERC1155 Proxy Address is detected, auto-return true if (_operator == OPEN_SEA) { return true; } // otherwise, use the default ERC1155.isApprovedForAll() return ERC1155.isApprovedForAll(_owner, _operator); } /* * Override burn and burnBatch function to allow for whitelisted addresses to call on these two functions */ function burn(address account, uint256 id, uint256 value) public override isWhitelisted { _burn(account, id, value); } function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public override isWhitelisted { _burnBatch(account, ids, values); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"path","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"ranNum","type":"uint256"}],"name":"MintTier1KeyMeleeWeapon","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"ranNum","type":"uint256"}],"name":"MintTier1KeyRangedWeapon","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"ranNum","type":"uint256"}],"name":"MintTier2KeyRangedWeapon","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"ranNum","type":"uint256"}],"name":"MintTier3KeyMeleeWeapon","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"OPEN_SEA","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"PROBs","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addWhitelistedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"randomValue","type":"uint256"},{"internalType":"uint256","name":"n","type":"uint256"}],"name":"expand","outputs":[{"internalType":"uint256[]","name":"expandedValues","type":"uint256[]"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"meleeWeaponCount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"weaponId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintWeapon","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rangedWeaponCount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removeWhitelistedAddress","outputs":[],"stateMutability":"nonpayable","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":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"array","type":"uint16[]"}],"name":"setMeleeCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setOpenSea","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint16[]","name":"array","type":"uint16[]"}],"name":"setProbability","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"array","type":"uint16[]"}],"name":"setRangedCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405273207fa8df3a17d96ca7ea4f2893fcdcb78a304101600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200006657600080fd5b50604051620058ca380380620058ca83398181016040528101906200008c919062000558565b806200009e816200029c60201b60201c565b50620000bf620000b3620002b860201b60201c565b620002c060201b60201c565b6040518060c00160405280600060ff168152602001600060ff168152602001602c60ff168152602001602360ff168152602001600f60ff168152602001600660ff16815250600660006002811062000140577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b019060066200015192919062000386565b506040518060c00160405280600060ff168152602001602d60ff168152602001601e60ff168152602001601260ff168152602001600660ff168152602001600160ff168152506006600160028110620001d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01906006620001e492919062000386565b506040518060c00160405280600060ff168152602001600360ff168152602001600260ff168152602001600160ff168152602001600260ff168152602001600160ff1681525060089060066200023c92919062000386565b506040518060c00160405280600060ff168152602001600260ff168152602001600460ff168152602001600b60ff168152602001600560ff168152602001600660ff1681525060099060066200029492919062000386565b50506200070d565b8060029080519060200190620002b492919062000436565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805482825590600052602060002090600f01601090048101928215620004235791602002820160005b83821115620003f157835183826101000a81548161ffff021916908360ff1602179055509260200192600201602081600101049283019260010302620003b0565b8015620004215782816101000a81549061ffff0219169055600201602081600101049283019260010302620003f1565b505b509050620004329190620004c7565b5090565b828054620004449062000632565b90600052602060002090601f016020900481019282620004685760008555620004b4565b82601f106200048357805160ff1916838001178555620004b4565b82800160010185558215620004b4579182015b82811115620004b357825182559160200191906001019062000496565b5b509050620004c39190620004c7565b5090565b5b80821115620004e2576000816000905550600101620004c8565b5090565b6000620004fd620004f784620005c6565b6200059d565b9050828152602081018484840111156200051657600080fd5b62000523848285620005fc565b509392505050565b600082601f8301126200053d57600080fd5b81516200054f848260208601620004e6565b91505092915050565b6000602082840312156200056b57600080fd5b600082015167ffffffffffffffff8111156200058657600080fd5b62000594848285016200052b565b91505092915050565b6000620005a9620005bc565b9050620005b7828262000668565b919050565b6000604051905090565b600067ffffffffffffffff821115620005e457620005e3620006cd565b5b620005ef82620006fc565b9050602081019050919050565b60005b838110156200061c578082015181840152602081019050620005ff565b838111156200062c576000848401525b50505050565b600060028204905060018216806200064b57607f821691505b602082108114156200066257620006616200069e565b5b50919050565b6200067382620006fc565b810181811067ffffffffffffffff82111715620006955762000694620006cd565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6151ad806200071d6000396000f3fe608060405234801561001057600080fd5b50600436106101ef5760003560e01c80637dc21b481161010f578063b9ed36cc116100a2578063f242432a11610071578063f242432a146105fe578063f2fde38b1461061a578063f5298aca14610636578063fde94eea14610652576101ef565b8063b9ed36cc14610552578063da596e6614610582578063e2f198bb1461059e578063e985e9c5146105ce576101ef565b80638da5cb5b116100de5780638da5cb5b146104dc57806395d89b41146104fa578063a22cb46514610518578063b3afdfb914610534576101ef565b80637dc21b48146104305780637f2f40ca1461044c57806382d0e6c11461047c578063874b3afc146104ac576101ef565b80632eb2c2d611610187578063530cd5ab11610156578063530cd5ab146103be578063591ffd54146103da5780636b20c4541461040a578063715018a614610426576101ef565b80632eb2c2d6146103265780633938537f1461034257806340573e13146103725780634e1273f41461038e576101ef565b806309860866116101c3578063098608661461028e5780630e89341c146102aa57806329975b43146102da5780632d7d7977146102f6576101ef565b8062fdd58e146101f457806301ffc9a71461022457806302fe53051461025457806306fdde0314610270575b600080fd5b61020e60048036038101906102099190613c47565b610682565b60405161021b9190614619565b60405180910390f35b61023e60048036038101906102399190613d83565b61074b565b60405161024b91906143c1565b60405180910390f35b61026e60048036038101906102699190613dd5565b61082d565b005b6102786108b5565b60405161028591906143dc565b60405180910390f35b6102a860048036038101906102a39190613e3f565b6108f2565b005b6102c460048036038101906102bf9190613e16565b6109be565b6040516102d191906143dc565b60405180910390f35b6102f460048036038101906102ef91906139d9565b6109ff565b005b610310600480360381019061030b9190613e16565b610ad6565b60405161031d91906145fe565b60405180910390f35b610340600480360381019061033b9190613a3e565b610b0e565b005b61035c60048036038101906103579190613c83565b610baf565b6040516103699190614619565b60405180910390f35b61038c60048036038101906103879190613d3e565b610d73565b005b6103a860048036038101906103a39190613cd2565b610e05565b6040516103b59190614368565b60405180910390f35b6103d860048036038101906103d391906139d9565b610fb6565b005b6103f460048036038101906103ef9190613e16565b61108d565b60405161040191906145fe565b60405180910390f35b610424600480360381019061041f9190613b8c565b6110c5565b005b61042e61111d565b005b61044a600480360381019061044591906139d9565b6111a5565b005b61046660048036038101906104619190613c83565b611265565b6040516104739190614619565b60405180910390f35b61049660048036038101906104919190613c83565b611429565b6040516104a39190614619565b60405180910390f35b6104c660048036038101906104c19190613e97565b6115ed565b6040516104d39190614368565b60405180910390f35b6104e46116f6565b6040516104f1919061428b565b60405180910390f35b610502611720565b60405161050f91906143dc565b60405180910390f35b610532600480360381019061052d9190613c0b565b61175d565b005b61053c6118de565b604051610549919061428b565b60405180910390f35b61056c60048036038101906105679190613c83565b611904565b6040516105799190614619565b60405180910390f35b61059c60048036038101906105979190613d3e565b611973565b005b6105b860048036038101906105b39190613c83565b611a05565b6040516105c59190614619565b60405180910390f35b6105e860048036038101906105e39190613a02565b611bc9565b6040516105f591906143c1565b60405180910390f35b61061860048036038101906106139190613afd565b611c3d565b005b610634600480360381019061062f91906139d9565b611cde565b005b610650600480360381019061064b9190613c83565b611dd6565b005b61066c60048036038101906106679190613e97565b611e2e565b60405161067991906145fe565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ea9061443e565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061081657507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610826575061082582611e78565b5b9050919050565b610835611ee2565b73ffffffffffffffffffffffffffffffffffffffff166108536116f6565b73ffffffffffffffffffffffffffffffffffffffff16146108a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a09061455e565b60405180910390fd5b6108b281611eea565b50565b60606040518060400160405280601081526020017f47464347656e65736973576561706f6e00000000000000000000000000000000815250905090565b6108fa611ee2565b73ffffffffffffffffffffffffffffffffffffffff166109186116f6565b73ffffffffffffffffffffffffffffffffffffffff161461096e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109659061455e565b60405180910390fd5b8181600685600281106109aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0191906109b89291906135d9565b50505050565b606060006109cb83611f04565b9050806109d784611f98565b6040516020016109e8929190614267565b604051602081830303815290604052915050919050565b610a07611ee2565b73ffffffffffffffffffffffffffffffffffffffff16610a256116f6565b73ffffffffffffffffffffffffffffffffffffffff1614610a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a729061455e565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60098181548110610ae657600080fd5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b610b16611ee2565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610b5c5750610b5b85610b56611ee2565b611bc9565b5b610b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b92906144de565b60405180910390fd5b610ba88585858585612145565b5050505050565b6000610bba336124a5565b610bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf09061451e565b60405180910390fd5b6000610c068360026115ed565b90506000610c62606483600081518110610c49577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610c5b9190614a8e565b6000612538565b9050600060088260ff1681548110610ca3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1683600181518110610d05577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610d179190614a8e565b90506000816103e88460ff16610d2d9190614877565b612710610d3a91906147b8565b61ffff16610d4891906147f0565b9050610d658882896040518060200160405280600081525061269e565b809450505050509392505050565b610d7b611ee2565b73ffffffffffffffffffffffffffffffffffffffff16610d996116f6565b73ffffffffffffffffffffffffffffffffffffffff1614610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de69061455e565b60405180910390fd5b818160099190610e009291906135d9565b505050565b60608151835114610e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e429061459e565b60405180910390fd5b6000835167ffffffffffffffff811115610e8e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610ebc5781602001602082028036833780820191505090505b50905060005b8451811015610fab57610f55858281518110610f07577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110610f48577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610682565b828281518110610f8e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080610fa490614a1b565b9050610ec2565b508091505092915050565b610fbe611ee2565b73ffffffffffffffffffffffffffffffffffffffff16610fdc6116f6565b73ffffffffffffffffffffffffffffffffffffffff1614611032576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110299061455e565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6008818154811061109d57600080fd5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b6110ce336124a5565b61110d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111049061451e565b60405180910390fd5b611118838383612834565b505050565b611125611ee2565b73ffffffffffffffffffffffffffffffffffffffff166111436116f6565b73ffffffffffffffffffffffffffffffffffffffff1614611199576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111909061455e565b60405180910390fd5b6111a36000612b31565b565b6111ad611ee2565b73ffffffffffffffffffffffffffffffffffffffff166111cb6116f6565b73ffffffffffffffffffffffffffffffffffffffff1614611221576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112189061455e565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611270336124a5565b6112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a69061451e565b60405180910390fd5b60006112bc8360026115ed565b905060006113186064836000815181106112ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516113119190614a8e565b6001612538565b9050600060098260ff1681548110611359577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff16836001815181106113bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516113cd9190614a8e565b90506000816103e88460ff166113e39190614877565b614e206113f091906147b8565b61ffff166113fe91906147f0565b905061141b8882896040518060200160405280600081525061269e565b809450505050509392505050565b6000611434336124a5565b611473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146a9061451e565b60405180910390fd5b60006114808360026115ed565b905060006114dc6064836000815181106114c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516114d59190614a8e565b6000612538565b9050600060098260ff168154811061151d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff168360018151811061157f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516115919190614a8e565b90506000816103e88460ff166115a79190614877565b614e206115b491906147b8565b61ffff166115c291906147f0565b90506115df8882896040518060200160405280600081525061269e565b809450505050509392505050565b60608167ffffffffffffffff81111561162f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561165d5781602001602082028036833780820191505090505b50905060005b828110156116ef57838160405160200161167e929190614634565b6040516020818303038152906040528051906020012060001c8282815181106116d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806116e790614a1b565b915050611663565b5092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f4746434757000000000000000000000000000000000000000000000000000000815250905090565b8173ffffffffffffffffffffffffffffffffffffffff1661177c611ee2565b73ffffffffffffffffffffffffffffffffffffffff1614156117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca9061457e565b60405180910390fd5b80600160006117e0611ee2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661188d611ee2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118d291906143c1565b60405180910390a35050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061190f336124a5565b61194e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119459061451e565b60405180910390fd5b6119698484846040518060200160405280600081525061269e565b8290509392505050565b61197b611ee2565b73ffffffffffffffffffffffffffffffffffffffff166119996116f6565b73ffffffffffffffffffffffffffffffffffffffff16146119ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e69061455e565b60405180910390fd5b818160089190611a009291906135d9565b505050565b6000611a10336124a5565b611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a469061451e565b60405180910390fd5b6000611a5c8360026115ed565b90506000611ab8606483600081518110611a9f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611ab19190614a8e565b6001612538565b9050600060088260ff1681548110611af9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1683600181518110611b5b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611b6d9190614a8e565b90506000816103e88460ff16611b839190614877565b612710611b9091906147b8565b61ffff16611b9e91906147f0565b9050611bbb8882896040518060200160405280600081525061269e565b809450505050509392505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c2a5760019050611c37565b611c348383612bf7565b90505b92915050565b611c45611ee2565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611c8b5750611c8a85611c85611ee2565b611bc9565b5b611cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc19061449e565b60405180910390fd5b611cd78585858585612c8b565b5050505050565b611ce6611ee2565b73ffffffffffffffffffffffffffffffffffffffff16611d046116f6565b73ffffffffffffffffffffffffffffffffffffffff1614611d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d519061455e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc19061445e565b60405180910390fd5b611dd381612b31565b50565b611ddf336124a5565b611e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e159061451e565b60405180910390fd5b611e29838383612f0d565b505050565b60068260028110611e3e57600080fd5b018181548110611e4d57600080fd5b9060005260206000209060109182820401919006600202915091509054906101000a900461ffff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190611f00929190613687565b5050565b606060028054611f13906149b8565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3f906149b8565b8015611f8c5780601f10611f6157610100808354040283529160200191611f8c565b820191906000526020600020905b815481529060010190602001808311611f6f57829003601f168201915b50505050509050919050565b60606000821415611fe0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612140565b600082905060005b60008214612012578080611ffb90614a1b565b915050600a8261200b9190614846565b9150611fe8565b60008167ffffffffffffffff811115612054577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156120865781602001600182028036833780820191505090505b5090505b600085146121395760018261209f91906148b3565b9150600a856120ae9190614a8e565b60306120ba91906147f0565b60f81b8183815181106120f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121329190614846565b945061208a565b8093505050505b919050565b8151835114612189576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612180906145be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156121f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f0906144be565b60405180910390fd5b6000612203611ee2565b905061221381878787878761312a565b60005b845181101561241057600085828151811061225a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600085838151811061229f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612340576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123379061453e565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123f591906147f0565b925050819055505050508061240990614a1b565b9050612216565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161248792919061438a565b60405180910390a461249d818787878787613132565b505050505050565b60006124af6116f6565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806125315750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9050919050565b6000806000905060005b6006846002811061257c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01805490508160ff161015612691576000600685600281106125c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018260ff1681548110612603577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff16905060008161ffff16141561263c575061267e565b8261ffff16861015801561265e5750808361265791906147b8565b61ffff1686105b1561266e57819350505050612698565b808361267a91906147b8565b9250505b808061268990614a64565b915050612542565b5060019150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561270e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612705906145de565b60405180910390fd5b6000612718611ee2565b90506127398160008761272a88613319565b61273388613319565b8761312a565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461279891906147f0565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612816929190614634565b60405180910390a461282d816000878787876133df565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289b906144fe565b60405180910390fd5b80518251146128e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128df906145be565b60405180910390fd5b60006128f2611ee2565b90506129128185600086866040518060200160405280600081525061312a565b60005b8351811015612aab576000848281518110612959577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600084838151811061299e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a369061447e565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080612aa390614a1b565b915050612915565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612b2392919061438a565b60405180910390a450505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf2906144be565b60405180910390fd5b6000612d05611ee2565b9050612d25818787612d1688613319565b612d1f88613319565b8761312a565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db39061453e565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e7191906147f0565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612eee929190614634565b60405180910390a4612f048288888888886133df565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f74906144fe565b60405180910390fd5b6000612f87611ee2565b9050612fb781856000612f9987613319565b612fa287613319565b6040518060200160405280600081525061312a565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561304e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130459061447e565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161311b929190614634565b60405180910390a45050505050565b505050505050565b6131518473ffffffffffffffffffffffffffffffffffffffff166135c6565b15613311578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016131979594939291906142a6565b602060405180830381600087803b1580156131b157600080fd5b505af19250505080156131e257506040513d601f19601f820116820180604052508101906131df9190613dac565b60015b613288576131ee614b7b565b806308c379a0141561324b5750613203615085565b8061320e575061324d565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324291906143dc565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327f906143fe565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461330f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133069061441e565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561335e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561338c5781602001602082028036833780820191505090505b50905082816000815181106133ca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b6133fe8473ffffffffffffffffffffffffffffffffffffffff166135c6565b156135be578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161344495949392919061430e565b602060405180830381600087803b15801561345e57600080fd5b505af192505050801561348f57506040513d601f19601f8201168201806040525081019061348c9190613dac565b60015b6135355761349b614b7b565b806308c379a014156134f857506134b0615085565b806134bb57506134fa565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ef91906143dc565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352c906143fe565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146135bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135b39061441e565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b82805482825590600052602060002090600f016010900481019282156136765791602002820160005b8382111561364657833561ffff1683826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302613602565b80156136745782816101000a81549061ffff0219169055600201602081600101049283019260010302613646565b505b509050613683919061370d565b5090565b828054613693906149b8565b90600052602060002090601f0160209004810192826136b557600085556136fc565b82601f106136ce57805160ff19168380011785556136fc565b828001600101855582156136fc579182015b828111156136fb5782518255916020019190600101906136e0565b5b509050613709919061370d565b5090565b5b8082111561372657600081600090555060010161370e565b5090565b600061373d61373884614682565b61465d565b9050808382526020820190508285602086028201111561375c57600080fd5b60005b8581101561378c5781613772888261387e565b84526020840193506020830192505060018101905061375f565b5050509392505050565b60006137a96137a4846146ae565b61465d565b905080838252602082019050828560208602820111156137c857600080fd5b60005b858110156137f857816137de88826139c4565b8452602084019350602083019250506001810190506137cb565b5050509392505050565b6000613815613810846146da565b61465d565b90508281526020810184848401111561382d57600080fd5b613838848285614976565b509392505050565b600061385361384e8461470b565b61465d565b90508281526020810184848401111561386b57600080fd5b613876848285614976565b509392505050565b60008135905061388d8161511b565b92915050565b600082601f8301126138a457600080fd5b81356138b484826020860161372a565b91505092915050565b60008083601f8401126138cf57600080fd5b8235905067ffffffffffffffff8111156138e857600080fd5b60208301915083602082028301111561390057600080fd5b9250929050565b600082601f83011261391857600080fd5b8135613928848260208601613796565b91505092915050565b60008135905061394081615132565b92915050565b60008135905061395581615149565b92915050565b60008151905061396a81615149565b92915050565b600082601f83011261398157600080fd5b8135613991848260208601613802565b91505092915050565b600082601f8301126139ab57600080fd5b81356139bb848260208601613840565b91505092915050565b6000813590506139d381615160565b92915050565b6000602082840312156139eb57600080fd5b60006139f98482850161387e565b91505092915050565b60008060408385031215613a1557600080fd5b6000613a238582860161387e565b9250506020613a348582860161387e565b9150509250929050565b600080600080600060a08688031215613a5657600080fd5b6000613a648882890161387e565b9550506020613a758882890161387e565b945050604086013567ffffffffffffffff811115613a9257600080fd5b613a9e88828901613907565b935050606086013567ffffffffffffffff811115613abb57600080fd5b613ac788828901613907565b925050608086013567ffffffffffffffff811115613ae457600080fd5b613af088828901613970565b9150509295509295909350565b600080600080600060a08688031215613b1557600080fd5b6000613b238882890161387e565b9550506020613b348882890161387e565b9450506040613b45888289016139c4565b9350506060613b56888289016139c4565b925050608086013567ffffffffffffffff811115613b7357600080fd5b613b7f88828901613970565b9150509295509295909350565b600080600060608486031215613ba157600080fd5b6000613baf8682870161387e565b935050602084013567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613907565b925050604084013567ffffffffffffffff811115613bf557600080fd5b613c0186828701613907565b9150509250925092565b60008060408385031215613c1e57600080fd5b6000613c2c8582860161387e565b9250506020613c3d85828601613931565b9150509250929050565b60008060408385031215613c5a57600080fd5b6000613c688582860161387e565b9250506020613c79858286016139c4565b9150509250929050565b600080600060608486031215613c9857600080fd5b6000613ca68682870161387e565b9350506020613cb7868287016139c4565b9250506040613cc8868287016139c4565b9150509250925092565b60008060408385031215613ce557600080fd5b600083013567ffffffffffffffff811115613cff57600080fd5b613d0b85828601613893565b925050602083013567ffffffffffffffff811115613d2857600080fd5b613d3485828601613907565b9150509250929050565b60008060208385031215613d5157600080fd5b600083013567ffffffffffffffff811115613d6b57600080fd5b613d77858286016138bd565b92509250509250929050565b600060208284031215613d9557600080fd5b6000613da384828501613946565b91505092915050565b600060208284031215613dbe57600080fd5b6000613dcc8482850161395b565b91505092915050565b600060208284031215613de757600080fd5b600082013567ffffffffffffffff811115613e0157600080fd5b613e0d8482850161399a565b91505092915050565b600060208284031215613e2857600080fd5b6000613e36848285016139c4565b91505092915050565b600080600060408486031215613e5457600080fd5b6000613e62868287016139c4565b935050602084013567ffffffffffffffff811115613e7f57600080fd5b613e8b868287016138bd565b92509250509250925092565b60008060408385031215613eaa57600080fd5b6000613eb8858286016139c4565b9250506020613ec9858286016139c4565b9150509250929050565b6000613edf8383614249565b60208301905092915050565b613ef4816148e7565b82525050565b6000613f058261474c565b613f0f818561477a565b9350613f1a8361473c565b8060005b83811015613f4b578151613f328882613ed3565b9750613f3d8361476d565b925050600181019050613f1e565b5085935050505092915050565b613f61816148f9565b82525050565b6000613f7282614757565b613f7c818561478b565b9350613f8c818560208601614985565b613f9581614b9d565b840191505092915050565b6000613fab82614762565b613fb5818561479c565b9350613fc5818560208601614985565b613fce81614b9d565b840191505092915050565b6000613fe482614762565b613fee81856147ad565b9350613ffe818560208601614985565b80840191505092915050565b600061401760348361479c565b915061402282614bbb565b604082019050919050565b600061403a60288361479c565b915061404582614c0a565b604082019050919050565b600061405d602b8361479c565b915061406882614c59565b604082019050919050565b600061408060268361479c565b915061408b82614ca8565b604082019050919050565b60006140a360248361479c565b91506140ae82614cf7565b604082019050919050565b60006140c660298361479c565b91506140d182614d46565b604082019050919050565b60006140e960258361479c565b91506140f482614d95565b604082019050919050565b600061410c60328361479c565b915061411782614de4565b604082019050919050565b600061412f60238361479c565b915061413a82614e33565b604082019050919050565b600061415260268361479c565b915061415d82614e82565b604082019050919050565b6000614175602a8361479c565b915061418082614ed1565b604082019050919050565b600061419860208361479c565b91506141a382614f20565b602082019050919050565b60006141bb60298361479c565b91506141c682614f49565b604082019050919050565b60006141de60298361479c565b91506141e982614f98565b604082019050919050565b600061420160288361479c565b915061420c82614fe7565b604082019050919050565b600061422460218361479c565b915061422f82615036565b604082019050919050565b61424381614931565b82525050565b6142528161495f565b82525050565b6142618161495f565b82525050565b60006142738285613fd9565b915061427f8284613fd9565b91508190509392505050565b60006020820190506142a06000830184613eeb565b92915050565b600060a0820190506142bb6000830188613eeb565b6142c86020830187613eeb565b81810360408301526142da8186613efa565b905081810360608301526142ee8185613efa565b905081810360808301526143028184613f67565b90509695505050505050565b600060a0820190506143236000830188613eeb565b6143306020830187613eeb565b61433d6040830186614258565b61434a6060830185614258565b818103608083015261435c8184613f67565b90509695505050505050565b600060208201905081810360008301526143828184613efa565b905092915050565b600060408201905081810360008301526143a48185613efa565b905081810360208301526143b88184613efa565b90509392505050565b60006020820190506143d66000830184613f58565b92915050565b600060208201905081810360008301526143f68184613fa0565b905092915050565b600060208201905081810360008301526144178161400a565b9050919050565b600060208201905081810360008301526144378161402d565b9050919050565b6000602082019050818103600083015261445781614050565b9050919050565b6000602082019050818103600083015261447781614073565b9050919050565b6000602082019050818103600083015261449781614096565b9050919050565b600060208201905081810360008301526144b7816140b9565b9050919050565b600060208201905081810360008301526144d7816140dc565b9050919050565b600060208201905081810360008301526144f7816140ff565b9050919050565b6000602082019050818103600083015261451781614122565b9050919050565b6000602082019050818103600083015261453781614145565b9050919050565b6000602082019050818103600083015261455781614168565b9050919050565b600060208201905081810360008301526145778161418b565b9050919050565b60006020820190508181036000830152614597816141ae565b9050919050565b600060208201905081810360008301526145b7816141d1565b9050919050565b600060208201905081810360008301526145d7816141f4565b9050919050565b600060208201905081810360008301526145f781614217565b9050919050565b6000602082019050614613600083018461423a565b92915050565b600060208201905061462e6000830184614258565b92915050565b60006040820190506146496000830185614258565b6146566020830184614258565b9392505050565b6000614667614678565b905061467382826149ea565b919050565b6000604051905090565b600067ffffffffffffffff82111561469d5761469c614b4c565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156146c9576146c8614b4c565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156146f5576146f4614b4c565b5b6146fe82614b9d565b9050602081019050919050565b600067ffffffffffffffff82111561472657614725614b4c565b5b61472f82614b9d565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006147c382614931565b91506147ce83614931565b92508261ffff038211156147e5576147e4614abf565b5b828201905092915050565b60006147fb8261495f565b91506148068361495f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561483b5761483a614abf565b5b828201905092915050565b60006148518261495f565b915061485c8361495f565b92508261486c5761486b614aee565b5b828204905092915050565b600061488282614931565b915061488d83614931565b92508161ffff04831182151516156148a8576148a7614abf565b5b828202905092915050565b60006148be8261495f565b91506148c98361495f565b9250828210156148dc576148db614abf565b5b828203905092915050565b60006148f28261493f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156149a3578082015181840152602081019050614988565b838111156149b2576000848401525b50505050565b600060028204905060018216806149d057607f821691505b602082108114156149e4576149e3614b1d565b5b50919050565b6149f382614b9d565b810181811067ffffffffffffffff82111715614a1257614a11614b4c565b5b80604052505050565b6000614a268261495f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a5957614a58614abf565b5b600182019050919050565b6000614a6f82614969565b915060ff821415614a8357614a82614abf565b5b600182019050919050565b6000614a998261495f565b9150614aa48361495f565b925082614ab457614ab3614aee565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115614b9a5760046000803e614b97600051614bae565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c792077686974656c697374656420616464726573732063616e2063616c60008201527f6c20746869730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d101561509557615118565b61509d614678565b60043d036004823e80513d602482011167ffffffffffffffff821117156150c5575050615118565b808201805167ffffffffffffffff8111156150e35750505050615118565b80602083010160043d038501811115615100575050505050615118565b61510f826020018501866149ea565b82955050505050505b90565b615124816148e7565b811461512f57600080fd5b50565b61513b816148f9565b811461514657600080fd5b50565b61515281614905565b811461515d57600080fd5b50565b6151698161495f565b811461517457600080fd5b5056fea26469706673582212200b3939844b5b4a1bf72f58d2649aab17e7cc6647a8a5f89e2d00a01c7720af3f64736f6c634300080400330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005b68747470733a2f2f67616c6178796669676874636c75622e6d7970696e6174612e636c6f75642f697066732f516d58766b466279355777615447336e6751725875673544744a614473756173634d7a6861545272655a563770652f0000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101ef5760003560e01c80637dc21b481161010f578063b9ed36cc116100a2578063f242432a11610071578063f242432a146105fe578063f2fde38b1461061a578063f5298aca14610636578063fde94eea14610652576101ef565b8063b9ed36cc14610552578063da596e6614610582578063e2f198bb1461059e578063e985e9c5146105ce576101ef565b80638da5cb5b116100de5780638da5cb5b146104dc57806395d89b41146104fa578063a22cb46514610518578063b3afdfb914610534576101ef565b80637dc21b48146104305780637f2f40ca1461044c57806382d0e6c11461047c578063874b3afc146104ac576101ef565b80632eb2c2d611610187578063530cd5ab11610156578063530cd5ab146103be578063591ffd54146103da5780636b20c4541461040a578063715018a614610426576101ef565b80632eb2c2d6146103265780633938537f1461034257806340573e13146103725780634e1273f41461038e576101ef565b806309860866116101c3578063098608661461028e5780630e89341c146102aa57806329975b43146102da5780632d7d7977146102f6576101ef565b8062fdd58e146101f457806301ffc9a71461022457806302fe53051461025457806306fdde0314610270575b600080fd5b61020e60048036038101906102099190613c47565b610682565b60405161021b9190614619565b60405180910390f35b61023e60048036038101906102399190613d83565b61074b565b60405161024b91906143c1565b60405180910390f35b61026e60048036038101906102699190613dd5565b61082d565b005b6102786108b5565b60405161028591906143dc565b60405180910390f35b6102a860048036038101906102a39190613e3f565b6108f2565b005b6102c460048036038101906102bf9190613e16565b6109be565b6040516102d191906143dc565b60405180910390f35b6102f460048036038101906102ef91906139d9565b6109ff565b005b610310600480360381019061030b9190613e16565b610ad6565b60405161031d91906145fe565b60405180910390f35b610340600480360381019061033b9190613a3e565b610b0e565b005b61035c60048036038101906103579190613c83565b610baf565b6040516103699190614619565b60405180910390f35b61038c60048036038101906103879190613d3e565b610d73565b005b6103a860048036038101906103a39190613cd2565b610e05565b6040516103b59190614368565b60405180910390f35b6103d860048036038101906103d391906139d9565b610fb6565b005b6103f460048036038101906103ef9190613e16565b61108d565b60405161040191906145fe565b60405180910390f35b610424600480360381019061041f9190613b8c565b6110c5565b005b61042e61111d565b005b61044a600480360381019061044591906139d9565b6111a5565b005b61046660048036038101906104619190613c83565b611265565b6040516104739190614619565b60405180910390f35b61049660048036038101906104919190613c83565b611429565b6040516104a39190614619565b60405180910390f35b6104c660048036038101906104c19190613e97565b6115ed565b6040516104d39190614368565b60405180910390f35b6104e46116f6565b6040516104f1919061428b565b60405180910390f35b610502611720565b60405161050f91906143dc565b60405180910390f35b610532600480360381019061052d9190613c0b565b61175d565b005b61053c6118de565b604051610549919061428b565b60405180910390f35b61056c60048036038101906105679190613c83565b611904565b6040516105799190614619565b60405180910390f35b61059c60048036038101906105979190613d3e565b611973565b005b6105b860048036038101906105b39190613c83565b611a05565b6040516105c59190614619565b60405180910390f35b6105e860048036038101906105e39190613a02565b611bc9565b6040516105f591906143c1565b60405180910390f35b61061860048036038101906106139190613afd565b611c3d565b005b610634600480360381019061062f91906139d9565b611cde565b005b610650600480360381019061064b9190613c83565b611dd6565b005b61066c60048036038101906106679190613e97565b611e2e565b60405161067991906145fe565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ea9061443e565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061081657507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610826575061082582611e78565b5b9050919050565b610835611ee2565b73ffffffffffffffffffffffffffffffffffffffff166108536116f6565b73ffffffffffffffffffffffffffffffffffffffff16146108a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a09061455e565b60405180910390fd5b6108b281611eea565b50565b60606040518060400160405280601081526020017f47464347656e65736973576561706f6e00000000000000000000000000000000815250905090565b6108fa611ee2565b73ffffffffffffffffffffffffffffffffffffffff166109186116f6565b73ffffffffffffffffffffffffffffffffffffffff161461096e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109659061455e565b60405180910390fd5b8181600685600281106109aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0191906109b89291906135d9565b50505050565b606060006109cb83611f04565b9050806109d784611f98565b6040516020016109e8929190614267565b604051602081830303815290604052915050919050565b610a07611ee2565b73ffffffffffffffffffffffffffffffffffffffff16610a256116f6565b73ffffffffffffffffffffffffffffffffffffffff1614610a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a729061455e565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60098181548110610ae657600080fd5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b610b16611ee2565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610b5c5750610b5b85610b56611ee2565b611bc9565b5b610b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b92906144de565b60405180910390fd5b610ba88585858585612145565b5050505050565b6000610bba336124a5565b610bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf09061451e565b60405180910390fd5b6000610c068360026115ed565b90506000610c62606483600081518110610c49577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610c5b9190614a8e565b6000612538565b9050600060088260ff1681548110610ca3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1683600181518110610d05577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610d179190614a8e565b90506000816103e88460ff16610d2d9190614877565b612710610d3a91906147b8565b61ffff16610d4891906147f0565b9050610d658882896040518060200160405280600081525061269e565b809450505050509392505050565b610d7b611ee2565b73ffffffffffffffffffffffffffffffffffffffff16610d996116f6565b73ffffffffffffffffffffffffffffffffffffffff1614610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de69061455e565b60405180910390fd5b818160099190610e009291906135d9565b505050565b60608151835114610e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e429061459e565b60405180910390fd5b6000835167ffffffffffffffff811115610e8e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610ebc5781602001602082028036833780820191505090505b50905060005b8451811015610fab57610f55858281518110610f07577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110610f48577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610682565b828281518110610f8e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080610fa490614a1b565b9050610ec2565b508091505092915050565b610fbe611ee2565b73ffffffffffffffffffffffffffffffffffffffff16610fdc6116f6565b73ffffffffffffffffffffffffffffffffffffffff1614611032576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110299061455e565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6008818154811061109d57600080fd5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b6110ce336124a5565b61110d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111049061451e565b60405180910390fd5b611118838383612834565b505050565b611125611ee2565b73ffffffffffffffffffffffffffffffffffffffff166111436116f6565b73ffffffffffffffffffffffffffffffffffffffff1614611199576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111909061455e565b60405180910390fd5b6111a36000612b31565b565b6111ad611ee2565b73ffffffffffffffffffffffffffffffffffffffff166111cb6116f6565b73ffffffffffffffffffffffffffffffffffffffff1614611221576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112189061455e565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611270336124a5565b6112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a69061451e565b60405180910390fd5b60006112bc8360026115ed565b905060006113186064836000815181106112ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516113119190614a8e565b6001612538565b9050600060098260ff1681548110611359577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff16836001815181106113bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516113cd9190614a8e565b90506000816103e88460ff166113e39190614877565b614e206113f091906147b8565b61ffff166113fe91906147f0565b905061141b8882896040518060200160405280600081525061269e565b809450505050509392505050565b6000611434336124a5565b611473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146a9061451e565b60405180910390fd5b60006114808360026115ed565b905060006114dc6064836000815181106114c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516114d59190614a8e565b6000612538565b9050600060098260ff168154811061151d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff168360018151811061157f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516115919190614a8e565b90506000816103e88460ff166115a79190614877565b614e206115b491906147b8565b61ffff166115c291906147f0565b90506115df8882896040518060200160405280600081525061269e565b809450505050509392505050565b60608167ffffffffffffffff81111561162f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561165d5781602001602082028036833780820191505090505b50905060005b828110156116ef57838160405160200161167e929190614634565b6040516020818303038152906040528051906020012060001c8282815181106116d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806116e790614a1b565b915050611663565b5092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f4746434757000000000000000000000000000000000000000000000000000000815250905090565b8173ffffffffffffffffffffffffffffffffffffffff1661177c611ee2565b73ffffffffffffffffffffffffffffffffffffffff1614156117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca9061457e565b60405180910390fd5b80600160006117e0611ee2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661188d611ee2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118d291906143c1565b60405180910390a35050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061190f336124a5565b61194e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119459061451e565b60405180910390fd5b6119698484846040518060200160405280600081525061269e565b8290509392505050565b61197b611ee2565b73ffffffffffffffffffffffffffffffffffffffff166119996116f6565b73ffffffffffffffffffffffffffffffffffffffff16146119ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e69061455e565b60405180910390fd5b818160089190611a009291906135d9565b505050565b6000611a10336124a5565b611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a469061451e565b60405180910390fd5b6000611a5c8360026115ed565b90506000611ab8606483600081518110611a9f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611ab19190614a8e565b6001612538565b9050600060088260ff1681548110611af9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1683600181518110611b5b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611b6d9190614a8e565b90506000816103e88460ff16611b839190614877565b612710611b9091906147b8565b61ffff16611b9e91906147f0565b9050611bbb8882896040518060200160405280600081525061269e565b809450505050509392505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c2a5760019050611c37565b611c348383612bf7565b90505b92915050565b611c45611ee2565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611c8b5750611c8a85611c85611ee2565b611bc9565b5b611cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc19061449e565b60405180910390fd5b611cd78585858585612c8b565b5050505050565b611ce6611ee2565b73ffffffffffffffffffffffffffffffffffffffff16611d046116f6565b73ffffffffffffffffffffffffffffffffffffffff1614611d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d519061455e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc19061445e565b60405180910390fd5b611dd381612b31565b50565b611ddf336124a5565b611e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e159061451e565b60405180910390fd5b611e29838383612f0d565b505050565b60068260028110611e3e57600080fd5b018181548110611e4d57600080fd5b9060005260206000209060109182820401919006600202915091509054906101000a900461ffff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190611f00929190613687565b5050565b606060028054611f13906149b8565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3f906149b8565b8015611f8c5780601f10611f6157610100808354040283529160200191611f8c565b820191906000526020600020905b815481529060010190602001808311611f6f57829003601f168201915b50505050509050919050565b60606000821415611fe0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612140565b600082905060005b60008214612012578080611ffb90614a1b565b915050600a8261200b9190614846565b9150611fe8565b60008167ffffffffffffffff811115612054577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156120865781602001600182028036833780820191505090505b5090505b600085146121395760018261209f91906148b3565b9150600a856120ae9190614a8e565b60306120ba91906147f0565b60f81b8183815181106120f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121329190614846565b945061208a565b8093505050505b919050565b8151835114612189576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612180906145be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156121f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f0906144be565b60405180910390fd5b6000612203611ee2565b905061221381878787878761312a565b60005b845181101561241057600085828151811061225a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600085838151811061229f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612340576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123379061453e565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123f591906147f0565b925050819055505050508061240990614a1b565b9050612216565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161248792919061438a565b60405180910390a461249d818787878787613132565b505050505050565b60006124af6116f6565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806125315750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9050919050565b6000806000905060005b6006846002811061257c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01805490508160ff161015612691576000600685600281106125c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b018260ff1681548110612603577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff16905060008161ffff16141561263c575061267e565b8261ffff16861015801561265e5750808361265791906147b8565b61ffff1686105b1561266e57819350505050612698565b808361267a91906147b8565b9250505b808061268990614a64565b915050612542565b5060019150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561270e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612705906145de565b60405180910390fd5b6000612718611ee2565b90506127398160008761272a88613319565b61273388613319565b8761312a565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461279891906147f0565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612816929190614634565b60405180910390a461282d816000878787876133df565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289b906144fe565b60405180910390fd5b80518251146128e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128df906145be565b60405180910390fd5b60006128f2611ee2565b90506129128185600086866040518060200160405280600081525061312a565b60005b8351811015612aab576000848281518110612959577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600084838151811061299e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a369061447e565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080612aa390614a1b565b915050612915565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612b2392919061438a565b60405180910390a450505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf2906144be565b60405180910390fd5b6000612d05611ee2565b9050612d25818787612d1688613319565b612d1f88613319565b8761312a565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db39061453e565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e7191906147f0565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612eee929190614634565b60405180910390a4612f048288888888886133df565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f74906144fe565b60405180910390fd5b6000612f87611ee2565b9050612fb781856000612f9987613319565b612fa287613319565b6040518060200160405280600081525061312a565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561304e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130459061447e565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161311b929190614634565b60405180910390a45050505050565b505050505050565b6131518473ffffffffffffffffffffffffffffffffffffffff166135c6565b15613311578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016131979594939291906142a6565b602060405180830381600087803b1580156131b157600080fd5b505af19250505080156131e257506040513d601f19601f820116820180604052508101906131df9190613dac565b60015b613288576131ee614b7b565b806308c379a0141561324b5750613203615085565b8061320e575061324d565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324291906143dc565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327f906143fe565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461330f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133069061441e565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561335e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561338c5781602001602082028036833780820191505090505b50905082816000815181106133ca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b6133fe8473ffffffffffffffffffffffffffffffffffffffff166135c6565b156135be578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161344495949392919061430e565b602060405180830381600087803b15801561345e57600080fd5b505af192505050801561348f57506040513d601f19601f8201168201806040525081019061348c9190613dac565b60015b6135355761349b614b7b565b806308c379a014156134f857506134b0615085565b806134bb57506134fa565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ef91906143dc565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352c906143fe565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146135bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135b39061441e565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b82805482825590600052602060002090600f016010900481019282156136765791602002820160005b8382111561364657833561ffff1683826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302613602565b80156136745782816101000a81549061ffff0219169055600201602081600101049283019260010302613646565b505b509050613683919061370d565b5090565b828054613693906149b8565b90600052602060002090601f0160209004810192826136b557600085556136fc565b82601f106136ce57805160ff19168380011785556136fc565b828001600101855582156136fc579182015b828111156136fb5782518255916020019190600101906136e0565b5b509050613709919061370d565b5090565b5b8082111561372657600081600090555060010161370e565b5090565b600061373d61373884614682565b61465d565b9050808382526020820190508285602086028201111561375c57600080fd5b60005b8581101561378c5781613772888261387e565b84526020840193506020830192505060018101905061375f565b5050509392505050565b60006137a96137a4846146ae565b61465d565b905080838252602082019050828560208602820111156137c857600080fd5b60005b858110156137f857816137de88826139c4565b8452602084019350602083019250506001810190506137cb565b5050509392505050565b6000613815613810846146da565b61465d565b90508281526020810184848401111561382d57600080fd5b613838848285614976565b509392505050565b600061385361384e8461470b565b61465d565b90508281526020810184848401111561386b57600080fd5b613876848285614976565b509392505050565b60008135905061388d8161511b565b92915050565b600082601f8301126138a457600080fd5b81356138b484826020860161372a565b91505092915050565b60008083601f8401126138cf57600080fd5b8235905067ffffffffffffffff8111156138e857600080fd5b60208301915083602082028301111561390057600080fd5b9250929050565b600082601f83011261391857600080fd5b8135613928848260208601613796565b91505092915050565b60008135905061394081615132565b92915050565b60008135905061395581615149565b92915050565b60008151905061396a81615149565b92915050565b600082601f83011261398157600080fd5b8135613991848260208601613802565b91505092915050565b600082601f8301126139ab57600080fd5b81356139bb848260208601613840565b91505092915050565b6000813590506139d381615160565b92915050565b6000602082840312156139eb57600080fd5b60006139f98482850161387e565b91505092915050565b60008060408385031215613a1557600080fd5b6000613a238582860161387e565b9250506020613a348582860161387e565b9150509250929050565b600080600080600060a08688031215613a5657600080fd5b6000613a648882890161387e565b9550506020613a758882890161387e565b945050604086013567ffffffffffffffff811115613a9257600080fd5b613a9e88828901613907565b935050606086013567ffffffffffffffff811115613abb57600080fd5b613ac788828901613907565b925050608086013567ffffffffffffffff811115613ae457600080fd5b613af088828901613970565b9150509295509295909350565b600080600080600060a08688031215613b1557600080fd5b6000613b238882890161387e565b9550506020613b348882890161387e565b9450506040613b45888289016139c4565b9350506060613b56888289016139c4565b925050608086013567ffffffffffffffff811115613b7357600080fd5b613b7f88828901613970565b9150509295509295909350565b600080600060608486031215613ba157600080fd5b6000613baf8682870161387e565b935050602084013567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613907565b925050604084013567ffffffffffffffff811115613bf557600080fd5b613c0186828701613907565b9150509250925092565b60008060408385031215613c1e57600080fd5b6000613c2c8582860161387e565b9250506020613c3d85828601613931565b9150509250929050565b60008060408385031215613c5a57600080fd5b6000613c688582860161387e565b9250506020613c79858286016139c4565b9150509250929050565b600080600060608486031215613c9857600080fd5b6000613ca68682870161387e565b9350506020613cb7868287016139c4565b9250506040613cc8868287016139c4565b9150509250925092565b60008060408385031215613ce557600080fd5b600083013567ffffffffffffffff811115613cff57600080fd5b613d0b85828601613893565b925050602083013567ffffffffffffffff811115613d2857600080fd5b613d3485828601613907565b9150509250929050565b60008060208385031215613d5157600080fd5b600083013567ffffffffffffffff811115613d6b57600080fd5b613d77858286016138bd565b92509250509250929050565b600060208284031215613d9557600080fd5b6000613da384828501613946565b91505092915050565b600060208284031215613dbe57600080fd5b6000613dcc8482850161395b565b91505092915050565b600060208284031215613de757600080fd5b600082013567ffffffffffffffff811115613e0157600080fd5b613e0d8482850161399a565b91505092915050565b600060208284031215613e2857600080fd5b6000613e36848285016139c4565b91505092915050565b600080600060408486031215613e5457600080fd5b6000613e62868287016139c4565b935050602084013567ffffffffffffffff811115613e7f57600080fd5b613e8b868287016138bd565b92509250509250925092565b60008060408385031215613eaa57600080fd5b6000613eb8858286016139c4565b9250506020613ec9858286016139c4565b9150509250929050565b6000613edf8383614249565b60208301905092915050565b613ef4816148e7565b82525050565b6000613f058261474c565b613f0f818561477a565b9350613f1a8361473c565b8060005b83811015613f4b578151613f328882613ed3565b9750613f3d8361476d565b925050600181019050613f1e565b5085935050505092915050565b613f61816148f9565b82525050565b6000613f7282614757565b613f7c818561478b565b9350613f8c818560208601614985565b613f9581614b9d565b840191505092915050565b6000613fab82614762565b613fb5818561479c565b9350613fc5818560208601614985565b613fce81614b9d565b840191505092915050565b6000613fe482614762565b613fee81856147ad565b9350613ffe818560208601614985565b80840191505092915050565b600061401760348361479c565b915061402282614bbb565b604082019050919050565b600061403a60288361479c565b915061404582614c0a565b604082019050919050565b600061405d602b8361479c565b915061406882614c59565b604082019050919050565b600061408060268361479c565b915061408b82614ca8565b604082019050919050565b60006140a360248361479c565b91506140ae82614cf7565b604082019050919050565b60006140c660298361479c565b91506140d182614d46565b604082019050919050565b60006140e960258361479c565b91506140f482614d95565b604082019050919050565b600061410c60328361479c565b915061411782614de4565b604082019050919050565b600061412f60238361479c565b915061413a82614e33565b604082019050919050565b600061415260268361479c565b915061415d82614e82565b604082019050919050565b6000614175602a8361479c565b915061418082614ed1565b604082019050919050565b600061419860208361479c565b91506141a382614f20565b602082019050919050565b60006141bb60298361479c565b91506141c682614f49565b604082019050919050565b60006141de60298361479c565b91506141e982614f98565b604082019050919050565b600061420160288361479c565b915061420c82614fe7565b604082019050919050565b600061422460218361479c565b915061422f82615036565b604082019050919050565b61424381614931565b82525050565b6142528161495f565b82525050565b6142618161495f565b82525050565b60006142738285613fd9565b915061427f8284613fd9565b91508190509392505050565b60006020820190506142a06000830184613eeb565b92915050565b600060a0820190506142bb6000830188613eeb565b6142c86020830187613eeb565b81810360408301526142da8186613efa565b905081810360608301526142ee8185613efa565b905081810360808301526143028184613f67565b90509695505050505050565b600060a0820190506143236000830188613eeb565b6143306020830187613eeb565b61433d6040830186614258565b61434a6060830185614258565b818103608083015261435c8184613f67565b90509695505050505050565b600060208201905081810360008301526143828184613efa565b905092915050565b600060408201905081810360008301526143a48185613efa565b905081810360208301526143b88184613efa565b90509392505050565b60006020820190506143d66000830184613f58565b92915050565b600060208201905081810360008301526143f68184613fa0565b905092915050565b600060208201905081810360008301526144178161400a565b9050919050565b600060208201905081810360008301526144378161402d565b9050919050565b6000602082019050818103600083015261445781614050565b9050919050565b6000602082019050818103600083015261447781614073565b9050919050565b6000602082019050818103600083015261449781614096565b9050919050565b600060208201905081810360008301526144b7816140b9565b9050919050565b600060208201905081810360008301526144d7816140dc565b9050919050565b600060208201905081810360008301526144f7816140ff565b9050919050565b6000602082019050818103600083015261451781614122565b9050919050565b6000602082019050818103600083015261453781614145565b9050919050565b6000602082019050818103600083015261455781614168565b9050919050565b600060208201905081810360008301526145778161418b565b9050919050565b60006020820190508181036000830152614597816141ae565b9050919050565b600060208201905081810360008301526145b7816141d1565b9050919050565b600060208201905081810360008301526145d7816141f4565b9050919050565b600060208201905081810360008301526145f781614217565b9050919050565b6000602082019050614613600083018461423a565b92915050565b600060208201905061462e6000830184614258565b92915050565b60006040820190506146496000830185614258565b6146566020830184614258565b9392505050565b6000614667614678565b905061467382826149ea565b919050565b6000604051905090565b600067ffffffffffffffff82111561469d5761469c614b4c565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156146c9576146c8614b4c565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156146f5576146f4614b4c565b5b6146fe82614b9d565b9050602081019050919050565b600067ffffffffffffffff82111561472657614725614b4c565b5b61472f82614b9d565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006147c382614931565b91506147ce83614931565b92508261ffff038211156147e5576147e4614abf565b5b828201905092915050565b60006147fb8261495f565b91506148068361495f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561483b5761483a614abf565b5b828201905092915050565b60006148518261495f565b915061485c8361495f565b92508261486c5761486b614aee565b5b828204905092915050565b600061488282614931565b915061488d83614931565b92508161ffff04831182151516156148a8576148a7614abf565b5b828202905092915050565b60006148be8261495f565b91506148c98361495f565b9250828210156148dc576148db614abf565b5b828203905092915050565b60006148f28261493f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156149a3578082015181840152602081019050614988565b838111156149b2576000848401525b50505050565b600060028204905060018216806149d057607f821691505b602082108114156149e4576149e3614b1d565b5b50919050565b6149f382614b9d565b810181811067ffffffffffffffff82111715614a1257614a11614b4c565b5b80604052505050565b6000614a268261495f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a5957614a58614abf565b5b600182019050919050565b6000614a6f82614969565b915060ff821415614a8357614a82614abf565b5b600182019050919050565b6000614a998261495f565b9150614aa48361495f565b925082614ab457614ab3614aee565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115614b9a5760046000803e614b97600051614bae565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c792077686974656c697374656420616464726573732063616e2063616c60008201527f6c20746869730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d101561509557615118565b61509d614678565b60043d036004823e80513d602482011167ffffffffffffffff821117156150c5575050615118565b808201805167ffffffffffffffff8111156150e35750505050615118565b80602083010160043d038501811115615100575050505050615118565b61510f826020018501866149ea565b82955050505050505b90565b615124816148e7565b811461512f57600080fd5b50565b61513b816148f9565b811461514657600080fd5b50565b61515281614905565b811461515d57600080fd5b50565b6151698161495f565b811461517457600080fd5b5056fea26469706673582212200b3939844b5b4a1bf72f58d2649aab17e7cc6647a8a5f89e2d00a01c7720af3f64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005b68747470733a2f2f67616c6178796669676874636c75622e6d7970696e6174612e636c6f75642f697066732f516d58766b466279355777615447336e6751725875673544744a614473756173634d7a6861545272655a563770652f0000000000
-----Decoded View---------------
Arg [0] : path (string): https://galaxyfightclub.mypinata.cloud/ipfs/QmXvkFby5WwaTG3ngQrXug5DtJaDsuascMzhaTRreZV7pe/
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000005b
Arg [2] : 68747470733a2f2f67616c6178796669676874636c75622e6d7970696e617461
Arg [3] : 2e636c6f75642f697066732f516d58766b466279355777615447336e67517258
Arg [4] : 75673544744a614473756173634d7a6861545272655a563770652f0000000000
Deployed Bytecode Sourcemap
39043:5950:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24669:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23692:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43531:87;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43626:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43087:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43829:212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5316:99;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39502:33;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26764:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40165:448;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43325:107;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25066:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5421:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39400:32;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44828:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4497:94;;;:::i;:::-;;43440:83;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41078:449;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40621;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41990:311;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3846:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43732:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25663:311;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39204:68;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39971:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43212:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41535:447;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44137:419;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26286:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4746:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44690:130;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39307:24;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24669:231;24755:7;24802:1;24783:21;;:7;:21;;;;24775:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;24870:9;:13;24880:2;24870:13;;;;;;;;;;;:22;24884:7;24870:22;;;;;;;;;;;;;;;;24863:29;;24669:231;;;;:::o;23692:310::-;23794:4;23846:26;23831:41;;;:11;:41;;;;:110;;;;23904:37;23889:52;;;:11;:52;;;;23831:110;:163;;;;23958:36;23982:11;23958:23;:36::i;:::-;23831:163;23811:183;;23692:310;;;:::o;43531:87::-;4077:12;:10;:12::i;:::-;4066:23;;:7;:5;:7::i;:::-;:23;;;4058:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43595:15:::1;43603:6;43595:7;:15::i;:::-;43531:87:::0;:::o;43626:98::-;43665:13;43691:25;;;;;;;;;;;;;;;;;;;43626:98;:::o;43087:117::-;4077:12;:10;:12::i;:::-;4066:23;;:7;:5;:7::i;:::-;:23;;;4058:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43191:5:::1;;43176;43182;43176:12;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;43087:117:::0;;;:::o;43829:212::-;43889:13;43913:21;43937:20;43949:7;43937:11;:20::i;:::-;43913:44;;43997:7;44006:25;44023:7;44006:16;:25::i;:::-;43980:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43966:67;;;43829:212;;;:::o;5316:99::-;4077:12;:10;:12::i;:::-;4066:23;;:7;:5;:7::i;:::-;:23;;;4058:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5405:4:::1;5385:11;:17;5397:4;5385:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;5316:99:::0;:::o;39502:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26764:442::-;27005:12;:10;:12::i;:::-;26997:20;;:4;:20;;;:60;;;;27021:36;27038:4;27044:12;:10;:12::i;:::-;27021:16;:36::i;:::-;26997:60;26975:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;27146:52;27169:4;27175:2;27179:3;27184:7;27193:4;27146:22;:52::i;:::-;26764:442;;;;;:::o;40165:448::-;40279:7;5707:26;5722:10;5707:14;:26::i;:::-;5699:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;40296:24:::1;40323:17;40330:6;40338:1;40323:6;:17::i;:::-;40296:44;;40349:16;40368:30;40391:3;40378:7;40386:1;40378:10;;;;;;;;;;;;;;;;;;;;;;:16;;;;:::i;:::-;40396:1;40368:9;:30::i;:::-;40349:49;;40407:18;40441:16;40458:10;40441:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40428:41;;:7;40436:1;40428:10;;;;;;;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;40407:62;;40478:16;40525:10;40518:4;40507:10;:15;;;;;;:::i;:::-;40497:7;:25;;;;:::i;:::-;:38;;;;;;:::i;:::-;40478:57;;40545:36;40551:7;40560:8;40570:6;40545:36;;;;;;;;;;;::::0;:5:::1;:36::i;:::-;40597:8;40590:15;;;;;;40165:448:::0;;;;;:::o;43325:107::-;4077:12;:10;:12::i;:::-;4066:23;;:7;:5;:7::i;:::-;:23;;;4058:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43419:5:::1;;43399:17;:25;;;;;;;:::i;:::-;;43325:107:::0;;:::o;25066:524::-;25222:16;25283:3;:10;25264:8;:15;:29;25256:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25352:30;25399:8;:15;25385:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25352:63;;25433:9;25428:122;25452:8;:15;25448:1;:19;25428:122;;;25508:30;25518:8;25527:1;25518:11;;;;;;;;;;;;;;;;;;;;;;25531:3;25535:1;25531:6;;;;;;;;;;;;;;;;;;;;;;25508:9;:30::i;:::-;25489:13;25503:1;25489:16;;;;;;;;;;;;;;;;;;;;;:49;;;;;25469:3;;;;:::i;:::-;;;25428:122;;;;25569:13;25562:20;;;25066:524;;;;:::o;5421:103::-;4077:12;:10;:12::i;:::-;4066:23;;:7;:5;:7::i;:::-;:23;;;4058:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5513:5:::1;5493:11;:17;5505:4;5493:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;5421:103:::0;:::o;39400:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44828:162::-;5707:26;5722:10;5707:14;:26::i;:::-;5699:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;44950:32:::1;44961:7;44970:3;44975:6;44950:10;:32::i;:::-;44828:162:::0;;;:::o;4497:94::-;4077:12;:10;:12::i;:::-;4066:23;;:7;:5;:7::i;:::-;:23;;;4058:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4562:21:::1;4580:1;4562:9;:21::i;:::-;4497:94::o:0;43440:83::-;4077:12;:10;:12::i;:::-;4066:23;;:7;:5;:7::i;:::-;:23;;;4058:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43511:4:::1;43500:8;;:15;;;;;;;;;;;;;;;;;;43440:83:::0;:::o;41078:449::-;41193:7;5707:26;5722:10;5707:14;:26::i;:::-;5699:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;41210:24:::1;41237:17;41244:6;41252:1;41237:6;:17::i;:::-;41210:44;;41263:16;41282:30;41305:3;41292:7;41300:1;41292:10;;;;;;;;;;;;;;;;;;;;;;:16;;;;:::i;:::-;41310:1;41282:9;:30::i;:::-;41263:49;;41321:18;41355:17;41373:10;41355:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41342:42;;:7;41350:1;41342:10;;;;;;;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;41321:63;;41393:16;41440:10;41433:4;41422:10;:15;;;;;;:::i;:::-;41412:7;:25;;;;:::i;:::-;:38;;;;;;:::i;:::-;41393:57;;41459:36;41465:7;41474:8;41484:6;41459:36;;;;;;;;;;;::::0;:5:::1;:36::i;:::-;41511:8;41504:15;;;;;;41078:449:::0;;;;;:::o;40621:::-;40736:7;5707:26;5722:10;5707:14;:26::i;:::-;5699:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;40753:24:::1;40780:17;40787:6;40795:1;40780:6;:17::i;:::-;40753:44;;40806:16;40825:30;40848:3;40835:7;40843:1;40835:10;;;;;;;;;;;;;;;;;;;;;;:16;;;;:::i;:::-;40853:1;40825:9;:30::i;:::-;40806:49;;40864:18;40898:17;40916:10;40898:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40885:42;;:7;40893:1;40885:10;;;;;;;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;40864:63;;40936:16;40983:10;40976:4;40965:10;:15;;;;;;:::i;:::-;40955:7;:25;;;;:::i;:::-;:38;;;;;;:::i;:::-;40936:57;;41002:36;41008:7;41017:8;41027:6;41002:36;;;;;;;;;;;::::0;:5:::1;:36::i;:::-;41054:8;41047:15;;;;;;40621:449:::0;;;;;:::o;41990:311::-;42059:31;42132:1;42118:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42101:33;;42148:9;42143:121;42167:1;42163;:5;42143:121;;;42237:11;42250:1;42226:26;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42216:37;;;;;;42208:46;;42188:14;42203:1;42188:17;;;;;;;;;;;;;;;;;;;;;:66;;;;;42170:3;;;;;:::i;:::-;;;;42143:121;;;;41990:311;;;;:::o;3846:87::-;3892:7;3919:6;;;;;;;;;;;3912:13;;3846:87;:::o;43732:89::-;43773:13;43799:14;;;;;;;;;;;;;;;;;;;43732:89;:::o;25663:311::-;25782:8;25766:24;;:12;:10;:12::i;:::-;:24;;;;25758:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;25894:8;25849:18;:32;25868:12;:10;:12::i;:::-;25849:32;;;;;;;;;;;;;;;:42;25882:8;25849:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25947:8;25918:48;;25933:12;:10;:12::i;:::-;25918:48;;;25957:8;25918:48;;;;;;:::i;:::-;;;;;;;;25663:311;;:::o;39204:68::-;;;;;;;;;;;;;:::o;39971:186::-;40072:7;5707:26;5722:10;5707:14;:26::i;:::-;5699:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;40089:36:::1;40095:7;40104:8;40114:6;40089:36;;;;;;;;;;;::::0;:5:::1;:36::i;:::-;40141:8;40134:15;;39971:186:::0;;;;;:::o;43212:105::-;4077:12;:10;:12::i;:::-;4066:23;;:7;:5;:7::i;:::-;:23;;;4058:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43304:5:::1;;43285:16;:24;;;;;;;:::i;:::-;;43212:105:::0;;:::o;41535:447::-;41649:7;5707:26;5722:10;5707:14;:26::i;:::-;5699:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;41666:24:::1;41693:17;41700:6;41708:1;41693:6;:17::i;:::-;41666:44;;41719:16;41738:30;41761:3;41748:7;41756:1;41748:10;;;;;;;;;;;;;;;;;;;;;;:16;;;;:::i;:::-;41766:1;41738:9;:30::i;:::-;41719:49;;41777:18;41811:16;41828:10;41811:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41798:41;;:7;41806:1;41798:10;;;;;;;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;41777:62;;41848:16;41895:10;41888:4;41877:10;:15;;;;;;:::i;:::-;41867:7;:25;;;;:::i;:::-;:38;;;;;;:::i;:::-;41848:57;;41914:36;41920:7;41929:8;41939:6;41914:36;;;;;;;;;;;::::0;:5:::1;:36::i;:::-;41966:8;41959:15;;;;;;41535:447:::0;;;;;:::o;44137:419::-;44253:15;44374:8;;;;;;;;;;;44361:21;;:9;:21;;;44357:65;;;44406:4;44399:11;;;;44357:65;44505:43;44530:6;44538:9;44505:24;:43::i;:::-;44498:50;;44137:419;;;;;:::o;26286:401::-;26502:12;:10;:12::i;:::-;26494:20;;:4;:20;;;:60;;;;26518:36;26535:4;26541:12;:10;:12::i;:::-;26518:16;:36::i;:::-;26494:60;26472:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;26634:45;26652:4;26658:2;26662;26666:6;26674:4;26634:17;:45::i;:::-;26286:401;;;;;:::o;4746:192::-;4077:12;:10;:12::i;:::-;4066:23;;:7;:5;:7::i;:::-;:23;;;4058:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4855:1:::1;4835:22;;:8;:22;;;;4827:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4911:19;4921:8;4911:9;:19::i;:::-;4746:192:::0;:::o;44690:130::-;5707:26;5722:10;5707:14;:26::i;:::-;5699:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;44787:25:::1;44793:7;44802:2;44806:5;44787;:25::i;:::-;44690:130:::0;;;:::o;39307:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15451:157::-;15536:4;15575:25;15560:40;;;:11;:40;;;;15553:47;;15451:157;;;:::o;2655:98::-;2708:7;2735:10;2728:17;;2655:98;:::o;30766:88::-;30840:6;30833:4;:13;;;;;;;;;;;;:::i;:::-;;30766:88;:::o;24413:105::-;24473:13;24506:4;24499:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24413:105;;;:::o;291:723::-;347:13;577:1;568:5;:10;564:53;;;595:10;;;;;;;;;;;;;;;;;;;;;564:53;627:12;642:5;627:20;;658:14;683:78;698:1;690:4;:9;683:78;;716:8;;;;;:::i;:::-;;;;747:2;739:10;;;;;:::i;:::-;;;683:78;;;771:19;803:6;793:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;771:39;;821:154;837:1;828:5;:10;821:154;;865:1;855:11;;;;;:::i;:::-;;;932:2;924:5;:10;;;;:::i;:::-;911:2;:24;;;;:::i;:::-;898:39;;881:6;888;881:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;961:2;952:11;;;;;:::i;:::-;;;821:154;;;999:6;985:21;;;;;291:723;;;;:::o;28848:1074::-;29075:7;:14;29061:3;:10;:28;29053:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29167:1;29153:16;;:2;:16;;;;29145:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29224:16;29243:12;:10;:12::i;:::-;29224:31;;29268:60;29289:8;29299:4;29305:2;29309:3;29314:7;29323:4;29268:20;:60::i;:::-;29346:9;29341:421;29365:3;:10;29361:1;:14;29341:421;;;29397:10;29410:3;29414:1;29410:6;;;;;;;;;;;;;;;;;;;;;;29397:19;;29431:14;29448:7;29456:1;29448:10;;;;;;;;;;;;;;;;;;;;;;29431:27;;29475:19;29497:9;:13;29507:2;29497:13;;;;;;;;;;;:19;29511:4;29497:19;;;;;;;;;;;;;;;;29475:41;;29554:6;29539:11;:21;;29531:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29687:6;29673:11;:20;29651:9;:13;29661:2;29651:13;;;;;;;;;;;:19;29665:4;29651:19;;;;;;;;;;;;;;;:42;;;;29744:6;29723:9;:13;29733:2;29723:13;;;;;;;;;;;:17;29737:2;29723:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29341:421;;;29377:3;;;;:::i;:::-;;;29341:421;;;;29809:2;29779:47;;29803:4;29779:47;;29793:8;29779:47;;;29813:3;29818:7;29779:47;;;;;;;:::i;:::-;;;;;;;;29839:75;29875:8;29885:4;29891:2;29895:3;29900:7;29909:4;29839:35;:75::i;:::-;28848:1074;;;;;;:::o;5530:133::-;5591:4;5625:7;:5;:7::i;:::-;5611:21;;:10;:21;;;:42;;;;5636:11;:17;5648:4;5636:17;;;;;;;;;;;;;;;;;;;;;;;;;5611:42;5604:49;;5530:133;;;:::o;42508:571::-;42586:5;42609:24;42636:1;42609:28;;42653:7;42648:405;42670:5;42676:6;42670:13;;;;;;;;;;;;;;;;:20;;;;42666:1;:24;;;42648:405;;;42710:21;42734:5;42740:6;42734:13;;;;;;;;;;;;;;;;42748:1;42734:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42710:40;;42784:1;42766:14;:19;;;42763:60;;;42801:8;;;42763:60;42869:17;42855:31;;:10;:31;;:97;;;;;42938:14;42918:17;:34;;;;:::i;:::-;42905:47;;:10;:47;42855:97;42835:139;;;42973:1;42966:8;;;;;;;42835:139;43027:14;43007:17;:34;;;;:::i;:::-;42987:54;;42648:405;;42692:3;;;;;:::i;:::-;;;;42648:405;;;;43070:1;43063:8;;;42508:571;;;;;:::o;31255:599::-;31432:1;31413:21;;:7;:21;;;;31405:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31485:16;31504:12;:10;:12::i;:::-;31485:31;;31529:107;31550:8;31568:1;31572:7;31581:21;31599:2;31581:17;:21::i;:::-;31604:25;31622:6;31604:17;:25::i;:::-;31631:4;31529:20;:107::i;:::-;31675:6;31649:9;:13;31659:2;31649:13;;;;;;;;;;;:22;31663:7;31649:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;31734:7;31697:57;;31730:1;31697:57;;31712:8;31697:57;;;31743:2;31747:6;31697:57;;;;;;;:::i;:::-;;;;;;;;31767:79;31798:8;31816:1;31820:7;31829:2;31833:6;31841:4;31767:30;:79::i;:::-;31255:599;;;;;:::o;34082:918::-;34256:1;34237:21;;:7;:21;;;;34229:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;34331:7;:14;34317:3;:10;:28;34309:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34403:16;34422:12;:10;:12::i;:::-;34403:31;;34447:69;34468:8;34478:7;34495:1;34499:3;34504:7;34447:69;;;;;;;;;;;;:20;:69::i;:::-;34534:9;34529:388;34553:3;:10;34549:1;:14;34529:388;;;34585:10;34598:3;34602:1;34598:6;;;;;;;;;;;;;;;;;;;;;;34585:19;;34619:14;34636:7;34644:1;34636:10;;;;;;;;;;;;;;;;;;;;;;34619:27;;34663:22;34688:9;:13;34698:2;34688:13;;;;;;;;;;;:22;34702:7;34688:22;;;;;;;;;;;;;;;;34663:47;;34751:6;34733:14;:24;;34725:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34884:6;34867:14;:23;34842:9;:13;34852:2;34842:13;;;;;;;;;;;:22;34856:7;34842:22;;;;;;;;;;;;;;;:48;;;;34529:388;;;34565:3;;;;;:::i;:::-;;;;34529:388;;;;34975:1;34934:58;;34958:7;34934:58;;34948:8;34934:58;;;34979:3;34984:7;34934:58;;;;;;;:::i;:::-;;;;;;;;34082:918;;;;:::o;4946:173::-;5002:16;5021:6;;;;;;;;;;;5002:25;;5047:8;5038:6;;:17;;;;;;;;;;;;;;;;;;5102:8;5071:40;;5092:8;5071:40;;;;;;;;;;;;4946:173;;:::o;26046:168::-;26145:4;26169:18;:27;26188:7;26169:27;;;;;;;;;;;;;;;:37;26197:8;26169:37;;;;;;;;;;;;;;;;;;;;;;;;;26162:44;;26046:168;;;;:::o;27670:820::-;27872:1;27858:16;;:2;:16;;;;27850:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27929:16;27948:12;:10;:12::i;:::-;27929:31;;27973:96;27994:8;28004:4;28010:2;28014:21;28032:2;28014:17;:21::i;:::-;28037:25;28055:6;28037:17;:25::i;:::-;28064:4;27973:20;:96::i;:::-;28082:19;28104:9;:13;28114:2;28104:13;;;;;;;;;;;:19;28118:4;28104:19;;;;;;;;;;;;;;;;28082:41;;28157:6;28142:11;:21;;28134:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28282:6;28268:11;:20;28246:9;:13;28256:2;28246:13;;;;;;;;;;;:19;28260:4;28246:19;;;;;;;;;;;;;;;:42;;;;28331:6;28310:9;:13;28320:2;28310:13;;;;;;;;;;;:17;28324:2;28310:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28386:2;28355:46;;28380:4;28355:46;;28370:8;28355:46;;;28390:2;28394:6;28355:46;;;;;;;:::i;:::-;;;;;;;;28414:68;28445:8;28455:4;28461:2;28465;28469:6;28477:4;28414:30;:68::i;:::-;27670:820;;;;;;;:::o;33204:675::-;33353:1;33334:21;;:7;:21;;;;33326:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;33408:16;33427:12;:10;:12::i;:::-;33408:31;;33452:105;33473:8;33483:7;33500:1;33504:21;33522:2;33504:17;:21::i;:::-;33527:25;33545:6;33527:17;:25::i;:::-;33452:105;;;;;;;;;;;;:20;:105::i;:::-;33570:22;33595:9;:13;33605:2;33595:13;;;;;;;;;;;:22;33609:7;33595:22;;;;;;;;;;;;;;;;33570:47;;33654:6;33636:14;:24;;33628:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33779:6;33762:14;:23;33737:9;:13;33747:2;33737:13;;;;;;;;;;;:22;33751:7;33737:22;;;;;;;;;;;;;;;:48;;;;33856:1;33814:57;;33839:7;33814:57;;33829:8;33814:57;;;33860:2;33864:6;33814:57;;;;;;;:::i;:::-;;;;;;;;33204:675;;;;;:::o;35956:221::-;;;;;;;:::o;36937:813::-;37177:15;:2;:13;;;:15::i;:::-;37173:570;;;37230:2;37213:43;;;37257:8;37267:4;37273:3;37278:7;37287:4;37213:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37209:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37605:6;37598:14;;;;;;;;;;;:::i;:::-;;;;;;;;37209:523;;;37654:62;;;;;;;;;;:::i;:::-;;;;;;;;37209:523;37386:48;;;37374:60;;;:8;:60;;;;37370:159;;37459:50;;;;;;;;;;:::i;:::-;;;;;;;;37370:159;37293:251;37173:570;36937:813;;;;;;:::o;37758:198::-;37824:16;37853:22;37892:1;37878:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37853:41;;37916:7;37905:5;37911:1;37905:8;;;;;;;;;;;;;;;;;;;;;:18;;;;;37943:5;37936:12;;;37758:198;;;:::o;36185:744::-;36400:15;:2;:13;;;:15::i;:::-;36396:526;;;36453:2;36436:38;;;36475:8;36485:4;36491:2;36495:6;36503:4;36436:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36432:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;36784:6;36777:14;;;;;;;;;;;:::i;:::-;;;;;;;;36432:479;;;36833:62;;;;;;;;;;:::i;:::-;;;;;;;;36432:479;36570:43;;;36558:55;;;:8;:55;;;;36554:154;;36638:50;;;;;;;;;;:::i;:::-;;;;;;;;36554:154;36509:214;36396:526;36185:744;;;;;;:::o;6541:387::-;6601:4;6809:12;6876:7;6864:20;6856:28;;6919:1;6912:4;:8;6905:15;;;6541:387;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;702:655::-;798:5;823:81;839:64;896:6;839:64;:::i;:::-;823:81;:::i;:::-;814:90;;924:5;953:6;946:5;939:21;987:4;980:5;976:16;969:23;;1013:6;1063:3;1055:4;1047:6;1043:17;1038:3;1034:27;1031:36;1028:2;;;1092:1;1089;1082:12;1028:2;1128:1;1113:238;1138:6;1135:1;1132:13;1113:238;;;1206:3;1235:37;1268:3;1256:10;1235:37;:::i;:::-;1230:3;1223:50;1302:4;1297:3;1293:14;1286:21;;1336:4;1331:3;1327:14;1320:21;;1173:178;1160:1;1157;1153:9;1148:14;;1113:238;;;1117:14;804:553;;;;;;;:::o;1363:343::-;1440:5;1465:65;1481:48;1522:6;1481:48;:::i;:::-;1465:65;:::i;:::-;1456:74;;1553:6;1546:5;1539:21;1591:4;1584:5;1580:16;1629:3;1620:6;1615:3;1611:16;1608:25;1605:2;;;1646:1;1643;1636:12;1605:2;1659:41;1693:6;1688:3;1683;1659:41;:::i;:::-;1446:260;;;;;;:::o;1712:345::-;1790:5;1815:66;1831:49;1873:6;1831:49;:::i;:::-;1815:66;:::i;:::-;1806:75;;1904:6;1897:5;1890:21;1942:4;1935:5;1931:16;1980:3;1971:6;1966:3;1962:16;1959:25;1956:2;;;1997:1;1994;1987:12;1956:2;2010:41;2044:6;2039:3;2034;2010:41;:::i;:::-;1796:261;;;;;;:::o;2063:139::-;2109:5;2147:6;2134:20;2125:29;;2163:33;2190:5;2163:33;:::i;:::-;2115:87;;;;:::o;2225:303::-;2296:5;2345:3;2338:4;2330:6;2326:17;2322:27;2312:2;;2363:1;2360;2353:12;2312:2;2403:6;2390:20;2428:94;2518:3;2510:6;2503:4;2495:6;2491:17;2428:94;:::i;:::-;2419:103;;2302:226;;;;;:::o;2550:366::-;2622:8;2632:6;2682:3;2675:4;2667:6;2663:17;2659:27;2649:2;;2700:1;2697;2690:12;2649:2;2736:6;2723:20;2713:30;;2766:18;2758:6;2755:30;2752:2;;;2798:1;2795;2788:12;2752:2;2835:4;2827:6;2823:17;2811:29;;2889:3;2881:4;2873:6;2869:17;2859:8;2855:32;2852:41;2849:2;;;2906:1;2903;2896:12;2849:2;2639:277;;;;;:::o;2939:303::-;3010:5;3059:3;3052:4;3044:6;3040:17;3036:27;3026:2;;3077:1;3074;3067:12;3026:2;3117:6;3104:20;3142:94;3232:3;3224:6;3217:4;3209:6;3205:17;3142:94;:::i;:::-;3133:103;;3016:226;;;;;:::o;3248:133::-;3291:5;3329:6;3316:20;3307:29;;3345:30;3369:5;3345:30;:::i;:::-;3297:84;;;;:::o;3387:137::-;3432:5;3470:6;3457:20;3448:29;;3486:32;3512:5;3486:32;:::i;:::-;3438:86;;;;:::o;3530:141::-;3586:5;3617:6;3611:13;3602:22;;3633:32;3659:5;3633:32;:::i;:::-;3592:79;;;;:::o;3690:271::-;3745:5;3794:3;3787:4;3779:6;3775:17;3771:27;3761:2;;3812:1;3809;3802:12;3761:2;3852:6;3839:20;3877:78;3951:3;3943:6;3936:4;3928:6;3924:17;3877:78;:::i;:::-;3868:87;;3751:210;;;;;:::o;3981:273::-;4037:5;4086:3;4079:4;4071:6;4067:17;4063:27;4053:2;;4104:1;4101;4094:12;4053:2;4144:6;4131:20;4169:79;4244:3;4236:6;4229:4;4221:6;4217:17;4169:79;:::i;:::-;4160:88;;4043:211;;;;;:::o;4260:139::-;4306:5;4344:6;4331:20;4322:29;;4360:33;4387:5;4360:33;:::i;:::-;4312:87;;;;:::o;4405:262::-;4464:6;4513:2;4501:9;4492:7;4488:23;4484:32;4481:2;;;4529:1;4526;4519:12;4481:2;4572:1;4597:53;4642:7;4633:6;4622:9;4618:22;4597:53;:::i;:::-;4587:63;;4543:117;4471:196;;;;:::o;4673:407::-;4741:6;4749;4798:2;4786:9;4777:7;4773:23;4769:32;4766:2;;;4814:1;4811;4804:12;4766:2;4857:1;4882:53;4927:7;4918:6;4907:9;4903:22;4882:53;:::i;:::-;4872:63;;4828:117;4984:2;5010:53;5055:7;5046:6;5035:9;5031:22;5010:53;:::i;:::-;5000:63;;4955:118;4756:324;;;;;:::o;5086:1241::-;5240:6;5248;5256;5264;5272;5321:3;5309:9;5300:7;5296:23;5292:33;5289:2;;;5338:1;5335;5328:12;5289:2;5381:1;5406:53;5451:7;5442:6;5431:9;5427:22;5406:53;:::i;:::-;5396:63;;5352:117;5508:2;5534:53;5579:7;5570:6;5559:9;5555:22;5534:53;:::i;:::-;5524:63;;5479:118;5664:2;5653:9;5649:18;5636:32;5695:18;5687:6;5684:30;5681:2;;;5727:1;5724;5717:12;5681:2;5755:78;5825:7;5816:6;5805:9;5801:22;5755:78;:::i;:::-;5745:88;;5607:236;5910:2;5899:9;5895:18;5882:32;5941:18;5933:6;5930:30;5927:2;;;5973:1;5970;5963:12;5927:2;6001:78;6071:7;6062:6;6051:9;6047:22;6001:78;:::i;:::-;5991:88;;5853:236;6156:3;6145:9;6141:19;6128:33;6188:18;6180:6;6177:30;6174:2;;;6220:1;6217;6210:12;6174:2;6248:62;6302:7;6293:6;6282:9;6278:22;6248:62;:::i;:::-;6238:72;;6099:221;5279:1048;;;;;;;;:::o;6333:955::-;6437:6;6445;6453;6461;6469;6518:3;6506:9;6497:7;6493:23;6489:33;6486:2;;;6535:1;6532;6525:12;6486:2;6578:1;6603:53;6648:7;6639:6;6628:9;6624:22;6603:53;:::i;:::-;6593:63;;6549:117;6705:2;6731:53;6776:7;6767:6;6756:9;6752:22;6731:53;:::i;:::-;6721:63;;6676:118;6833:2;6859:53;6904:7;6895:6;6884:9;6880:22;6859:53;:::i;:::-;6849:63;;6804:118;6961:2;6987:53;7032:7;7023:6;7012:9;7008:22;6987:53;:::i;:::-;6977:63;;6932:118;7117:3;7106:9;7102:19;7089:33;7149:18;7141:6;7138:30;7135:2;;;7181:1;7178;7171:12;7135:2;7209:62;7263:7;7254:6;7243:9;7239:22;7209:62;:::i;:::-;7199:72;;7060:221;6476:812;;;;;;;;:::o;7294:838::-;7421:6;7429;7437;7486:2;7474:9;7465:7;7461:23;7457:32;7454:2;;;7502:1;7499;7492:12;7454:2;7545:1;7570:53;7615:7;7606:6;7595:9;7591:22;7570:53;:::i;:::-;7560:63;;7516:117;7700:2;7689:9;7685:18;7672:32;7731:18;7723:6;7720:30;7717:2;;;7763:1;7760;7753:12;7717:2;7791:78;7861:7;7852:6;7841:9;7837:22;7791:78;:::i;:::-;7781:88;;7643:236;7946:2;7935:9;7931:18;7918:32;7977:18;7969:6;7966:30;7963:2;;;8009:1;8006;7999:12;7963:2;8037:78;8107:7;8098:6;8087:9;8083:22;8037:78;:::i;:::-;8027:88;;7889:236;7444:688;;;;;:::o;8138:401::-;8203:6;8211;8260:2;8248:9;8239:7;8235:23;8231:32;8228:2;;;8276:1;8273;8266:12;8228:2;8319:1;8344:53;8389:7;8380:6;8369:9;8365:22;8344:53;:::i;:::-;8334:63;;8290:117;8446:2;8472:50;8514:7;8505:6;8494:9;8490:22;8472:50;:::i;:::-;8462:60;;8417:115;8218:321;;;;;:::o;8545:407::-;8613:6;8621;8670:2;8658:9;8649:7;8645:23;8641:32;8638:2;;;8686:1;8683;8676:12;8638:2;8729:1;8754:53;8799:7;8790:6;8779:9;8775:22;8754:53;:::i;:::-;8744:63;;8700:117;8856:2;8882:53;8927:7;8918:6;8907:9;8903:22;8882:53;:::i;:::-;8872:63;;8827:118;8628:324;;;;;:::o;8958:552::-;9035:6;9043;9051;9100:2;9088:9;9079:7;9075:23;9071:32;9068:2;;;9116:1;9113;9106:12;9068:2;9159:1;9184:53;9229:7;9220:6;9209:9;9205:22;9184:53;:::i;:::-;9174:63;;9130:117;9286:2;9312:53;9357:7;9348:6;9337:9;9333:22;9312:53;:::i;:::-;9302:63;;9257:118;9414:2;9440:53;9485:7;9476:6;9465:9;9461:22;9440:53;:::i;:::-;9430:63;;9385:118;9058:452;;;;;:::o;9516:693::-;9634:6;9642;9691:2;9679:9;9670:7;9666:23;9662:32;9659:2;;;9707:1;9704;9697:12;9659:2;9778:1;9767:9;9763:17;9750:31;9808:18;9800:6;9797:30;9794:2;;;9840:1;9837;9830:12;9794:2;9868:78;9938:7;9929:6;9918:9;9914:22;9868:78;:::i;:::-;9858:88;;9721:235;10023:2;10012:9;10008:18;9995:32;10054:18;10046:6;10043:30;10040:2;;;10086:1;10083;10076:12;10040:2;10114:78;10184:7;10175:6;10164:9;10160:22;10114:78;:::i;:::-;10104:88;;9966:236;9649:560;;;;;:::o;10215:423::-;10300:6;10308;10357:2;10345:9;10336:7;10332:23;10328:32;10325:2;;;10373:1;10370;10363:12;10325:2;10444:1;10433:9;10429:17;10416:31;10474:18;10466:6;10463:30;10460:2;;;10506:1;10503;10496:12;10460:2;10542:79;10613:7;10604:6;10593:9;10589:22;10542:79;:::i;:::-;10524:97;;;;10387:244;10315:323;;;;;:::o;10644:260::-;10702:6;10751:2;10739:9;10730:7;10726:23;10722:32;10719:2;;;10767:1;10764;10757:12;10719:2;10810:1;10835:52;10879:7;10870:6;10859:9;10855:22;10835:52;:::i;:::-;10825:62;;10781:116;10709:195;;;;:::o;10910:282::-;10979:6;11028:2;11016:9;11007:7;11003:23;10999:32;10996:2;;;11044:1;11041;11034:12;10996:2;11087:1;11112:63;11167:7;11158:6;11147:9;11143:22;11112:63;:::i;:::-;11102:73;;11058:127;10986:206;;;;:::o;11198:375::-;11267:6;11316:2;11304:9;11295:7;11291:23;11287:32;11284:2;;;11332:1;11329;11322:12;11284:2;11403:1;11392:9;11388:17;11375:31;11433:18;11425:6;11422:30;11419:2;;;11465:1;11462;11455:12;11419:2;11493:63;11548:7;11539:6;11528:9;11524:22;11493:63;:::i;:::-;11483:73;;11346:220;11274:299;;;;:::o;11579:262::-;11638:6;11687:2;11675:9;11666:7;11662:23;11658:32;11655:2;;;11703:1;11700;11693:12;11655:2;11746:1;11771:53;11816:7;11807:6;11796:9;11792:22;11771:53;:::i;:::-;11761:63;;11717:117;11645:196;;;;:::o;11847:568::-;11941:6;11949;11957;12006:2;11994:9;11985:7;11981:23;11977:32;11974:2;;;12022:1;12019;12012:12;11974:2;12065:1;12090:53;12135:7;12126:6;12115:9;12111:22;12090:53;:::i;:::-;12080:63;;12036:117;12220:2;12209:9;12205:18;12192:32;12251:18;12243:6;12240:30;12237:2;;;12283:1;12280;12273:12;12237:2;12319:79;12390:7;12381:6;12370:9;12366:22;12319:79;:::i;:::-;12301:97;;;;12163:245;11964:451;;;;;:::o;12421:407::-;12489:6;12497;12546:2;12534:9;12525:7;12521:23;12517:32;12514:2;;;12562:1;12559;12552:12;12514:2;12605:1;12630:53;12675:7;12666:6;12655:9;12651:22;12630:53;:::i;:::-;12620:63;;12576:117;12732:2;12758:53;12803:7;12794:6;12783:9;12779:22;12758:53;:::i;:::-;12748:63;;12703:118;12504:324;;;;;:::o;12834:179::-;12903:10;12924:46;12966:3;12958:6;12924:46;:::i;:::-;13002:4;12997:3;12993:14;12979:28;;12914:99;;;;:::o;13019:118::-;13106:24;13124:5;13106:24;:::i;:::-;13101:3;13094:37;13084:53;;:::o;13173:732::-;13292:3;13321:54;13369:5;13321:54;:::i;:::-;13391:86;13470:6;13465:3;13391:86;:::i;:::-;13384:93;;13501:56;13551:5;13501:56;:::i;:::-;13580:7;13611:1;13596:284;13621:6;13618:1;13615:13;13596:284;;;13697:6;13691:13;13724:63;13783:3;13768:13;13724:63;:::i;:::-;13717:70;;13810:60;13863:6;13810:60;:::i;:::-;13800:70;;13656:224;13643:1;13640;13636:9;13631:14;;13596:284;;;13600:14;13896:3;13889:10;;13297:608;;;;;;;:::o;13911:109::-;13992:21;14007:5;13992:21;:::i;:::-;13987:3;13980:34;13970:50;;:::o;14026:360::-;14112:3;14140:38;14172:5;14140:38;:::i;:::-;14194:70;14257:6;14252:3;14194:70;:::i;:::-;14187:77;;14273:52;14318:6;14313:3;14306:4;14299:5;14295:16;14273:52;:::i;:::-;14350:29;14372:6;14350:29;:::i;:::-;14345:3;14341:39;14334:46;;14116:270;;;;;:::o;14392:364::-;14480:3;14508:39;14541:5;14508:39;:::i;:::-;14563:71;14627:6;14622:3;14563:71;:::i;:::-;14556:78;;14643:52;14688:6;14683:3;14676:4;14669:5;14665:16;14643:52;:::i;:::-;14720:29;14742:6;14720:29;:::i;:::-;14715:3;14711:39;14704:46;;14484:272;;;;;:::o;14762:377::-;14868:3;14896:39;14929:5;14896:39;:::i;:::-;14951:89;15033:6;15028:3;14951:89;:::i;:::-;14944:96;;15049:52;15094:6;15089:3;15082:4;15075:5;15071:16;15049:52;:::i;:::-;15126:6;15121:3;15117:16;15110:23;;14872:267;;;;;:::o;15145:366::-;15287:3;15308:67;15372:2;15367:3;15308:67;:::i;:::-;15301:74;;15384:93;15473:3;15384:93;:::i;:::-;15502:2;15497:3;15493:12;15486:19;;15291:220;;;:::o;15517:366::-;15659:3;15680:67;15744:2;15739:3;15680:67;:::i;:::-;15673:74;;15756:93;15845:3;15756:93;:::i;:::-;15874:2;15869:3;15865:12;15858:19;;15663:220;;;:::o;15889:366::-;16031:3;16052:67;16116:2;16111:3;16052:67;:::i;:::-;16045:74;;16128:93;16217:3;16128:93;:::i;:::-;16246:2;16241:3;16237:12;16230:19;;16035:220;;;:::o;16261:366::-;16403:3;16424:67;16488:2;16483:3;16424:67;:::i;:::-;16417:74;;16500:93;16589:3;16500:93;:::i;:::-;16618:2;16613:3;16609:12;16602:19;;16407:220;;;:::o;16633:366::-;16775:3;16796:67;16860:2;16855:3;16796:67;:::i;:::-;16789:74;;16872:93;16961:3;16872:93;:::i;:::-;16990:2;16985:3;16981:12;16974:19;;16779:220;;;:::o;17005:366::-;17147:3;17168:67;17232:2;17227:3;17168:67;:::i;:::-;17161:74;;17244:93;17333:3;17244:93;:::i;:::-;17362:2;17357:3;17353:12;17346:19;;17151:220;;;:::o;17377:366::-;17519:3;17540:67;17604:2;17599:3;17540:67;:::i;:::-;17533:74;;17616:93;17705:3;17616:93;:::i;:::-;17734:2;17729:3;17725:12;17718:19;;17523:220;;;:::o;17749:366::-;17891:3;17912:67;17976:2;17971:3;17912:67;:::i;:::-;17905:74;;17988:93;18077:3;17988:93;:::i;:::-;18106:2;18101:3;18097:12;18090:19;;17895:220;;;:::o;18121:366::-;18263:3;18284:67;18348:2;18343:3;18284:67;:::i;:::-;18277:74;;18360:93;18449:3;18360:93;:::i;:::-;18478:2;18473:3;18469:12;18462:19;;18267:220;;;:::o;18493:366::-;18635:3;18656:67;18720:2;18715:3;18656:67;:::i;:::-;18649:74;;18732:93;18821:3;18732:93;:::i;:::-;18850:2;18845:3;18841:12;18834:19;;18639:220;;;:::o;18865:366::-;19007:3;19028:67;19092:2;19087:3;19028:67;:::i;:::-;19021:74;;19104:93;19193:3;19104:93;:::i;:::-;19222:2;19217:3;19213:12;19206:19;;19011:220;;;:::o;19237:366::-;19379:3;19400:67;19464:2;19459:3;19400:67;:::i;:::-;19393:74;;19476:93;19565:3;19476:93;:::i;:::-;19594:2;19589:3;19585:12;19578:19;;19383:220;;;:::o;19609:366::-;19751:3;19772:67;19836:2;19831:3;19772:67;:::i;:::-;19765:74;;19848:93;19937:3;19848:93;:::i;:::-;19966:2;19961:3;19957:12;19950:19;;19755:220;;;:::o;19981:366::-;20123:3;20144:67;20208:2;20203:3;20144:67;:::i;:::-;20137:74;;20220:93;20309:3;20220:93;:::i;:::-;20338:2;20333:3;20329:12;20322:19;;20127:220;;;:::o;20353:366::-;20495:3;20516:67;20580:2;20575:3;20516:67;:::i;:::-;20509:74;;20592:93;20681:3;20592:93;:::i;:::-;20710:2;20705:3;20701:12;20694:19;;20499:220;;;:::o;20725:366::-;20867:3;20888:67;20952:2;20947:3;20888:67;:::i;:::-;20881:74;;20964:93;21053:3;20964:93;:::i;:::-;21082:2;21077:3;21073:12;21066:19;;20871:220;;;:::o;21097:115::-;21182:23;21199:5;21182:23;:::i;:::-;21177:3;21170:36;21160:52;;:::o;21218:108::-;21295:24;21313:5;21295:24;:::i;:::-;21290:3;21283:37;21273:53;;:::o;21332:118::-;21419:24;21437:5;21419:24;:::i;:::-;21414:3;21407:37;21397:53;;:::o;21456:435::-;21636:3;21658:95;21749:3;21740:6;21658:95;:::i;:::-;21651:102;;21770:95;21861:3;21852:6;21770:95;:::i;:::-;21763:102;;21882:3;21875:10;;21640:251;;;;;:::o;21897:222::-;21990:4;22028:2;22017:9;22013:18;22005:26;;22041:71;22109:1;22098:9;22094:17;22085:6;22041:71;:::i;:::-;21995:124;;;;:::o;22125:1053::-;22448:4;22486:3;22475:9;22471:19;22463:27;;22500:71;22568:1;22557:9;22553:17;22544:6;22500:71;:::i;:::-;22581:72;22649:2;22638:9;22634:18;22625:6;22581:72;:::i;:::-;22700:9;22694:4;22690:20;22685:2;22674:9;22670:18;22663:48;22728:108;22831:4;22822:6;22728:108;:::i;:::-;22720:116;;22883:9;22877:4;22873:20;22868:2;22857:9;22853:18;22846:48;22911:108;23014:4;23005:6;22911:108;:::i;:::-;22903:116;;23067:9;23061:4;23057:20;23051:3;23040:9;23036:19;23029:49;23095:76;23166:4;23157:6;23095:76;:::i;:::-;23087:84;;22453:725;;;;;;;;:::o;23184:751::-;23407:4;23445:3;23434:9;23430:19;23422:27;;23459:71;23527:1;23516:9;23512:17;23503:6;23459:71;:::i;:::-;23540:72;23608:2;23597:9;23593:18;23584:6;23540:72;:::i;:::-;23622;23690:2;23679:9;23675:18;23666:6;23622:72;:::i;:::-;23704;23772:2;23761:9;23757:18;23748:6;23704:72;:::i;:::-;23824:9;23818:4;23814:20;23808:3;23797:9;23793:19;23786:49;23852:76;23923:4;23914:6;23852:76;:::i;:::-;23844:84;;23412:523;;;;;;;;:::o;23941:373::-;24084:4;24122:2;24111:9;24107:18;24099:26;;24171:9;24165:4;24161:20;24157:1;24146:9;24142:17;24135:47;24199:108;24302:4;24293:6;24199:108;:::i;:::-;24191:116;;24089:225;;;;:::o;24320:634::-;24541:4;24579:2;24568:9;24564:18;24556:26;;24628:9;24622:4;24618:20;24614:1;24603:9;24599:17;24592:47;24656:108;24759:4;24750:6;24656:108;:::i;:::-;24648:116;;24811:9;24805:4;24801:20;24796:2;24785:9;24781:18;24774:48;24839:108;24942:4;24933:6;24839:108;:::i;:::-;24831:116;;24546:408;;;;;:::o;24960:210::-;25047:4;25085:2;25074:9;25070:18;25062:26;;25098:65;25160:1;25149:9;25145:17;25136:6;25098:65;:::i;:::-;25052:118;;;;:::o;25176:313::-;25289:4;25327:2;25316:9;25312:18;25304:26;;25376:9;25370:4;25366:20;25362:1;25351:9;25347:17;25340:47;25404:78;25477:4;25468:6;25404:78;:::i;:::-;25396:86;;25294:195;;;;:::o;25495:419::-;25661:4;25699:2;25688:9;25684:18;25676:26;;25748:9;25742:4;25738:20;25734:1;25723:9;25719:17;25712:47;25776:131;25902:4;25776:131;:::i;:::-;25768:139;;25666:248;;;:::o;25920:419::-;26086:4;26124:2;26113:9;26109:18;26101:26;;26173:9;26167:4;26163:20;26159:1;26148:9;26144:17;26137:47;26201:131;26327:4;26201:131;:::i;:::-;26193:139;;26091:248;;;:::o;26345:419::-;26511:4;26549:2;26538:9;26534:18;26526:26;;26598:9;26592:4;26588:20;26584:1;26573:9;26569:17;26562:47;26626:131;26752:4;26626:131;:::i;:::-;26618:139;;26516:248;;;:::o;26770:419::-;26936:4;26974:2;26963:9;26959:18;26951:26;;27023:9;27017:4;27013:20;27009:1;26998:9;26994:17;26987:47;27051:131;27177:4;27051:131;:::i;:::-;27043:139;;26941:248;;;:::o;27195:419::-;27361:4;27399:2;27388:9;27384:18;27376:26;;27448:9;27442:4;27438:20;27434:1;27423:9;27419:17;27412:47;27476:131;27602:4;27476:131;:::i;:::-;27468:139;;27366:248;;;:::o;27620:419::-;27786:4;27824:2;27813:9;27809:18;27801:26;;27873:9;27867:4;27863:20;27859:1;27848:9;27844:17;27837:47;27901:131;28027:4;27901:131;:::i;:::-;27893:139;;27791:248;;;:::o;28045:419::-;28211:4;28249:2;28238:9;28234:18;28226:26;;28298:9;28292:4;28288:20;28284:1;28273:9;28269:17;28262:47;28326:131;28452:4;28326:131;:::i;:::-;28318:139;;28216:248;;;:::o;28470:419::-;28636:4;28674:2;28663:9;28659:18;28651:26;;28723:9;28717:4;28713:20;28709:1;28698:9;28694:17;28687:47;28751:131;28877:4;28751:131;:::i;:::-;28743:139;;28641:248;;;:::o;28895:419::-;29061:4;29099:2;29088:9;29084:18;29076:26;;29148:9;29142:4;29138:20;29134:1;29123:9;29119:17;29112:47;29176:131;29302:4;29176:131;:::i;:::-;29168:139;;29066:248;;;:::o;29320:419::-;29486:4;29524:2;29513:9;29509:18;29501:26;;29573:9;29567:4;29563:20;29559:1;29548:9;29544:17;29537:47;29601:131;29727:4;29601:131;:::i;:::-;29593:139;;29491:248;;;:::o;29745:419::-;29911:4;29949:2;29938:9;29934:18;29926:26;;29998:9;29992:4;29988:20;29984:1;29973:9;29969:17;29962:47;30026:131;30152:4;30026:131;:::i;:::-;30018:139;;29916:248;;;:::o;30170:419::-;30336:4;30374:2;30363:9;30359:18;30351:26;;30423:9;30417:4;30413:20;30409:1;30398:9;30394:17;30387:47;30451:131;30577:4;30451:131;:::i;:::-;30443:139;;30341:248;;;:::o;30595:419::-;30761:4;30799:2;30788:9;30784:18;30776:26;;30848:9;30842:4;30838:20;30834:1;30823:9;30819:17;30812:47;30876:131;31002:4;30876:131;:::i;:::-;30868:139;;30766:248;;;:::o;31020:419::-;31186:4;31224:2;31213:9;31209:18;31201:26;;31273:9;31267:4;31263:20;31259:1;31248:9;31244:17;31237:47;31301:131;31427:4;31301:131;:::i;:::-;31293:139;;31191:248;;;:::o;31445:419::-;31611:4;31649:2;31638:9;31634:18;31626:26;;31698:9;31692:4;31688:20;31684:1;31673:9;31669:17;31662:47;31726:131;31852:4;31726:131;:::i;:::-;31718:139;;31616:248;;;:::o;31870:419::-;32036:4;32074:2;32063:9;32059:18;32051:26;;32123:9;32117:4;32113:20;32109:1;32098:9;32094:17;32087:47;32151:131;32277:4;32151:131;:::i;:::-;32143:139;;32041:248;;;:::o;32295:218::-;32386:4;32424:2;32413:9;32409:18;32401:26;;32437:69;32503:1;32492:9;32488:17;32479:6;32437:69;:::i;:::-;32391:122;;;;:::o;32519:222::-;32612:4;32650:2;32639:9;32635:18;32627:26;;32663:71;32731:1;32720:9;32716:17;32707:6;32663:71;:::i;:::-;32617:124;;;;:::o;32747:332::-;32868:4;32906:2;32895:9;32891:18;32883:26;;32919:71;32987:1;32976:9;32972:17;32963:6;32919:71;:::i;:::-;33000:72;33068:2;33057:9;33053:18;33044:6;33000:72;:::i;:::-;32873:206;;;;;:::o;33085:129::-;33119:6;33146:20;;:::i;:::-;33136:30;;33175:33;33203:4;33195:6;33175:33;:::i;:::-;33126:88;;;:::o;33220:75::-;33253:6;33286:2;33280:9;33270:19;;33260:35;:::o;33301:311::-;33378:4;33468:18;33460:6;33457:30;33454:2;;;33490:18;;:::i;:::-;33454:2;33540:4;33532:6;33528:17;33520:25;;33600:4;33594;33590:15;33582:23;;33383:229;;;:::o;33618:311::-;33695:4;33785:18;33777:6;33774:30;33771:2;;;33807:18;;:::i;:::-;33771:2;33857:4;33849:6;33845:17;33837:25;;33917:4;33911;33907:15;33899:23;;33700:229;;;:::o;33935:307::-;33996:4;34086:18;34078:6;34075:30;34072:2;;;34108:18;;:::i;:::-;34072:2;34146:29;34168:6;34146:29;:::i;:::-;34138:37;;34230:4;34224;34220:15;34212:23;;34001:241;;;:::o;34248:308::-;34310:4;34400:18;34392:6;34389:30;34386:2;;;34422:18;;:::i;:::-;34386:2;34460:29;34482:6;34460:29;:::i;:::-;34452:37;;34544:4;34538;34534:15;34526:23;;34315:241;;;:::o;34562:132::-;34629:4;34652:3;34644:11;;34682:4;34677:3;34673:14;34665:22;;34634:60;;;:::o;34700:114::-;34767:6;34801:5;34795:12;34785:22;;34774:40;;;:::o;34820:98::-;34871:6;34905:5;34899:12;34889:22;;34878:40;;;:::o;34924:99::-;34976:6;35010:5;35004:12;34994:22;;34983:40;;;:::o;35029:113::-;35099:4;35131;35126:3;35122:14;35114:22;;35104:38;;;:::o;35148:184::-;35247:11;35281:6;35276:3;35269:19;35321:4;35316:3;35312:14;35297:29;;35259:73;;;;:::o;35338:168::-;35421:11;35455:6;35450:3;35443:19;35495:4;35490:3;35486:14;35471:29;;35433:73;;;;:::o;35512:169::-;35596:11;35630:6;35625:3;35618:19;35670:4;35665:3;35661:14;35646:29;;35608:73;;;;:::o;35687:148::-;35789:11;35826:3;35811:18;;35801:34;;;;:::o;35841:242::-;35880:3;35899:19;35916:1;35899:19;:::i;:::-;35894:24;;35932:19;35949:1;35932:19;:::i;:::-;35927:24;;36025:1;36017:6;36013:14;36010:1;36007:21;36004:2;;;36031:18;;:::i;:::-;36004:2;36075:1;36072;36068:9;36061:16;;35884:199;;;;:::o;36089:305::-;36129:3;36148:20;36166:1;36148:20;:::i;:::-;36143:25;;36182:20;36200:1;36182:20;:::i;:::-;36177:25;;36336:1;36268:66;36264:74;36261:1;36258:81;36255:2;;;36342:18;;:::i;:::-;36255:2;36386:1;36383;36379:9;36372:16;;36133:261;;;;:::o;36400:185::-;36440:1;36457:20;36475:1;36457:20;:::i;:::-;36452:25;;36491:20;36509:1;36491:20;:::i;:::-;36486:25;;36530:1;36520:2;;36535:18;;:::i;:::-;36520:2;36577:1;36574;36570:9;36565:14;;36442:143;;;;:::o;36591:285::-;36630:7;36653:19;36670:1;36653:19;:::i;:::-;36648:24;;36686:19;36703:1;36686:19;:::i;:::-;36681:24;;36813:1;36805:6;36801:14;36798:1;36795:21;36790:1;36783:9;36776:17;36772:45;36769:2;;;36820:18;;:::i;:::-;36769:2;36868:1;36865;36861:9;36850:20;;36638:238;;;;:::o;36882:191::-;36922:4;36942:20;36960:1;36942:20;:::i;:::-;36937:25;;36976:20;36994:1;36976:20;:::i;:::-;36971:25;;37015:1;37012;37009:8;37006:2;;;37020:18;;:::i;:::-;37006:2;37065:1;37062;37058:9;37050:17;;36927:146;;;;:::o;37079:96::-;37116:7;37145:24;37163:5;37145:24;:::i;:::-;37134:35;;37124:51;;;:::o;37181:90::-;37215:7;37258:5;37251:13;37244:21;37233:32;;37223:48;;;:::o;37277:149::-;37313:7;37353:66;37346:5;37342:78;37331:89;;37321:105;;;:::o;37432:89::-;37468:7;37508:6;37501:5;37497:18;37486:29;;37476:45;;;:::o;37527:126::-;37564:7;37604:42;37597:5;37593:54;37582:65;;37572:81;;;:::o;37659:77::-;37696:7;37725:5;37714:16;;37704:32;;;:::o;37742:86::-;37777:7;37817:4;37810:5;37806:16;37795:27;;37785:43;;;:::o;37834:154::-;37918:6;37913:3;37908;37895:30;37980:1;37971:6;37966:3;37962:16;37955:27;37885:103;;;:::o;37994:307::-;38062:1;38072:113;38086:6;38083:1;38080:13;38072:113;;;38171:1;38166:3;38162:11;38156:18;38152:1;38147:3;38143:11;38136:39;38108:2;38105:1;38101:10;38096:15;;38072:113;;;38203:6;38200:1;38197:13;38194:2;;;38283:1;38274:6;38269:3;38265:16;38258:27;38194:2;38043:258;;;;:::o;38307:320::-;38351:6;38388:1;38382:4;38378:12;38368:22;;38435:1;38429:4;38425:12;38456:18;38446:2;;38512:4;38504:6;38500:17;38490:27;;38446:2;38574;38566:6;38563:14;38543:18;38540:38;38537:2;;;38593:18;;:::i;:::-;38537:2;38358:269;;;;:::o;38633:281::-;38716:27;38738:4;38716:27;:::i;:::-;38708:6;38704:40;38846:6;38834:10;38831:22;38810:18;38798:10;38795:34;38792:62;38789:2;;;38857:18;;:::i;:::-;38789:2;38897:10;38893:2;38886:22;38676:238;;;:::o;38920:233::-;38959:3;38982:24;39000:5;38982:24;:::i;:::-;38973:33;;39028:66;39021:5;39018:77;39015:2;;;39098:18;;:::i;:::-;39015:2;39145:1;39138:5;39134:13;39127:20;;38963:190;;;:::o;39159:167::-;39196:3;39219:22;39235:5;39219:22;:::i;:::-;39210:31;;39263:4;39256:5;39253:15;39250:2;;;39271:18;;:::i;:::-;39250:2;39318:1;39311:5;39307:13;39300:20;;39200:126;;;:::o;39332:176::-;39364:1;39381:20;39399:1;39381:20;:::i;:::-;39376:25;;39415:20;39433:1;39415:20;:::i;:::-;39410:25;;39454:1;39444:2;;39459:18;;:::i;:::-;39444:2;39500:1;39497;39493:9;39488:14;;39366:142;;;;:::o;39514:180::-;39562:77;39559:1;39552:88;39659:4;39656:1;39649:15;39683:4;39680:1;39673:15;39700:180;39748:77;39745:1;39738:88;39845:4;39842:1;39835:15;39869:4;39866:1;39859:15;39886:180;39934:77;39931:1;39924:88;40031:4;40028:1;40021:15;40055:4;40052:1;40045:15;40072:180;40120:77;40117:1;40110:88;40217:4;40214:1;40207:15;40241:4;40238:1;40231:15;40258:183;40293:3;40331:1;40313:16;40310:23;40307:2;;;40369:1;40366;40363;40348:23;40391:34;40422:1;40416:8;40391:34;:::i;:::-;40384:41;;40307:2;40297:144;:::o;40447:102::-;40488:6;40539:2;40535:7;40530:2;40523:5;40519:14;40515:28;40505:38;;40495:54;;;:::o;40555:106::-;40599:8;40648:5;40643:3;40639:15;40618:36;;40608:53;;;:::o;40667:239::-;40807:34;40803:1;40795:6;40791:14;40784:58;40876:22;40871:2;40863:6;40859:15;40852:47;40773:133;:::o;40912:227::-;41052:34;41048:1;41040:6;41036:14;41029:58;41121:10;41116:2;41108:6;41104:15;41097:35;41018:121;:::o;41145:230::-;41285:34;41281:1;41273:6;41269:14;41262:58;41354:13;41349:2;41341:6;41337:15;41330:38;41251:124;:::o;41381:225::-;41521:34;41517:1;41509:6;41505:14;41498:58;41590:8;41585:2;41577:6;41573:15;41566:33;41487:119;:::o;41612:223::-;41752:34;41748:1;41740:6;41736:14;41729:58;41821:6;41816:2;41808:6;41804:15;41797:31;41718:117;:::o;41841:228::-;41981:34;41977:1;41969:6;41965:14;41958:58;42050:11;42045:2;42037:6;42033:15;42026:36;41947:122;:::o;42075:224::-;42215:34;42211:1;42203:6;42199:14;42192:58;42284:7;42279:2;42271:6;42267:15;42260:32;42181:118;:::o;42305:237::-;42445:34;42441:1;42433:6;42429:14;42422:58;42514:20;42509:2;42501:6;42497:15;42490:45;42411:131;:::o;42548:222::-;42688:34;42684:1;42676:6;42672:14;42665:58;42757:5;42752:2;42744:6;42740:15;42733:30;42654:116;:::o;42776:225::-;42916:34;42912:1;42904:6;42900:14;42893:58;42985:8;42980:2;42972:6;42968:15;42961:33;42882:119;:::o;43007:229::-;43147:34;43143:1;43135:6;43131:14;43124:58;43216:12;43211:2;43203:6;43199:15;43192:37;43113:123;:::o;43242:182::-;43382:34;43378:1;43370:6;43366:14;43359:58;43348:76;:::o;43430:228::-;43570:34;43566:1;43558:6;43554:14;43547:58;43639:11;43634:2;43626:6;43622:15;43615:36;43536:122;:::o;43664:228::-;43804:34;43800:1;43792:6;43788:14;43781:58;43873:11;43868:2;43860:6;43856:15;43849:36;43770:122;:::o;43898:227::-;44038:34;44034:1;44026:6;44022:14;44015:58;44107:10;44102:2;44094:6;44090:15;44083:35;44004:121;:::o;44131:220::-;44271:34;44267:1;44259:6;44255:14;44248:58;44340:3;44335:2;44327:6;44323:15;44316:28;44237:114;:::o;44357:711::-;44396:3;44434:4;44416:16;44413:26;44410:2;;;44442:5;;44410:2;44471:20;;:::i;:::-;44546:1;44528:16;44524:24;44521:1;44515:4;44500:49;44579:4;44573:11;44678:16;44671:4;44663:6;44659:17;44656:39;44623:18;44615:6;44612:30;44596:113;44593:2;;;44724:5;;;;44593:2;44770:6;44764:4;44760:17;44806:3;44800:10;44833:18;44825:6;44822:30;44819:2;;;44855:5;;;;;;44819:2;44903:6;44896:4;44891:3;44887:14;44883:27;44962:1;44944:16;44940:24;44934:4;44930:35;44925:3;44922:44;44919:2;;;44969:5;;;;;;;44919:2;44986:57;45034:6;45028:4;45024:17;45016:6;45012:30;45006:4;44986:57;:::i;:::-;45059:3;45052:10;;44400:668;;;;;;;:::o;45074:122::-;45147:24;45165:5;45147:24;:::i;:::-;45140:5;45137:35;45127:2;;45186:1;45183;45176:12;45127:2;45117:79;:::o;45202:116::-;45272:21;45287:5;45272:21;:::i;:::-;45265:5;45262:32;45252:2;;45308:1;45305;45298:12;45252:2;45242:76;:::o;45324:120::-;45396:23;45413:5;45396:23;:::i;:::-;45389:5;45386:34;45376:2;;45434:1;45431;45424:12;45376:2;45366:78;:::o;45450:122::-;45523:24;45541:5;45523:24;:::i;:::-;45516:5;45513:35;45503:2;;45562:1;45559;45552:12;45503:2;45493:79;:::o
Swarm Source
ipfs://0b3939844b5b4a1bf72f58d2649aab17e7cc6647a8a5f89e2d00a01c7720af3f
Loading...
Loading
OVERVIEW
Galaxy Fight Club is a cross-IP P2E PvP game for the NFT Universe.Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.