Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Latest 11 from a total of 11 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Buy Listing | 7743523 | 17 hrs ago | IN | 0.001 ETH | 0.00000566 | ||||
Buy Listing | 7742904 | 17 hrs ago | IN | 0.001 ETH | 0.00000566 | ||||
Create Listing | 7742680 | 17 hrs ago | IN | 0 ETH | 0.00000677 | ||||
Buy Listing | 7741851 | 17 hrs ago | IN | 0.001 ETH | 0.00000595 | ||||
Buy Listing | 7741723 | 18 hrs ago | IN | 0.001 ETH | 0.00000831 | ||||
Buy Listing | 7740529 | 18 hrs ago | IN | 0.001 ETH | 0.00000701 | ||||
Create Listing | 7740330 | 18 hrs ago | IN | 0 ETH | 0.00000816 | ||||
Buy Listing | 7738314 | 19 hrs ago | IN | 0.002 ETH | 0.00000829 | ||||
Create Listing | 7737897 | 20 hrs ago | IN | 0 ETH | 0.00000966 | ||||
Set Signer Addre... | 7737886 | 20 hrs ago | IN | 0 ETH | 0.00000228 | ||||
Set Paused | 7737097 | 21 hrs ago | IN | 0 ETH | 0.00000206 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
7743523 | 17 hrs ago | 0 ETH | ||||
7743523 | 17 hrs ago | 0 ETH | ||||
7743523 | 17 hrs ago | 0 ETH | ||||
7743523 | 17 hrs ago | 0.00005 ETH | ||||
7743523 | 17 hrs ago | 0 ETH | ||||
7743523 | 17 hrs ago | 0 ETH | ||||
7743523 | 17 hrs ago | 0 ETH | ||||
7743523 | 17 hrs ago | 0 ETH | ||||
7743523 | 17 hrs ago | 0.00095 ETH | ||||
7743523 | 17 hrs ago | 0.00095 ETH | ||||
7743523 | 17 hrs ago | 0 ETH | ||||
7743523 | 17 hrs ago | 0 ETH | ||||
7743523 | 17 hrs ago | 0 ETH | ||||
7743523 | 17 hrs ago | 0 ETH | ||||
7743523 | 17 hrs ago | 0 ETH | ||||
7743523 | 17 hrs ago | 0 ETH | ||||
7743523 | 17 hrs ago | 0 ETH | ||||
7743523 | 17 hrs ago | 0 ETH | ||||
7743523 | 17 hrs ago | 0 ETH | ||||
7743523 | 17 hrs ago | 0 ETH | ||||
7743523 | 17 hrs ago | 0 ETH | ||||
7743523 | 17 hrs ago | 0 ETH | ||||
7743523 | 17 hrs ago | 0 ETH | ||||
7743523 | 17 hrs ago | 0 ETH | ||||
7743523 | 17 hrs 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:
ItemMarketSystem
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 "@openzeppelin/contracts/utils/introspection/IERC165.sol"; import "@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import {MANAGER_ROLE, GAME_LOGIC_CONTRACT_ROLE, DEPLOYER_ROLE} from "../constants/RoleConstants.sol"; import {ID_CID, GAME_ITEM_ID_CID, IMPORT_AMOUNT_CID, ETH_MINT_PRICE_CID, ADDRESS_CID, OWNER_CID, UINT256_CID, PLAYER_CID, EXPORT_AMOUNT_CID} from "../constants/ColumnConstants.sol"; uint256 constant ID = uint256(keccak256("game.gigaverse.system.itemmarket")); contract ItemMarketSystem is DataTable { constructor(address gameRegistryAddress) DataTable(gameRegistryAddress, ID) {} // Core purchase event with essential info event Purchase( uint256 indexed purchaseId, uint256 indexed listingId, address indexed buyer, uint256 amount ); // Separate event for listing details (emitted once at listing creation) event ListingCreated( uint256 indexed listingId, uint256 indexed itemId, uint256 amount, uint256 pricePerItem, address indexed owner ); function initialize() external override onlyRole(DEPLOYER_ROLE) { initializeTable("ItemMarkeySystem", ID); _setTableUint256Value(UINT256_CID, 1); } //////////////////// // Public Writes // ////////////////// function createListing(uint256 _itemId, uint256 _amount, uint256 nonce, uint256 _pricePerItem, bytes memory _signature) external whenNotPaused { require(_itemId > 0, "Invalid item id"); require(_amount > 0, "Invalid amount"); require(_pricePerItem > 0, "Invalid price per item"); verifyNonce(msg.sender, nonce); require(verifySignature(msg.sender, _itemId, _amount, nonce, _signature), "Invalid signature"); uint256 listingId = _getAndIncrementAutoIncId(); _setDocUint256Value(listingId, ID_CID, listingId); _setDocUint256Value(listingId, GAME_ITEM_ID_CID, _itemId); _setDocUint256Value(listingId, EXPORT_AMOUNT_CID, _amount); // Original amount _setDocUint256Value(listingId, UINT256_CID, _amount); // Amount left _setDocUint256Value(listingId, ETH_MINT_PRICE_CID, _pricePerItem); _setDocAddressValue(listingId, OWNER_CID, msg.sender); emit ListingCreated(listingId, _itemId, _amount, _pricePerItem, msg.sender); } function buyListing(uint256 _listingId, uint256 _amount) external payable whenNotPaused nonReentrant returns (uint256) { uint256 purchaseId = _handlePurchase(_listingId, _amount); // Handle refund for single purchase uint256 pricePaid = getDocUint256Value(_listingId, ETH_MINT_PRICE_CID) * _amount; if (msg.value > pricePaid) { (bool success, ) = payable(msg.sender).call{value: msg.value - pricePaid}(""); require(success, "Refund failed"); } return purchaseId; } function bulkBuyListing(uint256[] memory _listingIds, uint256[] memory _amounts) external payable whenNotPaused nonReentrant returns (uint256[] memory) { require(_listingIds.length == _amounts.length, "Invalid input"); uint256[] memory purchaseIds = new uint256[](_listingIds.length); // Calculate total cost first uint256 totalCost = 0; for (uint256 i = 0; i < _listingIds.length; i++) { uint256 pricePerItem = getDocUint256Value(_listingIds[i], ETH_MINT_PRICE_CID); totalCost += pricePerItem * _amounts[i]; } require(msg.value >= totalCost, "Insufficient funds"); // Process purchases for (uint256 i = 0; i < _listingIds.length; i++) { purchaseIds[i] = _handlePurchase(_listingIds[i], _amounts[i]); } // Handle refund for bulk purchase if (msg.value > totalCost) { (bool success, ) = payable(msg.sender).call{value: msg.value - totalCost}(""); require(success, "Refund failed"); } return purchaseIds; } //////////////////// // Public Reads /// ////////////////// // Returns (itemId, amount, originalAmount, pricePerItem, owner) function getListing(uint256 _listingId) external view returns (uint256, uint256, uint256, uint256, address) { return (getDocUint256Value(_listingId, GAME_ITEM_ID_CID), getDocUint256Value(_listingId, UINT256_CID), getDocUint256Value(_listingId, EXPORT_AMOUNT_CID), getDocUint256Value(_listingId, ETH_MINT_PRICE_CID), getDocAddressValue(_listingId, OWNER_CID)); } // Returns (listingId, buyer, amount, pricePaid) function getPurchase(uint256 _purchaseId) external view returns (uint256, address, uint256, uint256) { return (getDocUint256Value(_purchaseId, UINT256_CID), getDocAddressValue(_purchaseId, PLAYER_CID), getDocUint256Value(_purchaseId, IMPORT_AMOUNT_CID), getDocUint256Value(_purchaseId, ETH_MINT_PRICE_CID)); } function getRoyaltiesWallet() external view returns (address) { return _getRoyaltiesWallet(); } function getRoyaltiesPercentage() external view returns (uint256) { return _getRoyaltyPercentage(); } function getSignerAddress() public view returns (address) { return getDocAddressValue(_getSignerDocId(), ADDRESS_CID); } function getRoyaltiesAmount(uint256 _price) public view returns (uint256) { return (_price * _getRoyaltyPercentage()) / 10000; } ////////////// // Manager // //////////// function withdraw() external onlyRole(MANAGER_ROLE) { (bool success, ) = payable(msg.sender).call{value: address(this).balance}(""); require(success, "Transfer failed"); } // Royalty percentage represented in basis points (100% = 10000) function setRoyaltyPercentage(uint256 _percentage) external onlyRole(MANAGER_ROLE) { require(_percentage <= 10000, "Invalid percentage"); _setDocUint256Value(_getRoyaltiesDocId(), UINT256_CID, _percentage); } function setRoyaltiesWallet(address _wallet) external onlyRole(MANAGER_ROLE) { _setDocAddressValue(_getRoyaltiesDocId(), OWNER_CID, _wallet); } function setSignerAddress(address _signer) external onlyRole(MANAGER_ROLE) { _setDocAddressValue(_getSignerDocId(), ADDRESS_CID, _signer); } ///////////////////// // Game Contracts // /////////////////// //////////////////////// // Internal Helpers /// ////////////////////// function _handlePurchase(uint256 _listingId, uint256 _amount) internal returns (uint256) { require(_listingId > 0, "Invalid listing id"); require(getDocUint256Value(_listingId, EXPORT_AMOUNT_CID) > 0, "Listing does not exist"); require(getDocUint256Value(_listingId, UINT256_CID) > 0, "Listing supply depleted"); uint256 amountLeft = getDocUint256Value(_listingId, UINT256_CID); require(amountLeft >= _amount, "Not enough items in listing"); address listingWallet = getDocAddressValue(_listingId, OWNER_CID); require(listingWallet != address(0), "Listing wallet not set"); require(listingWallet != msg.sender, "Cannot buy own listing"); uint256 pricePaid = getDocUint256Value(_listingId, ETH_MINT_PRICE_CID) * _amount; require(msg.value >= pricePaid, "Insufficient funds"); _setDocUint256Value(_listingId, UINT256_CID, amountLeft - _amount); uint256 purchaseId = _createPurchaseDoc(msg.sender, _listingId, _amount, pricePaid); _transferFunds(pricePaid, listingWallet); emit Purchase(purchaseId, _listingId, msg.sender, _amount); return purchaseId; } function _transferFunds(uint256 _price, address _owner) internal { // take out royalties to the contract first uint256 royaltyAmount = getRoyaltiesAmount(_price); (bool success, ) = payable(_owner).call{value: _price - royaltyAmount}(""); require(success, "Transfer failed for owner"); (bool success2, ) = payable(_getRoyaltiesWallet()).call{value: royaltyAmount}(""); require(success2, "Transfer failed for royalties"); } function _createPurchaseDoc(address _buyer, uint256 _listingId, uint256 _amount, uint256 _pricePaid) internal returns (uint256) { uint256 purchaseId = _getNextPurchaseId(); _setDocAddressValue(purchaseId, PLAYER_CID, _buyer); _setDocUint256Value(purchaseId, UINT256_CID, _listingId); _setDocUint256Value(purchaseId, ETH_MINT_PRICE_CID, _pricePaid); _setDocUint256Value(purchaseId, IMPORT_AMOUNT_CID, _amount); return purchaseId; } function verifySignature(address lister, uint256 _itemId, uint256 _amount, uint256 _nonce, bytes memory _signature) public view returns (bool) { bytes32 messageHash = keccak256(abi.encodePacked(lister, _itemId, _amount, _nonce)); bytes32 ethSignedMessageHash = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", messageHash)); address signer = getSignerAddress(); require(signer != address(0), "Signer not set"); return SignatureChecker.isValidSignatureNow( signer, ethSignedMessageHash, _signature ); } function _getNextPurchaseId() internal returns (uint256) { uint256 _currentPurchaseId = getTableUint256Value(UINT256_CID); _setTableUint256Value(UINT256_CID, _currentPurchaseId + 1); return uint256(keccak256(abi.encodePacked("purchase", _currentPurchaseId))); } function _getRoyaltyPercentage() internal view returns (uint256) { return getDocUint256Value(_getRoyaltiesDocId(), UINT256_CID); } function _getRoyaltiesWallet() internal view returns (address) { return getDocAddressValue(_getRoyaltiesDocId(), OWNER_CID); } function _getRoyaltiesDocId() internal pure returns (uint256) { return uint256(keccak256(abi.encodePacked("royalties"))); } function verifyNonce(address _player, uint256 _nonce) internal { uint256 playerNonceDocId = uint256(keccak256(abi.encodePacked("nonce", _player, _nonce))); require(getDocUint256Value(playerNonceDocId, UINT256_CID) == 0, "Nonce already used"); _setDocUint256Value(playerNonceDocId, UINT256_CID, 1); } function _getSignerDocId() private pure returns (uint256) { return uint256(keccak256("signer")); } }
// 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); function burnByGameContract(uint256 id) external; }
// 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 mintUsernameByMinterContract(address to, string memory username, bytes memory signature) external returns (uint256); function burnByGameContract(uint256 id) external; }
// 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 // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/SignatureChecker.sol) pragma solidity ^0.8.0; import "./ECDSA.sol"; import "../Address.sol"; import "../../interfaces/IERC1271.sol"; /** * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like * Argent and Gnosis Safe. * * _Available since v4.1._ */ library SignatureChecker { /** * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`. * * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus * change through time. It could return true at block N and false at block N+1 (or the opposite). */ function isValidSignatureNow( address signer, bytes32 hash, bytes memory signature ) internal view returns (bool) { (address recovered, ECDSA.RecoverError error) = ECDSA.tryRecover(hash, signature); if (error == ECDSA.RecoverError.NoError && recovered == signer) { return true; } (bool success, bytes memory result) = signer.staticcall( abi.encodeWithSelector(IERC1271.isValidSignature.selector, hash, signature) ); return (success && result.length == 32 && abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and 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 require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // 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; } }
// 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")); uint256 constant UNLOCKED_CID = uint256(keccak256("unlocked")); uint256 constant FACTION_CID = uint256(keccak256("faction"));
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; }
// 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); function isTradingLocked() 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/security/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 v4.8.0) (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; import "../Strings.sol"; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV // Deprecated in v4.8 } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. /// @solidity memory-safe-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC1271 standard signature validation method for * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271]. * * _Available since v4.1._ */ interface IERC1271 { /** * @dev Should return whether the signature provided is valid for the provided data * @param hash Hash of the data to be signed * @param signature Signature byte array associated with _data */ function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * 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 ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must 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 ERC721 * 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 caller. * * 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 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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol) pragma solidity ^0.8.0; import "./math/Math.sol"; /** * @dev String operations. */ library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv( uint256 x, uint256 y, uint256 denominator ) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv( uint256 x, uint256 y, uint256 denominator, Rounding rounding ) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10**64) { value /= 10**64; result += 64; } if (value >= 10**32) { value /= 10**32; result += 32; } if (value >= 10**16) { value /= 10**16; result += 16; } if (value >= 10**8) { value /= 10**8; result += 8; } if (value >= 10**4) { value /= 10**4; result += 4; } if (value >= 10**2) { value /= 10**2; result += 2; } if (value >= 10**1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0); } } }
{ "viaIR": false, "codegen": "yul", "remappings": [ "@limitbreak/creator-token-standards/=lib/creator-token-standards/", "@openzeppelin/=lib/creator-token-standards/lib/openzeppelin-contracts/", "ds-test/=lib/forge-std/lib/ds-test/src/", "forge-std/=lib/forge-std/src/", "murky/=lib/murky/src/", "erc721a/=lib/ERC721A/", "@creator-token-standards/=lib/creator-token-standards/src/", "@limitbreak/permit-c/=lib/creator-token-standards/lib/PermitC/src/", "@opensea/tstorish/=lib/creator-token-standards/lib/tstorish/src/", "@rari-capital/solmate/=lib/creator-token-standards/lib/PermitC/lib/solmate/", "ERC721A/=lib/ERC721A/contracts/", "PermitC/=lib/creator-token-standards/lib/PermitC/", "creator-token-standards/=lib/creator-token-standards/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "forge-gas-metering/=lib/creator-token-standards/lib/PermitC/lib/forge-gas-metering/", "forge-zksync-std/=lib/forge-zksync-std/src/", "halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "openzeppelin/=lib/creator-token-standards/lib/PermitC/lib/openzeppelin-contracts/contracts/", "solady/=lib/creator-token-standards/lib/PermitC/lib/forge-gas-metering/lib/solady/", "solmate/=lib/creator-token-standards/lib/PermitC/lib/solmate/src/", "tstorish/=lib/creator-token-standards/lib/tstorish/src/" ], "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 }
Contract ABI
API[{"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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"listingId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"itemId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"pricePerItem","type":"uint256"},{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"ListingCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"purchaseId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"listingId","type":"uint256"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Purchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"uint256[]","name":"_listingIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"bulkBuyListing","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_listingId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"buyListing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_itemId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"_pricePerItem","type":"uint256"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"createListing","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":"uint256","name":"_listingId","type":"uint256"}],"name":"getListing","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"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":"uint256","name":"_purchaseId","type":"uint256"}],"name":"getPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"getRoyaltiesAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRoyaltiesPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRoyaltiesWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSignerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"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":"gameRegistryAddress","type":"address"}],"name":"setGameRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"shouldPause","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"setRoyaltiesWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"setRoyaltyPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_signer","type":"address"}],"name":"setSignerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lister","type":"address"},{"internalType":"uint256","name":"_itemId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_nonce","type":"uint256"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"verifySignature","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
9c4d535b000000000000000000000000000000000000000000000000000000000000000001000d0524b015205a765f2c29f57f534cc2d267c0b001b60ebcb03249fffcbc00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000b5f84708957e5628c363709ae1d4cb346081fbf6
Deployed Bytecode
0x000400000000000200080000000000020000000004020019000000000301034f000000600110027000000c650010019d00000c6502100197000300000023035500020000000303550000000100400190000000250000c13d0000008001000039000000400010043f000000040020008c000000480000413d000000000123034f000000000403043b000000e00440027000000c6d0040009c0000004a0000213d00000c870040009c000000670000213d00000c940040009c000000b80000a13d00000c950040009c000001bc0000a13d00000c960040009c000003f60000613d00000c970040009c000003a60000613d00000c980040009c000000480000c13d0000000001000416000000000001004b000000480000c13d318e1e070000040f000001ba0000013d0000000001000416000000000001004b000000480000c13d0000001f0120003900000c66011001970000008001100039000000400010043f0000001f0420018f00000c67052001980000008001500039000000360000613d0000008006000039000000000703034f000000007807043c0000000006860436000000000016004b000000320000c13d000000000004004b000000430000613d000000000353034f0000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000000200020008c000000480000413d000000800100043d00000c680010009c0000008d0000a13d0000000001000019000031900001043000000c6e0040009c000000950000213d00000c7b0040009c000000dc0000a13d00000c7c0040009c000001d50000a13d00000c7d0040009c0000022c0000613d00000c7e0040009c000003c50000613d00000c7f0040009c000000480000c13d000000240020008c000000480000413d0000000001000416000000000001004b000000480000c13d0000000401300370000000000101043b000800000001001d00000c680010009c000000480000213d0000000001000411318e24070000040f318e26d20000040f0000000802000029318e248e0000040f00000000010000190000318f0001042e00000c880040009c000000f70000a13d00000c890040009c000001ee0000a13d00000c8a0040009c000004000000613d00000c8b0040009c0000022c0000613d00000c8c0040009c000000480000c13d000000240020008c000000480000413d0000000001000416000000000001004b000000480000c13d0000000401300370000000000101043b000800000001001d0000000101000039000000000201041a00000ca101000041000000800010043f00000ca201000041000000840010043f000000000100041100000c6801100197000700000001001d000000a40010043f0000000001000414000000080220027000000c6802200197000000040020008c00000bb60000c13d0000000103000031000000200030008c0000002004000039000000000403401900000bdb0000013d0000000102000039000000000020041b000000000001004b000000a90000c13d00000ca501000041000000000010043f00000ca601000041000031900001043000000c6f0040009c000001530000a13d00000c700040009c0000020d0000a13d00000c710040009c0000040e0000613d00000c720040009c000003d80000613d00000c730040009c000000480000c13d0000000001000416000000000001004b000000480000c13d0000000101000039000000000101041a000000080110027000000c6801100197000000800010043f00000ca0010000410000318f0001042e000000000302041a00000c6903300197000000080110021000000c6a01100197000000000131019f00000001011001bf000000000012041b00000c6b010000410000000202000039000000000012041b00000020010000390000010000100443000001200000044300000c6c010000410000318f0001042e00000c9b0040009c0000016e0000213d00000c9e0040009c000002340000613d00000c9f0040009c000000480000c13d000000240020008c000000480000413d0000000001000416000000000001004b000000480000c13d0000000401300370000000000101043b000800000001001d00000c680010009c000000480000213d0000000101000039000000000201041a00000ca101000041000000800010043f00000ca201000041000000840010043f000000000100041100000c6801100197000700000001001d000000a40010043f0000000001000414000000080220027000000c6802200197000000040020008c00000d420000c13d0000000103000031000000200030008c0000002004000039000000000403401900000d670000013d00000c820040009c000001780000213d00000c850040009c0000024f0000613d00000c860040009c000000480000c13d000000240020008c000000480000413d0000000002000416000000000002004b000000480000c13d0000000102000039000000000202041a00000ca903000041000000800030043f00000caa03000041000000840030043f0000000003000414000000080220027000000c6802200197000000040020008c0000078f0000c13d0000000103000031000000200030008c00000020040000390000000004034019000007b40000013d00000c8f0040009c000001910000213d00000c920040009c000002670000613d00000c930040009c000000480000c13d000000a40020008c000000480000413d0000000001000416000000000001004b000000480000c13d0000006401300370000000000101043b000600000001001d0000004401300370000000000101043b000500000001001d0000002401300370000000000101043b000700000001001d0000000401300370000000000101043b000800000001001d0000008401300370000000000401043b00000cae0040009c000000480000213d0000002301400039000000000021004b000000480000813d0000000405400039000000000153034f000000000101043b00000cae0010009c000012970000213d0000001f0710003900000ced077001970000003f0770003900000ced0770019700000cc80070009c000012970000213d0000008007700039000000400070043f000000800010043f00000000041400190000002404400039000000000024004b000000480000213d0000002002500039000000000323034f00000ced041001980000001f0510018f000000a002400039000001330000613d000000a006000039000000000703034f000000007807043c0000000006860436000000000026004b0000012f0000c13d000000000005004b000001400000613d000000000343034f0000000304500210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000320435000000a0011000390000000000010435000000400500043d0000000101000039000000000201041a000000ff00200190000013440000c13d00000cc90100004100000000001504350000000001000414000000080220027000000c6802200197000000040020008c000012320000c13d0000000103000031000000200030008c000000200400003900000000040340190000125f0000013d00000c760040009c000001b10000213d00000c790040009c0000027c0000613d00000c7a0040009c000000480000c13d000000240020008c000000480000413d0000000001000416000000000001004b000000480000c13d0000000101000039000000000201041a00000ca901000041000000800010043f00000caa01000041000000840010043f0000000001000414000000080220027000000c6802200197000000040020008c0000082e0000c13d0000000103000031000000200030008c00000020040000390000000004034019000008530000013d00000c9c0040009c000002970000613d00000c9d0040009c000000480000c13d0000000001000416000000000001004b000000480000c13d318e26d20000040f318e217c0000040f000004070000013d00000c830040009c000002aa0000613d00000c840040009c000000480000c13d0000000001000416000000000001004b000000480000c13d0000000101000039000000000201041a00000ca101000041000000800010043f00000cba01000041000000840010043f0000000001000411000000a40010043f0000000001000414000000080220027000000c6802200197000000040020008c000006aa0000c13d0000000103000031000000200030008c00000020040000390000000004034019000006cf0000013d00000c900040009c000003150000613d00000c910040009c000000480000c13d000000240020008c000000480000413d0000000001000416000000000001004b000000480000c13d0000000401300370000000000101043b000700000001001d318e217c0000040f0000000102000039000000000202041a000000400b00043d00000ca90300004100000000003b04350000000403b0003900000caa0400004100000000004304350000000004000414000000080220027000000c6802200197000000040020008c000600000001001d000008720000c13d0000000103000031000000200030008c000000200400003900000000040340190000089e0000013d00000c770040009c000003300000613d00000c780040009c000000480000c13d0000000001000416000000000001004b000000480000c13d318e26d20000040f318e1d2c0000040f00000c6801100197000004070000013d00000c990040009c000003400000613d00000c9a0040009c000000480000c13d000000240020008c000000480000413d0000000001000416000000000001004b000000480000c13d0000000101000039000000000201041a00000ca901000041000000800010043f00000caa01000041000000840010043f0000000001000414000000080220027000000c6802200197000000040020008c00000ade0000c13d0000000103000031000000200030008c0000002004000039000000000403401900000b030000013d00000c800040009c000003580000613d00000c810040009c000000480000c13d000000240020008c000000480000413d0000000001000416000000000001004b000000480000c13d0000000101000039000000000201041a00000ca901000041000000800010043f00000caa01000041000000840010043f0000000001000414000000080220027000000c6802200197000000040020008c00000b230000c13d0000000103000031000000200030008c0000002004000039000000000403401900000b480000013d00000c8d0040009c000003730000613d00000c8e0040009c000000480000c13d000000a40020008c000000480000413d0000000001000416000000000001004b000000480000c13d0000000401300370000000000101043b000800000001001d00000c680010009c000000480000213d0000008401300370000000000101043b00000cae0010009c000000480000213d0000000401100039318e1cd30000040f00000002020003670000006403200370000000000403043b0000004403200370000000000303043b0000002402200370000000000202043b00000000050100190000000801000029318e1ee10000040f000004040000013d00000c740040009c0000038b0000613d00000c750040009c000000480000c13d000000440020008c000000480000413d0000000001000416000000000001004b000000480000c13d0000002401300370000000000101043b000700000001001d0000000401300370000000000101043b000800000001001d0000000101000039000000000201041a00000ca901000041000000800010043f00000caa01000041000000840010043f0000000001000414000000080220027000000c6802200197000000040020008c00000b6a0000c13d0000000103000031000000200030008c0000002004000039000000000403401900000b8f0000013d0000000001000416000000000001004b000000480000c13d0000000201000039000000000101041a000000800010043f00000ca0010000410000318f0001042e000000440020008c000000480000413d0000000001000416000000000001004b000000480000c13d0000002401300370000000000401043b0000000401300370000000000301043b0000000101000039000000000201041a00000ca901000041000000800010043f00000caa01000041000000840010043f0000000001000414000000080220027000000c6802200197000000040020008c000800000003001d000700000004001d000004de0000c13d0000000103000031000000200030008c00000020040000390000000004034019000005030000013d000000440020008c000000480000413d0000002401300370000000000401043b0000000401300370000000000301043b0000000101000039000000000201041a000000ff00200190000004290000c13d000700000003001d000800000004001d00000cc901000041000000800010043f0000000001000414000000080220027000000c6802200197000000040020008c00000ca10000c13d0000000103000031000000200030008c0000002004000039000000000403401900000cc60000013d000000240020008c000000480000413d0000000002000416000000000002004b000000480000c13d0000000102000039000000000202041a00000ca903000041000000800030043f00000caa03000041000000840030043f0000000003000414000000080220027000000c6802200197000000040020008c0000054c0000c13d0000000103000031000000200030008c00000020040000390000000004034019000005710000013d000000440020008c000000480000413d0000000001000416000000000001004b000000480000c13d0000002401300370000000000401043b0000000401300370000000000301043b0000000101000039000000000201041a00000ca901000041000000800010043f00000caa01000041000000840010043f0000000001000414000000080220027000000c6802200197000000040020008c000800000003001d000700000004001d000005f40000c13d0000000103000031000000200030008c00000020040000390000000004034019000006190000013d0000000002000416000000000002004b000000480000c13d0000000102000039000000000202041a00000ca903000041000000800030043f00000caa03000041000000840030043f0000000003000414000000080220027000000c6802200197000000040020008c000004380000c13d0000000103000031000000200030008c000000200400003900000000040340190000045d0000013d000000440020008c000000480000413d0000000401300370000000000101043b00000cae0010009c000000480000213d0000002304100039000000000024004b000000480000813d0000000404100039000000000443034f000000000504043b00000cae0050009c000012970000213d00000005045002100000003f0640003900000cb40660019700000cc80060009c000012970000213d0000008006600039000000400060043f000000800050043f00000024011000390000000004140019000000000024004b000000480000213d000000000005004b000002ce0000613d0000008005000039000000000613034f000000000606043b000000200550003900000000006504350000002001100039000000000041004b000002c70000413d0000002401300370000000000101043b00000cae0010009c000000480000213d0000002304100039000000000024004b000000000500001900000cb00500804100000cb004400197000000000004004b000000000600001900000cb00600404100000cb00040009c000000000605c019000000000006004b000000480000c13d0000000404100039000000000443034f000000000404043b00000cae0040009c000012970000213d00000005054002100000003f0650003900000cb406600197000000400700043d0000000006670019000300000007001d000000000076004b0000000007000039000000010700403900000cae0060009c000012970000213d0000000100700190000012970000c13d000000400060043f00000003060000290000000006460436000200000006001d00000024011000390000000005150019000000000025004b000000480000213d000000000004004b000003020000613d0000000302000029000000000413034f000000000404043b000000200220003900000000004204350000002001100039000000000051004b000002fb0000413d000000400100043d000800000001001d0000000101000039000000000201041a000000ff00200190000014fb0000c13d00000cc901000041000000080300002900000000001304350000000001000414000000080220027000000c6802200197000000040020008c000013540000c13d0000000103000031000000200030008c000000200400003900000000040340190000137e0000013d000000440020008c000000480000413d0000000001000416000000000001004b000000480000c13d0000002401300370000000000401043b0000000401300370000000000301043b0000000101000039000000000201041a00000ca901000041000000800010043f00000caa01000041000000840010043f0000000001000414000000080220027000000c6802200197000000040020008c000800000003001d000700000004001d000006670000c13d0000000103000031000000200030008c000000200400003900000000040340190000068c0000013d000000240020008c000000480000413d0000000001000416000000000001004b000000480000c13d318e26d20000040f318e217c0000040f00000004020000390000000202200367000000000202043b000000000301001900000000010200190000000002030019318e216e0000040f000027100110011a000004070000013d000000240020008c000000480000413d0000000001000416000000000001004b000000480000c13d0000000401300370000000000101043b000800000001001d0000000101000039000000000201041a00000ca901000041000000800010043f00000caa01000041000000840010043f0000000001000414000000080220027000000c6802200197000000040020008c000009960000c13d0000000103000031000000200030008c00000020040000390000000004034019000009bb0000013d000000440020008c000000480000413d0000000001000416000000000001004b000000480000c13d0000002401300370000000000101043b000700000001001d0000000401300370000000000101043b000800000001001d0000000101000039000000000201041a00000ca901000041000000800010043f00000caa01000041000000840010043f0000000001000414000000080220027000000c6802200197000000040020008c000009f90000c13d0000000103000031000000200030008c0000002004000039000000000403401900000a1e0000013d0000000001000416000000000001004b000000480000c13d0000000103000039000000000203041a00000ca101000041000000800010043f00000ca201000041000000840010043f000000000100041100000c6804100197000000a40040043f0000000001000414000000080220027000000c6802200197000000040020008c000700000003001d000800000004001d000006e60000c13d0000000103000031000000200030008c000000200400003900000000040340190000070b0000013d000000440020008c000000480000413d0000000002000416000000000002004b000000480000c13d0000002402300370000000000202043b000700000002001d0000000402300370000000000202043b000800000002001d0000000102000039000000000202041a00000ca903000041000000800030043f00000caa03000041000000840030043f0000000003000414000000080220027000000c6802200197000000040020008c00000a3d0000c13d0000000103000031000000200030008c0000002004000039000000000403401900000a620000013d000000240020008c000000480000413d0000000001000416000000000001004b000000480000c13d0000000401300370000000000201043b000000000002004b0000000001000039000000010100c039000800000002001d000000000012004b000000480000c13d0000000101000039000000000201041a00000ca101000041000000800010043f00000ce601000041000000840010043f0000000001000411000000a40010043f0000000001000414000000080220027000000c6802200197000000040020008c00000e120000c13d0000000103000031000000200030008c0000002004000039000000000403401900000e370000013d0000000001000416000000000001004b000000480000c13d0000000101000039000000000201041a00000ca901000041000000800010043f00000caa01000041000000840010043f0000000001000414000000080220027000000c6802200197000000040020008c0000071d0000c13d0000000103000031000000200030008c00000020040000390000000004034019000007420000013d000000240020008c000000480000413d0000000001000416000000000001004b000000480000c13d0000000401300370000000000101043b000800000001001d00000c680010009c000000480000213d0000000101000039000000000201041a00000ca101000041000000800010043f00000ca201000041000000840010043f000000000100041100000c6801100197000700000001001d000000a40010043f0000000001000414000000080220027000000c6802200197000000040020008c00000e4d0000c13d0000000103000031000000200030008c0000002004000039000000000403401900000e720000013d000000240020008c000000480000413d0000000001000416000000000001004b000000480000c13d0000000401300370000000000101043b00000c680010009c000000480000213d000002310000013d0000000001000416000000000001004b000000480000c13d318e20f60000040f000000000001004b0000000001000039000000010100c039000000400200043d000000000012043500000c650020009c00000c6502008041000000400120021000000cb2011001c70000318f0001042e000000440020008c000000480000413d0000000002000416000000000002004b000000480000c13d0000002402300370000000000502043b0000000402300370000000000402043b0000000102000039000000000202041a00000ca903000041000000800030043f00000caa03000041000000840030043f0000000003000414000000080220027000000c6802200197000000040020008c000800000004001d000700000005001d00000bf70000c13d0000000103000031000000200030008c0000002004000039000000000403401900000c1c0000013d0000008001000039000000440210003900000cca03000041000000000032043500000024021000390000001003000039000000000032043500000ccb020000410000000000210435000000040210003900000020030000390000000000320435000000400110021000000cad011001c7000031900001043000000c650030009c00000c6503008041000000c00130021000000cab011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf0000044c0000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b000004480000c13d000000000006004b000004590000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000ce20000613d0000001f02400039000000600420018f00000080024001bf000800000002001d000000400020043f000000200030008c000000480000413d000000800200043d00000c680020009c000000480000213d0000000205000039000000000505041a00000cac06000041000000080a00002900000000006a043500000084064001bf0000000000560435000000c40540003900000cc3060000410000000000650435000000a40440003900000000000404350000000004000414000000040020008c000004840000613d0000004001a0021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cad011001c7318e31890000040f000000600310027000010c650030019d00000c650330019700030000000103550000000100200190000010f50000613d000000080a00002900000ced053001980000001f0630018f00000000045a00190000048e0000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000048004b0000048a0000c13d000000000006004b0000049b0000613d000000000151034f0000000305600210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000001f0130003900000ced041001970000000001a40019000000000041004b0000000004000039000000010400403900000cae0010009c000012970000213d0000000100400190000012970000c13d000000400010043f00000caf0030009c000000480000213d000000200030008c000000480000413d0000000804000029000000000404043300000cae0040009c000000480000213d000000080630002900000008034000290000001f04300039000000000064004b000000000500001900000cb00500804100000cb00440019700000cb007600197000000000874013f000000000074004b000000000400001900000cb00400404100000cb00080009c000000000405c019000000000004004b000000480000c13d000000004303043400000cae0030009c000012970000213d0000001f0530003900000ced055001970000003f0550003900000ced05500197000000000515001900000cae0050009c000012970000213d000000400050043f00000000053104360000000007430019000000000067004b000000480000213d00000ced063001970000001f0230018f000000000054004b000013b50000813d000000000006004b00000c9d0000613d00000000082400190000000007250019000000200770008a000000200880008a0000000009670019000000000a680019000000000a0a04330000000000a90435000000200660008c000004d70000c13d00000c9d0000013d00000c650010009c00000c6501008041000000c00110021000000cab011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000004f20000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b000004ee0000c13d000000000006004b000004ff0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000cee0000613d0000001f01400039000000600110018f00000080021001bf000600000002001d000000400020043f000000200030008c000000480000413d000000800200043d00000c680020009c000000480000213d0000000203000039000000000303041a00000cb5040000410000000605000029000000000045043500000084041001bf0000000000340435000000c40310003900000007040000290000000000430435000000a403100039000000080400002900000000004304350000000003000414000000040020008c00000ba90000613d00000c650030009c00000c6503008041000000c0013002100000004003500210000000000131019f00000cad011001c7318e31890000040f000000060b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000005340000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000005300000c13d000000000006004b000005410000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000011010000613d0000001f01400039000000600110018f0000000001b10019000000400010043f000000200030008c000000480000413d00000bab0000013d00000c650030009c00000c6503008041000000c00130021000000cab011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000005600000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b0000055c0000c13d000000000006004b0000056d0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000cfa0000613d0000001f02400039000000600420018f00000080024001bf000800000002001d000000400020043f000000200030008c000000480000413d000000800200043d00000c680020009c000000480000213d0000000205000039000000000505041a00000cac06000041000000080a00002900000000006a043500000084064001bf0000000000560435000000a405400039000000000005043500000004050000390000000205500367000000000505043b000000c40440003900000000005404350000000004000414000000040020008c0000059a0000613d0000004001a0021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cad011001c7318e31890000040f000000600310027000010c650030019d00000c6503300197000300000001035500000001002001900000110d0000613d000000080a00002900000ced053001980000001f0630018f00000000045a0019000005a40000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000048004b000005a00000c13d000000000006004b000005b10000613d000000000151034f0000000305600210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000001f0130003900000ced041001970000000001a40019000000000041004b0000000004000039000000010400403900000cae0010009c000012970000213d0000000100400190000012970000c13d000000400010043f00000caf0030009c000000480000213d000000200030008c000000480000413d0000000804000029000000000404043300000cae0040009c000000480000213d000000080630002900000008034000290000001f04300039000000000064004b000000000500001900000cb00500804100000cb00440019700000cb007600197000000000874013f000000000074004b000000000400001900000cb00400404100000cb00080009c000000000405c019000000000004004b000000480000c13d000000004303043400000cae0030009c000012970000213d0000001f0530003900000ced055001970000003f0550003900000ced05500197000000000515001900000cae0050009c000012970000213d000000400050043f00000000053104360000000007430019000000000067004b000000480000213d00000ced063001970000001f0230018f000000000054004b000013bf0000813d000000000006004b00000c9d0000613d00000000082400190000000007250019000000200770008a000000200880008a0000000009670019000000000a680019000000000a0a04330000000000a90435000000200660008c000005ed0000c13d00000c9d0000013d00000c650010009c00000c6501008041000000c00110021000000cab011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000006080000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b000006040000c13d000000000006004b000006150000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000d060000613d0000001f01400039000000600110018f00000080021001bf000600000002001d000000400020043f000000200030008c000000480000413d000000800200043d00000c680020009c000000480000213d0000000203000039000000000303041a00000cb6040000410000000605000029000000000045043500000084041001bf0000000000340435000000c40310003900000007040000290000000000430435000000a403100039000000080400002900000000004304350000000003000414000000040020008c00000ba90000613d00000c650030009c00000c6503008041000000c0013002100000004003500210000000000131019f00000cad011001c7318e31890000040f000000060b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b00190000064a0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000006460000c13d000000000006004b000006570000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000010ee0000c13d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000006620000c13d000014e70000013d00000c650010009c00000c6501008041000000c00110021000000cab011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf0000067b0000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b000006770000c13d000000000006004b000006880000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000d120000613d0000001f01400039000000600110018f00000080021001bf000600000002001d000000400020043f000000200030008c000000480000413d000000800200043d00000c680020009c000000480000213d0000000203000039000000000303041a00000cb7040000410000000605000029000000000045043500000084041001bf0000000000340435000000c40310003900000007040000290000000000430435000000a403100039000000080400002900000000004304350000000003000414000000040020008c00000ef40000c13d0000000001150019000000400010043f000000060200002900000b660000013d00000c650010009c00000c6501008041000000c00110021000000ca3011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000006be0000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b000006ba0000c13d000000000006004b000006cb0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000d1e0000613d0000001f01400039000000600110018f00000080021001bf000800000002001d000000400020043f000000200030008c000000480000413d000000800200043d000000000002004b0000000004000039000000010400c039000000000042004b000000480000c13d000000000002004b00000f230000c13d00000ca701000041000000000010043f0000000001000411000000040010043f00000cba01000041000000240010043f00000ca801000041000031900001043000000c650010009c00000c6501008041000000c00110021000000ca3011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000006fa0000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b000006f60000c13d000000000006004b000007070000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000d2a0000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200030008c000000480000413d000000800100043d000000000001004b0000000002000039000000010200c039000000000021004b000000480000c13d000000000001004b00000fc70000c13d00000ca701000041000000000010043f000000080100002900000e830000013d00000c650010009c00000c6501008041000000c00110021000000cab011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000007310000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b0000072d0000c13d000000000006004b0000073e0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000d360000613d0000001f01400039000000600110018f00000080021001bf000800000002001d000000400020043f000000200030008c000000480000413d000000800200043d00000c680020009c000000480000213d0000000203000039000000000303041a00000cb7040000410000000805000029000000000045043500000084041001bf0000000000340435000000c40310003900000cb8040000410000000000430435000000a40310003900000000000304350000000003000414000000040020008c00000b630000613d00000c650030009c00000c6503008041000000c0013002100000004003500210000000000131019f00000cad011001c7318e31890000040f000000080b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000007720000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b0000076e0000c13d000000000006004b0000077f0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000010bf0000c13d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000078a0000c13d000014e70000013d00000c650030009c00000c6503008041000000c00130021000000cab011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000007a30000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b0000079f0000c13d000000000006004b000007b00000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000dca0000613d0000001f02400039000000600420018f00000080024001bf000800000002001d000000400020043f000000200030008c000000480000413d000000800200043d00000c680020009c000000480000213d0000000205000039000000000505041a00000cb306000041000000080a00002900000000006a043500000084064001bf0000000000560435000000a405400039000000000005043500000004050000390000000205500367000000000505043b000000c40440003900000000005404350000000004000414000000040020008c000007dd0000613d0000004001a0021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cad011001c7318e31890000040f000000600310027000010c650030019d00000c650330019700030000000103550000000100200190000011290000613d000000080a00002900000ced053001980000001f0630018f00000000045a0019000007e70000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000048004b000007e30000c13d000000000006004b000007f40000613d000000000151034f0000000305600210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000001f0130003900000ced011001970000000002a10019000000000012004b0000000001000039000000010100403900000cae0020009c000012970000213d0000000100100190000012970000c13d000000400020043f00000caf0030009c000000480000213d000000200030008c000000480000413d0000000801000029000000000101043300000cae0010009c000000480000213d000000080330002900000008011000290000001f04100039000000000034004b000000000500001900000cb00500804100000cb00440019700000cb006300197000000000764013f000000000064004b000000000400001900000cb00400404100000cb00070009c000000000405c019000000000004004b000000480000c13d000000001501043400000cae0050009c000012970000213d00000005045002100000003f0640003900000cb406600197000000000626001900000cae0060009c000012970000213d000000400060043f00000000005204350000000004140019000000000034004b000000480000213d000000000005004b00000ada0000613d0000000003020019000000200330003900000000150104340000000000530435000000000041004b000008280000413d00000ada0000013d00000c650010009c00000c6501008041000000c00110021000000cab011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000008420000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b0000083e0000c13d000000000006004b0000084f0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000dd60000613d0000001f01400039000000600110018f00000080021001bf000800000002001d000000400020043f000000200030008c000000480000413d000000800200043d00000c680020009c000000480000213d0000000203000039000000000303041a00000cb5040000410000000805000029000000000045043500000084041001bf0000000000340435000000a403100039000000000003043500000004030000390000000203300367000000000303043b000000c40410003900000000003404350000000003000414000000040020008c00000fdb0000c13d0000000001150019000000400010043f000000080200002900000bac0000013d00000c6500b0009c00000c650300004100000000030b4019000000400330021000000c650040009c00000c6504008041000000c001400210000000000131019f00000cbd011001c700080000000b001d318e31890000040f000000080b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b00190000088d0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000008890000c13d000000000006004b0000089a0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000de20000613d0000001f01400039000000600110018f0000000004b10019000000000014004b00000000020000390000000102004039000800000004001d00000cae0040009c000012970000213d0000000100200190000012970000c13d0000000802000029000000400020043f000000200030008c000000480000413d00000000020b043300000c680020009c000000480000213d0000000204000039000000000404041a000000080b0000290000004405b0003900000cd70600004100000000006504350000002405b000390000000706000029000000000065043500000cb70500004100000000005b04350000000405b0003900000000004504350000000004000414000000040020008c000008ed0000613d00000c6500b0009c00000c650100004100000000010b4019000000400110021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cad011001c7318e31890000040f000000080b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000008da0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000008d60000c13d000000000006004b000008e70000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000012260000613d0000001f01400039000000600110018f0000000002b10019000500000002001d00000cae0020009c000012970000213d0000000502000029000000400020043f000000200030008c000000480000413d00000008020000290000000002020433000800000002001d00000c680020009c000000480000213d0000000102000039000000000202041a00000ca90400004100000005050000290000000000450435000000040450003900000caa0500004100000000005404350000000004000414000000080220027000000c6802200197000000040020008c000009330000613d000000050100002900000c650010009c00000c6501008041000000400110021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cbd011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000505700029000009200000613d000000000801034f0000000509000029000000008a08043c0000000009a90436000000000059004b0000091c0000c13d000000000006004b0000092d0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000013370000613d0000001f01400039000000600110018f0000000502100029000400000002001d00000cae0020009c000012970000213d0000000402000029000000400020043f000000200030008c000000480000413d0000000502000029000000000202043300000c680020009c000000480000213d0000000204000039000000000404041a0000000407000029000000440570003900000cd806000041000000000065043500000024057000390000000706000029000000000065043500000cb9050000410000000000570435000000040570003900000000004504350000000004000414000000040020008c0000097b0000613d000000040100002900000c650010009c00000c6501008041000000400110021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cad011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000405700029000009680000613d000000000801034f0000000409000029000000008a08043c0000000009a90436000000000059004b000009640000c13d000000000006004b000009750000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000014110000613d0000001f01400039000000600110018f000000040110002900000cae0010009c000012970000213d000000400010043f000000200030008c000000480000413d00000004010000290000000001010433000500000001001d0000000701000029318e232e0000040f000000400200043d000000200320003900000008040000290000000000430435000000400320003900000005040000290000000000430435000000600320003900000000001304350000000601000029000000000012043500000c650020009c00000c6502008041000000400120021000000cd9011001c70000318f0001042e00000c650010009c00000c6501008041000000c00110021000000cab011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000009aa0000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b000009a60000c13d000000000006004b000009b70000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000dee0000613d0000001f01400039000000600110018f00000080021001bf000700000002001d000000400020043f000000200030008c000000480000413d000000800200043d00000c680020009c000000480000213d0000000203000039000000000303041a00000cb9040000410000000705000029000000000045043500000084041001bf0000000000340435000000c40310003900000cde040000410000000000430435000000a403100039000000080400002900000000004304350000000003000414000000040020008c0000100a0000c13d0000000001150019000000400010043f00000007010000290000000001010433000700000001001d0000000801000029318e217c0000040f000600000001001d0000000801000029318e22550000040f000500000001001d0000000801000029318e232e0000040f000400000001001d0000000801000029318e1d2c0000040f000000400200043d00000020032000390000000604000029000000000043043500000040032000390000000504000029000000000043043500000060032000390000000404000029000000000043043500000c6801100197000000800320003900000000001304350000000701000029000000000012043500000c650020009c00000c6502008041000000400120021000000ceb011001c70000318f0001042e00000c650010009c00000c6501008041000000c00110021000000cab011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf00000a0d0000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b00000a090000c13d000000000006004b00000a1a0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000dfa0000613d0000001f01400039000000600110018f00000080021001bf000600000002001d000000400020043f000000200030008c000000480000413d000000800200043d00000c680020009c000000480000213d0000000203000039000000000303041a00000cb9040000410000000605000029000000000045043500000084041001bf0000000000340435000000c40310003900000007040000290000000000430435000000a403100039000000080400002900000000004304350000000003000414000000040020008c000010390000c13d0000000001150019000000400010043f0000000602000029000000000202043300000bb20000013d00000c650030009c00000c6503008041000000c00130021000000cab011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf00000a510000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b00000a4d0000c13d000000000006004b00000a5e0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000e060000613d0000001f02400039000000600420018f00000080024001bf000600000002001d000000400020043f000000200030008c000000480000413d000000800200043d00000c680020009c000000480000213d0000000205000039000000000505041a00000cb306000041000000060a00002900000000006a043500000084064001bf0000000000560435000000c40540003900000007060000290000000000650435000000a404400039000000080500002900000000005404350000000004000414000000040020008c00000a8a0000613d0000004001a0021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cad011001c7318e31890000040f000000600310027000010c650030019d00000c650330019700030000000103550000000100200190000011350000613d000000060a00002900000ced053001980000001f0630018f00000000045a001900000a940000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000048004b00000a900000c13d000000000006004b00000aa10000613d000000000151034f0000000305600210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000001f0130003900000ced011001970000000002a10019000000000012004b0000000001000039000000010100403900000cae0020009c000012970000213d0000000100100190000012970000c13d000000400020043f00000caf0030009c000000480000213d000000200030008c000000480000413d0000000601000029000000000101043300000cae0010009c000000480000213d000000060330002900000006011000290000001f04100039000000000034004b000000000500001900000cb00500804100000cb00440019700000cb006300197000000000764013f000000000064004b000000000400001900000cb00400404100000cb00070009c000000000405c019000000000004004b000000480000c13d000000001501043400000cae0050009c000012970000213d00000005045002100000003f0640003900000cb406600197000000000626001900000cae0060009c000012970000213d000000400060043f00000000005204350000000004140019000000000034004b000000480000213d000000000005004b00000ada0000613d0000000003020019000000200330003900000000150104340000000000530435000000000041004b00000ad50000413d000000400100043d000800000001001d318e1d1d0000040f000013e60000013d00000c650010009c00000c6501008041000000c00110021000000cab011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf00000af20000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b00000aee0000c13d000000000006004b00000aff0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000e880000613d0000001f01400039000000600110018f00000080021001bf000800000002001d000000400020043f000000200030008c000000480000413d000000800200043d00000c680020009c000000480000213d0000000203000039000000000303041a00000cb9040000410000000805000029000000000045043500000084041001bf0000000000340435000000a403100039000000000003043500000004030000390000000203300367000000000303043b000000c40410003900000000003404350000000003000414000000040020008c000010680000c13d0000000001150019000000400010043f0000000802000029000000000202043300000bb20000013d00000c650010009c00000c6501008041000000c00110021000000cab011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf00000b370000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b00000b330000c13d000000000006004b00000b440000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000e940000613d0000001f01400039000000600110018f00000080021001bf000800000002001d000000400020043f000000200030008c000000480000413d000000800200043d00000c680020009c000000480000213d0000000203000039000000000303041a00000cb7040000410000000805000029000000000045043500000084041001bf0000000000340435000000a403100039000000000003043500000004030000390000000203300367000000000303043b000000c40410003900000000003404350000000003000414000000040020008c000010970000c13d0000000001150019000000400010043f0000000802000029000000000202043300000c680020009c000000480000213d00000bb20000013d00000c650010009c00000c6501008041000000c00110021000000cab011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf00000b7e0000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b00000b7a0000c13d000000000006004b00000b8b0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000ea00000613d0000001f01400039000000600110018f00000080021001bf000600000002001d000000400020043f000000200030008c000000480000413d000000800200043d00000c680020009c000000480000213d0000000203000039000000000303041a00000cb1040000410000000605000029000000000045043500000084041001bf0000000000340435000000c40310003900000007040000290000000000430435000000a403100039000000080400002900000000004304350000000003000414000000040020008c000010c60000c13d0000000001150019000000400010043f00000006020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b000000480000c13d0000000000210435000000400110021000000cb2011001c70000318f0001042e00000c650010009c00000c6501008041000000c00110021000000ca3011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf00000bca0000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b00000bc60000c13d000000000006004b00000bd70000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000eac0000613d0000001f01400039000000600210018f00000080012001bf000000400010043f000000200030008c000000480000413d000000800300043d000000000003004b0000000004000039000000010400c039000000000043004b000000480000c13d000000000003004b00000e800000613d0000000803000029000027110030008c000011a90000413d00000ccb03000041000000000031043500000084032001bf00000020040000390000000000430435000000c40320003900000cd4040000410000000000430435000000a4022000390000001203000039000004340000013d00000c650030009c00000c6503008041000000c00130021000000cab011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf00000c0b0000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b00000c070000c13d000000000006004b00000c180000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000eb80000613d0000001f02400039000000600420018f00000080024001bf000600000002001d000000400020043f000000200030008c000000480000413d000000800200043d00000c680020009c000000480000213d0000000205000039000000000505041a00000cac06000041000000060a00002900000000006a043500000084064001bf0000000000560435000000c40540003900000007060000290000000000650435000000a404400039000000080500002900000000005404350000000004000414000000040020008c00000c440000613d0000004001a0021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cad011001c7318e31890000040f000000600310027000010c650030019d00000c650330019700030000000103550000000100200190000011ae0000613d000000060a00002900000ced053001980000001f0630018f00000000045a001900000c4e0000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000048004b00000c4a0000c13d000000000006004b00000c5b0000613d000000000151034f0000000305600210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000001f0130003900000ced041001970000000001a40019000000000041004b0000000004000039000000010400403900000cae0010009c000012970000213d0000000100400190000012970000c13d000000400010043f00000caf0030009c000000480000213d000000200030008c000000480000413d0000000604000029000000000404043300000cae0040009c000000480000213d000000060630002900000006034000290000001f04300039000000000064004b000000000500001900000cb00500804100000cb00440019700000cb007600197000000000874013f000000000074004b000000000400001900000cb00400404100000cb00080009c000000000405c019000000000004004b000000480000c13d000000004303043400000cae0030009c000012970000213d0000001f0530003900000ced055001970000003f0550003900000ced05500197000000000515001900000cae0050009c000012970000213d000000400050043f00000000053104360000000007430019000000000067004b000000480000213d00000ced063001970000001f0230018f000000000054004b000013c90000813d000000000006004b00000c9d0000613d00000000082400190000000007250019000000200770008a000000200880008a0000000009670019000000000a680019000000000a0a04330000000000a90435000000200660008c00000c970000c13d000000000002004b000013df0000613d0000000007050019000013d50000013d00000c650010009c00000c6501008041000000c00110021000000cd3011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf00000cb50000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b00000cb10000c13d000000000006004b00000cc20000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000ec40000613d0000001f01400039000000600210018f00000080012001bf000000400010043f000000200030008c000000480000413d000000800300043d000000000003004b0000000004000039000000010400c039000000000043004b000000480000c13d000000000003004b0000042a0000c13d000000000300041a000000020030008c000011ba0000c13d00000ccb03000041000000000031043500000084032001bf00000020040000390000000000430435000000c40320003900000cd2040000410000000000430435000000a4022000390000001f03000039000004340000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000ce90000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000cf50000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000d010000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000d0d0000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000d190000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000d250000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000d310000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000d3d0000c13d000014e70000013d00000c650010009c00000c6501008041000000c00110021000000ca3011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf00000d560000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b00000d520000c13d000000000006004b00000d630000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000ed00000613d0000001f01400039000000600110018f00000080021001bf000600000002001d000000400020043f000000200030008c000000480000413d000000800200043d000000000002004b0000000004000039000000010400c039000000000042004b000000480000c13d000000000002004b00000e800000613d0000000102000039000000000202041a00000ca9040000410000000605000029000000000045043500000084011001bf00000caa0400004100000000004104350000000001000414000000080220027000000c6802200197000000040020008c000011d90000c13d000000200030008c00000020030080390000001f01300039000000600110018f0000000001510019000000400010043f00000006010000290000000001010433000700000001001d00000c680010009c000000480000213d0000000201000039000000000101041a000600000001001d00000cbe01000041000000000010044300000007010000290000000400100443000000000100041400000c650010009c00000c6501008041000000c00110021000000cbf011001c70000800202000039318e31890000040f000000010020019000001c750000613d000000000101043b000000000001004b000000480000613d000000400300043d000000640130003900000008020000290000000000210435000000440130003900000cc0020000410000000000210435000000240130003900000cec02000041000000000021043500000cc1010000410000000000130435000800000003001d00000004013000390000000602000029000000000021043500000000010004140000000702000029000000040020008c00000dc50000613d000000080200002900000c650020009c00000c6502008041000000400220021000000c650010009c00000c6501008041000000c001100210000000000121019f00000cc2011001c70000000702000029318e31840000040f000000600310027000010c650030019d00030000000103550000000100200190000013a00000613d00000008010000290000000002000019318e1cc10000040f00000000010000190000318f0001042e0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000dd10000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000ddd0000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000de90000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000df50000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000e010000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000e0d0000c13d000014e70000013d00000c650010009c00000c6501008041000000c00110021000000ca3011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf00000e260000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b00000e220000c13d000000000006004b00000e330000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000edc0000613d0000001f01400039000000600210018f00000080012001bf000000400010043f000000200030008c000000480000413d000000800300043d000000000003004b0000000004000039000000010400c039000000000043004b000000480000c13d000000000003004b000011650000c13d00000ca701000041000000000010043f0000000001000411000000040010043f00000ce601000041000000240010043f00000ca801000041000031900001043000000c650010009c00000c6501008041000000c00110021000000ca3011001c7318e31890000040f000000800a000039000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf00000e610000613d000000000801034f000000008908043c000000000a9a043600000000005a004b00000e5d0000c13d000000000006004b00000e6e0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000ee80000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200030008c000000480000413d000000800100043d000000000001004b0000000002000039000000010200c039000000000021004b000000480000c13d000000000001004b0000117a0000c13d00000ca701000041000000000010043f0000000701000029000000040010043f00000ca201000041000000240010043f00000ca80100004100003190000104300000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000e8f0000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000e9b0000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000ea70000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000eb30000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000ebf0000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000ecb0000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000ed70000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000ee30000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000eef0000c13d000014e70000013d00000c650030009c00000c6503008041000000c0013002100000004003500210000000000131019f00000cad011001c7318e31890000040f000000060b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900000f0b0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00000f070000c13d000000000006004b00000f180000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000011190000613d0000001f01400039000000600110018f0000000001b10019000000400010043f000000200030008c000006a80000813d000000480000013d000000c002100039000000400020043f000000100200003900000008040000290000000000240435000000a00410003900000cbb0200004100000000002404350000000302000039000000000202041a000000ff00200190000011250000c13d000700000004001d0000000102000039000000000202041a000000400b00043d00000ca90400004100000000004b04350000000404b0003900000caa0500004100000000005404350000000004000414000000080220027000000c6802200197000000040020008c00000f6b0000613d00000c6500b0009c00000c650100004100000000010b4019000000400110021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cbd011001c700060000000b001d318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000060b000029000000060570002900000f580000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00000f540000c13d000000000006004b00000f650000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000012790000613d0000001f01400039000000600110018f0000000002b10019000000000012004b0000000001000039000000010100403900000cae0020009c000012970000213d0000000100100190000012970000c13d000000400020043f000000200030008c000000480000413d00000000010b0433000600000001001d00000c680010009c000000480000213d0000000201000039000000000101041a000500000001001d00000cbe01000041000000000010044300000006010000290000000400100443000000000100041400000c650010009c00000c6501008041000000c00110021000000cbf011001c70000800202000039318e31890000040f000000010020019000001c750000613d000000000101043b000000000001004b000000480000613d000000400300043d000000640130003900000000020004100000000000210435000000440130003900000cc002000041000000000021043500000cc10100004100000000001304350000000401300039000300000001001d00000005020000290000000000210435000400000003001d0000002401300039000000000001043500000000010004140000000602000029000000040020008c00000fb10000613d000000040200002900000c650020009c00000c6502008041000000400220021000000c650010009c00000c6501008041000000c001100210000000000121019f00000cc2011001c70000000602000029318e31840000040f000000600310027000010c650030019d00030000000103550000000100200190000014040000613d000000040100002900000cae0010009c000012970000213d0000000403000029000000400030043f0000000101000039000000000201041a00000ca901000041000000000013043500000caa01000041000000030300002900000000001304350000000001000414000000080220027000000c6802200197000000040020008c0000141d0000c13d0000000103000031000000200030008c00000020040000390000000004034019000014470000013d00000cd501000041000000000010044300000000010004100000000400100443000000000100041400000c650010009c00000c6501008041000000c00110021000000cbf011001c70000800a02000039318e31890000040f000000010020019000001c750000613d000000000301043b00000000010004140000000004000411000000040040008c000011d20000c13d00000001010000310000128e0000013d00000c650030009c00000c6503008041000000c0013002100000004003500210000000000131019f00000cad011001c7318e31890000040f000000080b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900000ff20000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00000fee0000c13d000000000006004b00000fff0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000011410000613d0000001f01400039000000600110018f0000000001b10019000000400010043f000000200030008c000008700000813d000000480000013d00000c650030009c00000c6503008041000000c0013002100000004003500210000000000131019f00000cad011001c7318e31890000040f000000070b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000010210000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b0000101d0000c13d000000000006004b0000102e0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f000300000001035500000001002001900000114d0000613d0000001f01400039000000600110018f0000000001b10019000000400010043f000000200030008c000000480000413d000009d70000013d00000c650030009c00000c6503008041000000c0013002100000004003500210000000000131019f00000cad011001c7318e31890000040f000000060b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000010500000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b0000104c0000c13d000000000006004b0000105d0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000011590000613d0000001f01400039000000600110018f0000000001b10019000000400010043f000000200030008c00000a3a0000813d000000480000013d00000c650030009c00000c6503008041000000c0013002100000004003500210000000000131019f00000cad011001c7318e31890000040f000000080b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b00190000107f0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b0000107b0000c13d000000000006004b0000108c0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000011850000613d0000001f01400039000000600110018f0000000001b10019000000400010043f000000200030008c000000480000413d00000b200000013d00000c650030009c00000c6503008041000000c0013002100000004003500210000000000131019f00000cad011001c7318e31890000040f000000080b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000010ae0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000010aa0000c13d000000000006004b000010bb0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000011910000613d0000001f01400039000000600110018f0000000001b10019000000400010043f000000200030008c00000b650000813d000000480000013d00000c650030009c00000c6503008041000000c0013002100000004003500210000000000131019f00000cad011001c7318e31890000040f000000060b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000010dd0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000010d90000c13d000000000006004b000010ea0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f000300000001035500000001002001900000119d0000613d0000001f01400039000000600110018f0000000001b10019000000400010043f000000200030008c00000bab0000813d000000480000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000010fc0000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000011080000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000011140000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000011200000c13d000014e70000013d00000cbc01000041000000000010043f00000ca60100004100003190000104300000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000011300000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000113c0000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000011480000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000011540000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000011600000c13d000014e70000013d0000000103000039000000000503041a000000ff0450018f000000080000006b000012070000c13d000000000004004b0000121b0000613d00000cee02500197000000000023041b000000000200041100000000002104350000004001100210000000000200041400000c650020009c00000c6502008041000000c002200210000000000112019f00000ce7011001c70000800d0200003900000ce904000041000012170000013d0000000803000029000000080130021000000c6a011001970000000104000039000000000204041a00000ca402200197000000000112019f000000000014041b000000000003004b000000910000613d000012930000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000118c0000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000011980000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000011a40000c13d000014e70000013d318e26d20000040f0000000802000029318e25500000040f00000000010000190000318f0001042e0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000011b50000c13d000014e70000013d0000000201000039000000000010041b00000007010000290000000802000029318e26f70000040f000600000001001d0000000701000029318e232e0000040f00000008021000b9000000000001004b000011c80000613d00000000011200d9000000080010006c000018ec0000c13d0000000001000416000000000321004b000013040000a13d00000000010004140000000004000411000000040040008c000012ed0000c13d00000001010000310000000102000039000012f90000013d00000c650010009c00000c6501008041000000c001100210000000000003004b000012850000c13d0000000002040019000012880000013d00000c650010009c00000c6501008041000000c0011002100000004003500210000000000131019f00000cbd011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000605700029000011ef0000613d000000000801034f0000000609000029000000008a08043c0000000009a90436000000000059004b000011eb0000c13d000000000006004b000011fc0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000012d50000613d0000001f01400039000000600110018f0000000601100029000000400010043f000000200030008c000000480000413d00000d890000013d000000000004004b0000121b0000c13d00000cee0250019700000001022001bf000000000023041b000000000200041100000000002104350000004001100210000000000200041400000c650020009c00000c6502008041000000c002200210000000000112019f00000ce7011001c70000800d0200003900000ce804000041318e31840000040f0000000100200190000000480000613d000012930000013d00000ccb03000041000000000031043500000084032001bf00000020040000390000000000430435000000c40320003900000cea040000410000000000430435000000a4022000390000001403000039000004340000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000122d0000c13d000014e70000013d00000c650050009c00000c65030000410000000003054019000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000ca6011001c7000400000005001d318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000040b00002900000004057000290000124d0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000012490000c13d000000000006004b0000125a0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000012e10000613d00000000050b00190000001f01400039000000600210018f0000000001520019000000000021004b0000000002000039000000010200403900000cae0010009c000012970000213d0000000100200190000012970000c13d000000400010043f000000200030008c000000480000413d0000000002050433000000000002004b0000000003000039000000010300c039000000000032004b000000480000c13d000000000002004b000013430000c13d000000080000006b000013ad0000c13d000000440210003900000ce503000041000012a00000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000012800000c13d000014e70000013d00000cd0011001c700008009020000390000000005000019318e31840000040f000700000002001d0003000000010355000000600110027000010c650010019d00000c6501100197000000000001004b000012950000c13d000000070100002900000001001001900000129d0000613d00000000010000190000318f0001042e00000cae0010009c000012ae0000a13d00000cce01000041000000000010043f0000004101000039000000040010043f00000cbd010000410000319000010430000000400100043d000000440210003900000cd603000041000000000032043500000024021000390000000f03000039000000000032043500000ccb02000041000000000021043500000004021000390000002003000039000000000032043500000c650010009c00000c6501008041000000400110021000000cad011001c700003190000104300000001f0310003900000ced033001970000003f0330003900000ced04300197000000400300043d0000000004430019000000000034004b0000000005000039000000010500403900000cae0040009c000012970000213d0000000100500190000012970000c13d000000400040043f000000000513043600000ced021001980000001f0310018f00000000012500190000000304000367000012c70000613d000000000604034f000000006706043c0000000005750436000000000015004b000012c30000c13d000000000003004b000012900000613d000000000224034f0000000303300210000000000401043300000000043401cf000000000434022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000242019f0000000000210435000012900000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000012dc0000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000012e80000c13d000014e70000013d00000c650010009c00000c6501008041000000c00110021000000cd0011001c700008009020000390000000005000019318e31840000040f000000010220018f0003000000010355000000600110027000010c650010019d00000c6501100197000000000001004b0000130e0000c13d000000000002004b000013040000c13d000000400100043d000000440210003900000cd103000041000000000032043500000024021000390000000d03000039000012a30000013d0000000101000039000000000010041b000000400100043d0000000602000029000000000021043500000c650010009c00000c6501008041000000400110021000000cb2011001c70000318f0001042e00000cae0010009c000012970000213d0000001f0410003900000ced044001970000003f0440003900000ced05400197000000400400043d0000000005540019000000000045004b0000000006000039000000010600403900000cae0050009c000012970000213d0000000100600190000012970000c13d000000400050043f000000000614043600000ced031001980000001f0410018f00000000013600190000000305000367000013290000613d000000000705034f000000007807043c0000000006860436000000000016004b000013250000c13d000000000004004b000012fb0000613d000000000335034f0000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000012fb0000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000133e0000c13d000014e70000013d0000000005010019000000440150003900000cca02000041000000000021043500000024015000390000001002000039000000000021043500000ccb01000041000000000015043500000004015000390000002002000039000000000021043500000c650050009c00000c6505008041000000400150021000000cad011001c70000319000010430000000080300002900000c650030009c00000c6503008041000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000ca6011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000008057000290000136d0000613d000000000801034f0000000809000029000000008a08043c0000000009a90436000000000059004b000013690000c13d000000000006004b0000137a0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000013f00000613d0000001f01400039000000600110018f0000000802100029000000000012004b00000000010000390000000101004039000100000002001d00000cae0020009c000012970000213d0000000100100190000012970000c13d0000000101000029000000400010043f000000200030008c000000480000413d00000008010000290000000001010433000000000001004b0000000002000039000000010200c039000000000021004b000000480000c13d000000000001004b000014fa0000c13d000000000100041a000000020010008c0000150c0000c13d0000000103000029000000440130003900000cd202000041000000000021043500000024013000390000001f02000039000015010000013d00000c65033001970000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000013a80000c13d000014e70000013d000000070000006b000013fc0000c13d000000440210003900000ce403000041000000000032043500000024021000390000000e03000039000012a30000013d0000000007650019000000000006004b000013d20000613d00000000080400190000000009050019000000008a0804340000000009a90436000000000079004b000013ba0000c13d000013d20000013d0000000007650019000000000006004b000013d20000613d00000000080400190000000009050019000000008a0804340000000009a90436000000000079004b000013c40000c13d000013d20000013d0000000007650019000000000006004b000013d20000613d00000000080400190000000009050019000000008a0804340000000009a90436000000000079004b000013ce0000c13d000000000002004b000013df0000613d00000000046400190000000302200210000000000607043300000000062601cf000000000626022f00000000040404330000010002200089000000000424022f00000000022401cf000000000262019f0000000000270435000000000253001900000000000204350000002002000039000000400300043d000800000003001d0000000002230436318e1c8f0000040f0000000802000029000000000121004900000c650010009c00000c6501008041000000600110021000000c650020009c00000c65020080410000004002200210000000000121019f0000318f0001042e0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000013f70000c13d000014e70000013d000000060000006b000014a10000c13d000000440210003900000ce303000041000000000032043500000024021000390000001603000039000012a30000013d00000c65033001970000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000140c0000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000014180000c13d000014e70000013d000000040300002900000c650030009c00000c6503008041000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000405700029000014360000613d000000000801034f0000000409000029000000008a08043c0000000009a90436000000000059004b000014320000c13d000000000006004b000014430000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000014dc0000613d0000001f01400039000000600110018f000000040110002900000cae0010009c000012970000213d000000400010043f000000200030008c000000480000413d00000004010000290000000001010433000600000001001d00000c680010009c000000480000213d0000000201000039000000000101041a000500000001001d00000cbe01000041000000000010044300000006010000290000000400100443000000000100041400000c650010009c00000c6501008041000000c00110021000000cbf011001c70000800202000039318e31890000040f000000010020019000001c750000613d000000000101043b000000000001004b000000480000613d000000400300043d000000640130003900000000020004110000000000210435000000440130003900000cb802000041000000000021043500000cc10100004100000000001304350000000401300039000300000001001d00000005020000290000000000210435000400000003001d0000002401300039000000000001043500000000010004140000000602000029000000040020008c0000148b0000613d000000040200002900000c650020009c00000c6502008041000000400220021000000c650010009c00000c6501008041000000c001100210000000000121019f00000cc2011001c70000000602000029318e31840000040f000000600310027000010c650030019d00030000000103550000000100200190000016aa0000613d000000040100002900000cae0010009c000012970000213d0000000403000029000000400030043f0000000101000039000000000201041a00000ca901000041000000000013043500000caa01000041000000030300002900000000001304350000000001000414000000080220027000000c6802200197000000040020008c000016b70000c13d0000000103000031000000200030008c00000020040000390000000004034019000016e10000013d000000200210003900000cda03000041000000000032043500000000030004110000006003300210000000250410003900000000003404350000003903100039000000050400002900000000004304350000003903000039000000000031043500000cdb0010009c000012970000213d0000006003100039000000400030043f00000c650020009c00000c65020080410000004002200210000000000101043300000c650010009c00000c65010080410000006001100210000000000121019f000000000200041400000c650020009c00000c6502008041000000c002200210000000000112019f00000cd0011001c70000801002000039318e31890000040f0000000100200190000000480000613d000000000101043b000300000001001d318e217c0000040f000000400200043d000400000002001d0000000402200039000000000001004b000015390000c13d0000000101000039000000000301041a00000ca9010000410000000404000029000000000014043500000caa0100004100000000001204350000000001000414000000080230027000000c6802200197000000040020008c0000154b0000c13d0000000103000031000000200030008c00000020040000390000000004034019000015750000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000014e30000c13d000000000005004b000014f40000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000c650020009c00000c65020080410000004002200210000000000112019f0000319000010430000800010000002d0000000803000029000000440130003900000cca02000041000000000021043500000024013000390000001002000039000000000021043500000ccb01000041000000000013043500000004013000390000002002000039000000000021043500000c650030009c00000c6503008041000000400130021000000cad011001c700003190000104300000000201000039000000000010041b00000003010000290000000002010433000000800100043d000000000021004b000015440000c13d00000cae0010009c000012970000213d00000005041002100000003f0240003900000cb402200197000000010220002900000cae0020009c000012970000213d000000400020043f000000010200002900000000021204360000001f0140018f000000000004004b000015280000613d000000000442001900000000050000310000000205500367000000005605043c0000000002620436000000000042004b000015240000c13d000000000001004b000000800100043d000000000001004b000015e50000c13d0000000001000416000500000001001d000700000000001d0000000502000029000000070320006c0000172a0000a13d00000000010004140000000004000411000000040040008c000017380000c13d00000001010000310000000102000039000017440000013d00000ccb010000410000000403000029000000000013043500000020010000390000000000120435000000440130003900000cdc02000041000000000021043500000024013000390000001202000039000015060000013d0000000103000029000000440130003900000ccc02000041000000000021043500000024013000390000000d02000039000015010000013d000000040300002900000c650030009c00000c6503008041000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000405700029000015640000613d000000000801034f0000000409000029000000008a08043c0000000009a90436000000000059004b000015600000c13d000000000006004b000015710000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000015d90000613d0000001f01400039000000600210018f0000000401200029000000000021004b0000000002000039000000010200403900000cae0010009c000012970000213d0000000100200190000012970000c13d000000400010043f000000200030008c000000480000413d00000004010000290000000001010433000400000001001d00000c680010009c000000480000213d0000000201000039000000000101041a000200000001001d00000cbe01000041000000000010044300000004010000290000000400100443000000000100041400000c650010009c00000c6501008041000000c00110021000000cbf011001c70000800202000039318e31890000040f000000010020019000001c750000613d000000000101043b000000000001004b000000480000613d000000400300043d000000640130003900000001020000390000000000210435000000440130003900000cc702000041000000000021043500000024013000390000000302000029000000000021043500000cc6010000410000000000130435000300000003001d00000004013000390000000202000029000000000021043500000000010004140000000402000029000000040020008c000015be0000613d000000030200002900000c650020009c00000c6502008041000000400220021000000c650010009c00000c6501008041000000c001100210000000000121019f00000cc2011001c70000000402000029318e31840000040f000000600310027000010c650030019d00030000000103550000000100200190000017b60000613d000000030100002900000cae0010009c000012970000213d0000000301000029000000400010043f00000080050000390000000001000411000000080200002900000007030000290000000504000029318e1ee10000040f000000400200043d000500000002001d0000000402200039000000000001004b000017c30000c13d00000ccb010000410000000503000029000000000013043500000020010000390000000000120435000000440130003900000ce202000041000000000021043500000024013000390000001102000039000015060000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000015e00000c13d000014e70000013d000000400a00043d00000000060000190000000005000019000700000005001d000500000006001d0000000501600210000400000001001d000000a0011000390000000001010433000600000001001d0000000101000039000000000201041a00000ca90100004100000000001a04350000000401a0003900000caa0400004100000000004104350000000001000414000000080220027000000c6802200197000000040020008c0000002004000039000016270000613d00000c6500a0009c00000c650300004100000000030a4019000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c700080000000a001d318e31890000040f000000080a000029000000600310027000000c6503300197000000200030008c00000020040000390000000004034019000000200640019000000000056a0019000016160000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000058004b000016120000c13d0000001f07400190000016230000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000100000003001f000300000001035500000001002001900000177b0000613d0000001f01400039000000600110018f0000000005a10019000000000015004b00000000020000390000000102004039000800000005001d00000cae0050009c000012970000213d0000000100200190000012970000c13d0000000802000029000000400020043f000000200030008c000000480000413d00000000020a043300000c680020009c000000480000213d0000000204000039000000000404041a000000080a0000290000004405a0003900000ccd0600004100000000006504350000002405a000390000000606000029000000000065043500000cb90500004100000000005a04350000000405a0003900000000004504350000000004000414000000040020008c000016750000613d00000c6500a0009c00000c650100004100000000010a4019000000400110021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cad011001c7318e31890000040f000000080a000029000000600310027000000c6503300197000000200030008c00000020040000390000000004034019000000200640019000000000056a0019000016620000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000058004b0000165e0000c13d0000001f074001900000166f0000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000017870000613d0000001f01400039000000600110018f0000000001a1001900000cae0010009c000012970000213d0000000007010019000000400010043f000000200030008c000000480000413d000000030100002900000000010104330000000506000029000000000061004b000017b00000a13d0000000801000029000000000201043300000004040000290000000201400029000000000401043300000000012400a9000000000002004b0000000705000029000000000a0700190000168e0000613d00000000022100d9000000000042004b000018ec0000c13d000000000051001a000018ec0000413d00000000055100190000000106600039000000800100043d000000000016004b000015e80000413d0000000002000416000700000005001d000500000002001d000000000052004b000017930000813d000000440170003900000ccf02000041000000000021043500000024017000390000001202000039000000000021043500000ccb01000041000000000017043500000004017000390000002002000039000000000021043500000c650070009c00000c6507008041000000400170021000000cad011001c7000031900001043000000c65033001970000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000016b20000c13d000014e70000013d000000040300002900000c650030009c00000c6503008041000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000405700029000016d00000613d000000000801034f0000000409000029000000008a08043c0000000009a90436000000000059004b000016cc0000c13d000000000006004b000016dd0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f000300000001035500000001002001900000172c0000613d0000001f01400039000000600110018f000000040110002900000cae0010009c000012970000213d000000400010043f000000200030008c000000480000413d00000004010000290000000001010433000600000001001d00000c680010009c000000480000213d0000000201000039000000000101041a000500000001001d00000cbe01000041000000000010044300000006010000290000000400100443000000000100041400000c650010009c00000c6501008041000000c00110021000000cbf011001c70000800202000039318e31890000040f000000010020019000001c750000613d000000000101043b000000000001004b000000480000613d000000400300043d000000640130003900000080020000390000000000210435000000440130003900000cc302000041000000000021043500000cc40100004100000000001304350000000401300039000300000001001d0000000502000029000000000021043500000024013000390000000000010435000000080100002900000000010104330000008402300039000000000012043500000ced051001970000001f0410018f000400000003001d000000a403300039000000070030006b000018f20000813d000000000005004b000017260000613d00000007074000290000000006430019000000200660008a000000200770008a0000000008560019000000000957001900000000090904330000000000980435000000200550008c000017200000c13d000000000004004b000019090000613d0000000006030019000018fe0000013d000000400300043d0000174c0000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000017330000c13d000014e70000013d00000c650010009c00000c6501008041000000c00110021000000cd0011001c700008009020000390000000005000019318e31840000040f000000010220018f0003000000010355000000600110027000010c650010019d00000c6501100197000000000001004b000017520000c13d000000400300043d000000000002004b0000174c0000c13d000000440130003900000cd102000041000015470000013d0000000101000039000000000010041b0000000001030019000800000003001d000000010200002900000adc0000013d00000cae0010009c000012970000213d0000001f0410003900000ced044001970000003f0440003900000ced05400197000000400400043d0000000005540019000000000045004b0000000006000039000000010600403900000cae0050009c000012970000213d0000000100600190000012970000c13d000000400050043f000000000614043600000ced031001980000001f0410018f000000000136001900000003050003670000176d0000613d000000000705034f000000007807043c0000000006860436000000000016004b000017690000c13d000000000004004b000017460000613d000000000335034f0000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000017460000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000017820000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000178e0000c13d000014e70000013d000000000001004b0000152f0000613d000000000300001900000003010000290000000001010433000000000031004b000017b00000a13d00000005013002100000002004100039000600000004001d00000003024000290000000002020433000000a0011000390000000001010433000800000003001d318e26f70000040f000000080300002900000001020000290000000002020433000000000032004b000017b00000a13d0000000604000029000000010240002900000000001204350000000103300039000000800100043d000000000013004b000017960000413d0000152f0000013d00000cce01000041000000000010043f0000003201000039000000040010043f00000cbd01000041000031900001043000000c65033001970000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000017be0000c13d000014e70000013d0000000101000039000000000301041a00000ca9010000410000000504000029000000000014043500000caa0100004100000000001204350000000001000414000000080230027000000c6802200197000000040020008c000017d40000c13d0000000103000031000000200030008c00000020040000390000000004034019000017fe0000013d000000050300002900000c650030009c00000c6503008041000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000505700029000017ed0000613d000000000801034f0000000509000029000000008a08043c0000000009a90436000000000059004b000017e90000c13d000000000006004b000017fa0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f000300000001035500000001002001900000193b0000613d0000001f01400039000000600110018f0000000504100029000000000014004b00000000020000390000000102004039000400000004001d00000cae0040009c000012970000213d0000000100200190000012970000c13d0000000402000029000000400020043f000000200030008c000000480000413d0000000502000029000000000202043300000c680020009c000000480000213d0000000204000039000000000404041a0000000407000029000000440570003900000cdd06000041000000000065043500000cb905000041000000000057043500000004057000390000000000450435000000240470003900000000000404350000000004000414000000040020008c0000184c0000613d000000040100002900000c650010009c00000c6501008041000000400110021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cad011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000405700029000018390000613d000000000801034f0000000409000029000000008a08043c0000000009a90436000000000059004b000018350000c13d000000000006004b000018460000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000019e90000613d0000001f01400039000000600110018f0000000402100029000500000002001d00000cae0020009c000012970000213d0000000502000029000000400020043f000000200030008c000000480000413d00000004020000290000000002020433000400000002001d000000010020003a000018ec0000413d0000000102000039000000000202041a00000ca90400004100000005050000290000000000450435000000040450003900000caa0500004100000000005404350000000004000414000000080220027000000c6802200197000000040020008c000018920000613d000000050100002900000c650010009c00000c6501008041000000400110021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cbd011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000005057000290000187f0000613d000000000801034f0000000509000029000000008a08043c0000000009a90436000000000059004b0000187b0000c13d000000000006004b0000188c0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000019f50000613d0000001f01400039000000600110018f000000050110002900000cae0010009c000012970000213d000000400010043f000000200030008c000000480000413d00000005010000290000000001010433000500000001001d00000c680010009c000000480000213d0000000201000039000000000101041a000300000001001d00000cbe01000041000000000010044300000005010000290000000400100443000000000100041400000c650010009c00000c6501008041000000c00110021000000cbf011001c70000800202000039318e31890000040f000000010020019000001c750000613d000000000101043b000000000001004b000000480000613d00000004010000290000000102100039000000400300043d0000006401300039000200000002001d0000000000210435000000440130003900000cdd02000041000000000021043500000cc60100004100000000001304350000000401300039000100000001001d00000003020000290000000000210435000400000003001d0000002401300039000000000001043500000000010004140000000502000029000000040020008c000018d60000613d000000040200002900000c650020009c00000c6502008041000000400220021000000c650010009c00000c6501008041000000c001100210000000000121019f00000cc2011001c70000000502000029318e31840000040f000000600310027000010c650030019d0003000000010355000000010020019000001a8e0000613d000000040100002900000cae0010009c000012970000213d0000000403000029000000400030043f0000000101000039000000000201041a00000ca901000041000000000013043500000caa01000041000000010300002900000000001304350000000001000414000000080220027000000c6802200197000000040020008c00001a9b0000c13d0000000103000031000000200030008c0000002004000039000000000403401900001ac50000013d00000cce01000041000000000010043f0000001101000039000000040010043f00000cbd0100004100003190000104300000000006530019000000000005004b000018fb0000613d0000000707000029000000000803001900000000790704340000000008980436000000000068004b000018f70000c13d000000000004004b000019090000613d000700070050002d0000000304400210000000000506043300000000054501cf000000000545022f000000070700002900000000070704330000010004400089000000000747022f00000000044701cf000000000454019f00000000004604350000000003310019000000000003043500000000030004140000000604000029000000040040008c000019250000613d0000001f0110003900000ced01100197000000a40110003900000c650010009c00000c65010080410000006001100210000000040200002900000c650020009c00000c65020080410000004002200210000000000121019f00000c650030009c00000c6503008041000000c002300210000000000112019f0000000602000029318e31840000040f000000600310027000010c650030019d00030000000103550000000100200190000019470000613d000000040100002900000cae0010009c000012970000213d0000000403000029000000400030043f0000000101000039000000000201041a00000ca901000041000000000013043500000caa01000041000000030300002900000000001304350000000001000414000000080220027000000c6802200197000000040020008c000019540000c13d0000000103000031000000200030008c000000200400003900000000040340190000197e0000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000019420000c13d000014e70000013d00000c65033001970000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000194f0000c13d000014e70000013d000000040300002900000c650030009c00000c6503008041000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000004057000290000196d0000613d000000000801034f0000000409000029000000008a08043c0000000009a90436000000000059004b000019690000c13d000000000006004b0000197a0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000019dd0000613d0000001f01400039000000600110018f000000040110002900000cae0010009c000012970000213d000000400010043f000000200030008c000000480000413d00000004010000290000000001010433000800000001001d00000c680010009c000000480000213d0000000201000039000000000101041a000700000001001d00000cbe01000041000000000010044300000008010000290000000400100443000000000100041400000c650010009c00000c6501008041000000c00110021000000cbf011001c70000800202000039318e31890000040f000000010020019000001c750000613d000000000101043b000000000001004b000000480000613d000000400300043d000000640130003900000c6b020000410000000000210435000000440130003900000cc502000041000000000021043500000cc60100004100000000001304350000000401300039000500000001001d00000007020000290000000000210435000600000003001d0000002401300039000000000001043500000000010004140000000802000029000000040020008c000019c20000613d000000060200002900000c650020009c00000c6502008041000000400220021000000c650010009c00000c6501008041000000c001100210000000000121019f00000cc2011001c70000000802000029318e31840000040f000000600310027000010c650030019d0003000000010355000000010020019000001a010000613d000000060100002900000cae0010009c000012970000213d0000000604000029000000400040043f0000000303000039000000000103041a00000cee0110019700000001011001bf000000000013041b0000000101000039000000000201041a00000ca901000041000000000014043500000caa01000041000000050300002900000000001304350000000001000414000000080220027000000c6802200197000000040020008c00001a0e0000c13d0000000103000031000000200030008c0000002004000039000000000403401900001a380000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000019e40000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000019f00000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000019fc0000c13d000014e70000013d00000c65033001970000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001a090000c13d000014e70000013d000000060300002900000c650030009c00000c6503008041000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000060570002900001a270000613d000000000801034f0000000609000029000000008a08043c0000000009a90436000000000059004b00001a230000c13d000000000006004b00001a340000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000001a820000613d0000001f01400039000000600110018f000000060110002900000cae0010009c000012970000213d000000400010043f000000200030008c000000480000413d00000006010000290000000001010433000800000001001d00000c680010009c000000480000213d0000000201000039000000000101041a000700000001001d00000cbe01000041000000000010044300000008010000290000000400100443000000000100041400000c650010009c00000c6501008041000000c00110021000000cbf011001c70000800202000039318e31890000040f000000010020019000001c750000613d000000000101043b000000000001004b000000480000613d000000400300043d000000640130003900000001020000390000000000210435000000440130003900000cc702000041000000000021043500000cc6010000410000000000130435000000040130003900000007020000290000000000210435000700000003001d0000002401300039000000000001043500000000010004140000000802000029000000040020008c00001a7b0000613d000000070200002900000c650020009c00000c6502008041000000400220021000000c650010009c00000c6501008041000000c001100210000000000121019f00000cc2011001c70000000802000029318e31840000040f000000600310027000010c650030019d0003000000010355000000010020019000001b1f0000613d000000070100002900000cae0010009c000012970000213d0000000701000029000000400010043f00000000010000190000318f0001042e0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001a890000c13d000014e70000013d00000c65033001970000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001a960000c13d000014e70000013d000000040300002900000c650030009c00000c6503008041000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000040570002900001ab40000613d000000000801034f0000000409000029000000008a08043c0000000009a90436000000000059004b00001ab00000c13d000000000006004b00001ac10000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000001b2c0000613d0000001f01400039000000600110018f000000040110002900000cae0010009c000012970000213d000000400010043f000000200030008c000000480000413d00000004010000290000000001010433000400000001001d00000c680010009c000000480000213d0000000201000039000000000101041a000100000001001d00000cbe01000041000000000010044300000004010000290000000400100443000000000100041400000c650010009c00000c6501008041000000c00110021000000cbf011001c70000800202000039318e31890000040f000000010020019000001c750000613d000000000101043b000000000001004b000000480000613d000000400300043d000000440130003900000cc50200004100000000002104350000006401300039000000020200002900000000002104350000002401300039000000000021043500000cc6010000410000000000130435000500000003001d0000000401300039000300000001001d0000000102000029000000000021043500000000010004140000000402000029000000040020008c00001b090000613d000000050200002900000c650020009c00000c6502008041000000400220021000000c650010009c00000c6501008041000000c001100210000000000121019f00000cc2011001c70000000402000029318e31840000040f000000600310027000010c650030019d0003000000010355000000010020019000001b380000613d000000050100002900000cae0010009c000012970000213d0000000503000029000000400030043f0000000101000039000000000201041a00000ca901000041000000000013043500000caa01000041000000030300002900000000001304350000000001000414000000080220027000000c6802200197000000040020008c00001b450000c13d0000000103000031000000200030008c0000002004000039000000000403401900001b6f0000013d00000c65033001970000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001b270000c13d000014e70000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001b330000c13d000014e70000013d00000c65033001970000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001b400000c13d000014e70000013d000000050300002900000c650030009c00000c6503008041000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000050570002900001b5e0000613d000000000801034f0000000509000029000000008a08043c0000000009a90436000000000059004b00001b5a0000c13d000000000006004b00001b6b0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000001bca0000613d0000001f01400039000000600110018f000000050110002900000cae0010009c000012970000213d000000400010043f000000200030008c000000480000413d00000005010000290000000001010433000400000001001d00000c680010009c000000480000213d0000000201000039000000000101041a000100000001001d00000cbe01000041000000000010044300000004010000290000000400100443000000000100041400000c650010009c00000c6501008041000000c00110021000000cbf011001c70000800202000039318e31890000040f000000010020019000001c750000613d000000000101043b000000000001004b000000480000613d000000400300043d000000640130003900000008020000290000000000210435000000440130003900000cde02000041000000000021043500000024013000390000000202000029000000000021043500000cc6010000410000000000130435000500000003001d0000000401300039000300000001001d0000000102000029000000000021043500000000010004140000000402000029000000040020008c00001bb40000613d000000050200002900000c650020009c00000c6502008041000000400220021000000c650010009c00000c6501008041000000c001100210000000000121019f00000cc2011001c70000000402000029318e31840000040f000000600310027000010c650030019d0003000000010355000000010020019000001bd60000613d000000050100002900000cae0010009c000012970000213d0000000503000029000000400030043f0000000101000039000000000201041a00000ca901000041000000000013043500000caa01000041000000030300002900000000001304350000000001000414000000080220027000000c6802200197000000040020008c00001be30000c13d0000000103000031000000200030008c0000002004000039000000000403401900001c0d0000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001bd10000c13d000014e70000013d00000c65033001970000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001bde0000c13d000014e70000013d000000050300002900000c650030009c00000c6503008041000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c7318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000050570002900001bfc0000613d000000000801034f0000000509000029000000008a08043c0000000009a90436000000000059004b00001bf80000c13d000000000006004b00001c090000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000001c760000613d0000001f01400039000000600110018f000000050110002900000cae0010009c000012970000213d000000400010043f000000200030008c000000480000413d00000005010000290000000001010433000500000001001d00000c680010009c000000480000213d0000000201000039000000000101041a000300000001001d00000cbe01000041000000000010044300000005010000290000000400100443000000000100041400000c650010009c00000c6501008041000000c00110021000000cbf011001c70000800202000039318e31890000040f000000010020019000001c750000613d000000000101043b000000000001004b000000480000613d000000400300043d000000640130003900000007020000290000000000210435000000440130003900000cdf02000041000000000021043500000024013000390000000202000029000000000021043500000cc6010000410000000000130435000400000003001d00000004013000390000000302000029000000000021043500000000010004140000000502000029000000040020008c00001c510000613d000000040200002900000c650020009c00000c6502008041000000400220021000000c650010009c00000c6501008041000000c001100210000000000121019f00000cc2011001c70000000502000029318e31840000040f000000600310027000010c650030019d0003000000010355000000010020019000001c820000613d000000040100002900000cae0010009c000012970000213d0000000401000029000000400010043f00000002010000290000000702000029318e25500000040f00000002010000290000000602000029318e26110000040f00000002010000290000000002000411318e248e0000040f000000400100043d0000002002100039000000060300002900000000003204350000000702000029000000000021043500000c650010009c00000c65010080410000004001100210000000000200041400000c650020009c00000c6502008041000000c002200210000000000112019f00000ce0011001c70000800d02000039000000040300003900000ce104000041000000020500002900000008060000290000000007000411000012170000013d000000000001042f0000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001c7d0000c13d000014e70000013d00000c65033001970000001f0530018f00000c6706300198000000400200043d0000000004620019000014e70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001c8a0000c13d000014e70000013d0000000043010434000000000132043600000ced063001970000001f0530018f000000000014004b00001ca50000813d000000000006004b00001ca10000613d00000000085400190000000007510019000000200770008a000000200880008a0000000009670019000000000a680019000000000a0a04330000000000a90435000000200660008c00001c9b0000c13d000000000005004b00001cbb0000613d000000000701001900001cb10000013d0000000007610019000000000006004b00001cae0000613d00000000080400190000000009010019000000008a0804340000000009a90436000000000079004b00001caa0000c13d000000000005004b00001cbb0000613d00000000046400190000000305500210000000000607043300000000065601cf000000000656022f00000000040404330000010005500089000000000454022f00000000045401cf000000000464019f0000000000470435000000000431001900000000000404350000001f0330003900000ced023001970000000001210019000000000001042d0000001f0220003900000ced022001970000000001120019000000000021004b0000000002000039000000010200403900000cae0010009c00001ccd0000213d000000010020019000001ccd0000c13d000000400010043f000000000001042d00000cce01000041000000000010043f0000004101000039000000040010043f00000cbd01000041000031900001043000000000030100190000001f01100039000000000021004b000000000400001900000cb00400404100000cb00520019700000cb001100197000000000651013f000000000051004b000000000100001900000cb00100204100000cb00060009c000000000104c019000000000001004b00001d1b0000613d0000000206000367000000000136034f000000000401043b00000cef0040009c00001d150000813d0000001f0140003900000ced011001970000003f0110003900000ced05100197000000400100043d0000000005510019000000000015004b0000000008000039000000010800403900000cae0050009c00001d150000213d000000010080019000001d150000c13d000000400050043f000000000541043600000020033000390000000008430019000000000028004b00001d1b0000213d000000000336034f00000ced064001980000001f0740018f000000000265001900001d050000613d000000000803034f0000000009050019000000008a08043c0000000009a90436000000000029004b00001d010000c13d000000000007004b00001d120000613d000000000363034f0000000306700210000000000702043300000000076701cf000000000767022f000000000303043b0000010006600089000000000363022f00000000036301cf000000000373019f000000000032043500000000024500190000000000020435000000000001042d00000cce01000041000000000010043f0000004101000039000000040010043f00000cbd0100004100003190000104300000000001000019000031900001043000000020030000390000000004310436000000000302043300000000003404350000004001100039000000000003004b00001d2b0000613d00000000040000190000002002200039000000000502043300000000015104360000000104400039000000000034004b00001d250000413d000000000001042d00020000000000020000000102000039000000000202041a000000400c00043d00000ca90300004100000000003c04350000000404c0003900000caa0300004100000000003404350000000004000414000000080220027000000c6802200197000000040020008c00001d3f0000c13d0000000103000031000000200030008c0000002004000039000000000403401900001d6d0000013d000100000001001d00000c6500c0009c00000c650300004100000000030c4019000000400330021000000c650040009c00000c6504008041000000c001400210000000000131019f00000cbd011001c700020000000c001d318e31890000040f000000020c000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057c001900001d5b0000613d000000000801034f00000000090c0019000000008a08043c0000000009a90436000000000059004b00001d570000c13d000000000006004b00001d680000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000001dcb0000613d00000001010000290000001f02400039000000600720018f000000000bc7001900000000007b004b0000000002000039000000010200403900000cae00b0009c00001dc50000213d000000010020019000001dc50000c13d0000004000b0043f0000001f0030008c00001dc30000a13d00000000020c043300000c680020009c00001dc30000213d0000000204000039000000000404041a0000004405b0003900000cb80600004100000000006504350000002405b00039000000000015043500000cb70500004100000000005b04350000000405b0003900000000004504350000000004000414000000040020008c00001db90000613d00000c6500b0009c00000c650100004100000000010b4019000000400110021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cad011001c700020000000b001d318e31890000040f000000020b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900001da60000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00001da20000c13d000000000006004b00001db30000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000001de90000613d0000001f01400039000000600710018f0000000001b7001900000cae0010009c00001dc50000213d000000400010043f000000200030008c00001dc30000413d00000000010b043300000c680010009c00001dc30000213d000000000001042d0000000001000019000031900001043000000cce01000041000000000010043f0000004101000039000000040010043f00000cbd0100004100003190000104300000001f0530018f00000c6706300198000000400200043d000000000462001900001dd60000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001dd20000c13d000000000005004b00001de30000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000c650020009c00000c65020080410000004002200210000000000112019f00003190000104300000001f0530018f00000c6706300198000000400200043d000000000462001900001df40000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001df00000c13d000000000005004b00001e010000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000c650020009c00000c65020080410000004002200210000000000121019f000031900001043000010000000000020000000101000039000000000201041a000000400c00043d00000ca90100004100000000001c04350000000401c0003900000caa0300004100000000003104350000000001000414000000080220027000000c6802200197000000040020008c00001e1a0000c13d0000000103000031000000200030008c0000002004000039000000000403401900001e460000013d00000c6500c0009c00000c650300004100000000030c4019000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c700010000000c001d318e31890000040f000000010c000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057c001900001e350000613d000000000801034f00000000090c0019000000008a08043c0000000009a90436000000000059004b00001e310000c13d000000000006004b00001e420000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000001ea50000613d0000001f01400039000000600110018f000000000bc1001900000000001b004b0000000002000039000000010200403900000cae00b0009c00001e9f0000213d000000010020019000001e9f0000c13d0000004000b0043f0000001f0030008c00001e9d0000a13d00000000020c043300000c680020009c00001e9d0000213d0000000204000039000000000404041a0000004405b0003900000cc00600004100000000006504350000002405b0003900000cec06000041000000000065043500000cb70500004100000000005b04350000000405b0003900000000004504350000000004000414000000040020008c00001e930000613d00000c6500b0009c00000c650100004100000000010b4019000000400110021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cad011001c700010000000b001d318e31890000040f000000010b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900001e800000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00001e7c0000c13d000000000006004b00001e8d0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000001ec30000613d0000001f01400039000000600110018f0000000001b1001900000cae0010009c00001e9f0000213d000000400010043f000000200030008c00001e9d0000413d00000000010b043300000c680010009c00001e9d0000213d000000000001042d0000000001000019000031900001043000000cce01000041000000000010043f0000004101000039000000040010043f00000cbd0100004100003190000104300000001f0530018f00000c6706300198000000400200043d000000000462001900001eb00000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001eac0000c13d000000000005004b00001ebd0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000c650020009c00000c65020080410000004002200210000000000112019f00003190000104300000001f0530018f00000c6706300198000000400200043d000000000462001900001ece0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001eca0000c13d000000000005004b00001edb0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000c650020009c00000c65020080410000004002200210000000000121019f00003190000104300005000000000002000400000005001d000000400500043d0000007406500039000000000046043500000054045000390000000000340435000000600310021000000020015000390000000000310435000000340350003900000000002304350000007402000039000000000025043500000cf00050009c000020aa0000813d000000a002500039000000400020043f00000c650010009c00000c65010080410000004001100210000000000205043300000c650020009c00000c65020080410000006002200210000000000112019f000000000200041400000c650020009c00000c6502008041000000c002200210000000000112019f00000cd0011001c70000801002000039318e31890000040f0000000100200190000020a80000613d000000000301043b000000400100043d000000200210003900000cf10400004100000000004204350000003c0410003900000000003404350000003c03000039000000000031043500000cdb0010009c000020aa0000213d0000006003100039000000400030043f00000c650020009c00000c65020080410000004002200210000000000101043300000c650010009c00000c65010080410000006001100210000000000121019f000000000200041400000c650020009c00000c6502008041000000c002200210000000000112019f00000cd0011001c70000801002000039318e31890000040f0000000100200190000020a80000613d000000000101043b000300000001001d0000000101000039000500000001001d000000000201041a000000400c00043d00000ca90100004100000000001c04350000000401c0003900000caa0300004100000000003104350000000001000414000000080220027000000c6802200197000000040020008c00001f390000c13d0000000103000031000000200030008c0000002004000039000000000403401900001f650000013d00000c6500c0009c00000c650300004100000000030c4019000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c700020000000c001d318e31890000040f000000020c000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057c001900001f540000613d000000000801034f00000000090c0019000000008a08043c0000000009a90436000000000059004b00001f500000c13d000000000006004b00001f610000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000020c00000613d0000001f01400039000000600110018f000000000bc1001900000000001b004b0000000002000039000000010200403900000cae00b0009c000020aa0000213d0000000100200190000020aa0000c13d0000004000b0043f000000200030008c000020a80000413d00000000020c043300000c680020009c000020a80000213d0000000204000039000000000404041a0000004405b0003900000cc00600004100000000006504350000002405b0003900000cec06000041000000000065043500000cb70500004100000000005b04350000000405b0003900000000004504350000000004000414000000040020008c00001fb20000613d00000c6500b0009c00000c650100004100000000010b4019000000400110021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cad011001c700020000000b001d318e31890000040f000000020b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900001f9f0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00001f9b0000c13d000000000006004b00001fac0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000020cc0000613d0000001f01400039000000600110018f0000000001b1001900000cae0010009c000020aa0000213d000000400010043f000000200030008c000020a80000413d000000000c0b043300000c6800c0009c000020a80000213d00000000000c004b000020b00000613d000000040600002900000000d2060434000000410020008c0000200b0000c13d0000004002600039000000000202043300000cf20020009c0000200b0000213d00020000000c001d0000006003600039000000000303043300010000000d001d00000000040d04330000006005100039000000000025043500000040021000390000000000420435000000f8023002700000002003100039000000000023043500000003020000290000000000210435000000000000043f00000c650010009c00000c65010080410000004001100210000000000200041400000c650020009c00000c6502008041000000c002200210000000000112019f00000cd9011001c70000000102000039318e31890000040f000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0540018f000000200440019000001fed0000613d000000000601034f0000000007000019000000006806043c0000000007870436000000000047004b00001fe90000c13d000000000005004b000000020c00002900001ffb0000613d000000000641034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000100000003001f00030000000103550000000100200190000000010d000029000020d80000613d000000000200043d00000c68002001980000000002006019000000040600002900000001010000390000200a0000613d0000000002c2013f00000c68002001980000200a0000c13d000000000001042d000000400100043d000000440210003900000040040000390000000000420435000000200210003900000cf3040000410000000000420435000000240410003900000003050000290000000000540435000000640510003900000000040604330000000000450435000000200e00008a0000000007e4016f0000001f0640018f000000840510003900000000005d004b0000202d0000813d000000000007004b000020290000613d00000000096d00190000000008650019000000200880008a000000200990008a000000000a780019000000000b790019000000000b0b04330000000000ba0435000000200770008c000020230000c13d000000000006004b000020430000613d0000000008050019000020390000013d0000000008750019000000000007004b000020360000613d00000000090d0019000000000a050019000000009b090434000000000aba043600000000008a004b000020320000c13d000000000006004b000020430000613d000000000d7d00190000000306600210000000000708043300000000076701cf000000000767022f00000000090d04330000010006600089000000000969022f00000000066901cf000000000676019f0000000000680435000000000554001900000000000504350000001f044000390000000004e4016f00000064054000390000000000510435000000a3044000390000000005e4016f0000000004150019000000000054004b0000000005000039000000010500403900000cae0040009c000020aa0000213d0000000100500190000020aa0000c13d000000400040043f000000000401043300000000010004140000000400c0008c0000206b0000613d00000c650020009c00000c6502008041000000400220021000000c650040009c00000c65040080410000006003400210000000000223019f00000c650010009c00000c6501008041000000c001100210000000000112019f00000000020c0019318e31890000040f000000200e00008a00050001002001930003000000010355000000600110027000010c650010019d00000c6503100197000000000003004b000020a20000613d00000cae0030009c000020aa0000213d0000001f013000390000000001e1016f0000003f011000390000000002e1016f000000400100043d0000000002210019000000000012004b0000000004000039000000010400403900000cae0020009c000020aa0000213d0000000100400190000020aa0000c13d000000400020043f00000000023104360000000004e301700000001f0530018f00000000034200190000000306000367000020890000613d000000000706034f0000000008020019000000007907043c0000000008980436000000000038004b000020850000c13d000000000005004b000020960000613d000000000446034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000430435000000050000006b000020a60000613d0000000001010433000000200010008c0000000001000019000020a00000c13d000000000102043300000cf30010009c00000000010000390000000101006039000000010110018f000000000001042d00000060010000390000008002000039000000050000006b000020980000c13d000000010100018f000000000001042d0000000001000019000031900001043000000cce01000041000000000010043f0000004101000039000000040010043f00000cbd010000410000319000010430000000440210003900000cf403000041000000000032043500000024021000390000000e03000039000000000032043500000ccb02000041000000000021043500000004021000390000002003000039000000000032043500000c650010009c00000c6501008041000000400110021000000cad011001c700003190000104300000001f0530018f00000c6706300198000000400200043d0000000004620019000020e30000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000020c70000c13d000020e30000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000020e30000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000020d30000c13d000020e30000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000020e30000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000020df0000c13d000000000005004b000020f00000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000c650020009c00000c65020080410000004002200210000000000112019f000031900001043000010000000000020000000101000039000000000201041a000000ff01200190000021470000c13d000000400b00043d00000cc90100004100000000001b04350000000001000414000000080220027000000c6802200197000000040020008c000021080000c13d0000000103000031000000200030008c00000020040000390000000004034019000021340000013d00000c6500b0009c00000c650300004100000000030b4019000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000ca6011001c700010000000b001d318e31890000040f000000010b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000021230000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b0000211f0000c13d000000000006004b000021300000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000021500000613d0000001f01400039000000600210018f0000000001b20019000000000021004b0000000002000039000000010200403900000cae0010009c0000214a0000213d00000001002001900000214a0000c13d000000400010043f0000001f0030008c000021480000a13d00000000010b0433000000000001004b0000000002000039000000010200c039000000000021004b000021480000c13d000000000001042d0000000001000019000031900001043000000cce01000041000000000010043f0000004101000039000000040010043f00000cbd0100004100003190000104300000001f0530018f00000c6706300198000000400200043d00000000046200190000215b0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000021570000c13d000000000005004b000021680000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000c650020009c00000c65020080410000004002200210000000000121019f0000319000010430000000000301001900000000011200a9000000000003004b000021750000613d00000000033100d9000000000023004b000021760000c13d000000000001042d00000cce01000041000000000010043f0000001101000039000000040010043f00000cbd01000041000031900001043000020000000000020000000102000039000000000202041a000000400c00043d00000ca90300004100000000003c04350000000404c0003900000caa0300004100000000003404350000000004000414000000080220027000000c6802200197000000040020008c0000218f0000c13d0000000103000031000000200030008c00000020040000390000000004034019000021bd0000013d000100000001001d00000c6500c0009c00000c650300004100000000030c4019000000400330021000000c650040009c00000c6504008041000000c001400210000000000131019f00000cbd011001c700020000000c001d318e31890000040f000000020c000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057c0019000021ab0000613d000000000801034f00000000090c0019000000008a08043c0000000009a90436000000000059004b000021a70000c13d000000000006004b000021b80000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000022190000613d00000001010000290000001f02400039000000600720018f000000000bc7001900000000007b004b0000000002000039000000010200403900000cae00b0009c000022130000213d0000000100200190000022130000c13d0000004000b0043f0000001f0030008c000022110000a13d00000000020c043300000c680020009c000022110000213d0000000204000039000000000404041a0000004405b0003900000cc70600004100000000006504350000002405b00039000000000015043500000cb90500004100000000005b04350000000405b0003900000000004504350000000004000414000000040020008c000022090000613d00000c6500b0009c00000c650100004100000000010b4019000000400110021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cad011001c700020000000b001d318e31890000040f000000020b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000021f60000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000021f20000c13d000000000006004b000022030000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000022370000613d0000001f01400039000000600710018f0000000001b7001900000cae0010009c000022130000213d000000400010043f000000200030008c000022110000413d00000000010b0433000000000001042d0000000001000019000031900001043000000cce01000041000000000010043f0000004101000039000000040010043f00000cbd0100004100003190000104300000001f0530018f00000c6706300198000000400200043d0000000004620019000022240000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000022200000c13d000000000005004b000022310000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000c650020009c00000c65020080410000004002200210000000000112019f00003190000104300000001f0530018f00000c6706300198000000400200043d0000000004620019000022420000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000223e0000c13d000000000005004b0000224f0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000c650020009c00000c65020080410000004002200210000000000121019f000031900001043000020000000000020000000102000039000000000202041a000000400c00043d00000ca90300004100000000003c04350000000404c0003900000caa0300004100000000003404350000000004000414000000080220027000000c6802200197000000040020008c000022680000c13d0000000103000031000000200030008c00000020040000390000000004034019000022960000013d000100000001001d00000c6500c0009c00000c650300004100000000030c4019000000400330021000000c650040009c00000c6504008041000000c001400210000000000131019f00000cbd011001c700020000000c001d318e31890000040f000000020c000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057c0019000022840000613d000000000801034f00000000090c0019000000008a08043c0000000009a90436000000000059004b000022800000c13d000000000006004b000022910000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000022f20000613d00000001010000290000001f02400039000000600720018f000000000bc7001900000000007b004b0000000002000039000000010200403900000cae00b0009c000022ec0000213d0000000100200190000022ec0000c13d0000004000b0043f0000001f0030008c000022ea0000a13d00000000020c043300000c680020009c000022ea0000213d0000000204000039000000000404041a0000004405b0003900000cdf0600004100000000006504350000002405b00039000000000015043500000cb90500004100000000005b04350000000405b0003900000000004504350000000004000414000000040020008c000022e20000613d00000c6500b0009c00000c650100004100000000010b4019000000400110021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cad011001c700020000000b001d318e31890000040f000000020b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000022cf0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000022cb0000c13d000000000006004b000022dc0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000023100000613d0000001f01400039000000600710018f0000000001b7001900000cae0010009c000022ec0000213d000000400010043f000000200030008c000022ea0000413d00000000010b0433000000000001042d0000000001000019000031900001043000000cce01000041000000000010043f0000004101000039000000040010043f00000cbd0100004100003190000104300000001f0530018f00000c6706300198000000400200043d0000000004620019000022fd0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000022f90000c13d000000000005004b0000230a0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000c650020009c00000c65020080410000004002200210000000000112019f00003190000104300000001f0530018f00000c6706300198000000400200043d00000000046200190000231b0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000023170000c13d000000000005004b000023280000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000c650020009c00000c65020080410000004002200210000000000121019f000031900001043000020000000000020000000102000039000000000202041a000000400c00043d00000ca90300004100000000003c04350000000404c0003900000caa0300004100000000003404350000000004000414000000080220027000000c6802200197000000040020008c000023410000c13d0000000103000031000000200030008c000000200400003900000000040340190000236f0000013d000100000001001d00000c6500c0009c00000c650300004100000000030c4019000000400330021000000c650040009c00000c6504008041000000c001400210000000000131019f00000cbd011001c700020000000c001d318e31890000040f000000020c000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057c00190000235d0000613d000000000801034f00000000090c0019000000008a08043c0000000009a90436000000000059004b000023590000c13d000000000006004b0000236a0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000023cb0000613d00000001010000290000001f02400039000000600720018f000000000bc7001900000000007b004b0000000002000039000000010200403900000cae00b0009c000023c50000213d0000000100200190000023c50000c13d0000004000b0043f0000001f0030008c000023c30000a13d00000000020c043300000c680020009c000023c30000213d0000000204000039000000000404041a0000004405b0003900000ccd0600004100000000006504350000002405b00039000000000015043500000cb90500004100000000005b04350000000405b0003900000000004504350000000004000414000000040020008c000023bb0000613d00000c6500b0009c00000c650100004100000000010b4019000000400110021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cad011001c700020000000b001d318e31890000040f000000020b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000023a80000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000023a40000c13d000000000006004b000023b50000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000023e90000613d0000001f01400039000000600710018f0000000001b7001900000cae0010009c000023c50000213d000000400010043f000000200030008c000023c30000413d00000000010b0433000000000001042d0000000001000019000031900001043000000cce01000041000000000010043f0000004101000039000000040010043f00000cbd0100004100003190000104300000001f0530018f00000c6706300198000000400200043d0000000004620019000023d60000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000023d20000c13d000000000005004b000023e30000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000c650020009c00000c65020080410000004002200210000000000112019f00003190000104300000001f0530018f00000c6706300198000000400200043d0000000004620019000023f40000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000023f00000c13d000000000005004b000024010000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000c650020009c00000c65020080410000004002200210000000000121019f000031900001043000020000000000020000000102000039000000000202041a000000400b00043d00000ca10300004100000000003b04350000000403b0003900000ca204000041000000000043043500000c68051001970000002401b0003900000000005104350000000001000414000000080220027000000c6802200197000000040020008c0000241d0000c13d0000000103000031000000200030008c000000200400003900000000040340190000244b0000013d000100000005001d00000c6500b0009c00000c650300004100000000030b4019000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000ca8011001c700020000000b001d318e31890000040f000000020b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000024390000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000024350000c13d000000000006004b000024460000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000024700000613d00000001050000290000001f01400039000000600210018f0000000001b20019000000000021004b0000000002000039000000010200403900000cae0010009c000024630000213d0000000100200190000024630000c13d000000400010043f0000001f0030008c000024610000a13d00000000010b0433000000000001004b0000000002000039000000010200c039000000000021004b000024610000c13d000000000001004b000024690000613d000000000001042d0000000001000019000031900001043000000cce01000041000000000010043f0000004101000039000000040010043f00000cbd01000041000031900001043000000ca701000041000000000010043f000000040050043f00000ca201000041000000240010043f00000ca80100004100003190000104300000001f0530018f00000c6706300198000000400200043d00000000046200190000247b0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000024770000c13d000000000005004b000024880000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000c650020009c00000c65020080410000004002200210000000000112019f00003190000104300004000000000002000300000002001d000400000001001d0000000101000039000000000201041a000000400b00043d00000ca90100004100000000001b04350000000401b0003900000caa0300004100000000003104350000000001000414000000080220027000000c6802200197000000040020008c000024a30000c13d0000000103000031000000200030008c00000020040000390000000004034019000024cf0000013d00000c6500b0009c00000c650300004100000000030b4019000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c700020000000b001d318e31890000040f000000020b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000024be0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000024ba0000c13d000000000006004b000024cb0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000025250000613d0000001f01400039000000600210018f0000000001b20019000000000021004b0000000002000039000000010200403900000cae0010009c0000251e0000213d00000001002001900000251e0000c13d000000400010043f0000001f0030008c0000251c0000a13d00000000020b043300000c680020009c0000251c0000213d0000000201000039000000000101041a000100000001001d00000cbe010000410000000000100443000200000002001d0000000400200443000000000100041400000c650010009c00000c6501008041000000c00110021000000cbf011001c70000800202000039318e31890000040f0000000100200190000025240000613d000000000101043b000000000001004b00000002030000290000251c0000613d000000030100002900000c6801100197000000400400043d00000064024000390000000000120435000000440140003900000cb802000041000000000021043500000024014000390000000402000029000000000021043500000cc10100004100000000001404350000000401400039000000010200002900000000002104350000000001000414000000040030008c000025180000613d00000c650040009c00000c65020000410000000002044019000000400220021000000c650010009c00000c6501008041000000c001100210000000000121019f00000cc2011001c70000000002030019000400000004001d318e31840000040f0000000404000029000000600310027000010c650030019d00030000000103550000000100200190000025310000613d00000cae0040009c0000251e0000213d000000400040043f000000000001042d0000000001000019000031900001043000000cce01000041000000000010043f0000004101000039000000040010043f00000cbd010000410000319000010430000000000001042f0000001f0530018f00000c6706300198000000400200043d00000000046200190000253d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000252c0000c13d0000253d0000013d00000c65033001970000001f0530018f00000c6706300198000000400200043d00000000046200190000253d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000025390000c13d000000000005004b0000254a0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000c650020009c00000c65020080410000004002200210000000000112019f00003190000104300004000000000002000300000002001d000400000001001d0000000101000039000000000201041a000000400b00043d00000ca90100004100000000001b04350000000401b0003900000caa0300004100000000003104350000000001000414000000080220027000000c6802200197000000040020008c000025650000c13d0000000103000031000000200030008c00000020040000390000000004034019000025910000013d00000c6500b0009c00000c650300004100000000030b4019000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c700020000000b001d318e31890000040f000000020b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000025800000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b0000257c0000c13d000000000006004b0000258d0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000025e60000613d0000001f01400039000000600210018f0000000001b20019000000000021004b0000000002000039000000010200403900000cae0010009c000025df0000213d0000000100200190000025df0000c13d000000400010043f0000001f0030008c000025dd0000a13d00000000020b043300000c680020009c000025dd0000213d0000000201000039000000000101041a000100000001001d00000cbe010000410000000000100443000200000002001d0000000400200443000000000100041400000c650010009c00000c6501008041000000c00110021000000cbf011001c70000800202000039318e31890000040f0000000100200190000025e50000613d000000000101043b000000000001004b0000000203000029000025dd0000613d000000400400043d000000640140003900000003020000290000000000210435000000440140003900000cc702000041000000000021043500000024014000390000000402000029000000000021043500000cc60100004100000000001404350000000401400039000000010200002900000000002104350000000001000414000000040030008c000025d90000613d00000c650040009c00000c65020000410000000002044019000000400220021000000c650010009c00000c6501008041000000c001100210000000000121019f00000cc2011001c70000000002030019000400000004001d318e31840000040f0000000404000029000000600310027000010c650030019d00030000000103550000000100200190000025f20000613d00000cae0040009c000025df0000213d000000400040043f000000000001042d0000000001000019000031900001043000000cce01000041000000000010043f0000004101000039000000040010043f00000cbd010000410000319000010430000000000001042f0000001f0530018f00000c6706300198000000400200043d0000000004620019000025fe0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000025ed0000c13d000025fe0000013d00000c65033001970000001f0530018f00000c6706300198000000400200043d0000000004620019000025fe0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000025fa0000c13d000000000005004b0000260b0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000c650020009c00000c65020080410000004002200210000000000112019f00003190000104300004000000000002000300000002001d000400000001001d0000000101000039000000000201041a000000400b00043d00000ca90100004100000000001b04350000000401b0003900000caa0300004100000000003104350000000001000414000000080220027000000c6802200197000000040020008c000026260000c13d0000000103000031000000200030008c00000020040000390000000004034019000026520000013d00000c6500b0009c00000c650300004100000000030b4019000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c700020000000b001d318e31890000040f000000020b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000026410000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b0000263d0000c13d000000000006004b0000264e0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000026a70000613d0000001f01400039000000600210018f0000000001b20019000000000021004b0000000002000039000000010200403900000cae0010009c000026a00000213d0000000100200190000026a00000c13d000000400010043f0000001f0030008c0000269e0000a13d00000000020b043300000c680020009c0000269e0000213d0000000201000039000000000101041a000100000001001d00000cbe010000410000000000100443000200000002001d0000000400200443000000000100041400000c650010009c00000c6501008041000000c00110021000000cbf011001c70000800202000039318e31890000040f0000000100200190000026a60000613d000000000101043b000000000001004b00000002030000290000269e0000613d000000400400043d000000640140003900000003020000290000000000210435000000440140003900000ccd02000041000000000021043500000024014000390000000402000029000000000021043500000cc60100004100000000001404350000000401400039000000010200002900000000002104350000000001000414000000040030008c0000269a0000613d00000c650040009c00000c65020000410000000002044019000000400220021000000c650010009c00000c6501008041000000c001100210000000000121019f00000cc2011001c70000000002030019000400000004001d318e31840000040f0000000404000029000000600310027000010c650030019d00030000000103550000000100200190000026b30000613d00000cae0040009c000026a00000213d000000400040043f000000000001042d0000000001000019000031900001043000000cce01000041000000000010043f0000004101000039000000040010043f00000cbd010000410000319000010430000000000001042f0000001f0530018f00000c6706300198000000400200043d0000000004620019000026bf0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000026ae0000c13d000026bf0000013d00000c65033001970000001f0530018f00000c6706300198000000400200043d0000000004620019000026bf0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000026bb0000c13d000000000005004b000026cc0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000c650020009c00000c65020080410000004002200210000000000112019f0000319000010430000000400100043d0000000902000039000000000221043600000cf503000041000000000032043500000cf60010009c000026ef0000813d0000004003100039000000400030043f00000c650020009c00000c65020080410000004002200210000000000101043300000c650010009c00000c65010080410000006001100210000000000121019f000000000200041400000c650020009c00000c6502008041000000c002200210000000000112019f00000cd0011001c70000801002000039318e31890000040f0000000100200190000026f50000613d000000000101043b000000000001042d00000cce01000041000000000010043f0000004101000039000000040010043f00000cbd010000410000319000010430000000000100001900003190000104300009000000000002000700000002001d000000400b00043d0000000404b00039000900000001001d000000000001004b00002fa10000613d0000000101000039000400000001001d000000000201041a00000ca90300004100000000003b043500000caa0300004100000000003404350000000001000414000000080220027000000c6802200197000000040020008c0000270f0000c13d0000000103000031000000200030008c000000200400003900000000040340190000273b0000013d00000c6500b0009c00000c650300004100000000030b4019000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c700080000000b001d318e31890000040f000000080b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b00190000272a0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000027260000c13d000000000006004b000027370000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000002ffb0000613d0000001f01400039000000600110018f000000000cb1001900000000001c004b0000000002000039000000010200403900000cae00c0009c00002f940000213d000000010020019000002f940000c13d0000004000c0043f0000001f0030008c00002f920000a13d00000000020b043300000c680020009c00002f920000213d0000000204000039000000000404041a0000004405c0003900000cdf0600004100000000006504350000002405c000390000000906000029000000000065043500000cb90500004100000000005c04350000000405c0003900000000004504350000000004000414000000040020008c000027880000613d00000c6500c0009c00000c650100004100000000010c4019000000400110021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cad011001c700080000000c001d318e31890000040f000000080c000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057c0019000027750000613d000000000801034f00000000090c0019000000008a08043c0000000009a90436000000000059004b000027710000c13d000000000006004b000027820000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000030070000613d0000001f01400039000000600110018f000000000bc1001900000cae00b0009c00002f940000213d0000004000b0043f000000200030008c00002f920000413d0000000401b0003900000000020c0433000000000002004b00002fa80000613d0000000102000039000000000202041a00000ca90400004100000000004b043500000caa0400004100000000004104350000000001000414000000080220027000000c6802200197000000040020008c0000279f0000c13d0000002004000039000027cb0000013d00000c6500b0009c00000c650300004100000000030b4019000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c700080000000b001d318e31890000040f000000080b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000027ba0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000027b60000c13d000000000006004b000027c70000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000030130000613d0000001f01400039000000600110018f000000000cb1001900000cae00c0009c00002f940000213d0000004000c0043f000000200030008c00002f920000413d00000000020b043300000c680020009c00002f920000213d0000000204000039000000000404041a0000004405c0003900000cc70600004100000000006504350000002405c000390000000906000029000000000065043500000cb90500004100000000005c04350000000405c0003900000000004504350000000004000414000000040020008c000028130000613d00000c6500c0009c00000c650100004100000000010c4019000000400110021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cad011001c700080000000c001d318e31890000040f000000080c000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057c0019000028000000613d000000000801034f00000000090c0019000000008a08043c0000000009a90436000000000059004b000027fc0000c13d000000000006004b0000280d0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f000300000001035500000001002001900000301f0000613d0000001f01400039000000600110018f000000000bc1001900000cae00b0009c00002f940000213d0000004000b0043f000000200030008c00002f920000413d0000000401b0003900000000020c0433000000000002004b00002faf0000613d0000000102000039000000000202041a00000ca90400004100000000004b043500000caa0400004100000000004104350000000001000414000000080220027000000c6802200197000000040020008c0000282a0000c13d0000002004000039000028560000013d00000c6500b0009c00000c650300004100000000030b4019000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c700080000000b001d318e31890000040f000000080b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000028450000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000028410000c13d000000000006004b000028520000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f000300000001035500000001002001900000302b0000613d0000001f01400039000000600110018f000000000cb1001900000cae00c0009c00002f940000213d0000004000c0043f000000200030008c00002f920000413d00000000020b043300000c680020009c00002f920000213d0000000204000039000000000404041a0000004405c0003900000cc70600004100000000006504350000002405c000390000000906000029000000000065043500000cb90500004100000000005c04350000000405c0003900000000004504350000000004000414000000040020008c0000289e0000613d00000c6500c0009c00000c650100004100000000010c4019000000400110021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cad011001c700080000000c001d318e31890000040f000000080c000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057c00190000288b0000613d000000000801034f00000000090c0019000000008a08043c0000000009a90436000000000059004b000028870000c13d000000000006004b000028980000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000030370000613d0000001f01400039000000600110018f000000000bc1001900000cae00b0009c00002f940000213d0000004000b0043f000000200030008c00002f920000413d0000000401b0003900000000020c0433000800070020007400002fb90000413d0000000102000039000000000202041a00000ca90400004100000000004b043500000caa0400004100000000004104350000000001000414000000080220027000000c6802200197000000040020008c000028b50000c13d0000002004000039000028e10000013d00000c6500b0009c00000c650300004100000000030b4019000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c700060000000b001d318e31890000040f000000060b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000028d00000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000028cc0000c13d000000000006004b000028dd0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000030430000613d0000001f01400039000000600110018f000000000cb1001900000cae00c0009c00002f940000213d0000004000c0043f000000200030008c00002f920000413d00000000020b043300000c680020009c00002f920000213d0000000204000039000000000404041a0000004405c0003900000cb80600004100000000006504350000002405c000390000000906000029000000000065043500000cb70500004100000000005c04350000000405c0003900000000004504350000000004000414000000040020008c000029290000613d00000c6500c0009c00000c650100004100000000010c4019000000400110021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cad011001c700060000000c001d318e31890000040f000000060c000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057c0019000029160000613d000000000801034f00000000090c0019000000008a08043c0000000009a90436000000000059004b000029120000c13d000000000006004b000029230000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f000300000001035500000001002001900000304f0000613d0000001f01400039000000600110018f000000000bc1001900000cae00b0009c00002f940000213d0000004000b0043f000000200030008c00002f920000413d00000000010c0433000500000001001d00000c680010009c00002f920000213d0000000401b000390000000504000029000000000004004b00002fc30000613d0000000002000411000000000024004b00002fca0000613d0000000102000039000000000202041a00000ca90400004100000000004b043500000caa0400004100000000004104350000000001000414000000080220027000000c6802200197000000040020008c000029470000c13d0000002004000039000029730000013d00000c6500b0009c00000c650300004100000000030b4019000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c700060000000b001d318e31890000040f000000060b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000029620000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b0000295e0000c13d000000000006004b0000296f0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f000300000001035500000001002001900000305b0000613d0000001f01400039000000600110018f000000000cb1001900000cae00c0009c00002f940000213d0000004000c0043f000000200030008c00002f920000413d00000000020b043300000c680020009c00002f920000213d0000000204000039000000000404041a0000004405c0003900000ccd0600004100000000006504350000002405c000390000000906000029000000000065043500000cb90500004100000000005c04350000000405c0003900000000004504350000000004000414000000040020008c000029bb0000613d00000c6500c0009c00000c650100004100000000010c4019000000400110021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cad011001c700060000000c001d318e31890000040f000000060c000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057c0019000029a80000613d000000000801034f00000000090c0019000000008a08043c0000000009a90436000000000059004b000029a40000c13d000000000006004b000029b50000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000030670000613d0000001f01400039000000600110018f000000000bc1001900000cae00b0009c00002f940000213d0000004000b0043f000000200030008c00002f920000413d00000000010c043300000007051000b9000000000001004b000029c80000613d00000000011500d9000000070010006c00002f9b0000c13d0000000401b000390000000002000416000000000052004b00002fd40000413d0000000102000039000000000202041a00000ca90400004100000000004b043500000caa0400004100000000004104350000000001000414000000080220027000000c6802200197000000040020008c000600000005001d000029da0000c13d000000200400003900002a060000013d00000c6500b0009c00000c650300004100000000030b4019000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c700030000000b001d318e31890000040f000000030b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000029f50000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000029f10000c13d000000000006004b00002a020000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000030730000613d0000001f01400039000000600110018f0000000001b1001900000cae0010009c00002f940000213d000000400010043f000000200030008c00002f920000413d00000000020b043300000c680020009c00002f920000213d0000000201000039000000000101041a000200000001001d00000cbe010000410000000000100443000300000002001d0000000400200443000000000100041400000c650010009c00000c6501008041000000c00110021000000cbf011001c70000800202000039318e31890000040f000000010020019000002f9a0000613d000000000101043b000000000001004b000000030300002900002f920000613d000000400b00043d0000006401b00039000000080200002900000000002104350000004401b0003900000cc70200004100000000002104350000002401b000390000000902000029000000000021043500000cc60100004100000000001b04350000000404b00039000000020100002900000000001404350000000001000414000000040030008c00010000000b001d00002a4b0000613d00000c6500b0009c00000c650200004100000000020b4019000000400220021000000c650010009c00000c6501008041000000c001100210000000000121019f00000cc2011001c70000000002030019000800000004001d318e31840000040f0000000804000029000000010b000029000000600310027000010c650030019d000300000001035500000001002001900000307f0000613d00000cae00b0009c00002f940000213d0000004000b0043f0000000101000039000000000201041a00000ca90100004100000000001b043500000caa0100004100000000001404350000000001000414000000080220027000000c6802200197000000040020008c00002a5e0000c13d0000000103000031000000200030008c0000002004000039000000000403401900002a890000013d00000c6500b0009c00000c650300004100000000030b4019000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c7318e31890000040f000000010b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900002a780000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00002a740000c13d000000000006004b00002a850000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f000300000001035500000001002001900000308c0000613d0000001f01400039000000600110018f000000000cb1001900000cae00c0009c00002f940000213d0000004000c0043f000000200030008c00002f920000413d00000000020b043300000c680020009c00002f920000213d0000000204000039000000000404041a0000004405c0003900000cc706000041000000000065043500000cb90500004100000000005c04350000000405c0003900000000004504350000002404c0003900000000000404350000000004000414000000040020008c00002ad00000613d00000c6500c0009c00000c650100004100000000010c4019000000400110021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cad011001c700080000000c001d318e31890000040f000000080c000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057c001900002abd0000613d000000000801034f00000000090c0019000000008a08043c0000000009a90436000000000059004b00002ab90000c13d000000000006004b00002aca0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000030980000613d0000001f01400039000000600110018f000000000bc1001900000cae00b0009c00002f940000213d0000004000b0043f000000200030008c00002f920000413d00000000020c0433000800000002001d000000010020003a00002f9b0000413d0000000102000039000000000202041a00000ca90400004100000000004b04350000000404b0003900000caa0500004100000000005404350000000004000414000000080220027000000c6802200197000000040020008c00002b140000613d00000c6500b0009c00000c650100004100000000010b4019000000400110021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cbd011001c700030000000b001d318e31890000040f000000030b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900002b010000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00002afd0000c13d000000000006004b00002b0e0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000030a40000613d0000001f01400039000000600110018f0000000001b1001900000cae0010009c00002f940000213d000000400010043f000000200030008c00002f920000413d00000000020b043300000c680020009c00002f920000213d0000000201000039000000000101041a000200000001001d00000cbe010000410000000000100443000300000002001d0000000400200443000000000100041400000c650010009c00000c6501008041000000c00110021000000cbf011001c70000800202000039318e31890000040f000000010020019000002f9a0000613d000000000101043b000000000001004b000000030200002900002f920000613d00000008010000290000000101100039000000400400043d00000064034000390000000000130435000000440140003900000cc703000041000000000031043500000cc6010000410000000005140436000000040140003900000002030000290000000000310435000000240140003900000000000104350000000001000414000000040020008c00002b560000613d00000c650040009c00000c65030000410000000003044019000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cc2011001c7000300000004001d000200000005001d318e31840000040f00000002050000290000000304000029000000600310027000010c650030019d00030000000103550000000100200190000030b00000613d00000cae0040009c00002f940000213d000000400040043f00000cf70100004100000000001504350000002801400039000000080200002900000000002104350000002801000039000000000014043500000cdb0040009c00002f940000213d0000006001400039000000400010043f00000c650050009c00000c65050080410000004001500210000000000204043300000c650020009c00000c65020080410000006002200210000000000112019f000000000200041400000c650020009c00000c6502008041000000c002200210000000000112019f00000cd0011001c70000801002000039318e31890000040f000000010020019000002f920000613d000000000101043b000800000001001d0000000101000039000000000201041a000000400b00043d00000ca90100004100000000001b04350000000401b0003900000caa0300004100000000003104350000000001000414000000080220027000000c6802200197000000040020008c00002b8a0000c13d0000000103000031000000200030008c0000002004000039000000000403401900002bb60000013d00000c6500b0009c00000c650300004100000000030b4019000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c700030000000b001d318e31890000040f000000030b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900002ba50000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00002ba10000c13d000000000006004b00002bb20000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000030bd0000613d0000001f01400039000000600210018f0000000001b20019000000000021004b0000000002000039000000010200403900000cae0010009c00002f940000213d000000010020019000002f940000c13d000000400010043f000000200030008c00002f920000413d00000000020b043300000c680020009c00002f920000213d0000000201000039000000000101041a000200000001001d00000cbe010000410000000000100443000300000002001d0000000400200443000000000100041400000c650010009c00000c6501008041000000c00110021000000cbf011001c70000800202000039318e31890000040f000000010020019000002f9a0000613d000000000101043b000000000001004b000000030300002900002f920000613d000000400b00043d0000006401b00039000000000200041100000000002104350000004401b0003900000cd70200004100000000002104350000002401b000390000000802000029000000000021043500000cc10100004100000000001b04350000000404b00039000000020100002900000000001404350000000001000414000000040030008c00010000000b001d00002c000000613d00000c6500b0009c00000c650200004100000000020b4019000000400220021000000c650010009c00000c6501008041000000c001100210000000000121019f00000cc2011001c70000000002030019000300000004001d318e31840000040f0000000304000029000000010b000029000000600310027000010c650030019d00030000000103550000000100200190000030c90000613d00000cae00b0009c00002f940000213d0000004000b0043f0000000101000039000000000201041a00000ca90100004100000000001b043500000caa0100004100000000001404350000000001000414000000080220027000000c6802200197000000040020008c00002c130000c13d0000000103000031000000200030008c0000002004000039000000000403401900002c3e0000013d00000c6500b0009c00000c650300004100000000030b4019000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c7318e31890000040f000000010b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900002c2d0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00002c290000c13d000000000006004b00002c3a0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000030d60000613d0000001f01400039000000600110018f0000000001b1001900000cae0010009c00002f940000213d000000400010043f000000200030008c00002f920000413d00000000020b043300000c680020009c00002f920000213d0000000201000039000000000101041a000200000001001d00000cbe010000410000000000100443000300000002001d0000000400200443000000000100041400000c650010009c00000c6501008041000000c00110021000000cbf011001c70000800202000039318e31890000040f000000010020019000002f9a0000613d000000000101043b000000000001004b000000030300002900002f920000613d000000400b00043d0000006401b00039000000090200002900000000002104350000004401b0003900000cc70200004100000000002104350000002401b000390000000802000029000000000021043500000cc60100004100000000001b04350000000404b00039000000020100002900000000001404350000000001000414000000040030008c00010000000b001d00002c830000613d00000c6500b0009c00000c650200004100000000020b4019000000400220021000000c650010009c00000c6501008041000000c001100210000000000121019f00000cc2011001c70000000002030019000300000004001d318e31840000040f0000000304000029000000010b000029000000600310027000010c650030019d00030000000103550000000100200190000030e20000613d00000cae00b0009c00002f940000213d0000004000b0043f0000000101000039000000000201041a00000ca90100004100000000001b043500000caa0100004100000000001404350000000001000414000000080220027000000c6802200197000000040020008c00002c960000c13d0000000103000031000000200030008c0000002004000039000000000403401900002cc10000013d00000c6500b0009c00000c650300004100000000030b4019000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c7318e31890000040f000000010b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900002cb00000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00002cac0000c13d000000000006004b00002cbd0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000030ef0000613d0000001f01400039000000600110018f0000000001b1001900000cae0010009c00002f940000213d000000400010043f000000200030008c00002f920000413d00000000020b043300000c680020009c00002f920000213d0000000201000039000000000101041a000200000001001d00000cbe010000410000000000100443000300000002001d0000000400200443000000000100041400000c650010009c00000c6501008041000000c00110021000000cbf011001c70000800202000039318e31890000040f000000010020019000002f9a0000613d000000000101043b000000000001004b0000000602000029000000030300002900002f920000613d000000400b00043d0000006401b0003900000000002104350000004401b0003900000ccd0200004100000000002104350000002401b000390000000802000029000000000021043500000cc60100004100000000001b04350000000404b00039000000020100002900000000001404350000000001000414000000040030008c00010000000b001d00002d060000613d00000c6500b0009c00000c650200004100000000020b4019000000400220021000000c650010009c00000c6501008041000000c001100210000000000121019f00000cc2011001c70000000002030019000300000004001d318e31840000040f0000000304000029000000010b000029000000600310027000010c650030019d00030000000103550000000100200190000030fb0000613d00000cae00b0009c00002f940000213d0000004000b0043f0000000101000039000000000201041a00000ca90100004100000000001b043500000caa0100004100000000001404350000000001000414000000080220027000000c6802200197000000040020008c00002d190000c13d0000000103000031000000200030008c0000002004000039000000000403401900002d440000013d00000c6500b0009c00000c650300004100000000030b4019000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c7318e31890000040f000000010b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900002d330000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00002d2f0000c13d000000000006004b00002d400000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000031080000613d0000001f01400039000000600110018f0000000001b1001900000cae0010009c00002f940000213d000000400010043f000000200030008c00002f920000413d00000000020b043300000c680020009c00002f920000213d0000000201000039000000000101041a000200000001001d00000cbe010000410000000000100443000300000002001d0000000400200443000000000100041400000c650010009c00000c6501008041000000c00110021000000cbf011001c70000800202000039318e31890000040f000000010020019000002f9a0000613d000000000101043b000000000001004b000000030300002900002f920000613d000000400400043d000000640140003900000007020000290000000000210435000000440140003900000cd802000041000000000021043500000024014000390000000802000029000000000021043500000cc60100004100000000021404360000000401400039000000020500002900000000005104350000000001000414000000040030008c00002d890000613d00000c650040009c000200000002001d00000c65020000410000000002044019000000400220021000000c650010009c00000c6501008041000000c001100210000000000121019f00000cc2011001c70000000002030019000300000004001d318e31840000040f0000000304000029000000600310027000010c650030019d000300000001035500000001002001900000000202000029000031260000613d00000cae0040009c00002f940000213d000000400040043f0000000901000039000000000014043500000cf501000041000000000012043500000cf80040009c00002f940000213d0000004001400039000000400010043f00000c650020009c00000c65020080410000004001200210000000000204043300000c650020009c00000c65020080410000006002200210000000000112019f000000000200041400000c650020009c00000c6502008041000000c002200210000000000112019f00000cd0011001c70000801002000039318e31890000040f0000000607000029000000010020019000002f920000613d000000000801043b0000000101000039000000000201041a000000400c00043d00000ca90100004100000000001c04350000000401c0003900000caa0300004100000000003104350000000001000414000000080220027000000c6802200197000000040020008c00002dba0000c13d0000000104000031000000200040008c0000002003000039000000000304401900002de90000013d000200000008001d00000c6500c0009c00000c650300004100000000030c4019000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c700030000000c001d318e31890000040f000000030c000029000000600310027000000c6504300197000000200040008c000000200300003900000000030440190000001f0630018f000000200730019000000000057c001900002dd60000613d000000000801034f00000000090c0019000000008a08043c0000000009a90436000000000059004b00002dd20000c13d000000000006004b00002de30000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000004001f00030000000103550000000100200190000031330000613d000000060700002900000002080000290000001f01300039000000600110018f000000000bc1001900000000001b004b0000000002000039000000010200403900000cae00b0009c00002f940000213d000000010020019000002f940000c13d0000004000b0043f000000200040008c00002f920000413d00000000020c043300000c680020009c00002f920000213d0000000203000039000000000303041a0000004405b0003900000cc70600004100000000006504350000002405b00039000000000085043500000cb90500004100000000005b04350000000405b0003900000000003504350000000003000414000000040020008c00002e360000613d00000c6500b0009c00000c650100004100000000010b4019000000400110021000000c650030009c00000c6503008041000000c003300210000000000113019f00000cad011001c700030000000b001d318e31890000040f000000030b000029000000600310027000000c6504300197000000200040008c000000200300003900000000030440190000001f0630018f000000200730019000000000057b001900002e220000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00002e1e0000c13d000000000006004b00002e2f0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000004001f000300000001035500000001002001900000313f0000613d0000001f01300039000000600110018f00000006070000290000000001b1001900000cae0010009c00002f940000213d000000400010043f000000200040008c00002f920000413d00000000010b043300000000051700a9000000000007004b00002e430000613d00000000027500d9000000000012004b00002f9b0000c13d0003271000500122000000030370006c00002f9b0000413d00000000010004140000000502000029000000040020008c000600000005001d00002e4f0000c13d00000cae0040009c00002f940000213d000000010200003900002e600000013d00000c650010009c00000c6501008041000000c001100210000000030070006c00002e560000c13d000000050200002900002e5a0000013d00000cd0011001c7000080090200003900000005040000290000000005000019318e31840000040f0003000000010355000000600110027000010c650010019d00000c650410019800002e860000613d0000001f0140003900000cf9011001970000003f0110003900000cfa03100197000000400100043d0000000003310019000000000013004b0000000005000039000000010500403900000cae0030009c00002f940000213d000000010050019000002f940000c13d000000400030043f000000000641043600000ced034001980000001f0440018f0000000001360019000000030500036700002e790000613d000000000705034f000000007807043c0000000006860436000000000016004b00002e750000c13d000000000004004b00002e860000613d000000000335034f0000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000000010020019000002fe30000613d000000400100043d0000000902000039000000000221043600000cf503000041000000000032043500000cf80010009c00002f940000213d0000004003100039000000400030043f00000c650020009c00000c65020080410000004002200210000000000101043300000c650010009c00000c65010080410000006001100210000000000121019f000000000200041400000c650020009c00000c6502008041000000c002200210000000000112019f00000cd0011001c70000801002000039318e31890000040f000000010020019000002f920000613d000000000701043b0000000101000039000000000201041a000000400c00043d00000ca90100004100000000001c04350000000401c0003900000caa0300004100000000003104350000000001000414000000080220027000000c6802200197000000040020008c00002eb60000c13d0000000103000031000000200030008c0000002004000039000000000403401900002ee40000013d000200000007001d00000c6500c0009c00000c650300004100000000030c4019000000400330021000000c650010009c00000c6501008041000000c001100210000000000131019f00000cbd011001c700050000000c001d318e31890000040f000000050c000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057c001900002ed20000613d000000000801034f00000000090c0019000000008a08043c0000000009a90436000000000059004b00002ece0000c13d000000000006004b00002edf0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000031590000613d00000002070000290000001f01400039000000600110018f000000000bc1001900000000001b004b0000000002000039000000010200403900000cae00b0009c00002f940000213d000000010020019000002f940000c13d0000004000b0043f000000200030008c00002f920000413d00000000020c043300000c680020009c00002f920000213d0000000204000039000000000404041a0000004405b0003900000cb80600004100000000006504350000002405b00039000000000075043500000cb70500004100000000005b04350000000405b0003900000000004504350000000004000414000000040020008c00002f300000613d00000c6500b0009c00000c650100004100000000010b4019000000400110021000000c650040009c00000c6504008041000000c003400210000000000113019f00000cad011001c700050000000b001d318e31890000040f000000050b000029000000600310027000000c6503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900002f1d0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00002f190000c13d000000000006004b00002f2a0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000031650000613d0000001f01400039000000600110018f0000000001b1001900000cae0010009c00002f940000213d000000400010043f000000200030008c00002f920000413d00000000040b043300000c680040009c00002f920000213d0000000001000414000000040040008c000000060200002900002f400000c13d00000cae0030009c00002f520000a13d00002f940000013d00000c650010009c00000c6501008041000000c001100210000027100020008c00002f470000813d000000000204001900002f4b0000013d00000cd0011001c7000080090200003900000003030000290000000005000019318e31840000040f000400000002001d0003000000010355000000600110027000010c650010019d00000c650310019800002f780000613d0000001f0130003900000cf9011001970000003f0110003900000cfa02100197000000400100043d0000000002210019000000000012004b0000000004000039000000010400403900000cae0020009c00002f940000213d000000010040019000002f940000c13d000000400020043f000000000531043600000ced023001980000001f0330018f0000000001250019000000030400036700002f6b0000613d000000000604034f000000006706043c0000000005750436000000000015004b00002f670000c13d000000000003004b00002f780000613d000000000224034f0000000303300210000000000401043300000000043401cf000000000434022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000242019f00000000002104350000000401000029000000010010019000002fea0000613d000000400100043d0000000702000029000000000021043500000c650010009c00000c65010080410000004001100210000000000200041400000c650020009c00000c6502008041000000c002200210000000000112019f00000ce7011001c70000800d02000039000000040300003900000cfd04000041000000080500002900000009060000290000000007000411318e31840000040f000000010020019000002f920000613d0000000801000029000000000001042d0000000001000019000031900001043000000cce01000041000000000010043f0000004101000039000000040010043f00000cbd010000410000319000010430000000000001042f00000cce01000041000000000010043f0000001101000039000000040010043f00000cbd01000041000031900001043000000ccb0200004100000000002b0435000000200200003900000000002404350000004401b0003900000d030200004100002fda0000013d00000ccb0200004100000000002b0435000000200200003900000000002104350000004401b0003900000d020200004100002fd00000013d00000ccb0200004100000000002b0435000000200200003900000000002104350000004401b0003900000d010200004100000000002104350000002401b00039000000170200003900002fdd0000013d00000ccb0200004100000000002b0435000000200200003900000000002104350000004401b0003900000d000200004100000000002104350000002401b000390000001b0200003900002fdd0000013d00000ccb0200004100000000002b0435000000200200003900000000002104350000004401b0003900000cff0200004100002fd00000013d00000ccb0200004100000000002b0435000000200200003900000000002104350000004401b0003900000cfe0200004100000000002104350000002401b00039000000160200003900002fdd0000013d00000ccb0200004100000000002b0435000000200200003900000000002104350000004401b0003900000ccf0200004100000000002104350000002401b000390000001202000039000000000021043500000c6500b0009c00000c650b0080410000004001b0021000000cad011001c70000319000010430000000400100043d000000440210003900000cfb0300004100000000003204350000002402100039000000190300003900002ff00000013d000000400100043d000000440210003900000cfc03000041000000000032043500000024021000390000001d03000039000000000032043500000ccb02000041000000000021043500000004021000390000002003000039000000000032043500000c650010009c00000c6501008041000000400110021000000cad011001c700003190000104300000001f0530018f00000c6706300198000000400200043d0000000004620019000031700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000030020000c13d000031700000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000031700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000300e0000c13d000031700000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000031700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000301a0000c13d000031700000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000031700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000030260000c13d000031700000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000031700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000030320000c13d000031700000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000031700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000303e0000c13d000031700000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000031700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000304a0000c13d000031700000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000031700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000030560000c13d000031700000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000031700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000030620000c13d000031700000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000031700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000306e0000c13d000031700000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000031700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000307a0000c13d000031700000013d00000c65033001970000001f0530018f00000c6706300198000000400200043d0000000004620019000031700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000030870000c13d000031700000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000031130000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000030930000c13d000031130000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000031130000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000309f0000c13d000031130000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000031130000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000030ab0000c13d000031130000013d00000c65033001970000001f0530018f00000c6706300198000000400200043d0000000004620019000031130000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000030b80000c13d000031130000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000031130000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000030c40000c13d000031130000013d00000c65033001970000001f0530018f00000c6706300198000000400200043d0000000004620019000031130000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000030d10000c13d000031130000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000031700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000030dd0000c13d000031700000013d00000c65033001970000001f0530018f00000c6706300198000000400200043d0000000004620019000031700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000030ea0000c13d000031700000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000031700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000030f60000c13d000031700000013d00000c65033001970000001f0530018f00000c6706300198000000400200043d0000000004620019000031700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000031030000c13d000031700000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000031130000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000310f0000c13d000000000005004b000031200000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000c650020009c00000c65020080410000004002200210000000000121019f000031900001043000000c65033001970000001f0530018f00000c6706300198000000400200043d0000000004620019000031700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000312e0000c13d000031700000013d0000001f0540018f00000c6706400198000000400200043d00000000036200190000314a0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b0000313a0000c13d0000314a0000013d0000001f0540018f00000c6706400198000000400200043d00000000036200190000314a0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b000031460000c13d000000000005004b000031570000613d000000000161034f0000000305500210000000000603043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f000000000013043500000060014002100000317e0000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000031700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000031600000c13d000031700000013d0000001f0530018f00000c6706300198000000400200043d0000000004620019000031700000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000316c0000c13d000000000005004b0000317d0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000c650020009c00000c65020080410000004002200210000000000112019f0000319000010430000000000001042f00003187002104210000000102000039000000000001042d0000000002000019000000000001042d0000318c002104230000000102000039000000000001042d0000000002000019000000000001042d0000318e000004320000318f0001042e000031900001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff003223bc33d1b69a7b20a6669445d23d76261d30e2f7c2dbcfe45dc07fa07edada0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000006d0ba1d200000000000000000000000000000000000000000000000000000000a16ad7d900000000000000000000000000000000000000000000000000000000b76ac0d600000000000000000000000000000000000000000000000000000000ce62bc8b00000000000000000000000000000000000000000000000000000000ce62bc8c00000000000000000000000000000000000000000000000000000000dd898b2f00000000000000000000000000000000000000000000000000000000ed022ebd00000000000000000000000000000000000000000000000000000000b76ac0d700000000000000000000000000000000000000000000000000000000c03ad0be00000000000000000000000000000000000000000000000000000000ac14ce7500000000000000000000000000000000000000000000000000000000ac14ce7600000000000000000000000000000000000000000000000000000000af4b087700000000000000000000000000000000000000000000000000000000a16ad7da00000000000000000000000000000000000000000000000000000000a485b4cf000000000000000000000000000000000000000000000000000000008245e4710000000000000000000000000000000000000000000000000000000088e4f1ca0000000000000000000000000000000000000000000000000000000088e4f1cb000000000000000000000000000000000000000000000000000000008da5cb5b00000000000000000000000000000000000000000000000000000000919898aa000000000000000000000000000000000000000000000000000000008245e4720000000000000000000000000000000000000000000000000000000082840eed00000000000000000000000000000000000000000000000000000000807ef82400000000000000000000000000000000000000000000000000000000807ef825000000000000000000000000000000000000000000000000000000008129fc1c000000000000000000000000000000000000000000000000000000006d0ba1d30000000000000000000000000000000000000000000000000000000077278ae800000000000000000000000000000000000000000000000000000000267659e1000000000000000000000000000000000000000000000000000000003ccfd60a000000000000000000000000000000000000000000000000000000005c975aba000000000000000000000000000000000000000000000000000000005c975abb000000000000000000000000000000000000000000000000000000005d1ca6310000000000000000000000000000000000000000000000000000000061ba27da000000000000000000000000000000000000000000000000000000003ccfd60b00000000000000000000000000000000000000000000000000000000508cb0e9000000000000000000000000000000000000000000000000000000002fb0b873000000000000000000000000000000000000000000000000000000002fb0b874000000000000000000000000000000000000000000000000000000003742a9f700000000000000000000000000000000000000000000000000000000267659e2000000000000000000000000000000000000000000000000000000002752571e00000000000000000000000000000000000000000000000000000000107a27490000000000000000000000000000000000000000000000000000000015be71fe0000000000000000000000000000000000000000000000000000000015be71ff0000000000000000000000000000000000000000000000000000000016c38b3c000000000000000000000000000000000000000000000000000000001a296e0200000000000000000000000000000000000000000000000000000000107a274a000000000000000000000000000000000000000000000000000000001328357f0000000000000000000000000000000000000000000000000000000006fdde020000000000000000000000000000000000000000000000000000000006fdde0300000000000000000000000000000000000000000000000000000000075b8907000000000000000000000000000000000000000000000000000000000035a9ae00000000000000000000000000000000000000000000000000000000046dc1660000000000000000000000000000000000000020000000800000000000000000c36dd7ea00000000000000000000000000000000000000000000000000000000241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b080000000000000000000000000000000000000044000000800000000000000000ffffffffffffffffffffff0000000000000000000000000000000000000000ffa4b914810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000161a64a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004400000000000000000000000053e41c1e000000000000000000000000000000000000000000000000000000009750ad73d9615445751d3fd0a61d867ae6a6dd1dfb5f65ef07fe835b7d5ca6bd00000000000000000000000000000000000000240000008000000000000000008a4bcc90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000000000000000000000000000000000000000000000000000000000000007fef633000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000bfa2ccd2000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0651689700000000000000000000000000000000000000000000000000000000007b920aa00000000000000000000000000000000000000000000000000000000e81b22ea0000000000000000000000000000000000000000000000000000000002016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c0a1b9224c00000000000000000000000000000000000000000000000000000000fc425f2263d0df187444b70e47283d622c70181c5baebb1306a01edba1ce184c4974656d4d61726b657953797374656d000000000000000000000000000000000dc149f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000421683f821a0574472445355be6d2b769119e8515f8376a1d7878523dfdecf7b0a41b90f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000002361458367e696363fbcc70777d07ebbd2394e89fd0adcaf147faccd1d294d60e95c048700000000000000000000000000000000000000000000000000000000a709fd3aa96d9faf770e44a5aef2f4808a6fe3a5ddf546568f36ad3a3873f31d9b29de6900000000000000000000000000000000000000000000000000000000f6107defa27e89b692bb66715910b52654e5ff87667d894ef03866f892ca1521000000000000000000000000000000000000000000000000ffffffffffffff7f5c975abb000000000000000000000000000000000000000000000000000000005061757361626c653a207061757365640000000000000000000000000000000008c379a000000000000000000000000000000000000000000000000000000000496e76616c696420696e707574000000000000000000000000000000000000000ecd9e25c81c684765cec4b6e84c99a71427b6f86b89fb7723e47f99327ee5724e487b7100000000000000000000000000000000000000000000000000000000496e73756666696369656e742066756e647300000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000526566756e64206661696c6564000000000000000000000000000000000000005265656e7472616e637947756172643a207265656e7472616e742063616c6c000000000000000000000000000000000000000004000000800000000000000000496e76616c69642070657263656e7461676500000000000000000000000000009cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f395472616e73666572206661696c65640000000000000000000000000000000000326d994cdb81aaccb84aa1f62bae636dc0aaf98ab22f66b0c9224f1edccd7cc963e9075eadb2b714ec44137cb04a5fdb7680cc60891886d396f63cb0dbafbc9e00000000000000000000000000000000000000800000000000000000000000006e6f6e6365000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff9f4e6f6e636520616c726561647920757365640000000000000000000000000000a2a9f6940e96680af2fe721eb59341cde71d9b7ae61dc834d205d6c59360268e50fc4a86286314eb3aa17200f6e9ba0d1cda18b0acbfb54e6d9dd307e46c2d28fa75861a3823dd5286f0891f7ddce6cb62e6deee6aa355ff0e641afd829dbdcd0200000000000000000000000000000000000040000000000000000000000000192159a6dc1e070350fc1d7970417b6a119fe2487724e578128eef7e749757ff496e76616c6964207369676e6174757265000000000000000000000000000000496e76616c696420707269636520706572206974656d00000000000000000000496e76616c696420616d6f756e74000000000000000000000000000000000000496e76616c6964206974656d206964000000000000000000000000000000000065d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a020000000000000000000000000000000000002000000000000000000000000062e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2585db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa5061757361626c653a206e6f742070617573656400000000000000000000000000000000000000000000000000000000000000a00000000000000000000000006c8d7f768a6bb4aafe85e8a2f5a9680355239c7e14646ed62b044e39de154512ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffffffffffffff6019457468657265756d205369676e6564204d6573736167653a0a3332000000007fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a01626ba7e000000000000000000000000000000000000000000000000000000005369676e6572206e6f7420736574000000000000000000000000000000000000726f79616c746965730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffc07075726368617365000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf000000000000000000000000000000000000000000000001ffffffffffffffe0000000000000000000000000000000000000000000000003ffffffffffffffe05472616e73666572206661696c656420666f72206f776e6572000000000000005472616e73666572206661696c656420666f7220726f79616c74696573000000145e2ff612f82ecb64f13b28a0e2825f8fd3dba6d6fbbdec265aa58800014c3d43616e6e6f7420627579206f776e206c697374696e67000000000000000000004c697374696e672077616c6c6574206e6f7420736574000000000000000000004e6f7420656e6f756768206974656d7320696e206c697374696e6700000000004c697374696e6720737570706c79206465706c657465640000000000000000004c697374696e6720646f6573206e6f7420657869737400000000000000000000496e76616c6964206c697374696e672069640000000000000000000000000000a5dba38aa852c47254e6ba4c2ae46ed1a1fdb6bd4bd9ec5b68bb2a9cbb806093
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.