Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
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:
QuizManager
Compiler Version
v0.8.24+commit.e11b9ed9
ZkSolc Version
v1.5.10
Optimization Enabled:
Yes with Mode 3
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol"; import "@openzeppelin/contracts/interfaces/IERC20.sol"; contract QuizManager is Initializable, AccessControlUpgradeable, PausableUpgradeable, ReentrancyGuardUpgradeable { bytes32 public constant QUIZ_MANAGER_ROLE = keccak256("QUIZ_MANAGER_ROLE"); // ----------------------- // GLOBAL (DEFAULT) FIELDS // ----------------------- IERC20 public rewardToken; // Default reward token bool public isRewardTokenSet; // Whether the default rewardToken is set uint256 public prizePool; // Global prize pool (mutable) uint256 public defaultPrizePool; // Baseline to reset after each default payout // ----------------------- // PER-QUIZ STRUCT // ----------------------- struct Question { string content; string correctAnswer; address[] participants; address[] correctPlayers; address[] optedOutPlayers; } struct Quiz { // Core Quiz Info string id; uint256 createdTime; uint256 completedTime; // Quiz-Specific Token & Pool // If quizRewardToken != address(0), we MUST use this token & quizPrizePool // If quizRewardToken == address(0), we use the default token & global prizePool address quizRewardToken; uint256 quizPrizePool; // Quiz Data address[] enrolledPlayers; Question[] questions; address[] finalWinners; bool isCompleted; bool rewardsPaid; } // ----------------------- // STORAGE // ----------------------- mapping(string => Quiz) public quizzes; string[] public quizIds; // ----------------------- // EVENTS // ----------------------- event QuizCreated(string quizId, uint256 timestamp); event QuizCompleted(string quizId, uint256 timestamp, address[] winners); event RewardDeposited(address indexed sender, uint256 amount, string quizId); event RewardsPaid(string quizId, uint256 totalPaid, address[] winners); event PrizePoolUpdated(uint256 oldPrizePool, uint256 newPrizePool); event RewardTokenSet(address indexed tokenAddress); event EnrolledPlayersUpdated(string quizId, address[] newPlayers); event QuizPrizePoolUpdated(string quizId, uint256 oldPool, uint256 newPool); // ----------------------- // CONSTRUCTOR & INIT // ----------------------- /// @custom:oz-upgrades-unsafe-allow constructor constructor() { _disableInitializers(); } function initialize(uint256 _defaultPrizePool) public initializer { __AccessControl_init(); __Pausable_init(); __ReentrancyGuard_init(); // Grant the deployer the default admin role & quiz manager role _grantRole(DEFAULT_ADMIN_ROLE, msg.sender); _grantRole(QUIZ_MANAGER_ROLE, msg.sender); // Initialize defaultPrizePool = _defaultPrizePool; prizePool = _defaultPrizePool; // Active global prize pool } // ----------------------- // ADMIN FUNCTIONS // ----------------------- function setRewardToken(address tokenAddress) external onlyRole(DEFAULT_ADMIN_ROLE) { require(tokenAddress != address(0), "Invalid token address"); require(!isRewardTokenSet, "Reward token already set"); rewardToken = IERC20(tokenAddress); isRewardTokenSet = true; emit RewardTokenSet(tokenAddress); } function pause() external onlyRole(DEFAULT_ADMIN_ROLE) { _pause(); } function unpause() external onlyRole(DEFAULT_ADMIN_ROLE) { _unpause(); } // ----------------------- // QUIZ MANAGER FUNCTIONS // ----------------------- /** * @notice Create a new quiz. * @param quizId Unique string ID for the quiz. * @param enrolledPlayers (Optional) list of players. * @param quizRewardToken If nonzero, the token for this quiz’s prize pool. * @param customPrizePool If nonzero, the prize pool for this quiz’s token. * * If you set `quizRewardToken != address(0)`, then `quizPrizePool` must be > 0. * If `quizRewardToken == address(0)`, then `quizPrizePool` must be == 0. */ function createQuiz( string calldata quizId, address[] calldata enrolledPlayers, address quizRewardToken, uint256 customPrizePool ) external onlyRole(QUIZ_MANAGER_ROLE) whenNotPaused { require(bytes(quizId).length > 0, "Quiz ID cannot be empty"); require(quizzes[quizId].createdTime == 0, "Quiz ID already exists"); // --- NEW LOGIC: close all existing quizzes that are still active. for (uint256 i = 0; i < quizIds.length; i++) { Quiz storage activeQuiz = quizzes[quizIds[i]]; if (!activeQuiz.isCompleted) { // Mark it as completed activeQuiz.isCompleted = true; activeQuiz.completedTime = block.timestamp; // Optionally emit an event about forced closure // emit QuizCompleted(quizIds[i], block.timestamp, activeQuiz.finalWinners); } } // --- Continue existing logic for creation bool usingCustomToken = (quizRewardToken != address(0)); if (usingCustomToken) { require(customPrizePool > 0, "Must set customPrizePool > 0 if token is specified"); } else { require(customPrizePool == 0, "customPrizePool must be 0 if no custom token"); } // Determine initialPrizePool uint256 initialPrizePool = usingCustomToken ? customPrizePool : defaultPrizePool; if (!usingCustomToken && quizIds.length > 0) { // If there's a previous quiz that is using the default token but had no winners, // add its leftover prizePool Quiz storage prevQuiz = quizzes[quizIds[quizIds.length - 1]]; if (prevQuiz.isCompleted && prevQuiz.rewardsPaid && prevQuiz.finalWinners.length == 0 && prevQuiz.quizRewardToken == address(0) ) { initialPrizePool += prevQuiz.quizPrizePool; } } // Create the new quiz Quiz storage newQuiz = quizzes[quizId]; newQuiz.id = quizId; newQuiz.createdTime = block.timestamp; newQuiz.completedTime = 0; newQuiz.quizRewardToken = quizRewardToken; newQuiz.quizPrizePool = initialPrizePool; newQuiz.enrolledPlayers = enrolledPlayers; newQuiz.isCompleted = false; newQuiz.rewardsPaid = false; quizIds.push(quizId); emit QuizCreated(quizId, block.timestamp); } /** * @notice Update the list of enrolled players for a specific quiz. * @param quizId The unique ID of the quiz to update. * @param newPlayers The new list of player addresses to enroll. */ function updateEnrolledPlayers( string calldata quizId, address[] calldata newPlayers ) external onlyRole(QUIZ_MANAGER_ROLE) whenNotPaused { Quiz storage quiz = quizzes[quizId]; require(quiz.createdTime > 0, "Quiz does not exist"); // Update the enrolled players list quiz.enrolledPlayers = newPlayers; // Optionally, you can emit an event here to log the update. // Example: emit EnrolledPlayersUpdated(quizId, newPlayers); } /** * @notice Completes the quiz, storing final data: * - finalWinners * - questions (content + correct answers, etc.) * - completion time */ function completeQuiz( string calldata quizId, address[] calldata finalWinners, // Arrays of question data string[] calldata questionContents, string[] calldata correctAnswers, address[][] calldata questionParticipants, address[][] calldata questionCorrectPlayers, address[][] calldata questionOptedOutPlayers ) external onlyRole(QUIZ_MANAGER_ROLE) whenNotPaused { Quiz storage quiz = quizzes[quizId]; require(quiz.createdTime > 0, "Quiz does not exist"); require(!quiz.isCompleted, "Quiz already completed"); // All arrays for questions must be the same length uint256 questionCount = questionContents.length; require(questionCount == correctAnswers.length, "Mismatched Q/A arrays"); require(questionCount == questionParticipants.length, "Mismatched participants array"); require(questionCount == questionCorrectPlayers.length, "Mismatched correctPlayers array"); require(questionCount == questionOptedOutPlayers.length, "Mismatched optedOutPlayers array"); // Mark quiz completed quiz.isCompleted = true; quiz.completedTime = block.timestamp; quiz.finalWinners = finalWinners; // Populate questions for (uint256 i = 0; i < questionCount; i++) { quiz.questions.push( Question({ content: questionContents[i], correctAnswer: correctAnswers[i], participants: questionParticipants[i], correctPlayers: questionCorrectPlayers[i], optedOutPlayers: questionOptedOutPlayers[i] }) ); } emit QuizCompleted(quizId, block.timestamp, finalWinners); } /** * @notice Deposit into the GLOBAL prize pool (when using the default token). * If you want to deposit into a quiz-specific pool, use `depositQuizPrizePool`. */ function ownerDeposit(uint256 amount) external onlyRole(QUIZ_MANAGER_ROLE) whenNotPaused { require(isRewardTokenSet, "Reward token not set (global)"); require(amount > 0, "Deposit must be > 0"); bool success = rewardToken.transferFrom(msg.sender, address(this), amount); require(success, "Token transfer failed"); emit RewardDeposited(msg.sender, amount, "GLOBAL"); } /** * @notice Deposit specifically into a quiz’s custom prize pool (if that quiz uses a custom token). */ function depositQuizPrizePool(string calldata quizId, uint256 amount) external onlyRole(QUIZ_MANAGER_ROLE) whenNotPaused { Quiz storage quiz = quizzes[quizId]; require(quiz.createdTime > 0, "Quiz does not exist"); // Ensure this quiz actually uses a custom token require(quiz.quizRewardToken != address(0), "Quiz uses global token/pool, cannot deposit here"); require(amount > 0, "Deposit must be > 0"); // Transfer that quiz’s token from sender to this contract IERC20 customToken = IERC20(quiz.quizRewardToken); bool success = customToken.transferFrom(msg.sender, address(this), amount); require(success, "Quiz-specific token transfer failed"); emit RewardDeposited(msg.sender, amount, quizId); } /** * @notice Pays out the quiz winners. * - If the quiz has a custom token, use quiz.quizRewardToken & quiz.quizPrizePool. * - Otherwise, use the global token & global prizePool. * * If there are no winners, we do NOT reset or distribute the prize pool, * effectively carrying it over to the next quiz. * * After payout (if there *are* winners): * - For global, set `prizePool = defaultPrizePool`. * - For quiz-specific, set `quizPrizePool = 0`. */ function payoutWinners(string calldata quizId) external onlyRole(QUIZ_MANAGER_ROLE) whenNotPaused nonReentrant { Quiz storage quiz = quizzes[quizId]; require(quiz.createdTime > 0, "Quiz does not exist"); require(quiz.isCompleted, "Quiz not completed yet"); require(!quiz.rewardsPaid, "Rewards already paid"); require(quiz.quizPrizePool > 0, "Prize pool is empty"); address[] memory winners = quiz.finalWinners; uint256 winnerCount = winners.length; // Get the appropriate token IERC20 tokenToUse = quiz.quizRewardToken != address(0) ? IERC20(quiz.quizRewardToken) : rewardToken; if (quiz.quizRewardToken == address(0)) { require(isRewardTokenSet, "No default token set"); } // Mark rewards as paid quiz.rewardsPaid = true; // If no winners, keep the prize pool and exit if (winnerCount == 0) { emit RewardsPaid(quizId, 0, new address[](0)); return; } uint256 prizePerWinner = quiz.quizPrizePool / winnerCount; require(quiz.quizPrizePool >= prizePerWinner * winnerCount, "Prize calculation overflow"); // Transfer tokens to each winner for (uint256 i = 0; i < winnerCount; i++) { require(tokenToUse.transfer(winners[i], prizePerWinner), "Token transfer failed"); } // Reset this quiz's prize pool after successful payout uint256 paidPool = quiz.quizPrizePool; quiz.quizPrizePool = 0; emit RewardsPaid(quizId, paidPool, winners); } /** * @notice Update the default prize pool baseline (only affects global usage). */ function updateDefaultPrizePool(uint256 newAmount) external onlyRole(QUIZ_MANAGER_ROLE) whenNotPaused { require(newAmount > 0, "Prize pool must be > 0"); emit PrizePoolUpdated(defaultPrizePool, newAmount); defaultPrizePool = newAmount; } /** * @notice Manually sets (overwrites) the prize pool for a specific quiz. * @param quizId The unique ID of the quiz to update. * @param newPoolAmount The new prize pool amount to set. */ function setQuizPrizePool(string calldata quizId, uint256 newPoolAmount) external onlyRole(QUIZ_MANAGER_ROLE) whenNotPaused { Quiz storage quiz = quizzes[quizId]; require(quiz.createdTime > 0, "Quiz does not exist"); require(!quiz.isCompleted, "Cannot modify prize pool after completion"); uint256 oldPool = quiz.quizPrizePool; quiz.quizPrizePool = newPoolAmount; emit QuizPrizePoolUpdated(quizId, oldPool, newPoolAmount); } /*********************************************** * @notice Force-completes a quiz, for admin use only. * This will simply set isCompleted = true and * completedTime = block.timestamp. * It does NOT set finalWinners or add questions. ***********************************************/ function forceCompleteQuiz(string calldata quizId) external onlyRole(QUIZ_MANAGER_ROLE) whenNotPaused { Quiz storage quiz = quizzes[quizId]; require(quiz.createdTime > 0, "Quiz does not exist"); require(!quiz.isCompleted, "Quiz already completed"); // Mark quiz completed quiz.isCompleted = true; quiz.completedTime = block.timestamp; // Optionally emit an event (reuse QuizCompleted or a new event) emit QuizCompleted(quizId, block.timestamp, quiz.finalWinners); } // ----------------------- // VIEW FUNCTIONS // ----------------------- function getQuiz(string calldata quizId) external view returns (Quiz memory quiz) { quiz = quizzes[quizId]; require(quiz.createdTime > 0, "Quiz does not exist"); } function getAllQuizIds() external view returns (string[] memory) { return quizIds; } function getFinalWinners(string calldata quizId) external view returns (address[] memory) { Quiz storage quiz = quizzes[quizId]; require(quiz.createdTime > 0, "Quiz does not exist"); return quiz.finalWinners; } function getQuizPrizePool(string calldata quizId) external view returns (uint256) { Quiz storage quiz = quizzes[quizId]; require(quiz.createdTime > 0, "Quiz does not exist"); return quiz.quizPrizePool; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol) pragma solidity ^0.8.20; import {Initializable} from "../proxy/utils/Initializable.sol"; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at, * consider using {ReentrancyGuardTransient} instead. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuardUpgradeable is Initializable { // 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; /// @custom:storage-location erc7201:openzeppelin.storage.ReentrancyGuard struct ReentrancyGuardStorage { uint256 _status; } // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.ReentrancyGuard")) - 1)) & ~bytes32(uint256(0xff)) bytes32 private constant ReentrancyGuardStorageLocation = 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00; function _getReentrancyGuardStorage() private pure returns (ReentrancyGuardStorage storage $) { assembly { $.slot := ReentrancyGuardStorageLocation } } /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); function __ReentrancyGuard_init() internal onlyInitializing { __ReentrancyGuard_init_unchained(); } function __ReentrancyGuard_init_unchained() internal onlyInitializing { ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage(); $._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 { ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage(); // On the first call to nonReentrant, _status will be NOT_ENTERED if ($._status == ENTERED) { revert ReentrancyGuardReentrantCall(); } // Any calls to nonReentrant after this point will fail $._status = ENTERED; } function _nonReentrantAfter() private { ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage(); // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) $._status = NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage(); return $._status == ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/AccessControl.sol) pragma solidity ^0.8.20; import {IAccessControl} from "@openzeppelin/contracts/access/IAccessControl.sol"; import {ContextUpgradeable} from "../utils/ContextUpgradeable.sol"; import {ERC165Upgradeable} from "../utils/introspection/ERC165Upgradeable.sol"; import {Initializable} from "../proxy/utils/Initializable.sol"; /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ```solidity * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ```solidity * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules} * to enforce additional security measures for this role. */ abstract contract AccessControlUpgradeable is Initializable, ContextUpgradeable, IAccessControl, ERC165Upgradeable { struct RoleData { mapping(address account => bool) hasRole; bytes32 adminRole; } bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /// @custom:storage-location erc7201:openzeppelin.storage.AccessControl struct AccessControlStorage { mapping(bytes32 role => RoleData) _roles; } // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.AccessControl")) - 1)) & ~bytes32(uint256(0xff)) bytes32 private constant AccessControlStorageLocation = 0x02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800; function _getAccessControlStorage() private pure returns (AccessControlStorage storage $) { assembly { $.slot := AccessControlStorageLocation } } /** * @dev Modifier that checks that an account has a specific role. Reverts * with an {AccessControlUnauthorizedAccount} error including the required role. */ modifier onlyRole(bytes32 role) { _checkRole(role); _; } function __AccessControl_init() internal onlyInitializing { } function __AccessControl_init_unchained() internal onlyInitializing { } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view virtual returns (bool) { AccessControlStorage storage $ = _getAccessControlStorage(); return $._roles[role].hasRole[account]; } /** * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()` * is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier. */ function _checkRole(bytes32 role) internal view virtual { _checkRole(role, _msgSender()); } /** * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account` * is missing `role`. */ function _checkRole(bytes32 role, address account) internal view virtual { if (!hasRole(role, account)) { revert AccessControlUnauthorizedAccount(account, role); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view virtual returns (bytes32) { AccessControlStorage storage $ = _getAccessControlStorage(); return $._roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. * * May emit a {RoleGranted} event. */ function grantRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. * * May emit a {RoleRevoked} event. */ function revokeRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been revoked `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `callerConfirmation`. * * May emit a {RoleRevoked} event. */ function renounceRole(bytes32 role, address callerConfirmation) public virtual { if (callerConfirmation != _msgSender()) { revert AccessControlBadConfirmation(); } _revokeRole(role, callerConfirmation); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { AccessControlStorage storage $ = _getAccessControlStorage(); bytes32 previousAdminRole = getRoleAdmin(role); $._roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } /** * @dev Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted. * * Internal function without access restriction. * * May emit a {RoleGranted} event. */ function _grantRole(bytes32 role, address account) internal virtual returns (bool) { AccessControlStorage storage $ = _getAccessControlStorage(); if (!hasRole(role, account)) { $._roles[role].hasRole[account] = true; emit RoleGranted(role, account, _msgSender()); return true; } else { return false; } } /** * @dev Attempts to revoke `role` to `account` and returns a boolean indicating if `role` was revoked. * * Internal function without access restriction. * * May emit a {RoleRevoked} event. */ function _revokeRole(bytes32 role, address account) internal virtual returns (bool) { AccessControlStorage storage $ = _getAccessControlStorage(); if (hasRole(role, account)) { $._roles[role].hasRole[account] = false; emit RoleRevoked(role, account, _msgSender()); return true; } else { return false; } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol) pragma solidity ^0.8.20; import {ContextUpgradeable} from "../utils/ContextUpgradeable.sol"; import {Initializable} from "../proxy/utils/Initializable.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract PausableUpgradeable is Initializable, ContextUpgradeable { /// @custom:storage-location erc7201:openzeppelin.storage.Pausable struct PausableStorage { bool _paused; } // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Pausable")) - 1)) & ~bytes32(uint256(0xff)) bytes32 private constant PausableStorageLocation = 0xcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300; function _getPausableStorage() private pure returns (PausableStorage storage $) { assembly { $.slot := PausableStorageLocation } } /** * @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); /** * @dev The operation failed because the contract is paused. */ error EnforcedPause(); /** * @dev The operation failed because the contract is not paused. */ error ExpectedPause(); /** * @dev Initializes the contract in unpaused state. */ function __Pausable_init() internal onlyInitializing { __Pausable_init_unchained(); } function __Pausable_init_unchained() internal onlyInitializing { PausableStorage storage $ = _getPausableStorage(); $._paused = false; } /** * @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(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { PausableStorage storage $ = _getPausableStorage(); return $._paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { if (paused()) { revert EnforcedPause(); } } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { if (!paused()) { revert ExpectedPause(); } } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { PausableStorage storage $ = _getPausableStorage(); $._paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { PausableStorage storage $ = _getPausableStorage(); $._paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol) pragma solidity ^0.8.20; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be * reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in * case an upgrade adds a module that needs to be initialized. * * For example: * * [.hljs-theme-light.nopadding] * ```solidity * contract MyToken is ERC20Upgradeable { * function initialize() initializer public { * __ERC20_init("MyToken", "MTK"); * } * } * * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { * function initializeV2() reinitializer(2) public { * __ERC20Permit_init("MyToken"); * } * } * ``` * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. * * [CAUTION] * ==== * Avoid leaving a contract uninitialized. * * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: * * [.hljs-theme-light.nopadding] * ``` * /// @custom:oz-upgrades-unsafe-allow constructor * constructor() { * _disableInitializers(); * } * ``` * ==== */ abstract contract Initializable { /** * @dev Storage of the initializable contract. * * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions * when using with upgradeable contracts. * * @custom:storage-location erc7201:openzeppelin.storage.Initializable */ struct InitializableStorage { /** * @dev Indicates that the contract has been initialized. */ uint64 _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool _initializing; } // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Initializable")) - 1)) & ~bytes32(uint256(0xff)) bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00; /** * @dev The contract is already initialized. */ error InvalidInitialization(); /** * @dev The contract is not initializing. */ error NotInitializing(); /** * @dev Triggered when the contract has been initialized or reinitialized. */ event Initialized(uint64 version); /** * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope, * `onlyInitializing` functions can be used to initialize parent contracts. * * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in * production. * * Emits an {Initialized} event. */ modifier initializer() { // solhint-disable-next-line var-name-mixedcase InitializableStorage storage $ = _getInitializableStorage(); // Cache values to avoid duplicated sloads bool isTopLevelCall = !$._initializing; uint64 initialized = $._initialized; // Allowed calls: // - initialSetup: the contract is not in the initializing state and no previous version was // initialized // - construction: the contract is initialized at version 1 (no reininitialization) and the // current contract is just being deployed bool initialSetup = initialized == 0 && isTopLevelCall; bool construction = initialized == 1 && address(this).code.length == 0; if (!initialSetup && !construction) { revert InvalidInitialization(); } $._initialized = 1; if (isTopLevelCall) { $._initializing = true; } _; if (isTopLevelCall) { $._initializing = false; emit Initialized(1); } } /** * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be * used to initialize parent contracts. * * A reinitializer may be used after the original initialization step. This is essential to configure modules that * are added through upgrades and that require initialization. * * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer` * cannot be nested. If one is invoked in the context of another, execution will revert. * * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in * a contract, executing them in the right order is up to the developer or operator. * * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization. * * Emits an {Initialized} event. */ modifier reinitializer(uint64 version) { // solhint-disable-next-line var-name-mixedcase InitializableStorage storage $ = _getInitializableStorage(); if ($._initializing || $._initialized >= version) { revert InvalidInitialization(); } $._initialized = version; $._initializing = true; _; $._initializing = false; emit Initialized(version); } /** * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the * {initializer} and {reinitializer} modifiers, directly or indirectly. */ modifier onlyInitializing() { _checkInitializing(); _; } /** * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}. */ function _checkInitializing() internal view virtual { if (!_isInitializing()) { revert NotInitializing(); } } /** * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call. * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized * to any version. It is recommended to use this to lock implementation contracts that are designed to be called * through proxies. * * Emits an {Initialized} event the first time it is successfully executed. */ function _disableInitializers() internal virtual { // solhint-disable-next-line var-name-mixedcase InitializableStorage storage $ = _getInitializableStorage(); if ($._initializing) { revert InvalidInitialization(); } if ($._initialized != type(uint64).max) { $._initialized = type(uint64).max; emit Initialized(type(uint64).max); } } /** * @dev Returns the highest version that has been initialized. See {reinitializer}. */ function _getInitializedVersion() internal view returns (uint64) { return _getInitializableStorage()._initialized; } /** * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}. */ function _isInitializing() internal view returns (bool) { return _getInitializableStorage()._initializing; } /** * @dev Returns a pointer to the storage namespace. */ // solhint-disable-next-line var-name-mixedcase function _getInitializableStorage() private pure returns (InitializableStorage storage $) { assembly { $.slot := INITIALIZABLE_STORAGE } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol) pragma solidity ^0.8.20; import {IERC20} from "../token/ERC20/IERC20.sol";
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; import {Initializable} from "../proxy/utils/Initializable.sol"; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract ContextUpgradeable is Initializable { function __Context_init() internal onlyInitializing { } function __Context_init_unchained() internal onlyInitializing { } function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/ERC165.sol) pragma solidity ^0.8.20; import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; import {Initializable} from "../../proxy/utils/Initializable.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` */ abstract contract ERC165Upgradeable is Initializable, IERC165 { function __ERC165_init() internal onlyInitializing { } function __ERC165_init_unchained() internal onlyInitializing { } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (access/IAccessControl.sol) pragma solidity ^0.8.20; /** * @dev External interface of AccessControl declared to support ERC-165 detection. */ interface IAccessControl { /** * @dev The `account` is missing a role. */ error AccessControlUnauthorizedAccount(address account, bytes32 neededRole); /** * @dev The caller of a function is not the expected one. * * NOTE: Don't confuse with {AccessControlUnauthorizedAccount}. */ error AccessControlBadConfirmation(); /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). * Expected in cases where the role was granted using the internal {AccessControl-_grantRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) external; /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) external; /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `callerConfirmation`. */ function renounceRole(bytes32 role, address callerConfirmation) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-20 standard as defined in the ERC. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[ERC]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "evmVersion": "paris", "optimizer": { "enabled": true, "mode": "3" }, "outputSelection": { "*": { "*": [ "abi" ] } }, "detectMissingLibraries": false, "forceEVMLA": false, "enableEraVMExtensions": false, "libraries": {} }
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"quizId","type":"string"},{"indexed":false,"internalType":"address[]","name":"newPlayers","type":"address[]"}],"name":"EnrolledPlayersUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldPrizePool","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPrizePool","type":"uint256"}],"name":"PrizePoolUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"quizId","type":"string"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"winners","type":"address[]"}],"name":"QuizCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"quizId","type":"string"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"QuizCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"quizId","type":"string"},{"indexed":false,"internalType":"uint256","name":"oldPool","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPool","type":"uint256"}],"name":"QuizPrizePoolUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"quizId","type":"string"}],"name":"RewardDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"}],"name":"RewardTokenSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"quizId","type":"string"},{"indexed":false,"internalType":"uint256","name":"totalPaid","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"winners","type":"address[]"}],"name":"RewardsPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"QUIZ_MANAGER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"quizId","type":"string"},{"internalType":"address[]","name":"finalWinners","type":"address[]"},{"internalType":"string[]","name":"questionContents","type":"string[]"},{"internalType":"string[]","name":"correctAnswers","type":"string[]"},{"internalType":"address[][]","name":"questionParticipants","type":"address[][]"},{"internalType":"address[][]","name":"questionCorrectPlayers","type":"address[][]"},{"internalType":"address[][]","name":"questionOptedOutPlayers","type":"address[][]"}],"name":"completeQuiz","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"quizId","type":"string"},{"internalType":"address[]","name":"enrolledPlayers","type":"address[]"},{"internalType":"address","name":"quizRewardToken","type":"address"},{"internalType":"uint256","name":"customPrizePool","type":"uint256"}],"name":"createQuiz","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultPrizePool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"quizId","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositQuizPrizePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"quizId","type":"string"}],"name":"forceCompleteQuiz","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllQuizIds","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"quizId","type":"string"}],"name":"getFinalWinners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"quizId","type":"string"}],"name":"getQuiz","outputs":[{"components":[{"internalType":"string","name":"id","type":"string"},{"internalType":"uint256","name":"createdTime","type":"uint256"},{"internalType":"uint256","name":"completedTime","type":"uint256"},{"internalType":"address","name":"quizRewardToken","type":"address"},{"internalType":"uint256","name":"quizPrizePool","type":"uint256"},{"internalType":"address[]","name":"enrolledPlayers","type":"address[]"},{"components":[{"internalType":"string","name":"content","type":"string"},{"internalType":"string","name":"correctAnswer","type":"string"},{"internalType":"address[]","name":"participants","type":"address[]"},{"internalType":"address[]","name":"correctPlayers","type":"address[]"},{"internalType":"address[]","name":"optedOutPlayers","type":"address[]"}],"internalType":"struct QuizManager.Question[]","name":"questions","type":"tuple[]"},{"internalType":"address[]","name":"finalWinners","type":"address[]"},{"internalType":"bool","name":"isCompleted","type":"bool"},{"internalType":"bool","name":"rewardsPaid","type":"bool"}],"internalType":"struct QuizManager.Quiz","name":"quiz","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"quizId","type":"string"}],"name":"getQuizPrizePool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_defaultPrizePool","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isRewardTokenSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ownerDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"quizId","type":"string"}],"name":"payoutWinners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"prizePool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"quizIds","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"quizzes","outputs":[{"internalType":"string","name":"id","type":"string"},{"internalType":"uint256","name":"createdTime","type":"uint256"},{"internalType":"uint256","name":"completedTime","type":"uint256"},{"internalType":"address","name":"quizRewardToken","type":"address"},{"internalType":"uint256","name":"quizPrizePool","type":"uint256"},{"internalType":"bool","name":"isCompleted","type":"bool"},{"internalType":"bool","name":"rewardsPaid","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"quizId","type":"string"},{"internalType":"uint256","name":"newPoolAmount","type":"uint256"}],"name":"setQuizPrizePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"setRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateDefaultPrizePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"quizId","type":"string"},{"internalType":"address[]","name":"newPlayers","type":"address[]"}],"name":"updateEnrolledPlayers","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
9c4d535b0000000000000000000000000000000000000000000000000000000000000000010006b1d2690594df042e916cee734e28237e5cf0e28fc4cb3afcefcb882b2c00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x00020000000000020019000000000002000100000001035500000060031002700000060c0030019d0000008004000039000000400040043f00000001002001900000002c0000c13d0000060c03300197000000040030008c000015f60000413d000000000201043b000000e002200270000006150020009c0000004b0000213d0000062d0020009c000000cf0000213d000006390020009c000002310000213d0000063f0020009c000005000000213d000006420020009c0000063e0000613d000006430020009c000015f60000c13d0000000001000416000000000001004b000015f60000c13d0000000402000039000000000502041a000006710050009c000000260000813d00000005015002100000003f011000390000067801100197000006a70010009c000008d70000a13d0000068a01000041000000000010043f0000004101000039000000040010043f0000068b010000410000182d000104300000000001000416000000000001004b000015f60000c13d0000060d01000041000000000101041a0000060e00100198000000cb0000c13d0000061102100197000006110020009c000000460000613d00000611011001c70000060d02000041000000000012041b0000061101000041000000800010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000612011001c70000800d0200003900000001030000390000061304000041182b18210000040f0000000100200190000015f60000613d00000020010000390000010000100443000001200000044300000614010000410000182c0001042e000006160020009c000001d10000213d000006220020009c000003c50000213d000006280020009c0000050a0000213d0000062b0020009c0000064f0000613d0000062c0020009c000015f60000c13d000000440030008c000015f60000413d0000000002000416000000000002004b000015f60000c13d0000000402100370000000000202043b000006110020009c000015f60000213d0000002304200039000000000034004b000015f60000813d001800040020003d0000001804100360000000000404043b001900000004001d000006110040009c000015f60000213d0000002404200039001700000004001d0000001902400029000000000032004b000015f60000213d0000002401100370000000000101043b001600000001001d0000000001000411000000000010043f0000065001000041000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b000000000101041a000000ff001001900000080f0000613d0000064901000041000000000101041a000000ff00100190000008cf0000c13d0000001901000029000006ac021001980015001f00100193000000400100043d001400000002001d0000000002210019000000180300002900000020033000390000000103300367000000940000613d000000000403034f0000000005010019000000004604043c0000000005650436000000000025004b000000900000c13d000000150000006b000000a20000613d000000140330036000000015040000290000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000032043500000019040000290000000002410019000000030300003900000000003204350000060c0010009c0000060c010080410000004001100210000006570040009c000006570200004100000000020440190000006002200210000000000112019f00000000020004140000060c0020009c0000060c02008041000000c002200210000000000121019f000006580110009a0000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b0000000102100039000000000202041a000000000002004b00000b440000613d0000000301100039000000000101041a0000064b0210019800000bab0000c13d000000400100043d0000006402100039000006870300004100000000003204350000004402100039000006880300004100000000003204350000002402100039000000300300003900000ba00000013d0000060f01000041000000800010043f00000610010000410000182d000104300000062e0020009c0000042f0000213d000006340020009c000005330000213d000006370020009c000006540000613d000006380020009c000015f60000c13d000000440030008c000015f60000413d0000000002000416000000000002004b000015f60000c13d0000000402100370000000000202043b000006110020009c000015f60000213d0000002304200039000000000034004b000015f60000813d001800040020003d0000001804100360000000000404043b001900000004001d000006110040009c000015f60000213d00000019022000290000002402200039000000000032004b000015f60000213d0000002402100370000000000202043b000006110020009c000015f60000213d0000002304200039000000000034004b000015f60000813d0000000404200039000000000141034f000000000401043b000006110040009c000015f60000213d000000240520003900000005014002100000000001510019000000000031004b000015f60000213d0000000001000411000000000010043f0000065001000041000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039001700000004001d001600000005001d182b18260000040f0000000100200190000015f60000613d000000000101043b000000000101041a000000ff001001900000080f0000613d0000064901000041000000000101041a000000ff00100190000008cf0000c13d0000001901000029000006ac021001980015001f00100193000000400100043d001400000002001d000000000221001900000018030000290000002003300039001800000003001d0000000103300367000001260000613d000000000403034f0000000005010019000000004604043c0000000005650436000000000025004b000001220000c13d000000150000006b000001340000613d000000140330036000000015040000290000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000032043500000019040000290000000002410019000000030300003900000000003204350000060c0010009c0000060c010080410000004001100210000006570040009c000006570200004100000000020440190000006002200210000000000112019f00000000020004140000060c0020009c0000060c02008041000000c002200210000000000121019f000006580110009a0000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b0000000102100039000000000202041a000000000002004b00000b440000613d0000000502100039000000000302041a0000001701000029001300000002001d000000000012041b001200000003001d000000000013004b0000016c0000a13d0000001301000029000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f00000001002001900000001703000029000015f60000613d000000000201043b00000000013200190000001202200029000000000021004b0000016c0000813d000000000001041b0000000101100039000000000021004b000001680000413d0000001301000029000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f000000010020019000000017070000290000001604000029000015f60000613d0000000102000367000000000101043b000000000007004b000001880000613d0000000003000019000000000542034f000000000505043b0000064b0050009c000015f60000213d0000000006130019000000000056041b00000020044000390000000103300039000000000073004b0000017e0000413d000000400100043d00000040031000390000001904000029000000000043043500000018062003600000004003000039000000000331043600000060041000390000001405400029000000140000006b000001990000613d000000000706034f0000000008040019000000007907043c0000000008980436000000000058004b000001950000c13d000000150000006b000001a70000613d000000140660036000000015070000290000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f00000000006504350000001906000029000000000564001900000000000504350000001f05600039000006ac0550019700000000045400190000000005140049000000000053043500000017050000290000000003540436000000000005004b000001bf0000613d000000000400001900000017060000290000001607000029000000000572034f000000000505043b0000064b0050009c000015f60000213d000000000353043600000020077000390000000104400039000000000064004b000001b60000413d00000000021300490000060c0020009c0000060c0200804100000060022002100000060c0010009c0000060c010080410000004001100210000000000112019f00000000020004140000060c0020009c0000060c02008041000000c002200210000000000121019f0000064e011001c70000800d02000039000000010300003900000699040000410000094f0000013d000006170020009c000004f20000213d0000061d0020009c000005720000213d000006200020009c000006650000613d000006210020009c000015f60000c13d000000240030008c000015f60000413d0000000002000416000000000002004b000015f60000c13d0000000402100370000000000402043b000006110040009c000015f60000213d0000002302400039000000000032004b000015f60000813d0000000402400039000000000121034f000000000201043b0000002401400039182b168c0000040f0000000013010434001800000003001d000000400200043d001900000002001d182b15f80000040f000000030400003900000018030000290000001901000029000000000213001900000000004204350000002002300039182b180c0000040f001600000001001d182b16310000040f00000016030000290000000102300039000000000202041a001900000002001d0000000202300039000000000202041a001800000002001d0000000302300039000000000202041a001700000002001d0000000402300039000000000202041a001500000002001d0000000802300039000000000202041a001400000002001d000000e002000039000000400300043d001300000003001d0000000002230436001600000002001d000000e002300039182b16050000040f00000014050000290000ff00005001900000000002000039000000010200c0390000001304000029000000c0034000390000000000230435000000ff005001900000000002000039000000010200c039000000a003400039000000000023043500000080024000390000001503000029000000000032043500000017020000290000064b022001970000006003400039000000000023043500000040024000390000001803000029000000000032043500000019020000290000001603000029000000000023043500000000014100490000060c0010009c0000060c0100804100000060011002100000060c0040009c0000060c040080410000004002400210000000000121019f0000182c0001042e0000063a0020009c000005910000213d0000063d0020009c000006b50000613d0000063e0020009c000015f60000c13d000000e40030008c000015f60000413d0000000002000416000000000002004b000015f60000c13d0000000402100370000000000202043b000006110020009c000015f60000213d0000002304200039000000000034004b000015f60000813d0000000404200039000000000441034f000000000404043b001900000004001d000006110040009c000015f60000213d0000002404200039001800000004001d0000001902400029000000000032004b000015f60000213d0000002402100370000000000202043b000006110020009c000015f60000213d0000002304200039000000000034004b000015f60000813d0000000404200039000000000441034f000000000404043b001700000004001d000006110040009c000015f60000213d001500240020003d000000170200002900000005022002100000001502200029000000000032004b000015f60000213d0000004402100370000000000202043b001600000002001d000006110020009c000015f60000213d00000016020000290000002302200039000000000032004b000015f60000813d00000016020000290000000402200039000000000221034f000000000202043b001400000002001d000006110020009c000015f60000213d0000001602000029001300240020003d000000140200002900000005022002100000001302200029000000000032004b000015f60000213d0000006402100370000000000202043b000006110020009c000015f60000213d0000002304200039000000000034004b000015f60000813d0000000404200039000000000441034f000000000404043b001200000004001d000006110040009c000015f60000213d001100240020003d000000120200002900000005022002100000001102200029000000000032004b000015f60000213d0000008402100370000000000202043b000006110020009c000015f60000213d0000002304200039000000000034004b000015f60000813d0000000404200039000000000441034f000000000404043b001000000004001d000006110040009c000015f60000213d000f00240020003d000000100200002900000005022002100000000f02200029000000000032004b000015f60000213d000000a402100370000000000202043b000006110020009c000015f60000213d0000002304200039000000000034004b000015f60000813d0000000404200039000000000441034f000000000404043b000e00000004001d000006110040009c000015f60000213d000d00240020003d0000000e0200002900000005022002100000000d02200029000000000032004b000015f60000213d000000c402100370000000000202043b000006110020009c000015f60000213d0000002304200039000000000034004b000015f60000813d0000000404200039000000000141034f000000000101043b000c00000001001d000006110010009c000015f60000213d000b00240020003d0000000c0100002900000005011002100000000b01100029000000000031004b000015f60000213d0000000001000411000000000010043f0000065001000041000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b000000000101041a000000ff001001900000080f0000613d0000064901000041000000000101041a000000ff00100190000008cf0000c13d0000001901000029000006ac021001980002001f0010019300000018010000290000000103100367000000400100043d000100000002001d0000000002210019000002e80000613d000000000403034f0000000005010019000000004604043c0000000005650436000000000025004b000002e40000c13d000000020000006b000002f60000613d000000010330036000000002040000290000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000032043500000019040000290000000002410019000000030300003900000000003204350000060c0010009c0000060c010080410000004001100210000006570040009c000006570200004100000000020440190000006002200210000000000112019f00000000020004140000060c0020009c0000060c02008041000000c002200210000000000121019f000006580110009a0000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b000a00000001001d0000000101100039000000000101041a000000000001004b00000b440000613d0000000a010000290000000801100039000000000201041a000000ff0020019000000b940000c13d0000001204000029000000140040006b000012940000c13d0000001004000029000000140040006b000012980000c13d0000000e04000029000000140040006b0000129c0000c13d0000000c04000029000000140040006b000012a30000c13d000006ad0220019700000001022001bf000000000021041b0000066901000041000000000010044300000000010004140000060c0010009c0000060c01008041000000c0011002100000066a011001c70000800b02000039182b18260000040f00000001002001900000127b0000613d000000000101043b0000000a030000290000000202300039000000000012041b0000000702300039000000000302041a0000001701000029001200000002001d000000000012041b001000000003001d000000000013004b000003510000a13d0000001201000029000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000201043b00000017012000290000001002200029000000000021004b000003510000813d000000000001041b0000000101100039000000000021004b0000034d0000413d0000001201000029000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b000000170000006b0000036c0000613d000000010200036700000000030000190000001504000029000000000542034f000000000505043b0000064b0050009c000015f60000213d0000000006130019000000000056041b00000020044000390000000103300039000000170030006c000003620000413d000000140000006b000012ae0000c13d000000400300043d00000060013000390000001902000029000000000021043500000060010000390000000001130436001300000001001d001400000003001d0000008001300039001600000001001d000000010110002900000018020000290000000102200367000000010000006b000003830000613d000000000302034f0000001604000029000000003503043c0000000004540436000000000014004b0000037f0000c13d000000020000006b000003910000613d000000010220036000000002030000290000000303300210000000000401043300000000043401cf000000000434022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000242019f00000000002104350000001602000029000000190120002900000000000104350000066901000041000000000010044300000000010004140000060c0010009c0000060c01008041000000c0011002100000066a011001c70000800b02000039182b18260000040f00000001002001900000127b0000613d000000000101043b0000001302000029000000000012043500000019010000290000001f01100039000006ac011001970000001601100029000000140300002900000000023100490000004003300039000000000023043500000017020000290000000001210436000000000002004b000003ba0000613d000000010200036700000000030000190000001504200360000000000404043b0000064b0040009c000015f60000213d00000000014104360000001504000029001500200040003d0000000103300039000000170030006c000003b00000413d000000140200002900000000012100490000060c0010009c0000060c0100804100000060011002100000060c0020009c0000060c020080410000004002200210000000000121019f000000000200041400000d3e0000013d000006230020009c000005d40000213d000006260020009c000006c70000613d000006270020009c000015f60000c13d000000240030008c000015f60000413d0000000002000416000000000002004b000015f60000c13d0000000402100370000000000402043b000006110040009c000015f60000213d0000002302400039000000000032004b000015f60000813d0000000405400039000000000251034f000000000202043b000006110020009c000015f60000213d00000000042400190000002404400039000000000034004b000015f60000213d000001c003000039000000400030043f0000002004500039000000000141034f0000006004000039000000800040043f000000a00000043f000000c00000043f000000e00000043f000001000000043f000001200040043f000001400040043f000001600040043f000006ac052001980000001f0620018f000001c004500039000001800000043f000001a00000043f000003f80000613d000000000701034f000000007807043c0000000003830436000000000043004b000003f40000c13d000000000006004b000004050000613d000000000151034f0000000303600210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000001c00120003900000003030000390000000000310435000006570020009c0000065702008041000000600120021000000000020004140000060c0020009c0000060c02008041000000c002200210000000000121019f000006760110009a0000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b000f00000001001d000000400100043d001000000001001d000006770010009c000000260000213d00000010010000290000014004100039000000400040043f0000000f01000029000000000101041a000000010210019000000001051002700000007f0550618f0000001f0050008c00000000030000390000000103002039000000000331013f000000010030019000000ae90000613d0000068a01000041000000000010043f0000002201000039000000040010043f0000068b010000410000182d000104300000062f0020009c000005dd0000213d000006320020009c000006e00000613d000006330020009c000015f60000c13d000000240030008c000015f60000413d0000000002000416000000000002004b000015f60000c13d0000000402100370000000000202043b000006110020009c000015f60000213d0000002304200039000000000034004b000015f60000813d001800040020003d0000001801100360000000000101043b001900000001001d000006110010009c000015f60000213d00000019012000290000002401100039000000000031004b000015f60000213d0000000001000411000000000010043f0000065001000041000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b000000000101041a000000ff001001900000080f0000613d0000064901000041000000000101041a000000ff00100190000008cf0000c13d0000001901000029000006ac021001980017001f00100193000000400100043d001600000002001d000000000221001900000018030000290000002003300039001800000003001d0000000103300367000004710000613d000000000403034f0000000005010019000000004604043c0000000005650436000000000025004b0000046d0000c13d000000170000006b0000047f0000613d000000160330036000000017040000290000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000032043500000019040000290000000002410019000000030300003900000000003204350000060c0010009c0000060c010080410000004001100210000006570040009c000006570200004100000000020440190000006002200210000000000112019f00000000020004140000060c0020009c0000060c02008041000000c002200210000000000121019f000006580110009a0000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b001500000001001d0000000101100039000000000101041a000000000001004b00000b440000613d00000015010000290000000801100039000000000201041a000000ff0020019000000b940000c13d000006ad0220019700000001022001bf000000000021041b0000066901000041000000000010044300000000010004140000060c0010009c0000060c01008041000000c0011002100000066a011001c70000800b02000039182b18260000040f00000001002001900000127b0000613d000000000101043b00000015020000290000000202200039000000000012041b000000400400043d00000060024000390000001903000029000000000032043500000060020000390000000003240436001400000004001d0000008002400039000000160420002900000018060000290000000106600367000000160000006b000004c50000613d000000000506034f0000000007020019000000005805043c0000000007870436000000000047004b000004c10000c13d00000015050000290000000705500039000000170000006b000004d50000613d000000160660036000000017070000290000000307700210000000000804043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f000000000064043500000019060000290000000004620019000000000004043500000000001304350000001f01600039000006ac0110019700000000011200190000001403000029000000000231004900000040033000390000000000230435000000000205041a001900000002001d0000000001210436001800000001001d000000000050043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000190000006b00000d290000c13d000000180400002900000d340000013d000006180020009c000006140000213d0000061b0020009c000006e70000613d0000061c0020009c000015f60000c13d0000000001000416000000000001004b000015f60000c13d000000000100041a0000064b01100197000000800010043f00000656010000410000182c0001042e000006400020009c000007910000613d000006410020009c000015f60000c13d0000000001000416000000000001004b000015f60000c13d000000000100041a0000067a001001980000083d0000013d000006290020009c000007b80000613d0000062a0020009c000015f60000c13d000000240030008c000015f60000413d0000000002000416000000000002004b000015f60000c13d0000000401100370000000000101043b001900000001001d0000064b0010009c000015f60000213d0000000001000411000000000010043f0000064c01000041000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b000000000101041a000000ff00100190000007cc0000613d00000019010000290000064b0510019800000a170000c13d000000400100043d00000044021000390000067e0300004100000000003204350000002402100039000000150300003900000b4a0000013d000006350020009c000007d50000613d000006360020009c000015f60000c13d000000240030008c000015f60000413d0000000002000416000000000002004b000015f60000c13d0000000401100370000000000101043b000006110010009c000015f60000213d00000004011000390000000002030019182b16170000040f0000001f0420018f000006ac052001980000000106100367000000400100043d00000000035100190000054f0000613d000000000706034f0000000008010019000000007907043c0000000008980436000000000038004b0000054b0000c13d000000000004004b0000055c0000613d000000000556034f0000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000003210019000000030400003900000000004304350000002002200039182b180c0000040f001900000001001d0000000102100039000000000102041a000000000001004b0000000001000039000000010100c039182b16c40000040f00000019010000290000000401100039000000000101041a000000400200043d00000000001204350000060c0020009c0000060c02008041000000400120021000000696011001c70000182c0001042e0000061e0020009c000007f60000613d0000061f0020009c000015f60000c13d000000440030008c000015f60000413d0000000002000416000000000002004b000015f60000c13d0000002402100370000000000202043b001900000002001d0000064b0020009c000015f60000213d0000000401100370000000000101043b001800000001001d000000000010043f0000066201000041000000200010043f00000040020000390000000001000019182b180c0000040f0000000101100039000000000101041a182b178a0000040f00000018010000290000001902000029182b17ba0000040f00000000010000190000182c0001042e0000063b0020009c0000081d0000613d0000063c0020009c000015f60000c13d000000440030008c000015f60000413d0000000002000416000000000002004b000015f60000c13d0000000402100370000000000202043b001900000002001d0000002401100370000000000101043b001800000001001d0000064b0010009c000015f60000213d0000001901000029000000000010043f0000066201000041000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b0000000101100039000000000101041a001700000001001d000000000010043f0000066201000041000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b0000000002000411000000000020043f000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b000000000101041a000000ff0010019000000a780000c13d000000400100043d00000024021000390000001703000029000008120000013d000006240020009c000008310000613d000006250020009c000015f60000c13d0000000001000416000000000001004b000015f60000c13d0000000201000039000006c30000013d000006300020009c000008370000613d000006310020009c000015f60000c13d000000240030008c000015f60000413d0000000002000416000000000002004b000015f60000c13d0000000402100370000000000202043b000006110020009c000015f60000213d0000002304200039000000000034004b000015f60000813d001900040020003d0000001901100360000000000101043b001200000001001d000006110010009c000015f60000213d0000002402200039001100000002001d0000001201200029000000000031004b000015f60000213d0000000001000411000000000010043f0000065001000041000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b000000000101041a000000ff001001900000080f0000613d0000064901000041000000000101041a000000ff00100190000008cf0000c13d000000400100043d0000064a02000041000000000302041a000000020030008c00000b090000c13d0000069402000041000008d10000013d000006190020009c000008420000613d0000061a0020009c000015f60000c13d000000240030008c000015f60000413d0000000002000416000000000002004b000015f60000c13d0000060d02000041000000000202041a0000060e032001970000000401100370000000000501043b0000061101200198000008850000613d000000010010008c000008940000c13d001700000002001d001800000005001d001900000003001d000006440100004100000000001004430000000001000410000000040010044300000000010004140000060c0010009c0000060c01008041000000c00110021000000645011001c70000800202000039182b18260000040f00000001002001900000127b0000613d000000000101043b000000000001004b000000190300002900000018050000290000001702000029000008870000613d000000400400043d000008940000013d000000240030008c000015f60000413d0000000002000416000000000002004b000015f60000c13d0000000401100370000000000101043b000006a900100198000015f60000c13d000006aa0010009c00000000020000390000000102006039000006ab0010009c00000001022061bf000000800020043f00000656010000410000182c0001042e0000000001000416000000000001004b000015f60000c13d0000000101000039000006c30000013d000000440030008c000015f60000413d0000000002000416000000000002004b000015f60000c13d0000002402100370000000000302043b0000064b0030009c000015f60000213d0000000002000411000000000023004b000008bd0000c13d0000000401100370000000000101043b182b17ba0000040f00000000010000190000182c0001042e000000840030008c000015f60000413d0000000002000416000000000002004b000015f60000c13d0000000402100370000000000202043b000006110020009c000015f60000213d0000002304200039000000000034004b000015f60000813d001900040020003d0000001904100360000000000404043b001600000004001d000006110040009c000015f60000213d0000002404200039001400000004001d0000001602400029000000000032004b000015f60000213d0000002402100370000000000202043b000006110020009c000015f60000213d0000002304200039000000000034004b000015f60000813d0000000404200039000000000441034f000000000404043b001500000004001d000006110040009c000015f60000213d001300240020003d000000150200002900000005022002100000001302200029000000000032004b000015f60000213d0000004402100370000000000202043b001200000002001d0000064b0020009c000015f60000213d0000006401100370000000000101043b001100000001001d0000000001000411000000000010043f0000065001000041000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b000000000101041a000000ff001001900000080f0000613d0000064901000041000000000101041a000000ff00100190000008cf0000c13d000000400100043d000000160000006b00000c990000c13d0000004402100039000006750300004100000000003204350000002402100039000000170300003900000b4a0000013d000000240030008c000015f60000413d0000000002000416000000000002004b000015f60000c13d0000000401100370000000000101043b000000000010043f0000066201000041000000200010043f00000040020000390000000001000019182b180c0000040f0000000101100039000000000101041a000000800010043f00000656010000410000182c0001042e000000440030008c000015f60000413d0000000002000416000000000002004b000015f60000c13d0000002402100370000000000202043b001900000002001d0000064b0020009c000015f60000213d0000000401100370000000000101043b000000000010043f0000066201000041000000200010043f00000040020000390000000001000019182b180c0000040f0000001902000029000000000020043f000000200010043f00000000010000190000004002000039182b180c0000040f0000083b0000013d0000000001000416000000000001004b000015f60000c13d0000065101000041000000800010043f00000656010000410000182c0001042e000000440030008c000015f60000413d0000000002000416000000000002004b000015f60000c13d0000000402100370000000000202043b000006110020009c000015f60000213d0000002304200039000000000034004b000015f60000813d001800040020003d0000001804100360000000000404043b001900000004001d000006110040009c000015f60000213d00000019022000290000002402200039000000000032004b000015f60000213d0000002401100370000000000101043b001700000001001d0000000001000411000000000010043f0000065001000041000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b000000000101041a000000ff001001900000080f0000613d0000064901000041000000000101041a000000ff00100190000008cf0000c13d0000001901000029000006ac021001980016001f00100193000000400100043d001500000002001d000000000221001900000018030000290000002003300039001800000003001d0000000103300367000007260000613d000000000403034f0000000005010019000000004604043c0000000005650436000000000025004b000007220000c13d000000160000006b000007340000613d000000150330036000000016040000290000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000032043500000019040000290000000002410019000000030300003900000000003204350000060c0010009c0000060c010080410000004001100210000006570040009c000006570200004100000000020440190000006002200210000000000112019f00000000020004140000060c0020009c0000060c02008041000000c002200210000000000121019f000006580110009a0000801002000039182b18260000040f0000000100200190000015f60000613d000000000201043b0000000101200039000000000101041a000000000001004b00000b440000613d000000400100043d0000000803200039000000000303041a000000ff0030019000000b980000c13d0000000403200039000000000203041a0000001704000029000000000043041b000000600310003900000019040000290000000000430435000000600300003900000000033104360000008004100039000000150540002900000018060000290000000106600367000000150000006b000007690000613d000000000706034f0000000008040019000000007907043c0000000008980436000000000058004b000007650000c13d000000160000006b000007770000613d000000150660036000000016070000290000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f000000000065043500000019050000290000000004540019000000000004043500000040041000390000001706000029000000000064043500000000002304350000001f02500039000006ac022001970000065d0020009c0000065d0200804100000060022002100000060c0010009c0000060c010080410000004001100210000000000112019f00000000020004140000060c0020009c0000060c02008041000000c002200210000000000121019f0000065e0110009a0000800d0200003900000001030000390000065f040000410000094f0000013d000000240030008c000015f60000413d0000000002000416000000000002004b000015f60000c13d0000000401100370000000000101043b001900000001001d0000000001000411000000000010043f0000065001000041000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b000000000101041a000000ff001001900000080f0000613d0000064901000041000000000101041a000000ff00100190000008cf0000c13d000000000200041a0000067a00200198000009f70000c13d000000400100043d0000004402100039000006a603000041000000000032043500000024021000390000001d0300003900000b4a0000013d0000000001000416000000000001004b000015f60000c13d0000000001000411000000000010043f0000064c01000041000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b000000000101041a000000ff001001900000089b0000c13d000000400100043d0000066002000041000000000021043500000004021000390000000003000411000000000032043500000024021000390000000000020435000008180000013d0000000001000416000000000001004b000015f60000c13d0000000001000411000000000010043f0000064c01000041000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000400200043d000000000101043b000000000101041a000000ff00100190000008b20000c13d00000660010000410000000000120435000000040120003900000000030004110000000000310435000000240120003900000000000104350000060c0020009c0000060c02008041000000400120021000000661011001c70000182d00010430000000240030008c000015f60000413d0000000002000416000000000002004b000015f60000c13d0000000401100370000000000101043b001900000001001d0000000001000411000000000010043f0000065001000041000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b000000000101041a000000ff00100190000008c10000c13d000000400100043d000000240210003900000651030000410000000000320435000006600200004100000000002104350000000402100039000000000300041100000000003204350000060c0010009c0000060c01008041000000400110021000000661011001c70000182d00010430000000240030008c000015f60000413d0000000002000416000000000002004b000015f60000c13d0000000401100370000000000101043b0000000402000039000000000302041a000000000031004b000015f60000813d000000000020043f000006680110009a182b16310000040f0000002002000039000000400300043d001900000003001d0000000002230436182b16050000040f0000087b0000013d0000000001000416000000000001004b000015f60000c13d000000800000043f00000656010000410000182c0001042e0000000001000416000000000001004b000015f60000c13d0000064901000041000000000101041a000000ff001001900000000001000039000000010100c039000000800010043f00000656010000410000182c0001042e000000240030008c000015f60000413d0000000002000416000000000002004b000015f60000c13d0000000401100370000000000101043b000006110010009c000015f60000213d00000004011000390000000002030019182b16170000040f0000001f0420018f000006ac052001980000000106100367000000400100043d00000000035100190000085a0000613d000000000706034f0000000008010019000000007907043c0000000008980436000000000038004b000008560000c13d000000000004004b000008670000613d000000000556034f0000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000003210019000000030400003900000000004304350000002002200039182b180c0000040f001900000001001d0000000102100039000000000102041a000000000001004b0000000001000039000000010100c039182b16c40000040f00000019010000290000000701100039182b16d80000040f0000002002000039000000400300043d001900000003001d0000000002230436182b167e0000040f000000190200002900000000012100490000060c0010009c0000060c0100804100000060011002100000060c0020009c0000060c020080410000004002200210000000000121019f0000182c0001042e000000000003004b000008940000c13d000006460120019700000001011001bf000006470220019700000648022001c7000000000003004b000000000201c0190000060d01000041000000000021041b0000060e00200198000009540000c13d000000400100043d0000065402000041000008d10000013d0000060f0100004100000000001404350000060c0040009c0000060c04008041000000400140021000000655011001c70000182d000104300000064901000041000000000201041a000000ff00200190000008cf0000c13d000006ad0220019700000001022001bf000000000021041b000000400100043d000000000200041100000000002104350000060c0010009c0000060c01008041000000400110021000000000020004140000060c0020009c0000060c02008041000000c002200210000000000112019f00000653011001c70000800d0200003900000001030000390000067f040000410000094f0000013d0000064901000041000000000301041a000000ff003001900000093f0000c13d000006980100004100000000001204350000060c0020009c0000060c02008041000000400120021000000655011001c70000182d000104300000069a01000041000000800010043f00000610010000410000182d000104300000064901000041000000000101041a000000ff00100190000008cf0000c13d000000400100043d0000001904000029000000000004004b000009fe0000c13d0000004402100039000006640300004100000000003204350000002402100039000000160300003900000b4a0000013d000000400100043d000006a20200004100000000002104350000060c0010009c0000060c01008041000000400110021000000655011001c70000182d000104300000008001100039000000400010043f000000800050043f000000000020043f000000000005004b0000092d0000613d000000a006000039000006a807000041000000200800008a0000000009000019001300000005001d000000000107041a000000010210019000000001041002700000007f0440618f0000001f0040008c00000000030000390000000103002039000000000032004b000004290000c13d000000400a00043d00000000034a0436000000000002004b000009130000613d001400000003001d001500000004001d00180000000a001d001600000009001d001700000006001d001900000007001d000000000070043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000150b00002900000000000b004b00000013050000290000001706000029000000200800008a0000001609000029000009190000613d000000000201043b00000000010000190000001907000029000000180a000029000000140c00002900000000031c0019000000000402041a0000000000430435000000010220003900000020011000390000000000b1004b0000090b0000413d0000091c0000013d000006ad011001970000000000130435000000000004004b000000200100003900000000010060390000091c0000013d00000000010000190000001907000029000000180a0000290000003f01100039000000000281016f0000000001a20019000000000021004b00000000020000390000000102004039000006110010009c000000260000213d0000000100200190000000260000c13d000000400010043f0000000006a6043600000001077000390000000109900039000000000059004b000008e20000413d000000400100043d00000020020000390000000003210436000000800200043d0000000000230435000000400310003900000005042002100000000007340019000000000002004b000009db0000c13d00000000021700490000060c0020009c0000060c0200804100000060022002100000060c0010009c0000060c010080410000004001100210000000000112019f0000182c0001042e000006ad03300197000000000031041b000000000100041100000000001204350000060c0020009c0000060c02008041000000400120021000000000020004140000060c0020009c0000060c02008041000000c002200210000000000112019f00000653011001c70000800d0200003900000001030000390000069704000041182b18210000040f0000000100200190000015f60000613d00000000010000190000182c0001042e001800000005001d001900000003001d0000064901000041000000000201041a000006ad02200197000000000021041b00000001020000390000064a01000041000000000021041b00000000010004110000064b01100197001700000001001d000000000010043f0000064c01000041000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b000000000101041a000000ff00100190000009900000c13d0000001701000029000000000010043f0000064c01000041000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b000000000201041a000006ad0220019700000001022001bf000000000021041b00000000010004140000060c0010009c0000060c01008041000000c0011002100000064e011001c70000800d0200003900000004030000390000064f04000041000000000500001900000017060000290000000007000411182b18210000040f0000000100200190000015f60000613d0000001701000029000000000010043f0000065001000041000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b000000000101041a000000ff00100190000009c10000c13d0000001701000029000000000010043f0000065001000041000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b000000000201041a000006ad0220019700000001022001bf000000000021041b00000000010004140000060c0010009c0000060c01008041000000c0011002100000064e011001c70000800d0200003900000004030000390000064f04000041000006510500004100000017060000290000000007000411182b18210000040f0000000100200190000015f60000613d00000002010000390000001802000029000000000021041b0000000101000039000000000021041b000000190000006b000009520000c13d0000060d01000041000000000201041a0000065202200197000000000021041b000000400100043d000000010300003900000000003104350000060c0010009c0000060c01008041000000400110021000000000020004140000060c0020009c0000060c02008041000000c002200210000000000112019f00000653011001c70000800d0200003900000613040000410000094f0000013d000000a0040000390000000006000019000009e60000013d0000001f09800039000006ac099001970000000008780019000000000008043500000000077900190000000106600039000000000026004b000009360000813d0000000008170049000000400880008a0000000003830436000000004804043400000000980804340000000007870436000000000008004b000009de0000613d000000000a000019000000000b7a0019000000000ca90019000000000c0c04330000000000cb0435000000200aa0003900000000008a004b000009ef0000413d000009de0000013d0000001903000029000000000003004b00000a270000c13d000000400100043d0000004402100039000006a50300004100000b470000013d0000000202000039000000000202041a0000002003100039000000000043043500000000002104350000060c0010009c0000060c01008041000000400110021000000000020004140000060c0020009c0000060c02008041000000c002200210000000000112019f0000064d011001c70000800d0200003900000001030000390000066304000041182b18210000040f0000000100200190000015f60000613d00000019010000290000000202000039000000000012041b00000000010000190000182c0001042e000000000100041a0000067a0010019800000ac40000c13d0000067c01100197000000000115019f00000672011001c7000000000010041b00000000010004140000060c0010009c0000060c01008041000000c0011002100000064e011001c70000800d0200003900000002030000390000067d040000410000094f0000013d000000400400043d001800000004001d0000004401400039000000000031043500000000010004100000064b01100197000000240340003900000000001304350000068001000041000000000014043500000000010004110000064b01100197000000040340003900000000001304350000060c0040009c0000060c010000410000000001044019000000400110021000000000030004140000060c0030009c0000060c03008041000000c003300210000000000113019f00000665011001c70000064b02200197182b18210000040f00000060031002700000060c03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000180b000029000000180570002900000a510000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00000a4d0000c13d000000000006004b00000a5e0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000acb0000613d0000001f01400039000000600210018f0000000001b20019000000000021004b00000000020000390000000102004039000006110010009c000000260000213d0000000100200190000000260000c13d000000400010043f000000200030008c000015f60000413d00000000020b0433000000000002004b0000000003000039000000010300c039000000000032004b000015f60000c13d000000000002004b00000c6f0000c13d00000044021000390000068e030000410000052f0000013d0000001901000029000000000010043f0000066201000041000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b0000001802000029000000000020043f000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b000000000101041a000000ff00100190000009520000c13d0000001901000029000000000010043f0000066201000041000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b0000001802000029000000000020043f000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b000000000201041a000006ad0220019700000001022001bf000000000021041b00000000010004140000060c0010009c0000060c01008041000000c0011002100000064e011001c70000800d0200003900000004030000390000064f04000041000000190500002900000018060000290000000007000411182b18210000040f0000000100200190000009520000c13d000015f60000013d000000400100043d00000044021000390000067b0300004100000000003204350000002402100039000000180300003900000b4a0000013d0000001f0530018f0000068106300198000000400200043d000000000462001900000ad60000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000ad20000c13d000000000005004b00000ae30000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f000000000014043500000060013002100000060c0020009c0000060c020080410000004002200210000000000112019f0000182d00010430001900000004001d001800000005001d0000000000540435000000000002004b00000b550000613d0000000f01000029000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d0000001806000029000000000006004b000000000200001900000b5c0000613d00000010020000290000016003200039000000000101043b00000000020000190000000004230019000000000501041a000000000054043500000001011000390000002002200039000000000062004b00000b010000413d00000b5c0000013d0000000203000039000000000032041b0000001202000029000006ac032001980010001f00200193000f00000003001d000000000231001900000019030000290000002003300039000000010330036700000b1a0000613d000000000403034f0000000005010019000000004604043c0000000005650436000000000025004b00000b160000c13d000000100000006b00000b280000613d0000000f0330036000000010040000290000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000032043500000012040000290000000002410019000000030300003900000000003204350000060c0010009c0000060c010080410000004001100210000006570040009c000006570200004100000000020440190000006002200210000000000112019f00000000020004140000060c0020009c0000060c02008041000000c002200210000000000121019f000006580110009a0000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b001900000001001d0000000101100039000000000101041a000000000001004b00000c040000c13d000000400100043d0000004402100039000006a10300004100000000003204350000002402100039000000130300003900000000003204350000065b0200004100000000002104350000000402100039000000200300003900000000003204350000060c0010009c0000060c01008041000000400110021000000665011001c70000182d00010430000006ad01100197000000100200002900000160022000390000000000120435000000180000006b000000200200003900000000020060390000003f01200039000006ac021001970000001901200029000000000021004b00000000020000390000000102004039000006110010009c000000260000213d0000000100200190000000260000c13d000000400010043f0000001002000029000000190100002900000000041204360000000f030000290000000101300039000000000101041a000e00000004001d00000000001404350000000201300039000000000101041a0000004004200039000d00000004001d00000000001404350000000301300039000000000101041a0000064b011001970000006004200039000b00000004001d000000000014043500000080022000390000000401300039000000000101041a000c00000002001d00000000001204350000000501300039000000000301041a000000400200043d001900000002001d001800000003001d0000000002320436001700000002001d000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000180000006b00000c140000c13d000000170400002900000c1f0000013d000000400100043d00000044021000390000069b03000041000008cb0000013d00000064021000390000065903000041000000000032043500000044021000390000065a0300004100000000003204350000002402100039000000290300003900000000003204350000065b0200004100000000002104350000000402100039000000200300003900000000003204350000060c0010009c0000060c0100804100000040011002100000065c011001c70000182d00010430000000160000006b000009fa0000613d000000400400043d001800000004001d00000044014000390000001603000029000000000031043500000000010004100000064b01100197000000240340003900000000001304350000068001000041000000000014043500000000010004110000064b01100197000000040340003900000000001304350000060c0040009c0000060c010000410000000001044019000000400110021000000000030004140000060c0030009c0000060c03008041000000c003300210000000000113019f00000665011001c7182b18210000040f00000060031002700000060c03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000180b000029000000180570002900000bd70000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00000bd30000c13d000000000006004b00000be40000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000d0c0000613d0000001f01400039000000600210018f0000000001b20019000000000021004b00000000020000390000000102004039000006110010009c000000260000213d0000000100200190000000260000c13d000000400010043f000000200030008c000015f60000413d00000000020b0433000000000002004b0000000003000039000000010300c039000000000032004b000015f60000c13d000000000002004b00000f270000c13d0000006402100039000006850300004100000000003204350000004402100039000006860300004100000000003204350000002402100039000000230300003900000ba00000013d000000400100043d001700000001001d00000019010000290000000801100039001300000001001d000000000101041a001800000001001d000000ff0010019000000c880000c13d00000017030000290000004401300039000006930200004100000000002104350000002401300039000000160200003900000d1e0000013d000000000101043b000000000200001900000017040000290000001805000029000000000301041a0000064b03300197000000000434043600000001011000390000000102200039000000000052004b00000c180000413d000000190140006a0000001f01100039000006ac021001970000001901200029000000000021004b00000000020000390000000102004039000006110010009c000000260000213d0000000100200190000000260000c13d000000400010043f0000001001000029000000a001100039000a00000001001d000000190200002900000000002104350000000f010000290000000601100039000000000201041a001200000002001d000006110020009c000000260000213d000000120200002900000005022002100000003f022000390000067802200197000000400300043d0000000002230019000900000003001d000000000032004b00000000030000390000000103004039000006110020009c000000260000213d0000000100300190000000260000c13d000000400020043f000000120200002900000009030000290000000000230435000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000120000006b00000d880000c13d0000001001000029000000c0021000390000000901000029001600000002001d00000000001204350000000f010000290000000701100039000000000301041a000000400200043d001900000002001d001800000003001d0000000002320436001700000002001d000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000180000006b00000f5c0000c13d000000170400002900000f670000013d0000006002100039000006a3030000410000000000320435000000400210003900000006030000390000000000320435000000200210003900000040030000390000000000320435000000190200002900000000002104350000060c0010009c0000060c01008041000000400110021000000000020004140000060c0020009c0000060c02008041000000c002200210000000000112019f000006a4011001c70000800d020000390000000203000039000006840400004100000000050004110000094f0000013d00000018010000290000ff000010019000000d180000c13d00000019010000290000000401100039000d00000001001d000000000101041a000e00000001001d000000000001004b00000d470000c13d00000017030000290000004401300039000006920200004100000000002104350000002401300039000000130200003900000d1e0000013d0000001602000029000006ac032001980010001f00200193000f00000003001d000000000231001900000019030000290000002003300039000e00000003001d000000010330036700000ca90000613d000000000403034f0000000005010019000000004604043c0000000005650436000000000025004b00000ca50000c13d000000100000006b00000cb70000613d0000000f0330036000000010040000290000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000032043500000016030000290000000002310019000000030400003900000000004204350000060c0010009c0000060c01008041000000400110021000000000020004140000060c0020009c0000060c02008041000000c002200210000000000112019f000006570030009c000006570200004100000000020340190000006002200210000d0666002000a20000000d011001af0000064e011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b0000000101100039000000000101041a000000000001004b00000d840000c13d0000000402000039000000000102041a000000000001004b000000000100001900000eb90000c13d00000012020000290019064b0020019c00000f1b0000c13d000000110000006b00000ff70000c13d0000000202000039000000000202041a001100000002001d000000000001004b000011ab0000613d0000000402000039000000000020043f0000066f0110009a000000000201041a000000010320019000000001042002700000007f0440618f001800000004001d0000001f0040008c00000000040000390000000104002039000000000442013f0000000100400190000004290000c13d000000400400043d001700000004001d000000000003004b0000117f0000613d000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d0000001805000029000000000005004b0000001706000029000011830000613d000000000101043b00000000020000190000000003620019000000000401041a000000000043043500000001011000390000002002200039000000000052004b00000d040000413d000011830000013d0000001f0530018f0000068106300198000000400200043d000000000462001900000ad60000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000d130000c13d00000ad60000013d00000017030000290000004401300039000006890200004100000000002104350000002401300039000000140200003900000000002104350000065b0100004100000000001304350000000401300039000000200200003900000000002104350000060c0030009c0000060c03008041000000400130021000000665011001c70000182d00010430000000000101043b000000000200001900000018040000290000001905000029000000000301041a0000064b03300197000000000434043600000001011000390000000102200039000000000052004b00000d2d0000413d000000140200002900000000012400490000060c0010009c0000060c0100804100000060011002100000060c0020009c0000060c020080410000004002200210000000000121019f00000000020004140000060c0020009c0000060c02008041000000c002200210000000000121019f0000064e011001c70000800d02000039000000010300003900000695040000410000094f0000013d00000019010000290000000701100039000000000301041a0000001702000029001500000003001d0000000002320436001600000002001d000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d0000001505000029000000000005004b000000160200002900000d660000613d000000000101043b00000016020000290000000003000019000000000401041a0000064b04400197000000000242043600000001011000390000000103300039000000000053004b00000d5f0000413d000000170120006a0000001f01100039000006ac011001970000001702100029000000000012004b00000000010000390000000101004039000006110020009c000000260000213d0000000100100190000000260000c13d0000000009020019000000400020043f00000017010000290000000001010433001500000001001d00000019010000290000000301100039000000000101041a0014064b0010019c000010020000c13d000000000100041a0000067a00100198000010010000c13d000000440190003900000691020000410000000000210435000000240190003900000014020000390000106d0000013d000000400100043d00000044021000390000066703000041000008cb0000013d000000000101043b001900000001001d00000000020000190000000903000029001600000003001d001700000002001d000000400100043d001800000001001d000006790010009c000000260000213d0000001801000029000000a006100039000000400060043f0000001901000029000000000101041a000000010210019000000001041002700000007f0440618f0000001f0040008c00000000030000390000000103002039000000000331013f0000000100300190000004290000c13d0000000000460435000000000002004b00000dc00000613d001400000004001d001500000006001d0000001901000029000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d0000001407000029000000000007004b00000dc80000613d0000001802000029000000c002200039000000000301043b000000000100001900000015060000290000000004120019000000000503041a000000000054043500000001033000390000002001100039000000000071004b00000db80000413d00000dca0000013d000006ad011001970000001802000029000000c0022000390000000000120435000000000004004b0000002001000039000000000100603900000dca0000013d000000000100001900000015060000290000003f01100039000006ac021001970000000001620019000000000021004b00000000020000390000000102004039000006110010009c000000260000213d0000000100200190000000260000c13d000000400010043f0000001801000029000000000561043600000019010000290000000101100039000000000201041a000000010320019000000001072002700000007f0770618f0000001f0070008c00000000040000390000000104002039000000000442013f0000000100400190000004290000c13d000000400600043d0000000004760436000000000003004b00000e050000613d001100000004001d001300000007001d001400000006001d001500000005001d000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d0000001307000029000000000007004b00000e0b0000613d000000000201043b00000000010000190000001505000029000000140600002900000011080000290000000003180019000000000402041a000000000043043500000001022000390000002001100039000000000071004b00000dfd0000413d00000e0e0000013d000006ad012001970000000000140435000000000007004b0000002001000039000000000100603900000e0e0000013d0000000001000019000000150500002900000014060000290000003f01100039000006ac021001970000000001620019000000000021004b00000000020000390000000102004039000006110010009c000000260000213d0000000100200190000000260000c13d000000400010043f000000000065043500000019010000290000000201100039000000000301041a000000400200043d001500000002001d001300000003001d0000000002320436001400000002001d000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d0000001305000029000000000005004b00000e3a0000613d000000000101043b00000000020000190000001404000029000000000301041a0000064b03300197000000000434043600000001011000390000000102200039000000000052004b00000e320000413d00000e3b0000013d0000001404000029000000150300002900000000013400490000001f01100039000006ac021001970000000001320019000000000021004b00000000020000390000000102004039000006110010009c000000260000213d0000000100200190000000260000c13d000000400010043f00000018010000290000004001100039000000000031043500000019010000290000000301100039000000000301041a000000400200043d001500000002001d001300000003001d0000000002320436001400000002001d000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d0000001306000029000000000006004b00000e6c0000613d000000000101043b000000000200001900000015040000290000001405000029000000000301041a0000064b03300197000000000535043600000001011000390000000102200039000000000062004b00000e640000413d00000e6e0000013d0000001504000029000000140500002900000000014500490000001f01100039000006ac021001970000000001420019000000000021004b00000000020000390000000102004039000006110010009c000000260000213d0000000100200190000000260000c13d000000400010043f00000018010000290000006001100039000000000041043500000019010000290000000401100039000000000301041a000000400200043d001500000002001d001300000003001d0000000002320436001400000002001d000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d0000001306000029000000000006004b00000e9e0000613d000000000101043b000000000200001900000015040000290000001405000029000000000301041a0000064b03300197000000000535043600000001011000390000000102200039000000000062004b00000e960000413d00000ea00000013d0000001504000029000000140500002900000000014500490000001f01100039000006ac021001970000000001420019000000000021004b00000000020000390000000102004039000006110010009c000000260000213d0000000100200190000000260000c13d00000016030000290000002003300039000000400010043f00000018020000290000008001200039000000000041043500000000002304350000001901000029001900050010003d00000017020000290000000102200039000000120020006c00000d8c0000413d00000c540000013d000000000500001900000ec00000013d0000000402000039000000000102041a0000000105500039000000000015004b00000cd80000813d000000000020043f000006680150009a000000000201041a000000010320019000000001062002700000007f0660618f0000001f0060008c00000000040000390000000104002039000000000442013f0000000100400190000004290000c13d001900000005001d000000400500043d000000000003004b00000eea0000613d001700000005001d001800000006001d000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d0000001806000029000000000006004b000000170500002900000eec0000613d000000000101043b00000000020000190000000003520019000000000401041a000000000043043500000001011000390000002002200039000000000062004b00000ee20000413d00000eec0000013d000006ad0120019700000000001504350000000001560019000000030200003900000000002104350000060c0050009c0000060c050080410000004001500210000006570060009c00000657060080410000006002600210000000000112019f00000000020004140000060c0020009c0000060c02008041000000c002200210000000000121019f000006580110009a0000801002000039182b18260000040f0000000100200190000015f60000613d000000000301043b0000000801300039000000000201041a000000ff00200190000000190500002900000ebb0000c13d001800000003001d000006ad0220019700000001022001bf000000000021041b0000066901000041000000000010044300000000010004140000060c0010009c0000060c01008041000000c0011002100000066a011001c70000800b02000039182b18260000040f00000001002001900000127b0000613d000000000101043b00000018020000290000000202200039000000000012041b000000190500002900000ebb0000013d000000110000006b000011ab0000c13d000000400100043d00000064021000390000066b03000041000000000032043500000044021000390000066c0300004100000000003204350000002402100039000000320300003900000ba00000013d000000400210003900000019030000290000000000320435000000200210003900000040030000390000000000320435000000160200002900000000002104350000006002100039000000140320002900000017040000290000000104400367000000140000006b00000f3b0000613d000000000504034f0000000006020019000000005705043c0000000006760436000000000036004b00000f370000c13d000000150000006b00000f490000613d000000140440036000000015050000290000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004304350000001903000029000000000232001900000000000204350000001f02300039000006ac02200197000006820020009c000006820200804100000060022002100000060c0010009c0000060c010080410000004001100210000000000112019f00000000020004140000060c0020009c0000060c02008041000000c002200210000000000121019f000006830110009a00000c830000013d000000000101043b000000000200001900000017040000290000001805000029000000000301041a0000064b03300197000000000434043600000001011000390000000102200039000000000052004b00000f600000413d000000190140006a0000001f01100039000006ac021001970000001901200029000000000021004b00000000020000390000000102004039000006110010009c000000260000213d0000000100200190000000260000c13d000000400010043f0000001001000029000000e002100039001700000002001d000000190300002900000000003204350000000f020000290000000802200039000000000202041a0000ff00002001900000000003000039000000010300c0390000012004100039001800000004001d00000000003404350000010001100039000000ff002001900000000002000039000000010200c039001500000001001d00000000002104350000000e010000290000000002010433000000000002004b00000b440000613d000000400500043d000000200200003900000000022504360000001001000029000000000301043300000140040000390000000000420435000001600250003900000000430304340000000000320435001900000005001d0000018002500039000000000003004b00000fa10000613d000000000500001900000000062500190000000007540019000000000707043300000000007604350000002005500039000000000035004b00000f9a0000413d000000000423001900000000000404350000000e0100002900000000040104330000001906000029000000400560003900000000004504350000000d010000290000000004010433000000600560003900000000004504350000000b0100002900000000040104330000064b04400197000000800560003900000000004504350000000c010000290000000004010433000000a00560003900000000004504350000001f03300039000006ac03300197000000c0056000390000000a01000029000000000401043300000160063000390000000000650435000000000323001900000000020404330000000003230436000000000002004b00000fc90000613d0000000005000019000000200440003900000000060404330000064b0660019700000000036304360000000105500039000000000025004b00000fc20000413d00000019010000290000000002130049000000200220008a00000016040000290000000004040433000000e005100039000000000025043500000000050404330000000000530435000000050250021000000000022300190000002002200039000000000005004b000011150000c13d00000019040000290000000001420049000000200310008a0000001701000029000000000101043300000100044000390000000000340435182b167e0000040f00000015020000290000000002020433000000000002004b0000000002000039000000010200c03900000019040000290000012003400039000000000023043500000018020000290000000002020433000000000002004b0000000002000039000000010200c0390000014003400039000000000023043500000000014100490000060c0040009c0000060c040080410000060c0010009c0000060c0100804100000040024002100000006001100210000000000121019f0000182c0001042e000000400100043d00000064021000390000066d03000041000000000032043500000044021000390000066e03000041000000000032043500000024021000390000002c0300003900000ba00000013d0014064b0010019b0000ff010100008a000000180110017f00000100011001bf0000001302000029000000000012041b000000150000006b0000105d0000c13d000006900090009c000000260000213d0000002001900039000000400010043f0000000000090435000000400100043d0000006002100039000000120300002900000000003204350000006002000039000000000221043600000080031000390000000f04300029000000110500002900000001055003670000000f0000006b000010200000613d000000000605034f0000000007030019000000006806043c0000000007870436000000000047004b0000101c0000c13d000000100000006b0000102e0000613d0000000f0550036000000010060000290000000306600210000000000704043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f00000000005404350000001205000029000000000453001900000000000404350000001f04500039000006ac044001970000000004430019000000000314004900000040051000390000000000350435000000000002043500000000030904330000000002340436000000000003004b000010440000613d0000000004000019000000200990003900000000050904330000064b0550019700000000025204360000000104400039000000000034004b0000103d0000413d00000000021200490000060c0020009c0000060c0200804100000060022002100000060c0010009c0000060c010080410000004001100210000000000112019f00000000020004140000060c0020009c0000060c02008041000000c002200210000000000121019f0000064e011001c70000800d0200003900000001030000390000068d04000041182b18210000040f0000000100200190000015f60000613d00000001010000390000064a02000041000000000012041b00000000010000190000182c0001042e0000000e0300002900000015013000fa001300000001001d00000015011000b9000000150030006b000010660000213d00000013021000fa000000150020006b0000127c0000c13d0000000e0010006b000010780000813d00000044019000390000068f02000041000000000021043500000024019000390000001a0200003900000000002104350000065b0100004100000000001904350000000401900039000000200200003900000000002104350000060c0090009c0000060c09008041000000400190021000000665011001c70000182d000104300000000004000019000000170200002900000000030900190000000001020433000000000014004b000012820000813d001800000004001d0000000501400210000000160110002900000000010104330000002402300039000000130400002900000000004204350000068c0200004100000000002304350000064b01100197000000040230003900000000001204350000060c0030009c0000060c010000410000000001034019000000400110021000000000020004140000060c0020009c0000060c02008041000000c002200210000000000112019f00000661011001c70000001402000029001900000003001d182b18210000040f000000190a00002900000060031002700000060c03300197000000200030008c00000020040000390000000004034019000000200640019000000000056a0019000010a60000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000058004b000010a20000c13d0000001f07400190000010b30000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f00000000006504350000000100200190000012880000613d0000001f01400039000000600210018f0000000001a20019000000000021004b00000000020000390000000102004039000006110010009c000000260000213d0000000100200190000000260000c13d000000400010043f000000200030008c000015f60000413d00000019020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b000015f60000c13d000000000002004b00000a750000613d00000018040000290000000104400039000000150040006c000000000301001900000017020000290000107b0000413d0000000d03000029000000000203041a000000000003041b0000006003100039000000120400002900000000004304350000006003000039000000000431043600000080031000390000000f05300029000000110600002900000001066003670000000f0000006b000010e50000613d000000000706034f0000000008030019000000007907043c0000000008980436000000000058004b000010e10000c13d000000100000006b000010f30000613d0000000f0660036000000010070000290000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f000000000065043500000012060000290000000005630019000000000005043500000000002404350000001f02600039000006ac022001970000000002230019000000000312004900000040041000390000000000340435000000170300002900000000030304330000000002320436000000000003004b0000110b0000613d00000000040000190000001706000029000000200660003900000000050604330000064b0550019700000000025204360000000104400039000000000034004b000011040000413d00000000021200490000060c0020009c0000060c0200804100000060022002100000060c0010009c0000060c010080410000004001100210000000000112019f00000000020004140000104d0000013d000000000700001900000000080300190000111b0000013d0000000107700039000000000057004b00000fd70000813d0000000009320049000000200990008a000000200880003900000000009804350000002004400039000000000904043300000000bc090434000000a001000039000000000a120436000000a00d20003900000000ec0c04340000000000cd0435000000c00d20003900000000000c004b000011320000613d000000000f0000190000000001df00190000000006fe001900000000060604330000000000610435000000200ff000390000000000cf004b0000112b0000413d0000000001dc001900000000000104350000001f01c00039000006ac011001970000000001d1001900000000060b0433000000000b2100490000000000ba043500000000cb060434000000000ab1043600000000000b004b000011460000613d000000000d0000190000000001ad00190000000006dc001900000000060604330000000000610435000000200dd000390000000000bd004b0000113f0000413d0000000001ab001900000000000104350000001f01b00039000006ac011001970000000001a100190000004006900039000000000b0604330000000006210049000000400a20003900000000006a0435000000000c0b0433000000000ac1043600000000000c004b0000115c0000613d000000000d000019000000200bb0003900000000010b04330000064b01100197000000000a1a0436000000010dd000390000000000cd004b000011550000413d0000006001900039000000000b01043300000000012a004900000060062000390000000000160435000000000c0b0433000000000aca043600000000000c004b0000116d0000613d000000000d000019000000200bb0003900000000010b04330000064b01100197000000000a1a0436000000010dd000390000000000cd004b000011660000413d0000008001900039000000000901043300000000012a004900000080022000390000000000120435000000000b0904330000000002ba043600000000000b004b000011180000613d000000000a000019000000200990003900000000010904330000064b011001970000000002120436000000010aa000390000000000ba004b000011770000413d000011180000013d000006ad012001970000001706000029000000000016043500000018050000290000000001650019000000030200003900000000002104350000060c0060009c0000060c060080410000004001600210000006570050009c00000657050080410000006002500210000000000112019f00000000020004140000060c0020009c0000060c02008041000000c002200210000000000121019f000006580110009a0000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b0000000802100039000000000202041a000000ff00200190000011ab0000613d0000ff0000200190000011ab0000613d0000000702100039000000000202041a000000000002004b000011ab0000c13d0000000302100039000000000202041a0000064b00200198000011ab0000c13d0000000401100039000000000101041a000000110010002a0000127c0000413d001100110010002d000000400100043d0000000f021000290000000e0300002900000001033003670000000f0000006b000011b70000613d000000000403034f0000000005010019000000004604043c0000000005650436000000000025004b000011b30000c13d000000100000006b000011c50000613d0000000f0330036000000010040000290000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003204350000001602100029000000030300003900000000003204350000060c0010009c0000060c01008041000000400110021000000000020004140000060c0020009c0000060c02008041000000c002200210000000000112019f0000000d011001af0000064e011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b001800000001001d00000014020000290000001603000029182b170e0000040f0000066901000041000000000010044300000000010004140000060c0010009c0000060c01008041000000c0011002100000066a011001c70000800b02000039182b18260000040f00000001002001900000127b0000613d000000000201043b00000018040000290000000101400039001700000002001d000000000021041b0000000201400039000000000001041b0000000301400039000000000201041a000006700220019700000019022001af000000000021041b00000004014000390000001102000029000000000021041b0000001501000029000006710010009c000000260000213d00000018010000290000000502100039000000000302041a0000001501000029001900000002001d000000000012041b001200000003001d000000000013004b000012150000a13d0000001901000029000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000201043b00000015012000290000001202200029000000000021004b000012150000813d000000000001041b0000000101100039000000000021004b000012110000413d0000001901000029000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b000000150000006b0000001305000029000012310000613d00000001020003670000000003000019000000000452034f000000000404043b000006720040009c000015f60000813d00000000060500190000000005130019000000000045041b00000020056000390000000103300039000000150030006c000012260000413d00000018010000290000000801100039000000000201041a0000067302200197000000000021041b0000000401000039000000000101041a000006110010009c000000260000213d00000001021000390000000403000039000000000023041b000000000030043f000006680110009a00000014020000290000001603000029182b170e0000040f000000400100043d0000004002100039000000160300002900000000003204350000004002000039000000000221043600000060031000390000000f043000290000000e0500002900000001055003670000000f0000006b000012540000613d000000000605034f0000000007030019000000006806043c0000000007870436000000000047004b000012500000c13d000000100000006b000012620000613d0000000f0550036000000010060000290000000306600210000000000704043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f0000000000540435000000160400002900000000034300190000000000030435000000170300002900000000003204350000001f02400039000006ac0220019700000060022000390000060c0020009c0000060c0200804100000060022002100000060c0010009c0000060c010080410000004001100210000000000112019f00000000020004140000060c0020009c0000060c02008041000000c002200210000000000112019f0000064e011001c70000800d02000039000000010300003900000674040000410000094f0000013d000000000001042f0000068a01000041000000000010043f0000001101000039000000040010043f0000068b010000410000182d000104300000068a01000041000000000010043f0000003201000039000000040010043f0000068b010000410000182d000104300000001f0530018f0000068106300198000000400200043d000000000462001900000ad60000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000128f0000c13d00000ad60000013d000000400100043d00000044021000390000069c030000410000052f0000013d000000400100043d00000044021000390000069d03000041000007b40000013d000000400100043d00000044021000390000069e03000041000000000032043500000024021000390000001f0300003900000b4a0000013d000000400100043d00000044021000390000069f0300004100000000003204350000065b020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000b4f0000013d0000000a01000029000400060010003d000700000000001d000012b70000013d00000007020000290000000102200039000700000002001d000000140020006c0000036e0000813d0000000701000029000000050310021000000013023000290000000101000367000000000221034f000000000402043b0000000002000031000000160520006a000000430550008a000006a006500197000006a007400197000000000867013f000000000067004b0000000006000019000006a006004041000000000054004b0000000005000019000006a005008041000006a00080009c000000000605c019000000000006004b000015f60000c13d0000001304400029000000000541034f000000000a05043b0000061100a0009c000015f60000213d0000000005a20049000000200f400039000006a004500197000006a006f00197000000000746013f000000000046004b0000000004000019000006a00400404100000000005f004b0000000005000019000006a005002041000006a00070009c000000000405c019000000000004004b000015f60000c13d0000001104300029000000000441034f000000000404043b0000001f0720008a000000110570006a000006a006500197000006a008400197000000000968013f000000000068004b0000000006000019000006a006004041000000000054004b0000000005000019000006a005008041000006a00090009c000000000605c019000000000006004b000015f60000c13d0000001104400029000000000541034f000000000505043b000006110050009c000015f60000213d0000000006520049000000200b400039000006a004600197000006a008b00197000000000948013f000000000048004b0000000004000019000006a004004041000e0000000b001d00000000006b004b0000000006000019000006a006002041000006a00090009c000000000406c019000000000004004b000015f60000c13d0000000f0670006a0000000f04300029000000000441034f000000000404043b000006a008600197000006a009400197000000000b89013f000000000089004b0000000008000019000006a008004041000000000064004b0000000006000019000006a006008041000006a000b0009c000000000806c019000000000008004b000015f60000c13d0000000f04400029000000000641034f000000000606043b001000000006001d000006110060009c000015f60000213d0000001006000029000c0005006002180000000c0820006a0000002006400039000006a004800197000006a009600197000000000b49013f000000000049004b0000000004000019000006a004004041000000000086004b0000000008000019000006a008002041000006a000b0009c000000000408c019000000000004004b000015f60000c13d0000000d0870006a0000000d04300029000000000441034f000000000404043b000006a009800197000006a00b400197000000000c9b013f00000000009b004b0000000009000019000006a009004041000000000084004b0000000008000019000006a008008041000006a000c0009c000000000908c019000000000009004b000015f60000c13d0000000d04400029000000000841034f000000000808043b000a00000008001d000006110080009c000015f60000213d0000000a080000290008000500800218000000080820006a0000002004400039000006a009800197000006a00b400197000000000c9b013f00000000009b004b0000000009000019000006a009004041000000000084004b0000000008000019000006a008002041000006a000c0009c000000000908c019000000000009004b000015f60000c13d0000000b0770006a0000000b03300029000000000331034f000000000303043b000006a008700197000006a009300197000000000b89013f000000000089004b0000000008000019000006a008004041000000000073004b0000000007000019000006a007008041000006a000b0009c000000000807c019000000000008004b000015f60000c13d0000000b03300029000000000731034f000000000707043b000900000007001d000006110070009c000015f60000213d00000009070000290005000500700218000000050720006a0000002003300039000006a008700197000006a009300197000000000b89013f000000000089004b0000000008000019000006a008004041000000000073004b0000000007000019000006a007002041000006a000b0009c000000000807c019000000000008004b000015f60000c13d000000400700043d001200000007001d000006790070009c000000260000213d0000001f07a00039000006ac077001970000003f07700039000006ac087001970000001207000029000000a007700039000000400070043f0000000008870019000006110080009c000000260000213d000000400080043f0000000000a704350000000008fa0019000000000028004b000015f60000213d000000000cf1034f000006ac0ba001980000001208000029000000c00d8000390000000008bd00190000139f0000613d00000000090c034f000000000f0d0019000000009e09043c000000000fef043600000000008f004b0000139b0000c13d0000001f09a00190000013ac0000613d000000000bbc034f0000000309900210000000000c080433000000000c9c01cf000000000c9c022f000000000b0b043b0000010009900089000000000b9b022f00000000099b01cf0000000009c9019f00000000009804350000000008ad0019000000000008043500000012080000290000000007780436000600000007001d0000001f07500039000006ac077001970000003f07700039000006ac07700197000000400a00043d00000000077a00190000000000a7004b00000000080000390000000108004039000006110070009c000000260000213d0000000100800190000000260000c13d000000400070043f00000000075a04360000000e08500029000000000028004b000015f60000213d0000000e09100360000006ac0b5001980000000008b70019000013cd0000613d000000000c09034f000000000d07001900000000ce0c043c000000000ded043600000000008d004b000013c90000c13d0000001f0c500190000013da0000613d0000000009b9034f000000030bc00210000000000c080433000000000cbc01cf000000000cbc022f000000000909043b000001000bb000890000000009b9022f0000000009b901cf0000000009c9019f00000000009804350000000005570019000000000005043500000006050000290000000000a504350000000c050000290000003f055000390000067807500197000000400500043d0000000007750019000000000057004b00000000080000390000000108004039000006110070009c000000260000213d0000000100800190000000260000c13d000000400070043f000000100700002900000000007504350000000c07600029000000000027004b000015f60000213d000000000067004b000013fc0000a13d0000000008050019000000000961034f000000000909043b0000064b0090009c000015f60000213d000000200880003900000000009804350000002006600039000000000076004b000013f30000413d00000012060000290000004006600039000300000006001d000000000056043500000008050000290000003f055000390000067806500197000000400500043d0000000006650019000000000056004b00000000070000390000000107004039000006110060009c000000260000213d0000000100700190000000260000c13d000000400060043f0000000a0600002900000000006504350000000806400029000000000026004b000015f60000213d000000000046004b0000141e0000a13d0000000007050019000000000841034f000000000808043b0000064b0080009c000015f60000213d000000200770003900000000008704350000002004400039000000000064004b000014150000413d00000012040000290000006004400039000800000004001d000000000054043500000005040000290000003f044000390000067805400197000000400400043d0000000005540019000000000045004b00000000060000390000000106004039000006110050009c000000260000213d0000000100600190000000260000c13d000000400050043f000000090500002900000000005404350000000505300029000000000025004b000015f60000213d000000000035004b000014400000a13d0000000002040019000000000631034f000000000606043b0000064b0060009c000015f60000213d000000200220003900000000006204350000002003300039000000000053004b000014370000413d00000012010000290000008001100039000900000001001d00000000004104350000000401000029000000000101041a000e00000001001d000006110010009c000000260000213d0000000e0100002900000001011000390000000402000029000000000012041b000000000020043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b00000012020000290000000002020433001200000002001d0000000032020434000a00000003001d001000000002001d000006110020009c000000260000213d0000000e0200002900000005022000c90000000001210019000e00000001001d000000000101041a000000010010019000000001021002700000007f0220618f000c00000002001d0000001f0020008c00000000020000390000000102002039000000000121013f0000000100100190000004290000c13d0000000c01000029000000200010008c0000148e0000413d0000000e01000029000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d00000010030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b0000000c010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b0000148e0000813d000000000002041b0000000102200039000000000012004b0000148a0000413d00000010010000290000001f0010008c000014ad0000a13d0000000e01000029000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000200200008a0000001002200180000000000101043b000014b20000613d000000010320008a000000050330027000000000033100190000000104300039000000200300003900000012053000290000000005050433000000000051041b00000020033000390000000101100039000000000041004b000014a50000c13d000014b30000013d000000100000006b000014c20000613d0000000a010000290000000001010433000014c30000013d0000002003000039000000100020006c000014be0000813d00000010020000290000000302200210000000f80220018f000006ae0220027f000006ae0220016700000012033000290000000003030433000000000223016f000000000021041b0000001001000029000000010110021000000001011001bf000014ca0000013d000000000100001900000010040000290000000302400210000006ae0220027f000006ae02200167000000000121016f0000000102400210000000000121019f0000000e02000029000000000012041b00000006010000290000000001010433001200000001001d0000000021010434000600000002001d001000000001001d000006110010009c000000260000213d0000000e010000290000000101100039000c00000001001d000000000101041a000000010010019000000001021002700000007f0220618f000a00000002001d0000001f0020008c00000000020000390000000102002039000000000121013f0000000100100190000004290000c13d0000000a01000029000000200010008c000015010000413d0000000c01000029000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d00000010030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b0000000a010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b000015010000813d000000000002041b0000000102200039000000000012004b000014fd0000413d00000010010000290000001f0010008c000a000100100218000015210000a13d0000000c01000029000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000200200008a0000001002200180000000000101043b000015260000613d000000010320008a000000050330027000000000033100190000000104300039000000200300003900000012053000290000000005050433000000000051041b00000020033000390000000101100039000000000041004b000015190000c13d000015270000013d000000100000006b000015350000613d00000006010000290000000001010433000015360000013d0000002003000039000000100020006c000015320000813d00000010020000290000000302200210000000f80220018f000006ae0220027f000006ae0220016700000012033000290000000003030433000000000223016f000000000021041b0000000a0100002900000001011001bf0000153c0000013d000000000100001900000010020000290000000302200210000006ae0220027f000006ae02200167000000000121016f0000000a011001af0000000c02000029000000000012041b00000003010000290000000001010433001200000001001d0000000001010433001000000001001d000006110010009c000000260000213d0000000e010000290000000202100039000000000302041a0000001001000029000c00000002001d000000000012041b000a00000003001d000000000013004b000015620000a13d0000000c01000029000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000201043b00000010012000290000000a02200029000000000021004b000015620000813d000000000001041b0000000101100039000000000021004b0000155e0000413d0000000c01000029000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b000000100000006b0000157b0000613d0000000002000019000000000312001900000012040000290000002004400039001200000004001d00000000040404330000064b04400197000000000043041b0000000102200039000000100020006c000015710000413d00000008010000290000000001010433001200000001001d0000000001010433001000000001001d000006110010009c000000260000213d0000000e010000290000000302100039000000000302041a0000001001000029000c00000002001d000000000012041b000a00000003001d000000000013004b0000159f0000a13d0000000c01000029000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000201043b00000010012000290000000a02200029000000000021004b0000159f0000813d000000000001041b0000000101100039000000000021004b0000159b0000413d0000000c01000029000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b000000100000006b000015b80000613d0000000002000019000000000312001900000012040000290000002004400039001200000004001d00000000040404330000064b04400197000000000043041b0000000102200039000000100020006c000015ae0000413d00000009010000290000000001010433001200000001001d0000000001010433001000000001001d000006110010009c000000260000213d0000000e010000290000000402100039000000000302041a0000001001000029000e00000002001d000000000012041b000c00000003001d000000000013004b000015dc0000a13d0000000e01000029000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000201043b00000010012000290000000c02200029000000000021004b000015dc0000813d000000000001041b0000000101100039000000000021004b000015d80000413d0000000e01000029000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000015f60000613d000000000101043b000000100000006b000012b20000613d0000000002000019000000000312001900000012040000290000002004400039001200000004001d00000000040404330000064b04400197000000000043041b0000000102200039000000100020006c000015eb0000413d000012b20000013d00000000010000190000182d00010430000000000003004b000016020000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000034004b000015fb0000413d00000000012300190000000000010435000000000001042d00000000430104340000000001320436000000000003004b000016110000613d000000000200001900000000051200190000000006240019000000000606043300000000006504350000002002200039000000000032004b0000160a0000413d000000000213001900000000000204350000001f02300039000006ac022001970000000001210019000000000001042d0000001f03100039000000000023004b0000000004000019000006a004004041000006a005200197000006a003300197000000000653013f000000000053004b0000000003000019000006a003002041000006a00060009c000000000304c019000000000003004b0000162f0000613d0000000103100367000000000303043b000006110030009c0000162f0000213d00000020011000390000000004310019000000000024004b0000162f0000213d0000000002030019000000000001042d00000000010000190000182d000104300003000000000002000000000201041a000000010320019000000001062002700000007f0660618f0000001f0060008c00000000040000390000000104002039000000000043004b000016700000c13d000000400500043d0000000004650436000000000003004b0000165b0000613d000100000004001d000300000006001d000200000005001d000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f00000001002001900000167c0000613d0000000306000029000000000006004b000016610000613d000000000201043b0000000001000019000000020500002900000001070000290000000003170019000000000402041a000000000043043500000001022000390000002001100039000000000061004b000016530000413d000016630000013d000006ad012001970000000000140435000000000006004b00000020010000390000000001006039000016630000013d000000000100001900000002050000290000003f01100039000006ac021001970000000001520019000000000021004b00000000020000390000000102004039000006110010009c000016760000213d0000000100200190000016760000c13d000000400010043f0000000001050019000000000001042d0000068a01000041000000000010043f0000002201000039000000040010043f0000068b010000410000182d000104300000068a01000041000000000010043f0000004101000039000000040010043f0000068b010000410000182d0001043000000000010000190000182d00010430000000000301001900000000040104330000000001420436000000000004004b0000168b0000613d0000000002000019000000200330003900000000050304330000064b0550019700000000015104360000000102200039000000000042004b000016840000413d000000000001042d000006710020009c000016bc0000813d00000000040100190000001f01200039000006ac011001970000003f01100039000006ac05100197000000400100043d0000000005510019000000000015004b00000000070000390000000107004039000006110050009c000016bc0000213d0000000100700190000016bc0000c13d000000400050043f00000000052104360000000007420019000000000037004b000016c20000213d000006ac062001980000001f0720018f00000001044003670000000003650019000016ac0000613d000000000804034f0000000009050019000000008a08043c0000000009a90436000000000039004b000016a80000c13d000000000007004b000016b90000613d000000000464034f0000000306700210000000000703043300000000076701cf000000000767022f000000000404043b0000010006600089000000000464022f00000000046401cf000000000474019f000000000043043500000000022500190000000000020435000000000001042d0000068a01000041000000000010043f0000004101000039000000040010043f0000068b010000410000182d0001043000000000010000190000182d00010430000000000001004b000016c70000613d000000000001042d000000400100043d0000004402100039000006a10300004100000000003204350000002402100039000000130300003900000000003204350000065b0200004100000000002104350000000402100039000000200300003900000000003204350000060c0010009c0000060c01008041000000400110021000000665011001c70000182d000104300003000000000002000000000301041a000000400200043d000300000002001d000200000003001d0000000002320436000100000002001d000000000010043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000017060000613d0000000205000029000000000005004b000016f70000613d000000000101043b00000000020000190000000104000029000000000301041a0000064b03300197000000000434043600000001011000390000000102200039000000000052004b000016ef0000413d000016f80000013d0000000104000029000000030100002900000000021400490000001f03200039000006ac023001970000000003120019000000000023004b00000000020000390000000102004039000006110030009c000017080000213d0000000100200190000017080000c13d000000400030043f000000000001042d00000000010000190000182d000104300000068a01000041000000000010043f0000004101000039000000040010043f0000068b010000410000182d000104300004000000000002000006710030009c0000177c0000813d0000000006010019000000000101041a000000010410019000000001051002700000007f0550618f0000001f0050008c00000000010000390000000101002039000000000014004b000017820000c13d000000200050008c000200000006001d000400000003001d000300000002001d0000173e0000413d000100000005001d000000000060043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000017880000613d00000004030000290000001f023000390000000502200270000000200030008c0000000002004019000000000401043b00000001010000290000001f01100039000000050110027000000000011400190000000004240019000000000014004b000000020600002900000003020000290000173e0000813d000000000004041b0000000104400039000000000014004b0000173a0000413d0000001f0030008c000017690000a13d000000000060043f00000000010004140000060c0010009c0000060c01008041000000c00110021000000653011001c70000801002000039182b18260000040f0000000100200190000017880000613d0000000407000029000006ac02700198000000000101043b0000000308000029000017770000613d0000000104000367000000000300001900000002060000290000000005830019000000000554034f000000000505043b000000000051041b00000001011000390000002003300039000000000023004b000017520000413d000000000072004b000017650000813d0000000302700210000000f80220018f000006ae0220027f000006ae0220016700000000038300190000000103300367000000000303043b000000000223016f000000000021041b000000010170021000000001011001bf000000000016041b000000000001042d000000000003004b000017750000613d0000000301300210000006ae0110027f000006ae011001670000000102200367000000000202043b000000000112016f0000000102300210000000000121019f000000000016041b000000000001042d000000000006041b000000000001042d00000000030000190000000206000029000000000072004b0000175c0000413d000017650000013d0000068a01000041000000000010043f0000004101000039000000040010043f0000068b010000410000182d000104300000068a01000041000000000010043f0000002201000039000000040010043f0000068b010000410000182d0001043000000000010000190000182d000104300001000000000002000100000001001d000000000010043f0000066201000041000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000017aa0000613d000000000101043b0000000002000411000000000020043f000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000017aa0000613d000000000101043b000000000101041a000000ff00100190000017ac0000613d000000000001042d00000000010000190000182d00010430000000400100043d000000240210003900000001030000290000000000320435000006600200004100000000002104350000000402100039000000000300041100000000003204350000060c0010009c0000060c01008041000000400110021000000661011001c70000182d000104300002000000000002000100000002001d000200000001001d000000000010043f0000066201000041000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000018090000613d000000000101043b00000001020000290000064b02200197000100000002001d000000000020043f000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000018090000613d000000000101043b000000000101041a000000ff00100190000018080000613d0000000201000029000000000010043f0000066201000041000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000018090000613d000000000101043b0000000102000029000000000020043f000000200010043f00000000010004140000060c0010009c0000060c01008041000000c0011002100000064d011001c70000801002000039182b18260000040f0000000100200190000018090000613d000000000101043b000000000201041a000006ad02200197000000000021041b00000000010004140000060c0010009c0000060c01008041000000c0011002100000064e011001c70000800d0200003900000004030000390000000007000411000006af0400004100000002050000290000000106000029182b18210000040f0000000100200190000018090000613d000000000001042d00000000010000190000182d00010430000000000001042f0000060c0010009c0000060c0100804100000040011002100000060c0020009c0000060c020080410000006002200210000000000112019f00000000020004140000060c0020009c0000060c02008041000000c002200210000000000112019f0000064e011001c70000801002000039182b18260000040f00000001002001900000181f0000613d000000000101043b000000000001042d00000000010000190000182d0001043000001824002104210000000102000039000000000001042d0000000002000019000000000001042d00001829002104230000000102000039000000000001042d0000000002000019000000000001042d0000182b000004320000182c0001042e0000182d000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a000000000000000000000000000000000000000000000000ff0000000000000000f92ee8a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000800000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff0200000000000000000000000000000000000020000000800000000000000000c7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000719ce73d00000000000000000000000000000000000000000000000000000000b1085cde00000000000000000000000000000000000000000000000000000000e87c8e8000000000000000000000000000000000000000000000000000000000faa94a2a00000000000000000000000000000000000000000000000000000000faa94a2b00000000000000000000000000000000000000000000000000000000fe4b84df00000000000000000000000000000000000000000000000000000000e87c8e8100000000000000000000000000000000000000000000000000000000f7c618c100000000000000000000000000000000000000000000000000000000cd4cef6700000000000000000000000000000000000000000000000000000000cd4cef6800000000000000000000000000000000000000000000000000000000d547741f00000000000000000000000000000000000000000000000000000000b1085cdf00000000000000000000000000000000000000000000000000000000c32a79480000000000000000000000000000000000000000000000000000000091d1485300000000000000000000000000000000000000000000000000000000a217fdde00000000000000000000000000000000000000000000000000000000a217fddf00000000000000000000000000000000000000000000000000000000a698b2cb0000000000000000000000000000000000000000000000000000000091d1485400000000000000000000000000000000000000000000000000000000a1a906b9000000000000000000000000000000000000000000000000000000008456cb58000000000000000000000000000000000000000000000000000000008456cb59000000000000000000000000000000000000000000000000000000008aee812700000000000000000000000000000000000000000000000000000000719ce73e0000000000000000000000000000000000000000000000000000000071f71d470000000000000000000000000000000000000000000000000000000036568abd0000000000000000000000000000000000000000000000000000000044920d63000000000000000000000000000000000000000000000000000000005c975aba000000000000000000000000000000000000000000000000000000005c975abb000000000000000000000000000000000000000000000000000000005f516fcc0000000000000000000000000000000000000000000000000000000044920d640000000000000000000000000000000000000000000000000000000056bbba58000000000000000000000000000000000000000000000000000000003f4ba839000000000000000000000000000000000000000000000000000000003f4ba83a0000000000000000000000000000000000000000000000000000000043e044960000000000000000000000000000000000000000000000000000000036568abe0000000000000000000000000000000000000000000000000000000037375af400000000000000000000000000000000000000000000000000000000248a9ca200000000000000000000000000000000000000000000000000000000276a680400000000000000000000000000000000000000000000000000000000276a6805000000000000000000000000000000000000000000000000000000002f2ff15d00000000000000000000000000000000000000000000000000000000248a9ca3000000000000000000000000000000000000000000000000000000002668144b00000000000000000000000000000000000000000000000000000000141833db00000000000000000000000000000000000000000000000000000000141833dc000000000000000000000000000000000000000000000000000000001be318a70000000000000000000000000000000000000000000000000000000001ffc9a7000000000000000000000000000000000000000000000000000000000ea99c3e1806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000010000000000000001cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d020000000000000000000000000000000000004000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d2613d2fa7bb06bd1529324e62fa8aa404609fa1e50a6f288b0137fc4c8acb4b48cbba69751e2ad12031a020b3cdf7f24f20225e09530064c9ad9fa187f4075caffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff0200000000000000000000000000000000000020000000000000000000000000d7e6bcf8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002000000080000000000000000000000000000000000000000000000000000000000000000000000000ffffffdffdffffffffffffffffffffffffffffffffffffe00000000000000000000000006f6d706c6574696f6e000000000000000000000000000000000000000000000043616e6e6f74206d6f64696679207072697a6520706f6f6c206166746572206308c379a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008400000000000000000000000000000000000000000000000000000000000000000000000000000000ffffff7ffdffffffffffffffffffffffffffffffffffff80000000000000000000000000699a2f92b905557154bab3a19bf23932ff443e39f52870622e5b0f9b065760fee2517d3f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004400000000000000000000000002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680014f8e85417eecedfed3e5ee8717ea0cd751e834889ece1727aa9457e713c07215072697a6520706f6f6c206d757374206265203e2030000000000000000000000000000000000000000000000000000000000064000000000000000000000000ffffffffffffffffffffffffffffffffffffffe00000000000000000000000005175697a20494420616c7265616479206578697374730000000000000000000075ca53043ea007e5c65182cbb028f60d7179ff4b55739a3949b401801c942e65796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d955391320200000200000000000000000000000000000004000000000000000000000000746f6b656e2069732073706563696669656400000000000000000000000000004d7573742073657420637573746f6d5072697a65506f6f6c203e203020696620637573746f6d20746f6b656e0000000000000000000000000000000000000000637573746f6d5072697a65506f6f6c206d7573742062652030206966206e6f2075ca53043ea007e5c65182cbb028f60d7179ff4b55739a3949b401801c942e66ffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000010000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000acd81dab929adeaebd54503c17dc8111e5edee98d31faa264758f76e4710fbdf5175697a2049442063616e6e6f7420626520656d707479000000000000000000fdffffffffffffffffffffffffffffffffffffdffffffe400000000000000000000000000000000000000000000000000000000000000000fffffffffffffebf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff5f0000000000000000000000ff000000000000000000000000000000000000000052657761726420746f6b656e20616c7265616479207365740000000000000000ffffffffffffffffffffff0000000000000000000000000000000000000000002d6b04df9b7d358407d1a014f1114b064add34c19d63d395db155a7e533e967a496e76616c696420746f6b656e2061646472657373000000000000000000000062e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25823b872dd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffe000000000000000000000000000000000000000000000000000000000ffffff9ffdffffffffffffffffffffffffffffffffffffa0000000000000000000000000cc1a84eb17a6b864337cd92d7a63056e0aac020dfc0de17f6813bc6b1867cf516c656400000000000000000000000000000000000000000000000000000000005175697a2d737065636966696320746f6b656e207472616e73666572206661696e6f74206465706f7369742068657265000000000000000000000000000000005175697a207573657320676c6f62616c20746f6b656e2f706f6f6c2c2063616e5265776172647320616c726561647920706169640000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000a9059cbb000000000000000000000000000000000000000000000000000000007ba16a12d3b47b506200875461686df4168c41c97a2a2c19a7b2095c6c444bb0546f6b656e207472616e73666572206661696c656400000000000000000000005072697a652063616c63756c6174696f6e206f766572666c6f77000000000000000000000000000000000000000000000000000000000000ffffffffffffffdf4e6f2064656661756c7420746f6b656e207365740000000000000000000000005072697a6520706f6f6c20697320656d707479000000000000000000000000005175697a206e6f7420636f6d706c6574656420796574000000000000000000003ee5aeb500000000000000000000000000000000000000000000000000000000d87580407343cf94fe330e1193d1714fe514990fc9659a7e1f712960c92645a600000000000000000000000000000000000000200000000000000000000000005db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa8dfc202b000000000000000000000000000000000000000000000000000000004573792c0e6a2b1b87cc723a44d436a9e4d5b11082622240906cd91bc9e579b76697b232000000000000000000000000000000000000000000000000000000005175697a20616c726561647920636f6d706c65746564000000000000000000004d69736d61746368656420512f412061727261797300000000000000000000004d69736d617463686564207061727469636970616e74732061727261790000004d69736d61746368656420636f7272656374506c6179657273206172726179004d69736d617463686564206f707465644f7574506c617965727320617272617980000000000000000000000000000000000000000000000000000000000000005175697a20646f6573206e6f7420657869737400000000000000000000000000d93c066500000000000000000000000000000000000000000000000000000000474c4f42414c000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000800000000000000000000000004465706f736974206d757374206265203e20300000000000000000000000000052657761726420746f6b656e206e6f74207365742028676c6f62616c29000000000000000000000000000000000000000000000000000000ffffffffffffff7f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffc9a7000000000000000000000000000000000000000000000000000000007965db0b00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b92657a894a9bd1bf556c8e858c1cb49abb2176692fb7a7b5c296216e1b3184ec
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.