Source Code
Overview
ETH Balance
0.0061 ETH
Token Holdings
More Info
ContractCreator
Multichain Info
N/A
Latest 11 from a total of 11 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Mint With Eth | 5250251 | 3 days ago | IN | 0.0001 ETH | 0.00007111 | ||||
Set Mint Price | 4885298 | 8 days ago | IN | 0 ETH | 0.00000852 | ||||
Mint With Eth | 4877719 | 8 days ago | IN | 0.001 ETH | 0.00003212 | ||||
Mint With Eth | 4839505 | 9 days ago | IN | 0.001 ETH | 0.00001416 | ||||
Mint With Eth | 4838945 | 9 days ago | IN | 0.001 ETH | 0.00001799 | ||||
Mint With Eth | 4830400 | 9 days ago | IN | 0.001 ETH | 0.00001804 | ||||
Mint With Eth | 4806616 | 9 days ago | IN | 0.001 ETH | 0.00002201 | ||||
Mint With Eth | 4751821 | 10 days ago | IN | 0.001 ETH | 0.00001844 | ||||
Set Mint Price | 4749674 | 10 days ago | IN | 0 ETH | 0.00000383 | ||||
Set Paused | 4134995 | 18 days ago | IN | 0 ETH | 0.00000331 | ||||
Initialize | 4134906 | 18 days ago | IN | 0 ETH | 0.00000618 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
5250251 | 3 days ago | 0 ETH | ||||
5250251 | 3 days ago | 0 ETH | ||||
5250251 | 3 days ago | 0 ETH | ||||
5250251 | 3 days ago | 0 ETH | ||||
5250251 | 3 days ago | 0 ETH | ||||
5250251 | 3 days ago | 0 ETH | ||||
5250251 | 3 days ago | 0 ETH | ||||
5250251 | 3 days ago | 0 ETH | ||||
5250251 | 3 days ago | 0 ETH | ||||
5250251 | 3 days ago | 0 ETH | ||||
5250251 | 3 days ago | 0 ETH | ||||
5250251 | 3 days ago | 0 ETH | ||||
5250251 | 3 days ago | 0 ETH | ||||
5250251 | 3 days ago | 0 ETH | ||||
5250251 | 3 days ago | 0 ETH | ||||
5250251 | 3 days ago | 0 ETH | ||||
5250251 | 3 days ago | 0 ETH | ||||
5250251 | 3 days ago | 0 ETH | ||||
5250251 | 3 days ago | 0 ETH | ||||
5250251 | 3 days ago | 0 ETH | ||||
5250251 | 3 days ago | 0 ETH | ||||
5250251 | 3 days ago | 0 ETH | ||||
5250251 | 3 days ago | 0 ETH | ||||
5250251 | 3 days ago | 0 ETH | ||||
5250251 | 3 days ago | 0 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
AccountSystem
Compiler Version
v0.8.28+commit.7893614a
ZkSolc Version
v1.5.7
Optimization Enabled:
Yes with Mode 3
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {IGameItems, ID as GAME_ITEMS_CONTRACT_ID} from "../tokens/IGameItems.sol"; import {IGigaNoobNFT, ID as NOOB_NFT_CONTRACT_ID} from "../tokens/giganoobnft/IGigaNoobNFT.sol"; import {IGigaNameNFT, ID as NAME_NFT_CONTRACT_ID} from "../tokens/giganamenft/IGigaNameNFT.sol"; import {DataTable} from "../db/DataTable.sol"; import {IAccountSystem, ID as ID} from "./IAccountSystem.sol"; import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; import {MANAGER_ROLE, GAME_LOGIC_CONTRACT_ROLE, DEPLOYER_ROLE} from "../constants/RoleConstants.sol"; import {ID_CID, ETH_MINT_PRICE_CID, GAME_ITEM_ID_CID, NOOB_TOKEN_CID, GIGA_NAME_TOKENDID_CID} from "../constants/ColumnConstants.sol"; contract AccountSystem is IAccountSystem, DataTable { constructor(address gameRegistryAddress) DataTable(gameRegistryAddress, ID) {} function initialize() external override onlyRole(DEPLOYER_ROLE) { initializeTable("AccountSystem", ID); } function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccountSystem).interfaceId || interfaceId == type(IERC165).interfaceId; } //////////////////// // Public Writes // ////////////////// function mintWithEth(string memory _username) override external payable whenNotPaused { uint256 _mintPrice = mintPrice(); require(_mintPrice > 0, "Mint price not set"); require(msg.value >= _mintPrice, "Insufficient payment"); _mint(msg.sender, _username); } function mintWithGameItem(string memory _username) override external whenNotPaused { uint256 redeemableTokenId = getTableUint256Value(GAME_ITEM_ID_CID); IGameItems(_gameRegistry.getSystem(GAME_ITEMS_CONTRACT_ID)).burn(msg.sender, redeemableTokenId, 1); _mint(msg.sender, _username); } function changeUsername(uint256 tokenId) override external { _changeUsername(msg.sender, tokenId); } //////////////////// // Public Reads /// ////////////////// function getPlayerUsernameId(address player) override public view returns (uint256) { return getDocUint256Value(uint256(uint160(player)), GIGA_NAME_TOKENDID_CID); } function getPlayerNoobId(address player) override public view returns (uint256) { return getDocUint256Value(uint256(uint160(player)), NOOB_TOKEN_CID); } function mintPrice() override public view returns (uint256) { return getTableUint256Value(ETH_MINT_PRICE_CID); } function setMintPrice(uint256 newPrice) override external onlyRole(MANAGER_ROLE) { _setTableUint256Value(ETH_MINT_PRICE_CID, newPrice); } ////////////// // Manager // //////////// function setPrice(uint256 _price, uint256 _redeemableTokenId) override external onlyRole(MANAGER_ROLE) { _setTableUint256Value(ETH_MINT_PRICE_CID, _price); _setTableUint256Value(GAME_ITEM_ID_CID, _redeemableTokenId); } function withdraw() override external onlyRole(MANAGER_ROLE) { (bool success, ) = payable(msg.sender).call{value: address(this).balance}(""); require(success, "Transfer failed"); } ///////////////////// // Game Contracts // /////////////////// function setUsername(address to, uint256 tokenId) override external onlyRole(GAME_LOGIC_CONTRACT_ROLE) { _setUsernameTokenId(to, tokenId); } function setPlayerNoob(address to, uint256 tokenId) override external onlyRole(GAME_LOGIC_CONTRACT_ROLE) { _setPlayerNoob(to, tokenId); } function removeUsername(address player) override external onlyRole(GAME_LOGIC_CONTRACT_ROLE) { _setDocUint256Value(uint256(uint160(player)), GIGA_NAME_TOKENDID_CID, 0); } //////////////////////// // Internal Helpers /// ////////////////////// function _mint(address to, string memory _username) private { uint256 playerNoob = getPlayerNoobId(to); require (playerNoob == 0, "User already has a account"); uint256 noobTokenId = IGigaNoobNFT(_gameRegistry.getSystem(NOOB_NFT_CONTRACT_ID)).mint(to); uint256 usernameTokenId = IGigaNameNFT(_gameRegistry.getSystem(NAME_NFT_CONTRACT_ID)).confirmMint(to, _username); _setUsernameTokenId(to, usernameTokenId); _setPlayerNoob(to, noobTokenId); } function _setUsernameTokenId(address to, uint256 tokenId) private { _setDocUint256Value(uint256(uint160(to)), GIGA_NAME_TOKENDID_CID, tokenId); } function _setPlayerNoob(address to, uint256 tokenId) private { _setDocUint256Value(uint256(uint160(to)), NOOB_TOKEN_CID, tokenId); } function _changeUsername(address player, uint256 tokenId) private { IGigaNameNFT nameNft = IGigaNameNFT(_gameRegistry.getSystem(NAME_NFT_CONTRACT_ID)); require(nameNft.ownerOf(tokenId) == player, "Owner of the token can only change the username"); _setUsernameTokenId(player, tokenId); } }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.9; import {IERC1155} from "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; uint256 constant ID = uint256(keccak256("game.gigaverse.gameitems")); interface IGameItems is IERC1155 { /** * Mints a ERC1155 token * * @param to Recipient of the token * @param id Id of token to mint * @param amount Quantity of token to mint */ function mint(address to, uint256 id, uint256 amount) external; /** * Burn a token - any payment / game logic should be handled in the game contract. * * @param from Account to burn from * @param id Id of the token to burn * @param amount Quantity to burn */ function burn(address from, uint256 id, uint256 amount) external; /** * @param id Id of the type to get data for * * @return How many of the given token id have been minted */ function minted(uint256 id) external view returns (uint256); function burnBatch(address from, uint256[] memory ids, uint256[] memory amounts) external; }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.9; import {IGameNFT} from "../gamenft/IGameNFT.sol"; uint256 constant ID = uint256(keccak256("game.gigaverse.giganoobnft")); interface IGigaNoobNFT is IGameNFT { function mint(address to) external returns (uint256); }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.9; import {IGameNFT} from "../gamenft/IGameNFT.sol"; uint256 constant ID = uint256(keccak256("game.gigaverse.giganamenft")); interface IGigaNameNFT is IGameNFT { function confirmMint(address to, string memory username) external returns (uint256); }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.9; import {DataStore, ID as DATA_STORE_ID} from "./DataStore.sol"; import {DEPLOYER_ROLE} from "../constants/RoleConstants.sol"; import {NAME_CID, ADDRESS_CID, ID_CID, NEXT_DOCID_CID, OWNER_CID} from "../constants/ColumnConstants.sol"; import {GameRegistryConsumer} from "../core/GameRegistryConsumer.sol"; contract DataTable is GameRegistryConsumer { error AlreadyInitialized(); bool private _initialized; constructor(address gameRegistryAddress, uint256 ID) GameRegistryConsumer(gameRegistryAddress, ID) {} function owner() public view virtual returns (address) { return getTableAddressValue(OWNER_CID); } function name() public view virtual returns (string memory) { return getTableStringValue(NAME_CID); } function initializeTable(string memory nameToSet, uint256 id) internal { if (_initialized) { revert AlreadyInitialized(); } _setTableAddressValue(ADDRESS_CID, address(this)); _setTableAddressValue(OWNER_CID, msg.sender); _setTableStringValue(NAME_CID, nameToSet); _setTableUint256Value(ID_CID, id); _initialized = true; } function getTableId() public virtual view returns (uint256) { return getId(); } function _getAndIncrementAutoIncId() internal returns (uint256) { uint256 currentId = getTableUint256Value(NEXT_DOCID_CID); _setTableUint256Value(NEXT_DOCID_CID, currentId + 1); return currentId + 1; } function _incrementAmount(uint256 docId, uint256 columnId, uint256 amount) internal { uint256 currentAmount = getDocUint256Value(docId, columnId); _setDocUint256Value(docId, columnId, currentAmount + amount); } function _decrementAmount(uint256 docId, uint256 columnId, uint256 amount) internal { uint256 currentAmount = getDocUint256Value(docId, columnId); _setDocUint256Value(docId, columnId, currentAmount - amount); } function _setTableStringValue(uint256 columnId, string memory value) internal { DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).setString(getTableId(), 0, columnId, value); } function _setTableUint256Value(uint256 columnId, uint256 value) internal { DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).setUint256(getTableId(), 0, columnId, value); } function _setTableAddressValue(uint256 columnId, address value) internal { DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).setAddress(getTableId(), 0, columnId, value); } function _setTableBoolValue(uint256 columnId, bool value) internal { DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).setBool(getTableId(), 0, columnId, value); } function _setTableAdddressValue(uint256 columnId, address value) internal { DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).setAddress(getTableId(), 0, columnId, value); } function _setTableUint256ArrayValue(uint256 columnId, uint256[] memory value) internal { DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).setUint256ArrayValue(getTableId(), 0, columnId, value); } function _setTableBoolArrayValue(uint256 columnId, bool[] memory value) internal { DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).setBoolArrayValue(getTableId(), 0, columnId, value); } function _setTableAddressArrayValue(uint256 columnId, address[] memory value) internal { DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).setAddressArrayValue(getTableId(), 0, columnId, value); } function _setDocAddressArrayValue(uint256 docId, uint256 columnId, address[] memory value) internal { DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).setAddressArrayValue(getTableId(), docId, columnId, value); } function _setDocBoolArrayValue(uint256 docId, uint256 columnId, bool[] memory value) internal { DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).setBoolArrayValue(getTableId(), docId, columnId, value); } function _setDocStringValue(uint256 docId, uint256 columnId, string memory value) internal { DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).setString(getTableId(), docId, columnId, value); } function _setDocUint256Value(uint256 docId, uint256 columnId, uint256 value) internal { DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).setUint256(getTableId(), docId, columnId, value); } function _setDocUint256ArrayValue(uint256 docId, uint256 columnId, uint256[] memory value) internal { DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).setUint256ArrayValue(getTableId(), docId, columnId, value); } function _setDocBoolValue(uint256 docId, uint256 columnId, bool value) internal { DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).setBool(getTableId(), docId, columnId, value); } function _setDocAddressValue(uint256 docId, uint256 columnId, address value) internal { DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).setAddress(getTableId(), docId, columnId, value); } function getTableBoolValue(uint256 columnId) public view returns (bool) { return DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).getBool(getTableId(), 0, columnId); } function getTableUint256Value(uint256 columnId) public view returns (uint256) { return DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).getUint256(getTableId(), 0, columnId); } function getTableStringValue(uint256 columnId) public view returns (string memory) { return DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).getString(getTableId(), 0, columnId); } function getTableAddressValue(uint256 columnId) public view returns (address) { return DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).getAddress(getTableId(), 0, columnId); } function getTableUint256ArrayValue(uint256 columnId) public view returns (uint256[] memory) { return DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).getUint256Array(getTableId(), 0, columnId); } function getDocUint256ArrayValue(uint256 docId, uint256 columnId) public view returns (uint256[] memory) { return DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).getUint256Array(getTableId(), docId, columnId); } function getDocStringValue(uint256 docId, uint256 columnId) public view returns (string memory) { return DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).getString(getTableId(), docId, columnId); } function getDocUint256Value(uint256 docId, uint256 columnId) public view returns (uint256) { return DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).getUint256(getTableId(), docId, columnId); } function getDocBoolValue(uint256 docId, uint256 columnId) public view returns (bool) { return DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).getBool(getTableId(), docId, columnId); } function getDocAddressValue(uint256 docId, uint256 columnId) public view returns (address) { return DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).getAddress(getTableId(), docId, columnId); } function hasDocStringValue(uint256 docId, uint256 columnId) public view returns (bool) { return DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).hasStringValue(getTableId(), docId, columnId); } function hasDocValue(uint256 docId, uint256 columnId) public view returns (bool) { return DataStore(_gameRegistry.getSystem(DATA_STORE_ID)).hasValue(getTableId(), docId, columnId); } function getPlayerDocId(address player) public pure returns (uint256) { return uint256(uint160(player)); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; uint256 constant ID = uint256(keccak256("game.gigaverse.system.account")); interface IAccountSystem is IERC165 { function setPrice(uint256 _price, uint256 _redeemableTokenId) external; function mintWithEth(string memory _username) external payable; function mintWithGameItem(string memory _username) external; function getPlayerUsernameId(address player) external view returns (uint256); function getPlayerNoobId(address player) external view returns (uint256); function mintPrice() external view returns (uint256); function setUsername(address to, uint256 tokenId) external; function setPlayerNoob(address to, uint256 tokenId) external; function removeUsername(address player) external; function changeUsername(uint256 tokenId) external; function setMintPrice(uint256 newPrice) external; function withdraw() external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[ERC]. * * 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[ERC 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); }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.9; // Pauser Role - Can pause the game bytes32 constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); // Minter Role - Can mint items, NFTs, and ERC20 currency bytes32 constant MINTER_ROLE = keccak256("MINTER_ROLE"); // Manager Role - Can manage the shop, loot tables, and other game data bytes32 constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); // Depoloyer Role - Can Deploy new Systems bytes32 constant DEPLOYER_ROLE = keccak256("DEPLOYER_ROLE"); // Game Logic Contract - Contract that executes game logic and accesses other systems bytes32 constant GAME_LOGIC_CONTRACT_ROLE = keccak256("GAME_LOGIC_CONTRACT_ROLE"); // For functions callable from game server bytes32 constant SERVER_JUDGE_ROLE = keccak256("SERVER_JUDGE_ROLE");
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.9; uint256 constant NAME_CID = uint256(keccak256("name")); uint256 constant DESCRIPTION_CID = uint256(keccak256("description")); uint256 constant LEVEL_CID = uint256(keccak256("level")); uint256 constant IS_NOOB_CID = uint256(keccak256("is_noob")); uint256 constant NOOB_TOKEN_CID = uint256(keccak256("noob_tokend_id")); uint256 constant GIGA_NAME_TOKENDID_CID = uint256(keccak256("giganame_tokend_id")); uint256 constant IS_GIGA_NAME_CID = uint256(keccak256("is_giga_name")); uint256 constant GAME_ITEM_ID_CID = uint256(keccak256("game_item_id")); uint256 constant UINT256_CID = uint256(keccak256("int256")); uint256 constant ETH_MINT_PRICE_CID = uint256(keccak256("eth_mint_price")); uint256 constant NEXT_DOCID_CID = uint256(keccak256("next_token_id")); uint256 constant ID_CID = uint256(keccak256("id")); uint256 constant BASE_NAME_CID = uint256(keccak256("base_name")); uint256 constant BASE_URI_CID = uint256(keccak256("base_uri")); uint256 constant LAST_TRANSFER_TIME_CID = uint256(keccak256("last_transfer_time")); uint256 constant OWNER_CID = uint256(keccak256("owner")); uint256 constant INITIALIZED_CID = uint256(keccak256("initialized")); uint256 constant MAX_SUPPLY_CID = uint256(keccak256("max_supply")); uint256 constant ADDRESS_CID = uint256(keccak256("address")); uint256 constant IS_SOULBOUND_CID = uint256(keccak256("soulbound")); uint256 constant TIME_BETWEEN_CID = uint256(keccak256("time_between")); uint256 constant TIMESTAMP_CID = uint256(keccak256("timestamp")); uint256 constant IMG_URL_CID = uint256(keccak256("img_url")); uint256 constant PLAYER_CID = uint256(keccak256("player")); uint256 constant MINT_COUNT_CID = uint256(keccak256("mint_count")); uint256 constant CONTRACT_URI_CID = uint256(keccak256("contract_uri")); uint256 constant IS_RECYCLABLE_CID = uint256(keccak256("is_recyclable")); uint256 constant BURN_COUNT_CID = uint256(keccak256("burn_count")); uint256 constant BALANCE_CID = uint256(keccak256("balance")); uint256 constant ICON_URL_CID = uint256(keccak256("icon_url")); uint256 constant DUNGEON_ID_CID = uint256(keccak256("dungeon_id")); uint256 constant ENERGY_CID = uint256(keccak256("energy")); uint256 constant IS_CANCELLED_CID = uint256(keccak256("is_cancelled")); uint256 constant SPRITE_SHEET_URL_CID = uint256(keccak256("sprite_sheet_url")); uint256 constant IMPORT_AMOUNT_CID = uint256(keccak256("import_amount")); uint256 constant EXPORT_AMOUNT_CID = uint256(keccak256("export_amount")); uint256 constant EXPORT_LICENSE_CID = uint256(keccak256("export_license"));
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.20; import {IERC165} from "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC-1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[ERC]. */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` amount of tokens of 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 value of tokens of token type `id` owned by `account`. */ 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 zero address. */ 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 a `value` amount of tokens of type `id` from `from` to `to`. * * WARNING: This function can potentially allow a reentrancy attack when transferring tokens * to an untrusted contract, when invoking {onERC1155Received} on the receiver. * Ensure to follow the checks-effects-interactions pattern and consider employing * reentrancy guards when interacting with untrusted contracts. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `value` 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 value, bytes calldata data) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * WARNING: This function can potentially allow a reentrancy attack when transferring tokens * to an untrusted contract, when invoking {onERC1155BatchReceived} on the receiver. * Ensure to follow the checks-effects-interactions pattern and consider employing * reentrancy guards when interacting with untrusted contracts. * * Emits either a {TransferSingle} or a {TransferBatch} event, depending on the length of the array arguments. * * Requirements: * * - `ids` and `values` 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 values, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.13; import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; /** * @title Interface for game NFTs that have stats and other properties */ interface IGameNFT is IERC721 { /** * @param account Account to check hold time of * @param tokenId Id of the token * @return The time in seconds a given account has held a token */ function getTimeHeld( address account, uint256 tokenId ) external view returns (uint32); function getLastTransfer( uint256 tokenId ) external view returns (uint32); /** * Mints a batch of ERC721 token * * @param to Recipient of the token * @param amount Quantity of token to mint */ function mintBatch(address to, uint256 amount) external returns (uint256[] memory); function exists(uint256 tokenId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./DataTypes.sol"; import {IDataStore, ID} from "./IDataStore.sol"; import {GameRegistryConsumer} from "../core/GameRegistryConsumer.sol"; import {GAME_LOGIC_CONTRACT_ROLE} from "../constants/RoleConstants.sol"; contract DataStore is IDataStore, GameRegistryConsumer { using DataTypes for *; mapping(uint256 => mapping(uint256 => bytes32)) public datastore; mapping(uint256 => mapping(uint256 => bytes32[])) public arrayStore; mapping(uint256 => mapping(uint256 => string)) private stringStore; mapping(uint256 => bytes32) public columnTypes; constructor(address gameRegistryAddress) GameRegistryConsumer(gameRegistryAddress, ID) {} function generateKey(uint256 docId, uint256 colId) public pure returns (uint256) { return uint256(keccak256(abi.encodePacked(docId, colId))); } function generateArrayKey (uint256 docId, uint256 colId) public pure returns (uint256) { return uint256(keccak256(abi.encodePacked(docId, colId, "__array"))); } function setValue(uint256 tableId, uint256 docId, uint256 colId, bytes32 value) public onlyRole(GAME_LOGIC_CONTRACT_ROLE) { datastore[tableId][uint256(keccak256(abi.encodePacked(docId, colId)))] = value; emit ValueSet(tableId, docId, colId, value); } function setArrayValue(uint256 tableId, uint256 docId, uint256 colId, bytes32[] memory value) public onlyRole(GAME_LOGIC_CONTRACT_ROLE) { arrayStore[tableId][generateArrayKey(docId, colId)] = value; emit ArrayValueSet(tableId, docId, colId, value); } function setUint256ArrayValue(uint256 tableId, uint256 docId, uint256 colId, uint256[] memory value) public onlyRole(GAME_LOGIC_CONTRACT_ROLE) { require (getColumnType(colId) == IDataStore.ColumnType.UINT256, "Column is not UINT256ARRAY"); bytes32[] memory packedValues = new bytes32[](value.length); for (uint256 i = 0; i < value.length; i++) { packedValues[i] = value[i].packUint256(); } setArrayValue(tableId, docId, colId, packedValues); } function setBoolArrayValue(uint256 tableId, uint256 docId, uint256 colId, bool[] memory value) public onlyRole(GAME_LOGIC_CONTRACT_ROLE) { require (getColumnType(colId) == IDataStore.ColumnType.BOOL, "Column is not BOOLARRAY"); bytes32[] memory packedValues = new bytes32[](value.length); for (uint256 i = 0; i < value.length; i++) { packedValues[i] = value[i].packBool(); } setArrayValue(tableId, docId, colId, packedValues); } function setAddressArrayValue(uint256 tableId, uint256 docId, uint256 colId, address[] memory value) public onlyRole(GAME_LOGIC_CONTRACT_ROLE) { require (getColumnType(colId) == IDataStore.ColumnType.ADDRESS, "Column is not ADDRESSARRAY"); bytes32[] memory packedValues = new bytes32[](value.length); for (uint256 i = 0; i < value.length; i++) { packedValues[i] = value[i].packAddress(); } setArrayValue(tableId, docId, colId, packedValues); } function getUint256Array(uint256 tableId, uint256 docId, uint256 colId) public view returns (uint256[] memory) { require (getColumnType(colId) == IDataStore.ColumnType.UINT256, "Column is not UINT256"); bytes32[] memory byteArray = arrayStore[tableId][generateArrayKey(docId, colId)]; uint256[] memory uintArray = new uint256[](byteArray.length); for (uint256 i = 0; i < byteArray.length; i++) { uintArray[i] = byteArray[i].unpackUint256(); } return uintArray; } function getBoolArray(uint256 tableId, uint256 docId, uint256 colId) public view returns (bool[] memory) { require (getColumnType(colId) == IDataStore.ColumnType.BOOL, "Column is not BOOL"); bytes32[] memory byteArray = arrayStore[tableId][generateArrayKey(docId, colId)]; bool[] memory boolArray = new bool[](byteArray.length); for (uint256 i = 0; i < byteArray.length; i++) { boolArray[i] = byteArray[i].unpackBool(); } return boolArray; } function getAddressArray(uint256 tableId, uint256 docId, uint256 colId) public view returns (address[] memory) { require (getColumnType(colId) == IDataStore.ColumnType.ADDRESS, "Column is not ADDRESS"); bytes32[] memory byteArray = arrayStore[tableId][generateArrayKey(docId, colId)]; address[] memory addressArray = new address[](byteArray.length); for (uint256 i = 0; i < byteArray.length; i++) { addressArray[i] = byteArray[i].unpackAddress(); } return addressArray; } function getValue(uint256 tableId, uint256 docId, uint256 colId) public view returns (bytes32) { return datastore[tableId][uint256(keccak256(abi.encodePacked(docId, colId)))]; } function setColumnType(uint256 colId, IDataStore.ColumnType columnType) public onlyRole(GAME_LOGIC_CONTRACT_ROLE) { require(!isColumnTypeSet(colId), "Column type already set"); columnTypes[colId] = bytes32(uint256(columnType)); emit ColumnTypeSet(colId, columnType); } function isColumnTypeSet(uint256 colId) public view returns (bool) { return columnTypes[colId] != bytes32(0); } function getColumnType(uint256 colId) public view returns (IDataStore.ColumnType) { bytes32 typeValue = columnTypes[colId]; require(typeValue != bytes32(0), "Column type not set"); return IDataStore.ColumnType(uint8(uint256(typeValue))); } // Type-specific setters function setUint256(uint256 tableId, uint256 docId, uint256 colId, uint256 value) public onlyRole(GAME_LOGIC_CONTRACT_ROLE){ require(getColumnType(colId) == IDataStore.ColumnType.UINT256, "Column is not UINT256"); setValue(tableId, docId, colId, value.packUint256()); } function setInt256(uint256 tableId, uint256 docId, uint256 colId, int256 value) public onlyRole(GAME_LOGIC_CONTRACT_ROLE){ require(getColumnType(colId) == IDataStore.ColumnType.INT256, "Column is not INT256"); setValue(tableId, docId, colId, value.packInt256()); } function setBool(uint256 tableId, uint256 docId, uint256 colId, bool value) public onlyRole(GAME_LOGIC_CONTRACT_ROLE){ require(getColumnType(colId) == IDataStore.ColumnType.BOOL, "Column is not BOOL"); setValue(tableId, docId, colId, value.packBool()); } function setAddress(uint256 tableId, uint256 docId, uint256 colId, address value) public onlyRole(GAME_LOGIC_CONTRACT_ROLE){ require(getColumnType(colId) == IDataStore.ColumnType.ADDRESS, "Column is not ADDRESS"); setValue(tableId, docId, colId, value.packAddress()); } function setBytes32(uint256 tableId, uint256 docId, uint256 colId, bytes32 value) public onlyRole(GAME_LOGIC_CONTRACT_ROLE){ require(getColumnType(colId) == IDataStore.ColumnType.BYTES32, "Column is not BYTES32"); setValue(tableId, docId, colId, value); } function setString(uint256 tableId, uint256 docId, uint256 colId, string memory value) public onlyRole(GAME_LOGIC_CONTRACT_ROLE){ require(getColumnType(colId) == IDataStore.ColumnType.STRING, "Column is not STRING"); uint256 key = generateKey(docId, colId); stringStore[tableId][key] = value; emit StringValueSet(tableId, docId, colId, value); } function deleteValue(uint256 tableId, uint256 docId, uint256 colId) public onlyRole(GAME_LOGIC_CONTRACT_ROLE){ uint256 key = generateKey(docId, colId); delete datastore[tableId][key]; } // Type-specific getters function getUint256(uint256 tableId, uint256 docId, uint256 colId) public view returns (uint256) { require(getColumnType(colId) == IDataStore.ColumnType.UINT256, "Column is not UINT256"); return getValue(tableId, docId, colId).unpackUint256(); } function getInt256(uint256 tableId, uint256 docId, uint256 colId) public view returns (int256) { require(getColumnType(colId) == IDataStore.ColumnType.INT256, "Column is not INT256"); return getValue(tableId, docId, colId).unpackInt256(); } function getBool(uint256 tableId, uint256 docId, uint256 colId) public view returns (bool) { require(getColumnType(colId) == IDataStore.ColumnType.BOOL, "Column is not BOOL"); return getValue(tableId, docId, colId).unpackBool(); } function getAddress(uint256 tableId, uint256 docId, uint256 colId) public view returns (address) { require(getColumnType(colId) == IDataStore.ColumnType.ADDRESS, "Column is not ADDRESS"); return getValue(tableId, docId, colId).unpackAddress(); } function getBytes32(uint256 tableId, uint256 docId, uint256 colId) public view returns (bytes32) { require(getColumnType(colId) == IDataStore.ColumnType.BYTES32, "Column is not BYTES32"); return getValue(tableId, docId, colId); } function getString(uint256 tableId, uint256 docId, uint256 colId) public view returns (string memory) { require(getColumnType(colId) == IDataStore.ColumnType.STRING, "Column is not STRING"); uint256 key = generateKey(docId, colId); return stringStore[tableId][key]; } function hasValue(uint256 tableId, uint256 docId, uint256 colId) public view returns (bool) { uint256 key = generateKey(docId, colId); return datastore[tableId][key] != bytes32(0); } function hasStringValue(uint256 tableId, uint256 docId, uint256 colId) public view returns (bool) { uint256 key = generateKey(docId, colId); return keccak256(bytes(stringStore[tableId][key])) != keccak256(bytes("")); } }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.13; import {ReentrancyGuard} from "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; import {PAUSER_ROLE, MANAGER_ROLE} from "../constants/RoleConstants.sol"; import {ISystem} from "./ISystem.sol"; import {IGameRegistry, IERC165} from "./IGameRegistry.sol"; import {IDataStore, ID as DATA_STORE_ID} from "../db/IDataStore.sol"; import {DEPLOYER_ROLE} from "../constants/RoleConstants.sol"; /** @title Contract that lets a child contract access the GameRegistry contract */ abstract contract GameRegistryConsumer is ReentrancyGuard, ISystem { /// @notice Whether or not the contract is paused bool private _paused; /// @notice Reference to the game registry that this contract belongs to IGameRegistry internal _gameRegistry; /// @notice Id for the system/component uint256 private _id; /** EVENTS **/ /// @dev Emitted when the pause is triggered by `account`. event Paused(address account); /// @dev Emitted when the pause is lifted by `account`. event Unpaused(address account); /** ERRORS **/ /// @notice Not authorized to perform action error MissingRole(address account, bytes32 expectedRole); /** MODIFIERS **/ /// @notice Modifier to verify a user has the appropriate role to call a given function modifier onlyRole(bytes32 role) { _checkRole(role, msg.sender); _; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** ERRORS **/ /// @notice Error if the game registry specified is invalid error InvalidGameRegistry(); /** SETUP **/ /** @return ID for this system */ function getId() public view override returns (uint256) { return _id; } /** * Pause/Unpause the contract * * @param shouldPause Whether or pause or unpause */ function setPaused(bool shouldPause) external onlyRole(PAUSER_ROLE) { if (shouldPause) { _pause(); } else { _unpause(); } } /** * @dev Returns true if the contract OR the GameRegistry is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused || _gameRegistry.paused(); } /** * Sets the GameRegistry contract address for this contract * * @param gameRegistryAddress Address for the GameRegistry contract */ function setGameRegistry( address gameRegistryAddress ) external onlyRole(MANAGER_ROLE) { _gameRegistry = IGameRegistry(gameRegistryAddress); if (gameRegistryAddress == address(0)) { revert InvalidGameRegistry(); } } /** @return GameRegistry contract for this contract */ function getGameRegistry() external view returns (IGameRegistry) { return _gameRegistry; } /** INTERNAL **/ /** * @dev Returns `true` if `account` has been granted `role`. */ function _hasAccessRole( bytes32 role, address account ) internal view returns (bool) { return _gameRegistry.hasAccessRole(role, account); } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view virtual { if (!_gameRegistry.hasAccessRole(role, account)) { revert MissingRole(account, role); } } /** @return Returns the dataStore for this contract */ function _dataStore() internal view returns (IDataStore) { return IDataStore(_getSystem(DATA_STORE_ID)); } /** @return Address for a given system */ function _getSystem(uint256 systemId) internal view returns (address) { return _gameRegistry.getSystem(systemId); } /** PAUSABLE **/ /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual { require(_paused == false, "Pausable: not paused"); _paused = true; emit Paused(msg.sender); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual { require(_paused == true, "Pausable: not paused"); _paused = false; emit Unpaused(msg.sender); } function initialize() external virtual onlyRole(DEPLOYER_ROLE) { } /** * Constructor for this contract * * @param gameRegistryAddress Address of the GameRegistry contract * @param id Id of the system/component */ constructor( address gameRegistryAddress, uint256 id ) { _gameRegistry = IGameRegistry(gameRegistryAddress); if (gameRegistryAddress == address(0)) { revert InvalidGameRegistry(); } _paused = true; _id = id; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.20; import {IERC165} from "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC-721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC-721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or * {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the address zero. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; library DataTypes { // Pack and unpack uint256 function packUint256(uint256 value) internal pure returns (bytes32) { return bytes32(value); } function unpackUint256(bytes32 packed) internal pure returns (uint256) { return uint256(packed); } // Pack and unpack int256 function packInt256(int256 value) internal pure returns (bytes32) { return bytes32(uint256(value)); } function unpackInt256(bytes32 packed) internal pure returns (int256) { return int256(uint256(packed)); } // Pack and unpack address function packAddress(address value) internal pure returns (bytes32) { return bytes32(uint256(uint160(value))); } function unpackAddress(bytes32 packed) internal pure returns (address) { return address(uint160(uint256(packed))); } // Pack and unpack bool function packBool(bool value) internal pure returns (bytes32) { return bytes32(uint256(value ? 1 : 0)); } function unpackBool(bytes32 packed) internal pure returns (bool) { return uint256(packed) == 1; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; uint256 constant ID = uint256(keccak256("game.gigaverse.datastore")); interface IDataStore { enum ColumnType { NONE, UINT256, INT256, BOOL, ADDRESS, BYTES32, STRING, UINT256_ARRAY } event ValueSet(uint256 indexed tableId, uint256 indexed docId, uint256 indexed colId, bytes32 value); event StringValueSet(uint256 indexed tableId, uint256 indexed docId, uint256 indexed colId, string value); event ArrayValueSet(uint256 indexed tableId, uint256 indexed docId, uint256 indexed colId, bytes32[] value); event ColumnTypeSet(uint256 indexed colId, ColumnType columnType); function setValue(uint256 tableId, uint256 docId, uint256 colId, bytes32 value) external; function getValue(uint256 tableId, uint256 docId, uint256 colId) external view returns (bytes32); function setColumnType(uint256 colId, ColumnType columnType) external; function getColumnType(uint256 colId) external view returns (ColumnType); // Type-specific setters function setUint256(uint256 tableId, uint256 docId, uint256 colId, uint256 value) external; function setInt256(uint256 tableId, uint256 docId, uint256 colId, int256 value) external; function setBool(uint256 tableId, uint256 docId, uint256 colId, bool value) external; function setAddress(uint256 tableId, uint256 docId, uint256 colId, address value) external; function setBytes32(uint256 tableId, uint256 docId, uint256 colId, bytes32 value) external; function setString(uint256 tableId, uint256 docId, uint256 colId, string memory value) external; // Type-specific getters function getUint256(uint256 tableId, uint256 docId, uint256 colId) external view returns (uint256); function getInt256(uint256 tableId, uint256 docId, uint256 colId) external view returns (int256); function getBool(uint256 tableId, uint256 docId, uint256 colId) external view returns (bool); function getAddress(uint256 tableId, uint256 docId, uint256 colId) external view returns (address); function getBytes32(uint256 tableId, uint256 docId, uint256 colId) external view returns (bytes32); function getString(uint256 tableId, uint256 docId, uint256 colId) external view returns (string memory); function deleteValue(uint256 tableId, uint256 docId, uint256 colId) external; function hasValue(uint256 tableId, uint256 docId, uint256 colId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol) pragma solidity ^0.8.20; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at, * consider using {ReentrancyGuardTransient} instead. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant NOT_ENTERED = 1; uint256 private constant ENTERED = 2; uint256 private _status; /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); constructor() { _status = NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be NOT_ENTERED if (_status == ENTERED) { revert ReentrancyGuardReentrantCall(); } // Any calls to nonReentrant after this point will fail _status = ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == ENTERED; } }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.9; import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; /** * Defines a system the game engine */ interface ISystem { /** @return The ID for the system. Ex: a uint256 casted keccak256 hash */ function getId() external view returns (uint256); function initialize() external; }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.9; import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; // @title Interface the game's ACL / Management Layer interface IGameRegistry is IERC165 { /** * @dev Returns `true` if `account` has been granted `role`. * @param role The role to query * @param account The address to query */ function hasAccessRole( bytes32 role, address account ) external view returns (bool); /** * @return Whether or not the registry is paused */ function paused() external view returns (bool); /** * Registers a system by id * * @param systemId Id of the system * @param systemAddress Address of the system contract */ function registerSystem(uint256 systemId, address systemAddress, bool isGameLogicContract) external; /** * @param systemId Id of the system * @return System based on an id */ function getSystem(uint256 systemId) external view returns (address); }
{ "viaIR": false, "codegen": "yul", "remappings": [ "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", "forge-zksync-std/=lib/forge-zksync-std/src/", "halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/", "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", "openzeppelin-contracts/=lib/openzeppelin-contracts/" ], "evmVersion": "cancun", "outputSelection": { "*": { "*": [ "abi", "metadata" ], "": [ "ast" ] } }, "optimizer": { "enabled": true, "mode": "3", "fallback_to_optimizing_for_size": false, "disable_system_request_memoization": true }, "metadata": {}, "libraries": {}, "enableEraVMExtensions": false, "forceEVMLA": false }
[{"inputs":[{"internalType":"address","name":"gameRegistryAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyInitialized","type":"error"},{"inputs":[],"name":"InvalidGameRegistry","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"expectedRole","type":"bytes32"}],"name":"MissingRole","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"changeUsername","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"docId","type":"uint256"},{"internalType":"uint256","name":"columnId","type":"uint256"}],"name":"getDocAddressValue","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"docId","type":"uint256"},{"internalType":"uint256","name":"columnId","type":"uint256"}],"name":"getDocBoolValue","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"docId","type":"uint256"},{"internalType":"uint256","name":"columnId","type":"uint256"}],"name":"getDocStringValue","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"docId","type":"uint256"},{"internalType":"uint256","name":"columnId","type":"uint256"}],"name":"getDocUint256ArrayValue","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"docId","type":"uint256"},{"internalType":"uint256","name":"columnId","type":"uint256"}],"name":"getDocUint256Value","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGameRegistry","outputs":[{"internalType":"contract IGameRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"}],"name":"getPlayerDocId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"}],"name":"getPlayerNoobId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"}],"name":"getPlayerUsernameId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"columnId","type":"uint256"}],"name":"getTableAddressValue","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"columnId","type":"uint256"}],"name":"getTableBoolValue","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTableId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"columnId","type":"uint256"}],"name":"getTableStringValue","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"columnId","type":"uint256"}],"name":"getTableUint256ArrayValue","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"columnId","type":"uint256"}],"name":"getTableUint256Value","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"docId","type":"uint256"},{"internalType":"uint256","name":"columnId","type":"uint256"}],"name":"hasDocStringValue","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"docId","type":"uint256"},{"internalType":"uint256","name":"columnId","type":"uint256"}],"name":"hasDocValue","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_username","type":"string"}],"name":"mintWithEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"_username","type":"string"}],"name":"mintWithGameItem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"}],"name":"removeUsername","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"gameRegistryAddress","type":"address"}],"name":"setGameRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"shouldPause","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setPlayerNoob","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_redeemableTokenId","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setUsername","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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
9c4d535b00000000000000000000000000000000000000000000000000000000000000000100086d79bf3521dcf64eebe6083576b05eb35a0e4720cc7a0a89f4a82c13ef00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000b5f84708957e5628c363709ae1d4cb346081fbf6
Deployed Bytecode
0x00030000000000020006000000000002000000000301034f0000006001100270000007e704100197000200000043035500010000000303550000000100200190000000390000c13d0000008001000039000000400010043f000000040040008c0000005c0000413d000000000143034f000000000203043b000000e002200270000007ef0020009c0000005e0000a13d000007f00020009c000000820000213d000007fd0020009c000000db0000a13d000007fe0020009c000001890000a13d000007ff0020009c000002160000613d000008000020009c000003420000613d000008010020009c0000005c0000c13d000000440040008c0000005c0000413d0000000001000416000000000001004b0000005c0000c13d0000002401300370000000000101043b000500000001001d0000000401300370000000000101043b000600000001001d0000000101000039000000000201041a0000082401000041000000800010043f0000082501000041000000840010043f00000000010004140000000802200270000007ea02200197000000040020008c000008340000c13d0000000003000031000000200030008c00000020040000390000000004034019000008590000013d0000000001000416000000000001004b0000005c0000c13d0000001f01400039000007e8011001970000008001100039000000400010043f0000001f0240018f000007e90540019800000080015000390000004a0000613d0000008006000039000000000703034f000000007807043c0000000006860436000000000016004b000000460000c13d000000000002004b000000570000613d000000000353034f0000000302200210000000000501043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000210435000000200040008c0000005c0000413d000000800100043d000007ea0010009c000000ab0000a13d000000000100001900001f9b00010430000008090020009c000000b30000a13d0000080a0020009c000001170000a13d0000080b0020009c000001c40000a13d0000080c0020009c000003d90000613d0000080d0020009c000003620000613d0000080e0020009c0000005c0000c13d000000240040008c0000005c0000413d0000000001000416000000000001004b0000005c0000c13d0000000401300370000000000101043b000600000001001d0000000101000039000000000201041a0000082401000041000000800010043f0000085001000041000000840010043f00000000010004140000000802200270000007ea02200197000000040020008c0000098f0000c13d0000000003000031000000200030008c00000020040000390000000004034019000009b40000013d000007f10020009c000000f60000a13d000007f20020009c000001a20000a13d000007f30020009c000003cf0000613d000007f40020009c000003550000613d000007f50020009c0000005c0000c13d000000440040008c0000005c0000413d0000000001000416000000000001004b0000005c0000c13d0000002401300370000000000101043b000400000001001d0000000401300370000000000101043b000600000001001d0000000101000039000000000201041a0000082101000041000000800010043f0000082201000041000000840010043f0000000001000411000007ea01100197000500000001001d000000a40010043f00000000010004140000000802200270000007ea02200197000000040020008c000008a20000c13d0000000003000031000000200030008c00000020040000390000000004034019000008c70000013d0000000102000039000000000020041b000000000001004b000000cc0000c13d0000083101000041000000000010043f000008320100004100001f9b00010430000008160020009c000001350000213d0000081c0020009c000001e60000213d0000081f0020009c000003750000613d000008200020009c0000005c0000c13d000000240040008c0000005c0000413d0000000001000416000000000001004b0000005c0000c13d0000000401300370000000000101043b00000860001001980000005c0000c13d000008610010009c00000000020000390000000102006039000008620010009c00000001022061bf000000800020043f0000082f0100004100001f9a0001042e000000000302041a000007eb033001970000000801100210000007ec01100197000000000131019f00000001011001bf000000000012041b000007ed010000410000000202000039000000000012041b000000200100003900000100001004430000012000000443000007ee0100004100001f9a0001042e000008040020009c000001450000213d000008070020009c0000021e0000613d000008080020009c0000005c0000c13d000000240040008c0000005c0000413d0000000002000416000000000002004b0000005c0000c13d0000000102000039000000000202041a0000082403000041000000800030043f0000082503000041000000840030043f00000000030004140000000802200270000007ea02200197000000040020008c0000049b0000c13d0000000003000031000000200030008c00000020040000390000000004034019000004c00000013d000007f80020009c0000015e0000213d000007fb0020009c000002310000613d000007fc0020009c0000005c0000c13d000000440040008c0000005c0000413d0000000002000416000000000002004b0000005c0000c13d0000002402300370000000000502043b0000000402300370000000000402043b0000000102000039000000000202041a0000082403000041000000800030043f0000082503000041000000840030043f00000000030004140000000802200270000007ea02200197000000040020008c000600000004001d000500000005001d0000053a0000c13d0000000003000031000000200030008c000000200400003900000000040340190000055f0000013d000008110020009c0000017d0000213d000008140020009c000002a70000613d000008150020009c0000005c0000c13d0000000001000416000000000001004b0000005c0000c13d0000000103000039000000000203041a0000082101000041000000800010043f0000082201000041000000840010043f0000000001000411000007ea04100197000000a40040043f00000000010004140000000802200270000007ea02200197000000040020008c000500000003001d000600000004001d000004200000c13d0000000003000031000000200030008c00000020040000390000000004034019000004450000013d000008170020009c000001fd0000213d0000081a0020009c000003900000613d0000081b0020009c0000005c0000c13d000000240040008c0000005c0000413d0000000001000416000000000001004b0000005c0000c13d0000000401300370000000000101043b000007ea0010009c0000005c0000213d000003d60000013d000008050020009c000002460000613d000008060020009c0000005c0000c13d0000000001000416000000000001004b0000005c0000c13d0000000101000039000000000201041a0000082101000041000000800010043f0000084701000041000000840010043f0000000001000411000000a40010043f00000000010004140000000802200270000007ea02200197000000040020008c000003e40000c13d0000000003000031000000200030008c00000020040000390000000004034019000004090000013d000007f90020009c000002600000613d000007fa0020009c0000005c0000c13d000000440040008c0000005c0000413d0000000001000416000000000001004b0000005c0000c13d0000002401300370000000000401043b0000000401300370000000000301043b0000000101000039000000000201041a0000082401000041000000800010043f0000082501000041000000840010043f00000000010004140000000802200270000007ea02200197000000040020008c000600000003001d000500000004001d000005db0000c13d0000000003000031000000200030008c00000020040000390000000004034019000006000000013d000008120020009c000002c20000613d000008130020009c0000005c0000c13d0000000001000416000000000001004b0000005c0000c13d1f9917600000040f000000000001004b0000000001000039000000010100c039000003dd0000013d000008020020009c0000030c0000613d000008030020009c0000005c0000c13d000000240040008c0000005c0000413d0000000001000416000000000001004b0000005c0000c13d0000000101000039000000000201041a0000082401000041000000800010043f0000082501000041000000840010043f00000000010004140000000802200270000007ea02200197000000040020008c000007ed0000c13d0000000003000031000000200030008c00000020040000390000000004034019000008120000013d000007f60020009c000003270000613d000007f70020009c0000005c0000c13d000000240040008c0000005c0000413d0000000001000416000000000001004b0000005c0000c13d0000000401300370000000000101043b000600000001001d000007ea0010009c0000005c0000213d0000000101000039000000000201041a0000082101000041000000800010043f0000082201000041000000840010043f0000000001000411000007ea03100197000000a40030043f00000000010004140000000802200270000007ea02200197000000040020008c000500000003001d00000bcb0000c13d0000000003000031000000200030008c0000002004000039000000000403401900000bf00000013d0000080f0020009c000002160000613d000008100020009c0000005c0000c13d000000240040008c0000005c0000413d0000000001000416000000000001004b0000005c0000c13d0000000401300370000000000101043b000600000001001d000007ea0010009c0000005c0000213d0000000101000039000000000201041a0000082101000041000000800010043f0000085401000041000000840010043f0000000001000411000007ea01100197000500000001001d000000a40010043f00000000010004140000000802200270000007ea02200197000000040020008c00000c2a0000c13d0000000003000031000000200030008c0000002004000039000000000403401900000c4f0000013d0000081d0020009c000003a50000613d0000081e0020009c0000005c0000c13d0000000002000416000000000002004b0000005c0000c13d0000000102000039000000000202041a0000082403000041000000800030043f0000082503000041000000840030043f00000000030004140000000802200270000007ea02200197000000040020008c000008e90000c13d0000000003000031000000200030008c000000200400003900000000040340190000090e0000013d000008180020009c000003b00000613d000008190020009c0000005c0000c13d000000240040008c0000005c0000413d0000000002000416000000000002004b0000005c0000c13d0000000102000039000000000202041a0000082403000041000000800030043f0000082503000041000000840030043f00000000030004140000000802200270000007ea02200197000000040020008c00000a610000c13d0000000003000031000000200030008c0000002004000039000000000403401900000a860000013d0000000001000416000000000001004b0000005c0000c13d0000000201000039000000000101041a000000800010043f0000082f0100004100001f9a0001042e000000440040008c0000005c0000413d0000000001000416000000000001004b0000005c0000c13d0000000401300370000000000101043b000600000001001d000007ea0010009c0000005c0000213d00000000010004111f9919380000040f00000024010000390000000101100367000000000201043b00000006010000291f991e0e0000040f000000000100001900001f9a0001042e000000240040008c0000005c0000413d0000000001000416000000000001004b0000005c0000c13d0000000101000039000000000201041a0000082401000041000000800010043f0000082501000041000000840010043f00000000010004140000000802200270000007ea02200197000000040020008c000004570000c13d0000000003000031000000200030008c000000200400003900000000040340190000047c0000013d000000240040008c0000005c0000413d0000000001000416000000000001004b0000005c0000c13d0000000401300370000000000101043b000600000001001d000007ea0010009c0000005c0000213d0000000101000039000000000201041a0000082401000041000000800010043f0000082501000041000000840010043f00000000010004140000000802200270000007ea02200197000000040020008c00000b240000c13d0000000003000031000000200030008c0000002004000039000000000403401900000b490000013d000000240040008c0000005c0000413d0000000401300370000000000201043b000008270020009c0000005c0000213d0000002301200039000000000041004b0000005c0000813d0000000405200039000000000153034f000000000101043b000008270010009c0000120f0000213d0000001f0710003900000863077001970000003f0770003900000863077001970000083a0070009c0000120f0000213d0000008007700039000000400070043f000000800010043f00000000021200190000002402200039000000000042004b0000005c0000213d0000002002500039000000000323034f00000863041001980000001f0510018f000000a002400039000002870000613d000000a006000039000000000703034f000000007807043c0000000006860436000000000026004b000002830000c13d000000000005004b000002940000613d000000000343034f0000000304500210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000320435000000a0011000390000000000010435000000400500043d0000000101000039000000000201041a000000ff00200190000010cc0000c13d0000083b01000041000000000015043500000000010004140000000802200270000007ea02200197000000040020008c000011530000c13d0000000003000031000000200030008c00000020040000390000000004034019000011800000013d000000440040008c0000005c0000413d0000000001000416000000000001004b0000005c0000c13d0000002401300370000000000101043b000500000001001d0000000401300370000000000101043b000600000001001d0000000101000039000000000201041a0000082401000041000000800010043f0000082501000041000000840010043f00000000010004140000000802200270000007ea02200197000000040020008c0000064e0000c13d0000000003000031000000200030008c00000020040000390000000004034019000006730000013d000000240040008c0000005c0000413d0000000001000416000000000001004b0000005c0000c13d0000000401300370000000000201043b000008270020009c0000005c0000213d0000002301200039000000000041004b0000005c0000813d0000000405200039000000000153034f000000000101043b000008270010009c0000120f0000213d0000001f0710003900000863077001970000003f0770003900000863077001970000083a0070009c0000120f0000213d0000008007700039000000400070043f000000800010043f00000000021200190000002402200039000000000042004b0000005c0000213d0000002002500039000000000323034f00000863041001980000001f0510018f000000a002400039000002ec0000613d000000a006000039000000000703034f000000007807043c0000000006860436000000000026004b000002e80000c13d000000000005004b000002f90000613d000000000343034f0000000304500210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000320435000000a0011000390000000000010435000000400500043d0000000101000039000000000201041a000000ff00200190000012840000c13d0000083b01000041000000000015043500000000010004140000000802200270000007ea02200197000000040020008c0000119f0000c13d0000000003000031000000200030008c00000020040000390000000004034019000011cc0000013d000000440040008c0000005c0000413d0000000001000416000000000001004b0000005c0000c13d0000002401300370000000000101043b000500000001001d0000000401300370000000000101043b000600000001001d0000000101000039000000000201041a0000082401000041000000800010043f0000082501000041000000840010043f00000000010004140000000802200270000007ea02200197000000040020008c000007030000c13d0000000003000031000000200030008c00000020040000390000000004034019000007280000013d000000440040008c0000005c0000413d0000000002000416000000000002004b0000005c0000c13d0000002402300370000000000202043b000500000002001d0000000402300370000000000202043b000600000002001d0000000102000039000000000202041a0000082403000041000000800030043f0000082503000041000000840030043f00000000030004140000000802200270000007ea02200197000000040020008c000007460000c13d0000000003000031000000200030008c000000200400003900000000040340190000076b0000013d0000000001000416000000000001004b0000005c0000c13d0000000101000039000000000201041a0000082401000041000000800010043f0000082501000041000000840010043f00000000010004140000000802200270000007ea02200197000000040020008c000006910000c13d0000000003000031000000200030008c00000020040000390000000004034019000006b60000013d000000240040008c0000005c0000413d0000000001000416000000000001004b0000005c0000c13d00000000010004111f9918b10000040f00000004010000390000000101100367000000000101043b1f991ecf0000040f000000000100001900001f9a0001042e000000440040008c0000005c0000413d0000000001000416000000000001004b0000005c0000c13d0000000401300370000000000101043b000600000001001d000007ea0010009c0000005c0000213d00000000010004111f9919380000040f00000024010000390000000101100367000000000201043b00000006010000291f991d4d0000040f000000000100001900001f9a0001042e000000440040008c0000005c0000413d0000000001000416000000000001004b0000005c0000c13d0000002401300370000000000101043b000500000001001d0000000401300370000000000101043b000600000001001d0000000101000039000000000201041a0000082401000041000000800010043f0000082501000041000000840010043f00000000010004140000000802200270000007ea02200197000000040020008c000009d40000c13d0000000003000031000000200030008c00000020040000390000000004034019000009f90000013d000000240040008c0000005c0000413d0000000001000416000000000001004b0000005c0000c13d0000000101000039000000000201041a0000082401000041000000800010043f0000082501000041000000840010043f00000000010004140000000802200270000007ea02200197000000040020008c00000a1d0000c13d0000000003000031000000200030008c0000002004000039000000000403401900000a420000013d000000240040008c0000005c0000413d0000000001000416000000000001004b0000005c0000c13d0000000401300370000000000101043b000007ea0010009c0000005c0000213d1f9917d80000040f000003dd0000013d000000240040008c0000005c0000413d0000000001000416000000000001004b0000005c0000c13d0000000401300370000000000201043b000000000002004b0000000001000039000000010100c039000600000002001d000000000012004b0000005c0000c13d0000000101000039000000000201041a0000082101000041000000800010043f0000085a01000041000000840010043f0000000001000411000000a40010043f00000000010004140000000802200270000007ea02200197000000040020008c00000c7e0000c13d0000000003000031000000200030008c0000002004000039000000000403401900000ca30000013d0000000001000416000000000001004b0000005c0000c13d0000000101000039000000000101041a0000000801100270000007ea01100197000000800010043f0000082f0100004100001f9a0001042e0000000001000416000000000001004b0000005c0000c13d1f9916890000040f000000400200043d0000000000120435000007e70020009c000007e702008041000000400120021000000839011001c700001f9a0001042e000007e70010009c000007e701008041000000c00110021000000823011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000003f80000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b000003f40000c13d000000000006004b000004050000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000b0c0000613d0000001f01400039000000600110018f00000080021001bf000600000002001d000000400020043f000000200030008c0000005c0000413d000000800200043d000000000002004b0000000004000039000000010400c039000000000042004b0000005c0000c13d000000000002004b00000d0d0000c13d0000082d01000041000000000010043f0000000001000411000000040010043f0000084701000041000000240010043f0000082e0100004100001f9b00010430000007e70010009c000007e701008041000000c00110021000000823011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000004340000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b000004300000c13d000000000006004b000004410000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000b180000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200030008c0000005c0000413d000000800100043d000000000001004b0000000002000039000000010200c039000000000021004b0000005c0000c13d000000000001004b00000db10000c13d0000082d01000041000000000010043f000000060100002900000c010000013d000007e70010009c000007e701008041000000c00110021000000833011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf0000046b0000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b000004670000c13d000000000006004b000004780000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000b6b0000613d0000001f01400039000000600110018f00000080021001bf000600000002001d000000400020043f000000200030008c0000005c0000413d000000800200043d000007ea0020009c0000005c0000213d0000000203000039000000000303041a00000842040000410000000605000029000000000045043500000084041001bf0000000000340435000000a403100039000000000003043500000004030000390000000103300367000000000303043b000000c40410003900000000003404350000000003000414000000040020008c00000dc50000c13d0000000001150019000000400010043f000000060200002900000a160000013d000007e70030009c000007e703008041000000c00130021000000833011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000004af0000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b000004ab0000c13d000000000006004b000004bc0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000b770000613d0000001f02400039000000600420018f00000080024001bf000600000002001d000000400020043f000000200030008c0000005c0000413d000000800200043d000007ea0020009c0000005c0000213d0000000205000039000000000505041a0000084006000041000000060a00002900000000006a043500000084064001bf0000000000560435000000a405400039000000000005043500000004050000390000000105500367000000000505043b000000c40440003900000000005404350000000004000414000000040020008c000004e90000613d0000004001a00210000007e70040009c000007e704008041000000c003400210000000000113019f00000835011001c71f991f940000040f0000006003100270000007e70030019d000007e7033001970002000000010355000000010020019000000f120000613d000000060a00002900000863053001980000001f0630018f00000000045a0019000004f30000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000048004b000004ef0000c13d000000000006004b000005000000613d000000000151034f0000000305600210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000001f0130003900000863011001970000000002a10019000000000012004b00000000010000390000000101004039000008270020009c0000120f0000213d00000001001001900000120f0000c13d000000400020043f000008360030009c0000005c0000213d000000200030008c0000005c0000413d00000006010000290000000001010433000008270010009c0000005c0000213d000000060330002900000006011000290000001f04100039000000000034004b0000000005000019000008370500804100000837044001970000083706300197000000000764013f000000000064004b00000000040000190000083704004041000008370070009c000000000405c019000000000004004b0000005c0000c13d0000000015010434000008270050009c0000120f0000213d00000005045002100000003f0640003900000841066001970000000006260019000008270060009c0000120f0000213d000000400060043f00000000005204350000000004140019000000000034004b0000005c0000213d000000000005004b000005d70000613d0000000003020019000000200330003900000000150104340000000000530435000000000041004b000005340000413d000005d70000013d000007e70030009c000007e703008041000000c00130021000000833011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf0000054e0000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b0000054a0000c13d000000000006004b0000055b0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000b830000613d0000001f02400039000000600420018f00000080024001bf000400000002001d000000400020043f000000200030008c0000005c0000413d000000800200043d000007ea0020009c0000005c0000213d0000000205000039000000000505041a0000084006000041000000040a00002900000000006a043500000084064001bf0000000000560435000000c40540003900000005060000290000000000650435000000a404400039000000060500002900000000005404350000000004000414000000040020008c000005870000613d0000004001a00210000007e70040009c000007e704008041000000c003400210000000000113019f00000835011001c71f991f940000040f0000006003100270000007e70030019d000007e7033001970002000000010355000000010020019000000f1e0000613d000000040a00002900000863053001980000001f0630018f00000000045a0019000005910000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000048004b0000058d0000c13d000000000006004b0000059e0000613d000000000151034f0000000305600210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000001f0130003900000863011001970000000002a10019000000000012004b00000000010000390000000101004039000008270020009c0000120f0000213d00000001001001900000120f0000c13d000000400020043f000008360030009c0000005c0000213d000000200030008c0000005c0000413d00000004010000290000000001010433000008270010009c0000005c0000213d000000040330002900000004011000290000001f04100039000000000034004b0000000005000019000008370500804100000837044001970000083706300197000000000764013f000000000064004b00000000040000190000083704004041000008370070009c000000000405c019000000000004004b0000005c0000c13d0000000015010434000008270050009c0000120f0000213d00000005045002100000003f0640003900000841066001970000000006260019000008270060009c0000120f0000213d000000400060043f00000000005204350000000004140019000000000034004b0000005c0000213d000000000005004b000005d70000613d0000000003020019000000200330003900000000150104340000000000530435000000000041004b000005d20000413d000000400100043d000600000001001d1f99167a0000040f000013d70000013d000007e70010009c000007e701008041000000c00110021000000833011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000005ef0000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b000005eb0000c13d000000000006004b000005fc0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000b8f0000613d0000001f01400039000000600110018f00000080021001bf000400000002001d000000400020043f000000200030008c0000005c0000413d000000800200043d000007ea0020009c0000005c0000213d0000000203000039000000000303041a00000838040000410000000405000029000000000045043500000084041001bf0000000000340435000000c40310003900000005040000290000000000430435000000a403100039000000060400002900000000004304350000000003000414000000040020008c00000a130000613d000007e70030009c000007e703008041000000c0013002100000004003500210000000000131019f00000835011001c71f991f940000040f000000040b0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000006310000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b0000062d0000c13d000000000006004b0000063e0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f000200000001035500000001002001900000089b0000c13d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000006490000c13d000012700000013d000007e70010009c000007e701008041000000c00110021000000833011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000006620000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b0000065e0000c13d000000000006004b0000066f0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000b9b0000613d0000001f01400039000000600110018f00000080021001bf000400000002001d000000400020043f000000200030008c0000005c0000413d000000800200043d000007ea0020009c0000005c0000213d0000000203000039000000000303041a00000844040000410000000405000029000000000045043500000084041001bf0000000000340435000000c40310003900000005040000290000000000430435000000a403100039000000060400002900000000004304350000000003000414000000040020008c00000df40000c13d0000000001150019000000400010043f0000000402000029000008300000013d000007e70010009c000007e701008041000000c00110021000000833011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000006a50000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b000006a10000c13d000000000006004b000006b20000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000ba70000613d0000001f01400039000000600110018f00000080021001bf000600000002001d000000400020043f000000200030008c0000005c0000413d000000800200043d000007ea0020009c0000005c0000213d0000000203000039000000000303041a00000844040000410000000605000029000000000045043500000084041001bf0000000000340435000000c40310003900000845040000410000000000430435000000a40310003900000000000304350000000003000414000000040020008c0000082d0000613d000007e70030009c000007e703008041000000c0013002100000004003500210000000000131019f00000835011001c71f991f940000040f000000060b0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000006e60000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000006e20000c13d000000000006004b000006f30000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000e7a0000c13d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000006fe0000c13d000012700000013d000007e70010009c000007e701008041000000c00110021000000833011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000007170000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b000007130000c13d000000000006004b000007240000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000bb30000613d0000001f01400039000000600110018f00000080021001bf000400000002001d000000400020043f000000200030008c0000005c0000413d000000800200043d000007ea0020009c0000005c0000213d0000000203000039000000000303041a00000846040000410000000405000029000000000045043500000084041001bf0000000000340435000000c40310003900000005040000290000000000430435000000a403100039000000060400002900000000004304350000000003000414000000040020008c00000e230000c13d0000000001150019000000400010043f000000040200002900000b660000013d000007e70030009c000007e703008041000000c00130021000000833011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf0000075a0000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b000007560000c13d000000000006004b000007670000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000bbf0000613d0000001f02400039000000600420018f00000080024001bf000400000002001d000000400020043f000000200030008c0000005c0000413d000000800200043d000007ea0020009c0000005c0000213d0000000205000039000000000505041a0000083406000041000000040a00002900000000006a043500000084064001bf0000000000560435000000c40540003900000005060000290000000000650435000000a404400039000000060500002900000000005404350000000004000414000000040020008c000007930000613d0000004001a00210000007e70040009c000007e704008041000000c003400210000000000113019f00000835011001c71f991f940000040f0000006003100270000007e70030019d000007e7033001970002000000010355000000010020019000000f710000613d000000040a00002900000863053001980000001f0630018f00000000045a00190000079d0000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000048004b000007990000c13d000000000006004b000007aa0000613d000000000151034f0000000305600210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000001f0130003900000863041001970000000001a40019000000000041004b00000000040000390000000104004039000008270010009c0000120f0000213d00000001004001900000120f0000c13d000000400010043f000008360030009c0000005c0000213d000000200030008c0000005c0000413d00000004040000290000000004040433000008270040009c0000005c0000213d000000040630002900000004034000290000001f04300039000000000064004b0000000005000019000008370500804100000837044001970000083707600197000000000874013f000000000074004b00000000040000190000083704004041000008370080009c000000000405c019000000000004004b0000005c0000c13d0000000043030434000008270030009c0000120f0000213d0000001f0530003900000863055001970000003f0550003900000863055001970000000005150019000008270050009c0000120f0000213d000000400050043f00000000053104360000000007430019000000000067004b0000005c0000213d00000863063001970000001f0230018f000000000054004b000013a60000813d000000000006004b00000b080000613d00000000082400190000000007250019000000200770008a000000200880008a0000000009670019000000000a680019000000000a0a04330000000000a90435000000200660008c000007e60000c13d00000b080000013d000007e70010009c000007e701008041000000c00110021000000833011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000008010000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b000007fd0000c13d000000000006004b0000080e0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000c060000613d0000001f01400039000000600110018f00000080021001bf000600000002001d000000400020043f000000200030008c0000005c0000413d000000800200043d000007ea0020009c0000005c0000213d0000000203000039000000000303041a00000844040000410000000605000029000000000045043500000084041001bf0000000000340435000000a403100039000000000003043500000004030000390000000103300367000000000303043b000000c40410003900000000003404350000000003000414000000040020008c00000e520000c13d0000000001150019000000400010043f00000006020000290000000002020433000007ea0020009c0000005c0000213d00000b670000013d000007e70010009c000007e701008041000000c00110021000000833011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000008480000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b000008440000c13d000000000006004b000008550000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000c120000613d0000001f01400039000000600110018f00000080021001bf000400000002001d000000400020043f000000200030008c0000005c0000413d000000800200043d000007ea0020009c0000005c0000213d0000000203000039000000000303041a00000843040000410000000405000029000000000045043500000084041001bf0000000000340435000000c40310003900000005040000290000000000430435000000a403100039000000060400002900000000004304350000000003000414000000040020008c00000a130000613d000007e70030009c000007e703008041000000c0013002100000004003500210000000000131019f00000835011001c71f991f940000040f000000040b0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b00190000088a0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000008860000c13d000000000006004b000008970000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000f7d0000613d0000001f01400039000000600110018f0000000001b10019000000400010043f000000200030008c00000a150000813d0000005c0000013d000007e70010009c000007e701008041000000c00110021000000823011001c71f991f940000040f000000800a0000390000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000008b60000613d000000000801034f000000008908043c000000000a9a043600000000005a004b000008b20000c13d000000000006004b000008c30000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000c1e0000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200030008c0000005c0000413d000000800100043d000000000001004b0000000002000039000000010200c039000000000021004b0000005c0000c13d000000000001004b00000bfe0000613d00000006010000291f991ecf0000040f0000000101000039000000000201041a000000400b00043d000008240100004100000000001b04350000000401b000390000082503000041000000000031043500000000010004140000000802200270000007ea02200197000000040020008c00000f890000c13d0000000003000031000000200030008c0000002004000039000000000403401900000fb50000013d000007e70030009c000007e703008041000000c00130021000000833011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000008fd0000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b000008f90000c13d000000000006004b0000090a0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000c660000613d0000001f02400039000000600420018f00000080024001bf000600000002001d000000400020043f000000200030008c0000005c0000413d000000800200043d000007ea0020009c0000005c0000213d0000000205000039000000000505041a0000083406000041000000060a00002900000000006a043500000084064001bf0000000000560435000000c4054000390000084c060000410000000000650435000000a40440003900000000000404350000000004000414000000040020008c000009350000613d0000004001a00210000007e70040009c000007e704008041000000c003400210000000000113019f00000835011001c71f991f940000040f0000006003100270000007e70030019d000007e70330019700020000000103550000000100200190000010260000613d000000060a00002900000863053001980000001f0630018f00000000045a00190000093f0000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000048004b0000093b0000c13d000000000006004b0000094c0000613d000000000151034f0000000305600210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000001f0130003900000863041001970000000001a40019000000000041004b00000000040000390000000104004039000008270010009c0000120f0000213d00000001004001900000120f0000c13d000000400010043f000008360030009c0000005c0000213d000000200030008c0000005c0000413d00000006040000290000000004040433000008270040009c0000005c0000213d000000060630002900000006034000290000001f04300039000000000064004b0000000005000019000008370500804100000837044001970000083707600197000000000874013f000000000074004b00000000040000190000083704004041000008370080009c000000000405c019000000000004004b0000005c0000c13d0000000043030434000008270030009c0000120f0000213d0000001f0530003900000863055001970000003f0550003900000863055001970000000005150019000008270050009c0000120f0000213d000000400050043f00000000053104360000000007430019000000000067004b0000005c0000213d00000863063001970000001f0230018f000000000054004b000013b00000813d000000000006004b00000b080000613d00000000082400190000000007250019000000200770008a000000200880008a0000000009670019000000000a680019000000000a0a04330000000000a90435000000200660008c000009880000c13d00000b080000013d000007e70010009c000007e701008041000000c00110021000000833011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000009a30000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b0000099f0000c13d000000000006004b000009b00000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000c720000613d0000001f01400039000000600110018f00000080021001bf000500000002001d000000400020043f000000200030008c0000005c0000413d000000800200043d000007ea0020009c0000005c0000213d00000851030000410000000505000029000000000035043500000084031001bf000000060400002900000000004304350000000003000414000000040020008c00000e810000c13d0000000002150019000000400020043f00000005010000290000000003010433000007ea0030009c0000005c0000213d0000000001000411000000000013004b000010d30000c13d00000006020000291f991e0e0000040f000000000100001900001f9a0001042e000007e70010009c000007e701008041000000c00110021000000833011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000009e80000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b000009e40000c13d000000000006004b000009f50000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000cb90000613d0000001f01400039000000600110018f00000080021001bf000400000002001d000000400020043f000000200030008c0000005c0000413d000000800200043d000007ea0020009c0000005c0000213d0000000203000039000000000303041a00000842040000410000000405000029000000000045043500000084041001bf0000000000340435000000c40310003900000005040000290000000000430435000000a403100039000000060400002900000000004304350000000003000414000000040020008c00000eb00000c13d0000000001150019000000400010043f00000004020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b0000005c0000c13d00000b670000013d000007e70010009c000007e701008041000000c00110021000000833011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf00000a310000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b00000a2d0000c13d000000000006004b00000a3e0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000cc50000613d0000001f01400039000000600110018f00000080021001bf000600000002001d000000400020043f000000200030008c0000005c0000413d000000800200043d000007ea0020009c0000005c0000213d0000000203000039000000000303041a00000846040000410000000605000029000000000045043500000084041001bf0000000000340435000000a403100039000000000003043500000004030000390000000103300367000000000303043b000000c40410003900000000003404350000000003000414000000040020008c00000edf0000c13d0000000001150019000000400010043f000000060200002900000b660000013d000007e70030009c000007e703008041000000c00130021000000833011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf00000a750000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b00000a710000c13d000000000006004b00000a820000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000cd10000613d0000001f02400039000000600420018f00000080024001bf000600000002001d000000400020043f000000200030008c0000005c0000413d000000800200043d000007ea0020009c0000005c0000213d0000000205000039000000000505041a0000083406000041000000060a00002900000000006a043500000084064001bf0000000000560435000000a405400039000000000005043500000004050000390000000105500367000000000505043b000000c40440003900000000005404350000000004000414000000040020008c00000aaf0000613d0000004001a00210000007e70040009c000007e704008041000000c003400210000000000113019f00000835011001c71f991f940000040f0000006003100270000007e70030019d000007e70330019700020000000103550000000100200190000010c00000613d000000060a00002900000863053001980000001f0630018f00000000045a001900000ab90000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000048004b00000ab50000c13d000000000006004b00000ac60000613d000000000151034f0000000305600210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000001f0130003900000863041001970000000001a40019000000000041004b00000000040000390000000104004039000008270010009c0000120f0000213d00000001004001900000120f0000c13d000000400010043f000008360030009c0000005c0000213d000000200030008c0000005c0000413d00000006040000290000000004040433000008270040009c0000005c0000213d000000060630002900000006034000290000001f04300039000000000064004b0000000005000019000008370500804100000837044001970000083707600197000000000874013f000000000074004b00000000040000190000083704004041000008370080009c000000000405c019000000000004004b0000005c0000c13d0000000043030434000008270030009c0000120f0000213d0000001f0530003900000863055001970000003f0550003900000863055001970000000005150019000008270050009c0000120f0000213d000000400050043f00000000053104360000000007430019000000000067004b0000005c0000213d00000863063001970000001f0230018f000000000054004b000013ba0000813d000000000006004b00000b080000613d00000000082400190000000007250019000000200770008a000000200880008a0000000009670019000000000a680019000000000a0a04330000000000a90435000000200660008c00000b020000c13d000000000002004b000013d00000613d0000000007050019000013c60000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000b130000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000b1f0000c13d000012700000013d000007e70010009c000007e701008041000000c00110021000000833011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf00000b380000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b00000b340000c13d000000000006004b00000b450000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000cdd0000613d0000001f01400039000000600110018f00000080021001bf000500000002001d000000400020043f000000200030008c0000005c0000413d000000800200043d000007ea0020009c0000005c0000213d0000000203000039000000000303041a00000846040000410000000505000029000000000045043500000084041001bf0000000000340435000000c4031000390000084f040000410000000000430435000000a403100039000000060400002900000000004304350000000003000414000000040020008c00000f2a0000c13d0000000001150019000000400010043f000000050200002900000000020204330000000000210435000000400110021000000839011001c700001f9a0001042e0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000b720000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000b7e0000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000b8a0000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000b960000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000ba20000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000bae0000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000bba0000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000bc60000c13d000012700000013d000007e70010009c000007e701008041000000c00110021000000823011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf00000bdf0000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b00000bdb0000c13d000000000006004b00000bec0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000ce90000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200030008c0000005c0000413d000000800100043d000000000001004b0000000002000039000000010200c039000000000021004b0000005c0000c13d000000000001004b000010030000c13d0000082d01000041000000000010043f0000000501000029000000040010043f0000082201000041000000240010043f0000082e0100004100001f9b000104300000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000c0d0000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000c190000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000c250000c13d000012700000013d000007e70010009c000007e701008041000000c00110021000000823011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf00000c3e0000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b00000c3a0000c13d000000000006004b00000c4b0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000cf50000613d0000001f01400039000000600110018f00000080021001bf000400000002001d000000400020043f000000200030008c0000005c0000413d000000800200043d000000000002004b0000000004000039000000010400c039000000000042004b0000005c0000c13d000000000002004b000010320000c13d0000082d01000041000000000010043f0000000501000029000000040010043f0000085401000041000000240010043f0000082e0100004100001f9b000104300000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000c6d0000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000c790000c13d000012700000013d000007e70010009c000007e701008041000000c00110021000000823011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf00000c920000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b00000c8e0000c13d000000000006004b00000c9f0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000d010000613d0000001f01400039000000600210018f00000080012001bf000000400010043f000000200030008c0000005c0000413d000000800300043d000000000003004b0000000004000039000000010400c039000000000043004b0000005c0000c13d000000000003004b000010870000c13d0000082d01000041000000000010043f0000000001000411000000040010043f0000085a01000041000000240010043f0000082e0100004100001f9b000104300000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000cc00000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000ccc0000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000cd80000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000ce40000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000cf00000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000cfc0000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000d080000c13d000012700000013d000000c002100039000000400020043f0000000d0200003900000006040000290000000000240435000000a004100039000008480200004100000000002404350000000302000039000000000202041a000000ff0020019000000f0e0000c13d000500000004001d0000000102000039000000000202041a000000400b00043d000008240400004100000000004b04350000000404b000390000082505000041000000000054043500000000040004140000000802200270000007ea02200197000000040020008c00000d550000613d000007e700b0009c000007e70100004100000000010b40190000004001100210000007e70040009c000007e704008041000000c003400210000000000113019f00000826011001c700040000000b001d1f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000040b000029000000040570002900000d420000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00000d3e0000c13d000000000006004b00000d4f0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f00020000000103550000000100200190000011f10000613d0000001f01400039000000600110018f0000000002b10019000000000012004b00000000010000390000000101004039000008270020009c0000120f0000213d00000001001001900000120f0000c13d000000400020043f000000200030008c0000005c0000413d00000000010b0433000400000001001d000007ea0010009c0000005c0000213d0000000201000039000000000101041a000300000001001d00000828010000410000000000100443000000040100002900000004001004430000000001000414000007e70010009c000007e701008041000000c00110021000000829011001c700008002020000391f991f940000040f00000001002001900000161c0000613d000000000101043b000000000001004b0000005c0000613d000000400300043d00000064013000390000000002000410000000000021043500000044013000390000084a0200004100000000002104350000084b0100004100000000001304350000000401300039000100000001001d00000003020000290000000000210435000200000003001d0000002401300039000000000001043500000000010004140000000402000029000000040020008c00000d9b0000613d0000000202000029000007e70020009c000007e7020080410000004002200210000007e70010009c000007e701008041000000c001100210000000000121019f0000082c011001c700000004020000291f991f8f0000040f0000006003100270000007e70030019d00020000000103550000000100200190000013ff0000613d0000000201000029000008270010009c0000120f0000213d0000000203000029000000400030043f0000000101000039000000000201041a0000082401000041000000000013043500000825010000410000000103000029000000000013043500000000010004140000000802200270000007ea02200197000000040020008c0000140c0000c13d0000000003000031000000200030008c00000020040000390000000004034019000014360000013d00000857010000410000000000100443000000000100041000000004001004430000000001000414000007e70010009c000007e701008041000000c00110021000000829011001c70000800a020000391f991f940000040f00000001002001900000161c0000613d000000000301043b00000000010004140000000004000411000000040040008c000010e40000c13d0000000001000031000012060000013d000007e70030009c000007e703008041000000c0013002100000004003500210000000000131019f00000835011001c71f991f940000040f000000060b0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900000ddc0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00000dd80000c13d000000000006004b00000de90000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000f590000613d0000001f01400039000000600110018f0000000001b10019000000400010043f000000200030008c000004990000813d0000005c0000013d000007e70030009c000007e703008041000000c0013002100000004003500210000000000131019f00000835011001c71f991f940000040f000000040b0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900000e0b0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00000e070000c13d000000000006004b00000e180000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000000f650000613d0000001f01400039000000600110018f0000000001b10019000000400010043f000000200030008c0000005c0000413d0000068f0000013d000007e70030009c000007e703008041000000c0013002100000004003500210000000000131019f00000835011001c71f991f940000040f000000040b0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900000e3a0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00000e360000c13d000000000006004b00000e470000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f000200000001035500000001002001900000100e0000613d0000001f01400039000000600110018f0000000001b10019000000400010043f000000200030008c000007440000813d0000005c0000013d000007e70030009c000007e703008041000000c0013002100000004003500210000000000131019f00000835011001c71f991f940000040f000000060b0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900000e690000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00000e650000c13d000000000006004b00000e760000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f000200000001035500000001002001900000101a0000613d0000001f01400039000000600110018f0000000001b10019000000400010043f000000200030008c0000082f0000813d0000005c0000013d000007e70030009c000007e703008041000000c0013002100000004003500210000000000131019f00000826011001c71f991f940000040f000000050b0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900000e980000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00000e940000c13d000000000006004b00000ea50000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f000200000001035500000001002001900000109c0000613d0000001f01400039000000600110018f0000000002b10019000000400020043f000000200030008c000009c90000813d0000005c0000013d000007e70030009c000007e703008041000000c0013002100000004003500210000000000131019f00000835011001c71f991f940000040f000000040b0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900000ec70000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00000ec30000c13d000000000006004b00000ed40000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f00020000000103550000000100200190000010a80000613d0000001f01400039000000600110018f0000000001b10019000000400010043f000000200030008c0000005c0000413d00000a150000013d000007e70030009c000007e703008041000000c0013002100000004003500210000000000131019f00000835011001c71f991f940000040f000000060b0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900000ef60000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00000ef20000c13d000000000006004b00000f030000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f00020000000103550000000100200190000010b40000613d0000001f01400039000000600110018f0000000001b10019000000400010043f000000200030008c0000005c0000413d00000a5f0000013d0000084901000041000000000010043f000008320100004100001f9b000104300000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000f190000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000f250000c13d000012700000013d000007e70030009c000007e703008041000000c0013002100000004003500210000000000131019f00000835011001c71f991f940000040f000000050b0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900000f410000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00000f3d0000c13d000000000006004b00000f4e0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f00020000000103550000000100200190000010eb0000613d0000001f01400039000000600110018f0000000001b10019000000400010043f000000200030008c00000b650000813d0000005c0000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000f600000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000f6c0000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000f780000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000f840000c13d000012700000013d000007e700b0009c000007e70300004100000000030b40190000004003300210000007e70010009c000007e701008041000000c001100210000000000131019f00000826011001c700060000000b001d1f991f940000040f000000060b0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900000fa40000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00000fa00000c13d000000000006004b00000fb10000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f00020000000103550000000100200190000010f70000613d0000001f01400039000000600210018f0000000001b20019000000000021004b00000000020000390000000102004039000008270010009c0000120f0000213d00000001002001900000120f0000c13d000000400010043f000000200030008c0000005c0000413d00000000010b0433000600000001001d000007ea0010009c0000005c0000213d0000000201000039000000000101041a000500000001001d00000828010000410000000000100443000000060100002900000004001004430000000001000414000007e70010009c000007e701008041000000c00110021000000829011001c700008002020000391f991f940000040f00000001002001900000161c0000613d000000000101043b000000000001004b0000005c0000613d000000400300043d00000064013000390000000402000029000000000021043500000044013000390000082a0200004100000000002104350000082b010000410000000000130435000000040130003900000005020000290000000000210435000500000003001d0000002401300039000000000001043500000000010004140000000602000029000000040020008c00000ffc0000613d0000000502000029000007e70020009c000007e7020080410000004002200210000007e70010009c000007e701008041000000c001100210000000000121019f0000082c011001c700000006020000291f991f8f0000040f0000006003100270000007e70030019d00020000000103550000000100200190000013e10000613d0000000501000029000008270010009c0000120f0000213d0000000501000029000000400010043f000000000100001900001f9a0001042e00000006030000290000000801300210000007ec011001970000000104000039000000000204041a0000083002200197000000000112019f000000000014041b000000000003004b000000af0000613d0000120b0000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000010150000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000010210000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000102d0000c13d000012700000013d0000000102000039000000000202041a00000824040000410000000405000029000000000045043500000084011001bf0000082504000041000000000041043500000000010004140000000802200270000007ea02200197000000040020008c000011030000c13d000000200030008c00000020030080390000001f01300039000000600110018f0000000001510019000000400010043f00000004010000290000000001010433000500000001001d000007ea0010009c0000005c0000213d0000000201000039000000000101041a000400000001001d00000828010000410000000000100443000000050100002900000004001004430000000001000414000007e70010009c000007e701008041000000c00110021000000829011001c700008002020000391f991f940000040f00000001002001900000161c0000613d000000000101043b000000000001004b0000005c0000613d000000400300043d00000044013000390000084f0200004100000000002104350000002401300039000000060200002900000000002104350000082b010000410000000000130435000000040130003900000004020000290000000000210435000600000003001d0000006401300039000000000001043500000000010004140000000502000029000000040020008c000010800000613d0000000602000029000007e70020009c000007e7020080410000004002200210000007e70010009c000007e701008041000000c001100210000000000121019f0000082c011001c700000005020000291f991f8f0000040f0000006003100270000007e70030019d00020000000103550000000100200190000012940000613d0000000601000029000008270010009c0000120f0000213d0000000601000029000000400010043f000000000100001900001f9a0001042e0000000103000039000000000503041a000000ff0450018f000000060000006b000011310000c13d000000000004004b000011450000613d0000086402500197000000000023041b0000000002000411000000000021043500000040011002100000000002000414000007e70020009c000007e702008041000000c002200210000000000112019f0000085b011001c70000800d020000390000085d04000041000011410000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000010a30000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000010af0000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000010bb0000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000010c70000c13d000012700000013d000000000105001900000044021000390000083c030000410000000000320435000000240210003900000010030000390000121b0000013d0000083d01000041000000000012043500000004012001bf0000002003000039000000000031043500000064012000390000085203000041000000000031043500000044012000390000085303000041000000000031043500000024012000390000002f03000039000000000031043500000040012002100000082c011001c700001f9b00010430000007e70010009c000007e701008041000000c001100210000000000003004b000011fd0000c13d0000000002040019000012000000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000010f20000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000010fe0000c13d000012700000013d000007e70010009c000007e701008041000000c0011002100000004003500210000000000131019f00000826011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000405700029000011190000613d000000000801034f0000000409000029000000008a08043c0000000009a90436000000000059004b000011150000c13d000000000006004b000011260000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f000200000001035500000001002001900000124d0000613d0000001f01400039000000600110018f0000000401100029000000400010043f000000200030008c000010450000813d0000005c0000013d000000000004004b000011450000c13d000008640250019700000001022001bf000000000023041b0000000002000411000000000021043500000040011002100000000002000414000007e70020009c000007e702008041000000c002200210000000000112019f0000085b011001c70000800d020000390000085c040000411f991f8f0000040f00000001002001900000005c0000613d0000120b0000013d0000083d03000041000000000031043500000084032001bf00000020040000390000000000430435000000c4032000390000085e040000410000000000430435000000a40220003900000014030000390000000000320435000000400110021000000835011001c700001f9b00010430000007e70050009c000007e70300004100000000030540190000004003300210000007e70010009c000007e701008041000000c001100210000000000131019f00000832011001c7000600000005001d1f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000060b00002900000006057000290000116e0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b0000116a0000c13d000000000006004b0000117b0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f00020000000103550000000100200190000012590000613d00000000050b00190000001f01400039000000600210018f0000000001520019000000000021004b00000000020000390000000102004039000008270010009c0000120f0000213d00000001002001900000120f0000c13d000000400010043f000000200030008c0000005c0000413d0000000002050433000000000002004b0000000003000039000000010300c039000000000032004b0000005c0000c13d000000000002004b000010cd0000c13d1f9916890000040f000000000001004b000012a10000c13d000000400100043d00000044021000390000083f030000410000000000320435000000240210003900000012030000390000121b0000013d000007e70050009c000007e70300004100000000030540190000004003300210000007e70010009c000007e701008041000000c001100210000000000131019f00000832011001c7000600000005001d1f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000060b0000290000000605700029000011ba0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000011b60000c13d000000000006004b000011c70000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f00020000000103550000000100200190000012650000613d00000000050b00190000001f01400039000000600110018f0000000004510019000000000014004b00000000010000390000000101004039000008270040009c0000120f0000213d00000001001001900000120f0000c13d000600000004001d000000400040043f000000200030008c0000005c0000413d0000000001050433000000000001004b0000000002000039000000010200c039000000000021004b0000005c0000c13d000000000001004b000012830000c13d0000000101000039000000000201041a00000824010000410000000604000029000000000014043500000004014000390000082504000041000000000041043500000000010004140000000802200270000007ea02200197000000040020008c000012ab0000c13d0000002004000039000012d50000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000011f80000c13d000012700000013d00000858011001c7000080090200003900000000050000191f991f8f0000040f000500000002001d00020000000103550000006001100270000007e70010019d000007e701100197000000000001004b0000120d0000c13d00000005010000290000000100100190000012150000613d000000000100001900001f9a0001042e000008270010009c000012260000a13d0000085f01000041000000000010043f0000004101000039000000040010043f000008260100004100001f9b00010430000000400100043d00000044021000390000085903000041000000000032043500000024021000390000000f0300003900000000003204350000083d020000410000000000210435000000040210003900000020030000390000000000320435000007e70010009c000007e701008041000000400110021000000835011001c700001f9b000104300000001f0310003900000863033001970000003f033000390000086304300197000000400300043d0000000004430019000000000034004b00000000050000390000000105004039000008270040009c0000120f0000213d00000001005001900000120f0000c13d000000400040043f000000000513043600000863021001980000001f0310018f000000000125001900000002040003670000123f0000613d000000000604034f000000006706043c0000000005750436000000000015004b0000123b0000c13d000000000003004b000012080000613d000000000224034f0000000303300210000000000401043300000000043401cf000000000434022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000242019f0000000000210435000012080000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000012540000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000012600000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000126c0000c13d000000000005004b0000127d0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000007e70020009c000007e7020080410000004002200210000000000112019f00001f9b00010430000000060500002900000044015000390000083c0200004100000000002104350000002401500039000000100200003900000000002104350000083d010000410000000000150435000000040150003900000020020000390000000000210435000007e70050009c000007e705008041000000400150021000000835011001c700001f9b00010430000007e7033001970000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000129c0000c13d000012700000013d0000000002000416000000000012004b000013ee0000813d000000400100043d00000044021000390000083e030000410000000000320435000000240210003900000014030000390000121b0000013d0000000603000029000007e70030009c000007e7030080410000004003300210000007e70010009c000007e701008041000000c001100210000000000131019f00000826011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000605700029000012c40000613d000000000801034f0000000609000029000000008a08043c0000000009a90436000000000059004b000012c00000c13d000000000006004b000012d10000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f00020000000103550000000100200190000013f30000613d0000001f01400039000000600110018f0000000602100029000500000002001d000008270020009c0000120f0000213d0000000502000029000000400020043f000000200030008c0000005c0000413d00000006020000290000000002020433000007ea0020009c0000005c0000213d0000000204000039000000000404041a000000050700002900000044057000390000082a0600004100000000006504350000084605000041000000000057043500000004057000390000000000450435000000240470003900000000000404350000000004000414000000040020008c0000131e0000613d0000000501000029000007e70010009c000007e7010080410000004001100210000007e70040009c000007e704008041000000c003400210000000000113019f00000835011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000005057000290000130b0000613d000000000801034f0000000509000029000000008a08043c0000000009a90436000000000059004b000013070000c13d000000000006004b000013180000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f000200000001035500000001002001900000149c0000613d0000001f01400039000000600110018f0000000502100029000600000002001d000008270020009c0000120f0000213d0000000602000029000000400020043f000000200030008c0000005c0000413d00000005020000290000000002020433000500000002001d0000000102000039000000000202041a00000824040000410000000605000029000000000045043500000004045000390000085505000041000000000054043500000000040004140000000802200270000007ea02200197000000040020008c000013620000613d0000000601000029000007e70010009c000007e7010080410000004001100210000007e70040009c000007e704008041000000c003400210000000000113019f00000826011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000006057000290000134f0000613d000000000801034f0000000609000029000000008a08043c0000000009a90436000000000059004b0000134b0000c13d000000000006004b0000135c0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f00020000000103550000000100200190000014a80000613d0000001f01400039000000600110018f0000000601100029000008270010009c0000120f0000213d000000400010043f000000200030008c0000005c0000413d00000006010000290000000001010433000600000001001d000007ea0010009c0000005c0000213d00000828010000410000000000100443000000060100002900000004001004430000000001000414000007e70010009c000007e701008041000000c00110021000000829011001c700008002020000391f991f940000040f00000001002001900000161c0000613d000000000101043b000000000001004b0000005c0000613d000000400300043d00000044013000390000000102000039000000000021043500000024013000390000000502000029000000000021043500000856010000410000000000130435000500000003001d00000004013000390000000002000411000000000021043500000000010004140000000602000029000000040020008c0000139e0000613d0000000502000029000007e70020009c000007e7020080410000004002200210000007e70010009c000007e701008041000000c001100210000000000121019f00000835011001c700000006020000291f991f8f0000040f0000006003100270000007e70030019d00020000000103550000000100200190000015400000613d000000050100002900000000020000191f9916680000040f000000800200003900000000010004111f9919bf0000040f000000000100001900001f9a0001042e0000000007650019000000000006004b000013c30000613d00000000080400190000000009050019000000008a0804340000000009a90436000000000079004b000013ab0000c13d000013c30000013d0000000007650019000000000006004b000013c30000613d00000000080400190000000009050019000000008a0804340000000009a90436000000000079004b000013b50000c13d000013c30000013d0000000007650019000000000006004b000013c30000613d00000000080400190000000009050019000000008a0804340000000009a90436000000000079004b000013bf0000c13d000000000002004b000013d00000613d00000000046400190000000302200210000000000607043300000000062601cf000000000626022f00000000040404330000010002200089000000000424022f00000000022401cf000000000262019f0000000000270435000000000253001900000000000204350000002002000039000000400300043d000600000003001d00000000022304361f9916360000040f00000006020000290000000001210049000007e70010009c000007e7010080410000006001100210000007e70020009c000007e7020080410000004002200210000000000121019f00001f9a0001042e000007e7033001970000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000013e90000c13d000012700000013d000000000100041100000080020000391f9919bf0000040f000000000100001900001f9a0001042e0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000013fa0000c13d000012700000013d000007e7033001970000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000014070000c13d000012700000013d0000000203000029000007e70030009c000007e7030080410000004003300210000007e70010009c000007e701008041000000c001100210000000000131019f00000826011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000205700029000014250000613d000000000801034f0000000209000029000000008a08043c0000000009a90436000000000059004b000014210000c13d000000000006004b000014320000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f00020000000103550000000100200190000014900000613d0000001f01400039000000600110018f0000000201100029000008270010009c0000120f0000213d000000400010043f000000200030008c0000005c0000413d00000002010000290000000001010433000400000001001d000007ea0010009c0000005c0000213d0000000201000039000000000101041a000300000001001d00000828010000410000000000100443000000040100002900000004001004430000000001000414000007e70010009c000007e701008041000000c00110021000000829011001c700008002020000391f991f940000040f00000001002001900000161c0000613d000000000101043b000000000001004b0000005c0000613d000000400300043d0000006401300039000000000200041100000000002104350000004401300039000008450200004100000000002104350000084b0100004100000000001304350000000401300039000100000001001d00000003020000290000000000210435000200000003001d0000002401300039000000000001043500000000010004140000000402000029000000040020008c0000147a0000613d0000000202000029000007e70020009c000007e7020080410000004002200210000007e70010009c000007e701008041000000c001100210000000000121019f0000082c011001c700000004020000291f991f8f0000040f0000006003100270000007e70030019d00020000000103550000000100200190000014b40000613d0000000201000029000008270010009c0000120f0000213d0000000203000029000000400030043f0000000101000039000000000201041a0000082401000041000000000013043500000825010000410000000103000029000000000013043500000000010004140000000802200270000007ea02200197000000040020008c000014c10000c13d0000000003000031000000200030008c00000020040000390000000004034019000014eb0000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000014970000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000014a30000c13d000012700000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000014af0000c13d000012700000013d000007e7033001970000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000014bc0000c13d000012700000013d0000000203000029000007e70030009c000007e7030080410000004003300210000007e70010009c000007e701008041000000c001100210000000000131019f00000826011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000205700029000014da0000613d000000000801034f0000000209000029000000008a08043c0000000009a90436000000000059004b000014d60000c13d000000000006004b000014e70000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f00020000000103550000000100200190000015340000613d0000001f01400039000000600110018f0000000201100029000008270010009c0000120f0000213d000000400010043f000000200030008c0000005c0000413d00000002010000290000000001010433000400000001001d000007ea0010009c0000005c0000213d0000000201000039000000000101041a000300000001001d00000828010000410000000000100443000000040100002900000004001004430000000001000414000007e70010009c000007e701008041000000c00110021000000829011001c700008002020000391f991f940000040f00000001002001900000161c0000613d000000000101043b000000000001004b0000005c0000613d000000400300043d00000064013000390000008002000039000000000021043500000044013000390000084c0200004100000000002104350000084d0100004100000000001304350000000401300039000100000001001d0000000302000029000000000021043500000024013000390000000000010435000000060100002900000000010104330000008402300039000000000012043500000863051001970000001f0410018f000200000003001d000000a403300039000000050030006b0000154d0000813d000000000005004b000015300000613d00000005074000290000000006430019000000200660008a000000200770008a0000000008560019000000000957001900000000090904330000000000980435000000200550008c0000152a0000c13d000000000004004b000015640000613d0000000006030019000015590000013d0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000153b0000c13d000012700000013d000007e7033001970000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000015480000c13d000012700000013d0000000006530019000000000005004b000015560000613d0000000507000029000000000803001900000000790704340000000008980436000000000068004b000015520000c13d000000000004004b000015640000613d000500050050002d0000000304400210000000000506043300000000054501cf000000000545022f000000050700002900000000070704330000010004400089000000000747022f00000000044701cf000000000454019f00000000004604350000000003310019000000000003043500000000030004140000000404000029000000040040008c000015800000613d0000001f011000390000086301100197000000a401100039000007e70010009c000007e70100804100000060011002100000000202000029000007e70020009c000007e7020080410000004002200210000000000121019f000007e70030009c000007e703008041000000c002300210000000000121019f00000004020000291f991f8f0000040f0000006003100270000007e70030019d00020000000103550000000100200190000015960000613d0000000201000029000008270010009c0000120f0000213d0000000203000029000000400030043f0000000101000039000000000201041a0000082401000041000000000013043500000825010000410000000103000029000000000013043500000000010004140000000802200270000007ea02200197000000040020008c000015a30000c13d0000000003000031000000200030008c00000020040000390000000004034019000015cd0000013d000007e7033001970000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000159e0000c13d000012700000013d0000000203000029000007e70030009c000007e7030080410000004003300210000007e70010009c000007e701008041000000c001100210000000000131019f00000826011001c71f991f940000040f0000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000205700029000015bc0000613d000000000801034f0000000209000029000000008a08043c0000000009a90436000000000059004b000015b80000c13d000000000006004b000015c90000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f000200000001035500000001002001900000161d0000613d0000001f01400039000000600110018f0000000201100029000008270010009c0000120f0000213d000000400010043f000000200030008c0000005c0000413d00000002010000290000000001010433000600000001001d000007ea0010009c0000005c0000213d0000000201000039000000000101041a000500000001001d00000828010000410000000000100443000000060100002900000004001004430000000001000414000007e70010009c000007e701008041000000c00110021000000829011001c700008002020000391f991f940000040f00000001002001900000161c0000613d000000000101043b000000000001004b0000005c0000613d000000400300043d0000006401300039000007ed02000041000000000021043500000044013000390000084e0200004100000000002104350000082b010000410000000000130435000000040130003900000005020000290000000000210435000500000003001d0000002401300039000000000001043500000000010004140000000602000029000000040020008c000016100000613d0000000502000029000007e70020009c000007e7020080410000004002200210000007e70010009c000007e701008041000000c001100210000000000121019f0000082c011001c700000006020000291f991f8f0000040f0000006003100270000007e70030019d00020000000103550000000100200190000016290000613d0000000501000029000008270010009c0000120f0000213d0000000501000029000000400010043f0000000303000039000000000103041a000008640110019700000001011001bf000000000013041b000000000100001900001f9a0001042e000000000001042f0000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000016240000c13d000012700000013d000007e7033001970000001f0530018f000007e906300198000000400200043d0000000004620019000012700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000016310000c13d000012700000013d0000000043010434000000000132043600000863063001970000001f0530018f000000000014004b0000164c0000813d000000000006004b000016480000613d00000000085400190000000007510019000000200770008a000000200880008a0000000009670019000000000a680019000000000a0a04330000000000a90435000000200660008c000016420000c13d000000000005004b000016620000613d0000000007010019000016580000013d0000000007610019000000000006004b000016550000613d00000000080400190000000009010019000000008a0804340000000009a90436000000000079004b000016510000c13d000000000005004b000016620000613d00000000046400190000000305500210000000000607043300000000065601cf000000000656022f00000000040404330000010005500089000000000454022f00000000045401cf000000000464019f0000000000470435000000000431001900000000000404350000001f0330003900000863023001970000000001210019000000000001042d0000001f0220003900000863022001970000000001120019000000000021004b00000000020000390000000102004039000008270010009c000016740000213d0000000100200190000016740000c13d000000400010043f000000000001042d0000085f01000041000000000010043f0000004101000039000000040010043f000008260100004100001f9b0001043000000020030000390000000004310436000000000302043300000000003404350000004001100039000000000003004b000016880000613d00000000040000190000002002200039000000000502043300000000015104360000000104400039000000000034004b000016820000413d000000000001042d00010000000000020000000101000039000000000201041a000000400c00043d000008240100004100000000001c04350000000401c000390000082503000041000000000031043500000000010004140000000802200270000007ea02200197000000040020008c0000169c0000c13d0000000003000031000000200030008c00000020040000390000000004034019000016c80000013d000007e700c0009c000007e70300004100000000030c40190000004003300210000007e70010009c000007e701008041000000c001100210000000000131019f00000826011001c700010000000c001d1f991f940000040f000000010c0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057c0019000016b70000613d000000000801034f00000000090c0019000000008a08043c0000000009a90436000000000059004b000016b30000c13d000000000006004b000016c40000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f00020000000103550000000100200190000017240000613d0000001f01400039000000600110018f000000000bc1001900000000001b004b000000000200003900000001020040390000082700b0009c0000171e0000213d00000001002001900000171e0000c13d0000004000b0043f0000001f0030008c0000171c0000a13d00000000020c0433000007ea0020009c0000171c0000213d0000000204000039000000000404041a0000004405b0003900000865060000410000000000650435000008460500004100000000005b04350000000405b0003900000000004504350000002404b0003900000000000404350000000004000414000000040020008c000017140000613d000007e700b0009c000007e70100004100000000010b40190000004001100210000007e70040009c000007e704008041000000c003400210000000000113019f00000835011001c700010000000b001d1f991f940000040f000000010b0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000017010000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000016fd0000c13d000000000006004b0000170e0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f00020000000103550000000100200190000017420000613d0000001f01400039000000600110018f0000000001b10019000008270010009c0000171e0000213d000000400010043f000000200030008c0000171c0000413d00000000010b0433000000000001042d000000000100001900001f9b000104300000085f01000041000000000010043f0000004101000039000000040010043f000008260100004100001f9b000104300000001f0530018f000007e906300198000000400200043d00000000046200190000172f0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000172b0000c13d000000000005004b0000173c0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000007e70020009c000007e7020080410000004002200210000000000112019f00001f9b000104300000001f0530018f000007e906300198000000400200043d00000000046200190000174d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000017490000c13d000000000005004b0000175a0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000007e70020009c000007e7020080410000004002200210000000000121019f00001f9b0001043000010000000000020000000101000039000000000201041a000000ff01200190000017b10000c13d000000400b00043d0000083b0100004100000000001b043500000000010004140000000802200270000007ea02200197000000040020008c000017720000c13d0000000003000031000000200030008c000000200400003900000000040340190000179e0000013d000007e700b0009c000007e70300004100000000030b40190000004003300210000007e70010009c000007e701008041000000c001100210000000000131019f00000832011001c700010000000b001d1f991f940000040f000000010b0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b00190000178d0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000017890000c13d000000000006004b0000179a0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f00020000000103550000000100200190000017ba0000613d0000001f01400039000000600210018f0000000001b20019000000000021004b00000000020000390000000102004039000008270010009c000017b40000213d0000000100200190000017b40000c13d000000400010043f0000001f0030008c000017b20000a13d00000000010b0433000000000001004b0000000002000039000000010200c039000000000021004b000017b20000c13d000000000001042d000000000100001900001f9b000104300000085f01000041000000000010043f0000004101000039000000040010043f000008260100004100001f9b000104300000001f0530018f000007e906300198000000400200043d0000000004620019000017c50000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000017c10000c13d000000000005004b000017d20000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000007e70020009c000007e7020080410000004002200210000000000121019f00001f9b0001043000020000000000020000000102000039000000000202041a000000400c00043d000008240300004100000000003c04350000000404c000390000082503000041000000000034043500000000040004140000000802200270000007ea02200197000000040020008c000017eb0000c13d0000000003000031000000200030008c00000020040000390000000004034019000018190000013d000100000001001d000007e700c0009c000007e70300004100000000030c40190000004003300210000007e70040009c000007e704008041000000c001400210000000000131019f00000826011001c700020000000c001d1f991f940000040f000000020c0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057c0019000018070000613d000000000801034f00000000090c0019000000008a08043c0000000009a90436000000000059004b000018030000c13d000000000006004b000018140000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f00020000000103550000000100200190000018750000613d00000001010000290000001f02400039000000600720018f000000000bc7001900000000007b004b000000000200003900000001020040390000082700b0009c0000186f0000213d00000001002001900000186f0000c13d0000004000b0043f0000001f0030008c0000186d0000a13d00000000020c0433000007ea0020009c0000186d0000213d0000000204000039000000000404041a0000004405b00039000008660600004100000000006504350000002405b000390000000000150435000008460500004100000000005b04350000000405b0003900000000004504350000000004000414000000040020008c000018650000613d000007e700b0009c000007e70100004100000000010b40190000004001100210000007e70040009c000007e704008041000000c003400210000000000113019f00000835011001c700020000000b001d1f991f940000040f000000020b0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000018520000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b0000184e0000c13d000000000006004b0000185f0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f00020000000103550000000100200190000018930000613d0000001f01400039000000600710018f0000000001b70019000008270010009c0000186f0000213d000000400010043f000000200030008c0000186d0000413d00000000010b0433000000000001042d000000000100001900001f9b000104300000085f01000041000000000010043f0000004101000039000000040010043f000008260100004100001f9b000104300000001f0530018f000007e906300198000000400200043d0000000004620019000018800000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000187c0000c13d000000000005004b0000188d0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000007e70020009c000007e7020080410000004002200210000000000112019f00001f9b000104300000001f0530018f000007e906300198000000400200043d00000000046200190000189e0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000189a0000c13d000000000005004b000018ab0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000007e70020009c000007e7020080410000004002200210000000000121019f00001f9b0001043000020000000000020000000102000039000000000202041a000000400b00043d000008210300004100000000003b04350000000403b0003900000822040000410000000000430435000007ea051001970000002401b00039000000000051043500000000010004140000000802200270000007ea02200197000000040020008c000018c70000c13d0000000003000031000000200030008c00000020040000390000000004034019000018f50000013d000100000005001d000007e700b0009c000007e70300004100000000030b40190000004003300210000007e70010009c000007e701008041000000c001100210000000000131019f0000082e011001c700020000000b001d1f991f940000040f000000020b0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000018e30000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000018df0000c13d000000000006004b000018f00000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f000200000001035500000001002001900000191a0000613d00000001050000290000001f01400039000000600210018f0000000001b20019000000000021004b00000000020000390000000102004039000008270010009c0000190d0000213d00000001002001900000190d0000c13d000000400010043f0000001f0030008c0000190b0000a13d00000000010b0433000000000001004b0000000002000039000000010200c039000000000021004b0000190b0000c13d000000000001004b000019130000613d000000000001042d000000000100001900001f9b000104300000085f01000041000000000010043f0000004101000039000000040010043f000008260100004100001f9b000104300000082d01000041000000000010043f000000040050043f0000082201000041000000240010043f0000082e0100004100001f9b000104300000001f0530018f000007e906300198000000400200043d0000000004620019000019250000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000019210000c13d000000000005004b000019320000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000007e70020009c000007e7020080410000004002200210000000000112019f00001f9b0001043000020000000000020000000102000039000000000202041a000000400b00043d000008210300004100000000003b04350000000403b0003900000854040000410000000000430435000007ea051001970000002401b00039000000000051043500000000010004140000000802200270000007ea02200197000000040020008c0000194e0000c13d0000000003000031000000200030008c000000200400003900000000040340190000197c0000013d000100000005001d000007e700b0009c000007e70300004100000000030b40190000004003300210000007e70010009c000007e701008041000000c001100210000000000131019f0000082e011001c700020000000b001d1f991f940000040f000000020b0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b00190000196a0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000019660000c13d000000000006004b000019770000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f00020000000103550000000100200190000019a10000613d00000001050000290000001f01400039000000600210018f0000000001b20019000000000021004b00000000020000390000000102004039000008270010009c000019940000213d0000000100200190000019940000c13d000000400010043f0000001f0030008c000019920000a13d00000000010b0433000000000001004b0000000002000039000000010200c039000000000021004b000019920000c13d000000000001004b0000199a0000613d000000000001042d000000000100001900001f9b000104300000085f01000041000000000010043f0000004101000039000000040010043f000008260100004100001f9b000104300000082d01000041000000000010043f000000040050043f0000085401000041000000240010043f0000082e0100004100001f9b000104300000001f0530018f000007e906300198000000400200043d0000000004620019000019ac0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000019a80000c13d000000000005004b000019b90000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000007e70020009c000007e7020080410000004002200210000000000112019f00001f9b000104300006000000000002000500000002001d0000000102000039000000000202041a000000400b00043d000008240300004100000000003b04350000000404b000390000082503000041000000000034043500000000040004140000000802200270000007ea02200197000000040020008c000019d30000c13d0000000003000031000000200030008c0000002004000039000000000403401900001a010000013d000400000001001d000007e700b0009c000007e70300004100000000030b40190000004003300210000007e70040009c000007e704008041000000c001400210000000000131019f00000826011001c700060000000b001d1f991f940000040f000000060b0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000019ef0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000019eb0000c13d000000000006004b000019fc0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000001caf0000613d00000004010000290000001f02400039000000600820018f000000000cb8001900000000008c004b000000000200003900000001020040390000082700c0009c00001c9a0000213d000000010020019000001c9a0000c13d0000004000c0043f0000001f0030008c00001c980000a13d00000000020b0433000007ea0020009c00001c980000213d000007ea071001970000000204000039000000000404041a0000004405c00039000008660600004100000000006504350000002405c00039000600000007001d0000000000750435000008460500004100000000005c04350000000405c0003900000000004504350000000004000414000000040020008c00001a4f0000613d000007e700c0009c000007e70100004100000000010c40190000004001100210000007e70040009c000007e704008041000000c003400210000000000113019f00000835011001c700040000000c001d1f991f940000040f000000040c0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057c001900001a3c0000613d000000000801034f00000000090c0019000000008a08043c0000000009a90436000000000059004b00001a380000c13d000000000006004b00001a490000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000001cbb0000613d0000001f01400039000000600810018f000000000bc800190000082700b0009c00001c9a0000213d0000004000b0043f000000200030008c00001c980000413d0000000401b0003900000000020c0433000000000002004b000000200400003900001ca10000c13d0000000102000039000000000202041a000008240500004100000000005b04350000086805000041000000000051043500000000010004140000000802200270000007ea02200197000000040020008c00001a910000613d000007e700b0009c000007e70300004100000000030b40190000004003300210000007e70010009c000007e701008041000000c001100210000000000131019f00000826011001c700040000000b001d1f991f940000040f000000040b0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900001a800000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00001a7c0000c13d000000000006004b00001a8d0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000001cc70000613d0000001f01400039000000600110018f000000000cb100190000082700c0009c00001c9a0000213d0000004000c0043f000000200030008c00001c980000413d00000000020b0433000007ea0020009c00001c980000213d000008690400004100000000004c04350000000404c00039000000060500002900000000005404350000000004000414000000040020008c00001ad20000613d000007e700c0009c000007e70100004100000000010c40190000004001100210000007e70040009c000007e704008041000000c003400210000000000113019f00000826011001c700040000000c001d1f991f8f0000040f000000040c0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057c001900001abf0000613d000000000801034f00000000090c0019000000008a08043c0000000009a90436000000000059004b00001abb0000c13d000000000006004b00001acc0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000001cd30000613d0000001f01400039000000600110018f000000000bc100190000082700b0009c00001c9a0000213d0000004000b0043f000000200030008c00001c980000413d00000000020c0433000400000002001d0000000102000039000000000202041a000008240400004100000000004b04350000000404b000390000085005000041000000000054043500000000040004140000000802200270000007ea02200197000000040020008c00001b140000613d000007e700b0009c000007e70100004100000000010b40190000004001100210000007e70040009c000007e704008041000000c003400210000000000113019f00000826011001c700030000000b001d1f991f940000040f000000030b0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900001b010000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00001afd0000c13d000000000006004b00001b0e0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000001cdf0000613d0000001f01400039000000600110018f000000000eb100190000082700e0009c00001c9a0000213d0000004000e0043f000000200030008c00001c980000413d00000000020b0433000007ea0020009c00001c980000213d0000002404e00039000000400500003900000000005404350000086a0400004100000000004e04350000000404e00039000000060500002900000000005404350000004405e00039000000050400002900000000740404340000000000450435000000200500008a000000000954016f0000001f0840018f0000006406e00039000000000067004b00001b3f0000813d000000000009004b00001b3b0000613d000000000b870019000000000a860019000000200aa0008a000000200bb0008a000000000c9a0019000000000d9b0019000000000d0d04330000000000dc0435000000200990008c00001b350000c13d000000000008004b00001b550000613d000000000a06001900001b4b0000013d000000000a960019000000000009004b00001b480000613d000000000b070019000000000c06001900000000bd0b0434000000000cdc04360000000000ac004b00001b440000c13d000000000008004b00001b550000613d0000000007970019000000030880021000000000090a043300000000098901cf000000000989022f00000000070704330000010008800089000000000787022f00000000078701cf000000000797019f00000000007a0435000000000664001900000000000604350000000006000414000000040020008c00001b8e0000613d0000001f01400039000000000151016f0000006401100039000007e70010009c000007e7010080410000006001100210000007e700e0009c000007e70300004100000000030e40190000004003300210000000000131019f000007e70060009c000007e706008041000000c003600210000000000113019f00050000000e001d1f991f8f0000040f000000050e0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057e001900001b7b0000613d000000000801034f00000000090e0019000000008a08043c0000000009a90436000000000059004b00001b770000c13d000000000006004b00001b880000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000001ceb0000613d0000001f01400039000000600110018f000000000be100190000082700b0009c00001c9a0000213d0000004000b0043f000000200030008c00001c980000413d00000000020e0433000500000002001d0000000102000039000000000202041a000008240400004100000000004b04350000000404b000390000082505000041000000000054043500000000040004140000000802200270000007ea02200197000000040020008c00001bd00000613d000007e700b0009c000007e70100004100000000010b40190000004001100210000007e70040009c000007e704008041000000c003400210000000000113019f00000826011001c700030000000b001d1f991f940000040f000000030b0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900001bbd0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00001bb90000c13d000000000006004b00001bca0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000001d090000613d0000001f01400039000000600110018f0000000001b10019000008270010009c00001c9a0000213d000000400010043f000000200030008c00001c980000413d00000000020b0433000007ea0020009c00001c980000213d0000000201000039000000000101041a000200000001001d00000828010000410000000000100443000300000002001d00000004002004430000000001000414000007e70010009c000007e701008041000000c00110021000000829011001c700008002020000391f991f940000040f000000010020019000001ca00000613d000000000101043b000000000001004b000000030300002900001c980000613d000000400b00043d0000006401b00039000000050200002900000000002104350000004401b000390000084f0200004100000000002104350000002401b00039000000060200002900000000002104350000082b0100004100000000001b04350000000404b00039000000020100002900000000001404350000000001000414000000040030008c00010000000b001d00001c130000613d000007e700b0009c000007e70200004100000000020b40190000004002200210000007e70010009c000007e701008041000000c001100210000000000121019f0000082c011001c70000000002030019000500000004001d1f991f8f0000040f0000000504000029000000010b0000290000006003100270000007e70030019d0002000000010355000000010020019000001d150000613d0000082700b0009c00001c9a0000213d0000004000b0043f0000000101000039000000000201041a000008240100004100000000001b04350000082501000041000000000014043500000000010004140000000802200270000007ea02200197000000040020008c00001c260000c13d0000000003000031000000200030008c0000002004000039000000000403401900001c510000013d000007e700b0009c000007e70300004100000000030b40190000004003300210000007e70010009c000007e701008041000000c001100210000000000131019f00000826011001c71f991f940000040f000000010b0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900001c400000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00001c3c0000c13d000000000006004b00001c4d0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000001d220000613d0000001f01400039000000600110018f0000000001b10019000008270010009c00001c9a0000213d000000400010043f000000200030008c00001c980000413d00000000020b0433000007ea0020009c00001c980000213d0000000201000039000000000101041a000300000001001d00000828010000410000000000100443000500000002001d00000004002004430000000001000414000007e70010009c000007e701008041000000c00110021000000829011001c700008002020000391f991f940000040f000000010020019000001ca00000613d000000000101043b000000000001004b000000050300002900001c980000613d000000400400043d0000006401400039000000040200002900000000002104350000004401400039000008660200004100000000002104350000002401400039000000060200002900000000002104350000082b0100004100000000001404350000000401400039000000030200002900000000002104350000000001000414000000040030008c00001c940000613d000007e70040009c000007e70200004100000000020440190000004002200210000007e70010009c000007e701008041000000c001100210000000000121019f0000082c011001c70000000002030019000600000004001d1f991f8f0000040f00000006040000290000006003100270000007e70030019d0002000000010355000000010020019000001d2e0000613d000008270040009c00001c9a0000213d000000400040043f000000000001042d000000000100001900001f9b000104300000085f01000041000000000010043f0000004101000039000000040010043f000008260100004100001f9b00010430000000000001042f0000083d0200004100000000002b043500000000004104350000004401b00039000008670200004100000000002104350000002401b000390000001a020000390000000000210435000007e700b0009c000007e70b0080410000004001b0021000000835011001c700001f9b000104300000001f0530018f000007e906300198000000400200043d000000000462001900001d3a0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001cb60000c13d00001d3a0000013d0000001f0530018f000007e906300198000000400200043d000000000462001900001d3a0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001cc20000c13d00001d3a0000013d0000001f0530018f000007e906300198000000400200043d000000000462001900001cf60000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001cce0000c13d00001cf60000013d0000001f0530018f000007e906300198000000400200043d000000000462001900001cf60000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001cda0000c13d00001cf60000013d0000001f0530018f000007e906300198000000400200043d000000000462001900001cf60000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001ce60000c13d00001cf60000013d0000001f0530018f000007e906300198000000400200043d000000000462001900001cf60000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001cf20000c13d000000000005004b00001d030000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000007e70020009c000007e7020080410000004002200210000000000121019f00001f9b000104300000001f0530018f000007e906300198000000400200043d000000000462001900001d3a0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001d100000c13d00001d3a0000013d000007e7033001970000001f0530018f000007e906300198000000400200043d000000000462001900001d3a0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001d1d0000c13d00001d3a0000013d0000001f0530018f000007e906300198000000400200043d000000000462001900001d3a0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001d290000c13d00001d3a0000013d000007e7033001970000001f0530018f000007e906300198000000400200043d000000000462001900001d3a0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001d360000c13d000000000005004b00001d470000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000007e70020009c000007e7020080410000004002200210000000000112019f00001f9b000104300004000000000002000300000002001d000400000001001d0000000101000039000000000201041a000000400b00043d000008240100004100000000001b04350000000401b000390000082503000041000000000031043500000000010004140000000802200270000007ea02200197000000040020008c00001d620000c13d0000000003000031000000200030008c0000002004000039000000000403401900001d8e0000013d000007e700b0009c000007e70300004100000000030b40190000004003300210000007e70010009c000007e701008041000000c001100210000000000131019f00000826011001c700020000000b001d1f991f940000040f000000020b0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900001d7d0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00001d790000c13d000000000006004b00001d8a0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000001de30000613d0000001f01400039000000600210018f0000000001b20019000000000021004b00000000020000390000000102004039000008270010009c00001ddc0000213d000000010020019000001ddc0000c13d000000400010043f0000001f0030008c00001dda0000a13d00000000020b0433000007ea0020009c00001dda0000213d0000000201000039000000000101041a000100000001001d00000828010000410000000000100443000200000002001d00000004002004430000000001000414000007e70010009c000007e701008041000000c00110021000000829011001c700008002020000391f991f940000040f000000010020019000001de20000613d000000000101043b000000000001004b000000020300002900001dda0000613d000000400400043d0000006401400039000000030200002900000000002104350000004401400039000008660200004100000000002104350000002401400039000000040200002900000000002104350000082b0100004100000000001404350000000401400039000000010200002900000000002104350000000001000414000000040030008c00001dd60000613d000007e70040009c000007e70200004100000000020440190000004002200210000007e70010009c000007e701008041000000c001100210000000000121019f0000082c011001c70000000002030019000400000004001d1f991f8f0000040f00000004040000290000006003100270000007e70030019d0002000000010355000000010020019000001def0000613d000008270040009c00001ddc0000213d000000400040043f000000000001042d000000000100001900001f9b000104300000085f01000041000000000010043f0000004101000039000000040010043f000008260100004100001f9b00010430000000000001042f0000001f0530018f000007e906300198000000400200043d000000000462001900001dfb0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001dea0000c13d00001dfb0000013d000007e7033001970000001f0530018f000007e906300198000000400200043d000000000462001900001dfb0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001df70000c13d000000000005004b00001e080000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000007e70020009c000007e7020080410000004002200210000000000112019f00001f9b000104300004000000000002000300000002001d000400000001001d0000000101000039000000000201041a000000400b00043d000008240100004100000000001b04350000000401b000390000082503000041000000000031043500000000010004140000000802200270000007ea02200197000000040020008c00001e230000c13d0000000003000031000000200030008c0000002004000039000000000403401900001e4f0000013d000007e700b0009c000007e70300004100000000030b40190000004003300210000007e70010009c000007e701008041000000c001100210000000000131019f00000826011001c700020000000b001d1f991f940000040f000000020b0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900001e3e0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00001e3a0000c13d000000000006004b00001e4b0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000001ea40000613d0000001f01400039000000600210018f0000000001b20019000000000021004b00000000020000390000000102004039000008270010009c00001e9d0000213d000000010020019000001e9d0000c13d000000400010043f0000001f0030008c00001e9b0000a13d00000000020b0433000007ea0020009c00001e9b0000213d0000000201000039000000000101041a000100000001001d00000828010000410000000000100443000200000002001d00000004002004430000000001000414000007e70010009c000007e701008041000000c00110021000000829011001c700008002020000391f991f940000040f000000010020019000001ea30000613d000000000101043b000000000001004b000000020300002900001e9b0000613d000000400400043d00000064014000390000000302000029000000000021043500000044014000390000084f0200004100000000002104350000002401400039000000040200002900000000002104350000082b0100004100000000001404350000000401400039000000010200002900000000002104350000000001000414000000040030008c00001e970000613d000007e70040009c000007e70200004100000000020440190000004002200210000007e70010009c000007e701008041000000c001100210000000000121019f0000082c011001c70000000002030019000400000004001d1f991f8f0000040f00000004040000290000006003100270000007e70030019d0002000000010355000000010020019000001eb00000613d000008270040009c00001e9d0000213d000000400040043f000000000001042d000000000100001900001f9b000104300000085f01000041000000000010043f0000004101000039000000040010043f000008260100004100001f9b00010430000000000001042f0000001f0530018f000007e906300198000000400200043d000000000462001900001ebc0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001eab0000c13d00001ebc0000013d000007e7033001970000001f0530018f000007e906300198000000400200043d000000000462001900001ebc0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001eb80000c13d000000000005004b00001ec90000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000007e70020009c000007e7020080410000004002200210000000000112019f00001f9b000104300003000000000002000300000001001d0000000101000039000000000201041a000000400b00043d000008240100004100000000001b04350000000401b000390000082503000041000000000031043500000000010004140000000802200270000007ea02200197000000040020008c00001ee30000c13d0000000003000031000000200030008c0000002004000039000000000403401900001f0f0000013d000007e700b0009c000007e70300004100000000030b40190000004003300210000007e70010009c000007e701008041000000c001100210000000000131019f00000826011001c700020000000b001d1f991f940000040f000000020b0000290000006003100270000007e703300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900001efe0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00001efa0000c13d000000000006004b00001f0b0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0002000000010355000000010020019000001f630000613d0000001f01400039000000600210018f0000000001b20019000000000021004b00000000020000390000000102004039000008270010009c00001f5c0000213d000000010020019000001f5c0000c13d000000400010043f0000001f0030008c00001f5a0000a13d00000000020b0433000007ea0020009c00001f5a0000213d0000000201000039000000000101041a000100000001001d00000828010000410000000000100443000200000002001d00000004002004430000000001000414000007e70010009c000007e701008041000000c00110021000000829011001c700008002020000391f991f940000040f000000010020019000001f620000613d000000000101043b000000000001004b000000020300002900001f5a0000613d000000400400043d0000006401400039000000030200002900000000002104350000004401400039000008650200004100000000002104350000082b010000410000000000140435000000040140003900000001020000290000000000210435000000240140003900000000000104350000000001000414000000040030008c00001f560000613d000007e70040009c000007e70200004100000000020440190000004002200210000007e70010009c000007e701008041000000c001100210000000000121019f0000082c011001c70000000002030019000300000004001d1f991f8f0000040f00000003040000290000006003100270000007e70030019d0002000000010355000000010020019000001f6f0000613d000008270040009c00001f5c0000213d000000400040043f000000000001042d000000000100001900001f9b000104300000085f01000041000000000010043f0000004101000039000000040010043f000008260100004100001f9b00010430000000000001042f0000001f0530018f000007e906300198000000400200043d000000000462001900001f7b0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001f6a0000c13d00001f7b0000013d000007e7033001970000001f0530018f000007e906300198000000400200043d000000000462001900001f7b0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001f770000c13d000000000005004b00001f880000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000007e70020009c000007e7020080410000004002200210000000000112019f00001f9b00010430000000000001042f00001f92002104210000000102000039000000000001042d0000000002000019000000000001042d00001f97002104230000000102000039000000000001042d0000000002000019000000000001042d00001f990000043200001f9a0001042e00001f9b0001043000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0021ca133936d4563655fffbb8a80562871d737bffbe741fdcca6f8efef7a2463700000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000073db153d00000000000000000000000000000000000000000000000000000000a485b4ce00000000000000000000000000000000000000000000000000000000ce62bc8b00000000000000000000000000000000000000000000000000000000ed022ebc00000000000000000000000000000000000000000000000000000000ed022ebd00000000000000000000000000000000000000000000000000000000f4a0a52800000000000000000000000000000000000000000000000000000000f7d9757700000000000000000000000000000000000000000000000000000000ce62bc8c00000000000000000000000000000000000000000000000000000000dd898b2f00000000000000000000000000000000000000000000000000000000bea0bdf900000000000000000000000000000000000000000000000000000000bea0bdfa00000000000000000000000000000000000000000000000000000000c03ad0be00000000000000000000000000000000000000000000000000000000a485b4cf00000000000000000000000000000000000000000000000000000000b76ac0d7000000000000000000000000000000000000000000000000000000008245e4710000000000000000000000000000000000000000000000000000000088e4f1ca0000000000000000000000000000000000000000000000000000000088e4f1cb000000000000000000000000000000000000000000000000000000008da5cb5b00000000000000000000000000000000000000000000000000000000a16ad7da000000000000000000000000000000000000000000000000000000008245e4720000000000000000000000000000000000000000000000000000000082840eed00000000000000000000000000000000000000000000000000000000783957ad00000000000000000000000000000000000000000000000000000000783957ae000000000000000000000000000000000000000000000000000000008129fc1c0000000000000000000000000000000000000000000000000000000073db153e0000000000000000000000000000000000000000000000000000000077278ae8000000000000000000000000000000000000000000000000000000002fb0b873000000000000000000000000000000000000000000000000000000005d1ca630000000000000000000000000000000000000000000000000000000006817c76b000000000000000000000000000000000000000000000000000000006817c76c000000000000000000000000000000000000000000000000000000006b207561000000000000000000000000000000000000000000000000000000006ef4d8b9000000000000000000000000000000000000000000000000000000005d1ca63100000000000000000000000000000000000000000000000000000000676d3d4f000000000000000000000000000000000000000000000000000000004f9eefb6000000000000000000000000000000000000000000000000000000004f9eefb7000000000000000000000000000000000000000000000000000000005c975abb000000000000000000000000000000000000000000000000000000002fb0b874000000000000000000000000000000000000000000000000000000003ccfd60b000000000000000000000000000000000000000000000000000000001328357e0000000000000000000000000000000000000000000000000000000016c38b3b0000000000000000000000000000000000000000000000000000000016c38b3c00000000000000000000000000000000000000000000000000000000267659e2000000000000000000000000000000000000000000000000000000001328357f0000000000000000000000000000000000000000000000000000000015be71ff0000000000000000000000000000000000000000000000000000000002533419000000000000000000000000000000000000000000000000000000000253341a0000000000000000000000000000000000000000000000000000000006fdde03000000000000000000000000000000000000000000000000000000000035a9ae0000000000000000000000000000000000000000000000000000000001ffc9a7c36dd7ea00000000000000000000000000000000000000000000000000000000241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08000000000000000000000000000000000000004400000080000000000000000053e41c1e000000000000000000000000000000000000000000000000000000009750ad73d9615445751d3fd0a61d867ae6a6dd1dfb5f65ef07fe835b7d5ca6bd0000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff1806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000050fc4a86286314eb3aa17200f6e9ba0d1cda18b0acbfb54e6d9dd307e46c2d289b29de690000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000000161a64a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000440000000000000000000000000000000000000000000000000000000000000020000000800000000000000000ffffffffffffffffffffff0000000000000000000000000000000000000000ffa4b9148100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000240000008000000000000000008a4bcc900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000000000000000000000000000000000000000000000000000000000000007fef633000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f5c975abb000000000000000000000000000000000000000000000000000000005061757361626c653a207061757365640000000000000000000000000000000008c379a000000000000000000000000000000000000000000000000000000000496e73756666696369656e74207061796d656e740000000000000000000000004d696e74207072696365206e6f74207365740000000000000000000000000000bfa2ccd2000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0651689700000000000000000000000000000000000000000000000000000000007b920aa00000000000000000000000000000000000000000000000000000000e81b22ea0000000000000000000000000000000000000000000000000000000002016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c0a1b9224c00000000000000000000000000000000000000000000000000000000fc425f2263d0df187444b70e47283d622c70181c5baebb1306a01edba1ce184c4163636f756e7453797374656d000000000000000000000000000000000000000dc149f000000000000000000000000000000000000000000000000000000000421683f821a0574472445355be6d2b769119e8515f8376a1d7878523dfdecf7b0a41b90f000000000000000000000000000000000000000000000000000000002361458367e696363fbcc70777d07ebbd2394e89fd0adcaf147faccd1d294d60e95c048700000000000000000000000000000000000000000000000000000000a709fd3aa96d9faf770e44a5aef2f4808a6fe3a5ddf546568f36ad3a3873f31d948bc8ac37788722a5685eaf06860185e744e8f40d83c43fc7db309246ec652eb31775265933e5e6f3b2d519a9dcdfa71b65581e94932ab3a3e5108d0bd44c346352211e0000000000000000000000000000000000000000000000000000000067652074686520757365726e616d6500000000000000000000000000000000004f776e6572206f662074686520746f6b656e2063616e206f6e6c79206368616ed3dc2a3a14cbd0cdbf3069fc3927e48506f271b9dda2c21625b93e6a99d3eb53a6ece734f20310c441daec80768668ffd0649e14bbd0ab181cf9ad511b7e60def5298aca000000000000000000000000000000000000000000000000000000009cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f3902000000000000000000000000000000000000000000000000000000000000005472616e73666572206661696c6564000000000000000000000000000000000065d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a020000000000000000000000000000000000002000000000000000000000000062e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2585db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa5061757361626c653a206e6f74207061757365640000000000000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffc9a700000000000000000000000000000000000000000000000000000000cd97756800000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000ecd9e25c81c684765cec4b6e84c99a71427b6f86b89fb7723e47f99327ee572b23682036ee8d01f58fb6bbb8051f4908212c4e08722c71ee4815f984f4ef0055573657220616c7265616479206861732061206163636f756e74000000000000b0cb9d5bac7bb96102c1a0cec12a57e96e86034b9716b99ca2ed9d81e61bb9db6a627842000000000000000000000000000000000000000000000000000000003de21597000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000884fd94f3c64aa94445ca16de702a4754842873f8392d059556c5d1073248477
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b5f84708957e5628c363709ae1d4cb346081fbf6
-----Decoded View---------------
Arg [0] : gameRegistryAddress (address): 0xb5f84708957E5628C363709AE1d4CB346081fbf6
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000b5f84708957e5628c363709ae1d4cb346081fbf6
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.