Overview
ETH Balance
0 ETH
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
2944251 | 23 hrs ago | Contract Creation | 0 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
Huego
Compiler Version
v0.8.24+commit.e11b9ed9
ZkSolc Version
v1.5.7
Optimization Enabled:
Yes with Mode 3
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// there are 2 gameSessions played per session // first 4 turns are placing 4x1 blocks flat // next 24 turns are placing 2x1 blocks any rotation // at this point game starts another game // first 4 turns are placing 4x1 blocks flat // next 24 turns are placing 2x1 blocks any rotation // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; contract Huego { using SafeERC20 for IERC20; uint8 constant GRID_SIZE = 8; uint256 public timeLimit = 600; // 10 minutes per player address public owner; uint256 public feePercentage = 500; // 5% modifier onlyOwner() { require(msg.sender == owner, "Not the owner"); _; } event BlockPlaced(uint256 indexed sessionId, uint8 indexed game, uint8 turn, uint8 pieceType, uint8 x, uint8 z, uint8 y, Rotation rotation); struct WagerInfo { uint256 amount; bool processed; // To prevent double-processing } struct WagerProposal { uint256 sessionId; uint256 amount; } struct GameSession { address player1; address player2; WagerInfo wager; uint8 turn; uint8 game; // either 0 or 1 uint256 gameStartTime; uint256 lastMoveTime; uint256 timeRemainingP1; uint256 timeRemainingP2; bool gameEnded; topStack[][] initialStacks; // basically [2][16] } struct topStack { uint8 x; uint8 z; uint8 y; uint8 color; } // wager proposals maps address and sessionId to the wager proposal mapping(address => mapping(uint256 => WagerProposal)) public wagerProposals; // lets map user to their gameSession mapping(address => uint256) public userGameSession; struct GameGrid { topStack[8][8] grid; } // GameSession ID -> [game0, game1] -> 8x8 grid mapping(uint256 => GameGrid[2]) private stacksGrid; GameSession[] public gameSessions; // List of gameSessions // Colors: 0 = empty, 1 = yellow, 2 = purple, 3 = orange, 4 = green enum Rotation {X, Z, Y} constructor() { owner = msg.sender; // lets create a dummy gameSession to start from 1 gameSessions.push(); } function getInitialStacks(uint256 sessionId, uint8 game) external view returns (topStack[] memory) { return gameSessions[sessionId].initialStacks[game]; } function getStacksGrid(uint256 sessionId, uint8 game) external view returns (topStack[8][8] memory) { return stacksGrid[sessionId][game].grid; } function proposeWager(uint256 sessionId, uint256 _amount) public payable { require(msg.value == _amount, "Wager amount mismatch"); _proposeWager(sessionId, _amount, msg.sender); } function acceptWagerProposal(uint256 sessionId, uint256 _amount) public payable { require(msg.value == _amount, "Wager amount mismatch"); _acceptWager(sessionId, _amount, msg.sender); } function acceptAndProposeWager(uint256 sessionId, uint256 _acceptAmount, uint256 _proposeAmount) public payable { require(msg.value == _acceptAmount + _proposeAmount, "Wager amount mismatch"); _acceptWager(sessionId, _acceptAmount, msg.sender); _proposeWager(sessionId, _proposeAmount, msg.sender); } // Internal helper functions to reduce redundancy function _proposeWager(uint256 sessionId, uint256 _amount, address sender) internal { require(sender == gameSessions[sessionId].player1 || sender == gameSessions[sessionId].player2, "Not a player of this game"); uint currentWagerAmount = wagerProposals[sender][sessionId].amount; wagerProposals[sender][sessionId] = WagerProposal({ sessionId: sessionId, amount: _amount }); if (currentWagerAmount != 0) { (bool success,) = payable(sender).call{value: currentWagerAmount}(""); require(success, "Refund failed"); } } function _acceptWager(uint256 sessionId, uint256 _amount, address sender) internal { address proposer = (sender == gameSessions[sessionId].player1) ? gameSessions[sessionId].player2 : gameSessions[sessionId].player1; require(_amount == wagerProposals[proposer][sessionId].amount, "Wager amount mismatch"); require(wagerProposals[proposer][sessionId].amount != 0, "No wager proposal"); require(!gameSessions[sessionId].wager.processed, "Wager already processed"); gameSessions[sessionId].wager.amount += wagerProposals[proposer][sessionId].amount; delete wagerProposals[proposer][sessionId]; } function cancelWagerProposal(uint256 sessionId) external { require(wagerProposals[msg.sender][sessionId].amount != 0, "No wager proposal exists"); // refund the player (bool success,) = payable(msg.sender).call{value: wagerProposals[msg.sender][sessionId].amount}(""); require(success, "Transfer failed"); delete wagerProposals[msg.sender][sessionId]; } function placeInitial4x1Stack(uint256 sessionId, uint8 game, uint8 x, uint8 z, uint8 color) internal { require(game < 2, "Invalid game index"); require(x + 1 < GRID_SIZE && z + 1 < GRID_SIZE, "Invalid coordinates"); require(stacksGrid[sessionId][game].grid[x][z].color == 0, "Grid has a stack"); require(stacksGrid[sessionId][game].grid[x + 1][z].color == 0, "Grid has a stack"); require(stacksGrid[sessionId][game].grid[x][z + 1].color == 0, "Grid has a stack"); require(stacksGrid[sessionId][game].grid[x + 1][z + 1].color == 0, "Grid has a stack"); topStack memory stack1 = topStack(x, z, 0, color); topStack memory stack2 = topStack(x + 1, z, 0, color); topStack memory stack3 = topStack(x, z + 1, 0, color); topStack memory stack4 = topStack(x + 1, z + 1, 0, color); // If it's not the first placement, check for a valid neighbor if (gameSessions[sessionId].turn > 1) { // Predefined offsets for the 8 unique neighboring positions int8[8] memory dx = [ int8(-1), int8(-1), int8(0), int8(0), int8(2), int8(2), int8(0), int8(1)]; int8[8] memory dz = [ int8(0), int8(1), int8(2), int8(2), int8(0), int8(1), int8(-1), int8(-1)]; bool found = false; for (uint8 i = 0; i < 8; i++) { int8 nx = int8(x) + dx[i]; int8 nz = int8(z) + dz[i]; // Ensure within grid bounds before checking if (nx >= 0 && nx < int8(GRID_SIZE) && nz >= 0 && nz < int8(GRID_SIZE)) { if (stacksGrid[sessionId][game].grid[uint8(nx)][uint8(nz)].color != 0) { found = true; break; } } } require(found, "No adjacent stack"); } stacksGrid[sessionId][game].grid[x][z] = stack1; stacksGrid[sessionId][game].grid[x + 1][z] = stack2; stacksGrid[sessionId][game].grid[x][z + 1] = stack3; stacksGrid[sessionId][game].grid[x + 1][z + 1] = stack4; // Calculate the correct index in initialStacks based on turn // uint8 turnIndex = (gameSessions[sessionId].turn - 1) * 4; // Each turn places 4 blocks gameSessions[sessionId].initialStacks[game].push(stack1); gameSessions[sessionId].initialStacks[game].push(stack2); gameSessions[sessionId].initialStacks[game].push(stack3); gameSessions[sessionId].initialStacks[game].push(stack4); emit BlockPlaced(sessionId, game, gameSessions[sessionId].turn, 1, x, z, 0, Rotation.X); } function createSession(address player1, address player2) external { // only player 1 can create a session require(msg.sender == player2, "Not player 2"); // player 1 and 2 must not have an active game require(userGameSession[player1] == 0, "Player 1 has an active session"); require(userGameSession[player2] == 0, "Player 2 has an active game"); uint256 sessionId = gameSessions.length; GameSession storage session = gameSessions.push(); session.player1 = player1; session.player2 = player2; session.wager = WagerInfo(0, false); session.game = 0; session.gameStartTime = block.timestamp; session.lastMoveTime = block.timestamp; session.timeRemainingP1 = timeLimit; session.timeRemainingP2 = timeLimit; session.gameEnded = false; // **Fix:** Initialize `initialStacks` before adding elements session.initialStacks.push(); // First game session session.initialStacks.push(); // Second game session userGameSession[player1] = sessionId; userGameSession[player2] = sessionId; session.turn = 1; } function play(uint256 sessionId, uint8 x, uint8 z, Rotation rotation) external { GameSession storage session = gameSessions[sessionId]; // game must not have ended require(!session.gameEnded, "GameSession has ended"); // only player on turn can play address starter = session.game == 0 ? session.player1 : session.player2; address nonStarter = session.game == 0 ? session.player2 : session.player1; address onTurn = session.turn % 2 == 1 ? starter : nonStarter; require(msg.sender == onTurn, "Not your turn"); uint8 currentColor = ((session.turn - 1) % 4) + 1; // requirement that the player still has time if (onTurn == session.player1) { require(block.timestamp - session.lastMoveTime < session.timeRemainingP1, "Player 1 ran out of time"); session.timeRemainingP1 -= block.timestamp - session.lastMoveTime; } else { require(block.timestamp - session.lastMoveTime < session.timeRemainingP2, "Player 2 ran out of time"); session.timeRemainingP2 -= block.timestamp - session.lastMoveTime; } // we are placing initial stacks if(session.turn <= 4) { placeInitial4x1Stack(sessionId, session.game, x, z, currentColor); } else { placeBlock(sessionId, session.game, x, z, currentColor); if (rotation == Rotation.X) { require(checkStackWithColorExists(sessionId, session.game, currentColor), "No stack with color exists"); placeBlock(sessionId, session.game, x + 1, z, currentColor); } else if (rotation == Rotation.Z) { require(checkStackWithColorExists(sessionId, session.game, currentColor), "No stack with color exists"); placeBlock(sessionId, session.game, x, z + 1, currentColor); } else { placeBlock(sessionId, session.game, x, z, currentColor); } // game ends on turn 28 if (session.turn == 28) { if(session.game == 0) { session.game = 1; session.turn = 0; } else { session.gameEnded = true; } } emit BlockPlaced(sessionId, session.game, session.turn, 2, x, z, stacksGrid[sessionId][session.game].grid[x][z].y, rotation); } session.lastMoveTime = block.timestamp; session.turn += 1; } function checkStackWithColorExists(uint256 sessionId, uint8 game, uint8 color) internal view returns (bool) { for (uint8 i = 0; i < 16; i++) { if (stacksGrid[sessionId][game].grid[gameSessions[sessionId].initialStacks[game][i].x][gameSessions[sessionId].initialStacks[game][i].z].color == color) { return true; } } return false; } function placeBlock(uint256 sessionId, uint8 game, uint8 x, uint8 z, uint8 currentColor) internal { require(stacksGrid[sessionId][game].grid[x][z].color != 0, "Stack does not exist"); stacksGrid[sessionId][game].grid[x][z].y += 1; stacksGrid[sessionId][game].grid[x][z].color = currentColor; } // SCORING // • Base Points: 1 point for each cube on top of any stack // • Bonus Points: +1 point for cubes on the highest and lowest VISIBLE stacks // • GameSession ends when all cubes are placed or when a player runs out of time function calculateGamePoints(uint256 sessionId, uint8 game) public view returns (uint256, uint256) { uint256 starterPoints = 0; uint256 nonStarterPoints = 0; uint8 highestStack = 0; // first lets loop to find the highest stack for (uint8 i = 0; i < 16; i++) { uint x = gameSessions[sessionId].initialStacks[game][i].x; uint z = gameSessions[sessionId].initialStacks[game][i].z; topStack memory stack = stacksGrid[sessionId][game].grid[x][z]; if (stack.y > highestStack) { highestStack = stack.y; } } uint lowestStack = highestStack; // now lets loop to find the lowest stack for (uint8 i = 0; i < 16; i++) { uint x = gameSessions[sessionId].initialStacks[game][i].x; uint z = gameSessions[sessionId].initialStacks[game][i].z; topStack memory stack = stacksGrid[sessionId][game].grid[x][z]; if (stack.y < lowestStack) { lowestStack = stack.y; } } for (uint8 i = 0; i < 16; i++) { uint x = gameSessions[sessionId].initialStacks[game][i].x; uint z = gameSessions[sessionId].initialStacks[game][i].z; topStack memory stack = stacksGrid[sessionId][game].grid[x][z]; if (stack.y == highestStack || stack.y == lowestStack) { // color 1 and color 3 belong to player 1 if (stack.color == 1 || stack.color == 3) { starterPoints += 2; } else { nonStarterPoints += 2; } } else { if (stack.color == 1 || stack.color == 3) { starterPoints += 1; } else { nonStarterPoints += 1; } } } return (starterPoints, nonStarterPoints); } // receive reward function acceptRewards(uint256 sessionId) external { GameSession storage session = gameSessions[sessionId]; require(!session.wager.processed, "Wager already processed"); session.wager.processed = true; address winner; if(session.game == 1 && session.turn == 29 && session.gameEnded) { uint256 totalPlayer1Points = 0; uint256 totalPlayer2Points = 0; (uint256 starterPoints0, uint256 nonStarterPoints0) = calculateGamePoints(sessionId, 0); (uint256 starterPoints1, uint256 nonStarterPoints1) = calculateGamePoints(sessionId, 1); totalPlayer1Points += starterPoints0; totalPlayer2Points += nonStarterPoints0; totalPlayer1Points += nonStarterPoints1; totalPlayer2Points += starterPoints1; if (totalPlayer1Points > totalPlayer2Points) { winner = session.player1; } else if (totalPlayer2Points > totalPlayer1Points) { winner = session.player2; } else { // require either player1, player2 require(msg.sender == session.player1 || msg.sender == session.player2, "Not a player of this game"); // Tie case, refund wager to both players uint256 feeEach = session.wager.amount * feePercentage / 10000; uint256 rewardSplit = session.wager.amount - feeEach; (bool success1,) = payable(session.player1).call{value: rewardSplit}(""); require(success1, "Transfer failed"); (bool success2,) = payable(session.player2).call{value: rewardSplit}(""); require(success2, "Transfer failed"); (bool success3,) = payable(owner).call{value: 2 * feeEach}(""); require(success3, "Transfer failed"); return; } } else { // lets throw require current turn is 29 address starter = session.game == 0 ? session.player1 : session.player2; address nonStarter = session.game == 0 ? session.player2 : session.player1; address onTurn = session.turn % 2 == 1 ? starter : nonStarter; // if not turn 28, game has not ended, we can calculate the winner one player runs out of time if (onTurn == session.player1) { require(block.timestamp - session.lastMoveTime > session.timeRemainingP1, "Player 1 still has time"); winner = session.player2; } else { require(block.timestamp - session.lastMoveTime > session.timeRemainingP2, "Player 2 still has time"); winner = session.player1; } } // caller has to be the winner require(msg.sender == winner, "Not the winner"); uint256 pot = session.wager.amount * 2; uint256 fee = pot * feePercentage / 10000; uint256 reward = pot - fee; (bool success4,) = payable(winner).call{value: reward}(""); require(success4, "Transfer failed"); (bool success5,) = payable(owner).call{value: fee}(""); require(success5, "Transfer failed"); } function setFeePercentage(uint256 _feePercentage) external onlyOwner { require(_feePercentage <= 1000, "Fee too high"); // Max 10% feePercentage = _feePercentage; } function setGameTimeLimit(uint256 _timeLimit) external onlyOwner { timeLimit = _timeLimit; } function withdrawERC20(IERC20 erc20Token) external onlyOwner { uint256 erc20Balance = erc20Token.balanceOf(address(this)); erc20Token.safeTransfer(msg.sender, erc20Balance); } // if funds are stuck on contract for some reason function withdraw(uint256 amount) external onlyOwner { (bool success,) = payable(msg.sender).call{value: amount}(""); require(success, "Transfer failed"); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ 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.0.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.20; import {IERC20} from "../IERC20.sol"; import {IERC20Permit} from "../extensions/IERC20Permit.sol"; import {Address} from "../../../utils/Address.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; /** * @dev An operation with an ERC20 token failed. */ error SafeERC20FailedOperation(address token); /** * @dev Indicates a failed `decreaseAllowance` request. */ error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease); /** * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value))); } /** * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful. */ function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value))); } /** * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 oldAllowance = token.allowance(address(this), spender); forceApprove(token, spender, oldAllowance + value); } /** * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no * value, non-reverting calls are assumed to be successful. */ function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal { unchecked { uint256 currentAllowance = token.allowance(address(this), spender); if (currentAllowance < requestedDecrease) { revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease); } forceApprove(token, spender, currentAllowance - requestedDecrease); } } /** * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval * to be set to zero before setting it to a non-zero value, such as USDT. */ function forceApprove(IERC20 token, address spender, uint256 value) internal { bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value)); if (!_callOptionalReturnBool(token, approvalCall)) { _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0))); _callOptionalReturn(token, approvalCall); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data); if (returndata.length != 0 && !abi.decode(returndata, (bool))) { revert SafeERC20FailedOperation(address(token)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). * * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead. */ function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false // and not revert is the subcall reverts. (bool success, bytes memory returndata) = address(token).call(data); return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Permit.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. * * ==== Security Considerations * * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be * considered as an intention to spend the allowance in any specific way. The second is that because permits have * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be * generally recommended is: * * ```solidity * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public { * try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {} * doThing(..., value); * } * * function doThing(..., uint256 value) public { * token.safeTransferFrom(msg.sender, address(this), value); * ... * } * ``` * * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also * {SafeERC20-safeTransferFrom}). * * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so * contracts should have entry points that don't rely on permit. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. * * CAUTION: See Security Considerations above. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol) pragma solidity ^0.8.20; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev The ETH balance of the account is not enough to perform the operation. */ error AddressInsufficientBalance(address account); /** * @dev There's no code at `target` (it is not a contract). */ error AddressEmptyCode(address target); /** * @dev A call to an address target failed. The target may have reverted. */ error FailedInnerCall(); /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { if (address(this).balance < amount) { revert AddressInsufficientBalance(address(this)); } (bool success, ) = recipient.call{value: amount}(""); if (!success) { revert FailedInnerCall(); } } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason or custom error, it is bubbled * up by this function (like regular Solidity function calls). However, if * the call reverted with no returned reason, this function reverts with a * {FailedInnerCall} error. * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { if (address(this).balance < value) { revert AddressInsufficientBalance(address(this)); } (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an * unsuccessful call. */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata ) internal view returns (bytes memory) { if (!success) { _revert(returndata); } else { // only check if target is a contract if the call was successful and the return data is empty // otherwise we already know that it was a contract if (returndata.length == 0 && target.code.length == 0) { revert AddressEmptyCode(target); } return returndata; } } /** * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the * revert reason or with a default {FailedInnerCall} error. */ function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) { if (!success) { _revert(returndata); } else { return returndata; } } /** * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}. */ function _revert(bytes memory returndata) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert FailedInnerCall(); } } }
{ "optimizer": { "enabled": true, "mode": "3" }, "viaIR": true, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "abi", "metadata" ], "": [ "ast" ] } }, "detectMissingLibraries": false, "forceEVMLA": false, "enableEraVMExtensions": false, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"sessionId","type":"uint256"},{"indexed":true,"internalType":"uint8","name":"game","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"turn","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"pieceType","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"x","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"z","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"y","type":"uint8"},{"indexed":false,"internalType":"enum Huego.Rotation","name":"rotation","type":"uint8"}],"name":"BlockPlaced","type":"event"},{"inputs":[{"internalType":"uint256","name":"sessionId","type":"uint256"},{"internalType":"uint256","name":"_acceptAmount","type":"uint256"},{"internalType":"uint256","name":"_proposeAmount","type":"uint256"}],"name":"acceptAndProposeWager","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sessionId","type":"uint256"}],"name":"acceptRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sessionId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"acceptWagerProposal","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sessionId","type":"uint256"},{"internalType":"uint8","name":"game","type":"uint8"}],"name":"calculateGamePoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"sessionId","type":"uint256"}],"name":"cancelWagerProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"player1","type":"address"},{"internalType":"address","name":"player2","type":"address"}],"name":"createSession","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"gameSessions","outputs":[{"internalType":"address","name":"player1","type":"address"},{"internalType":"address","name":"player2","type":"address"},{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"processed","type":"bool"}],"internalType":"struct Huego.WagerInfo","name":"wager","type":"tuple"},{"internalType":"uint8","name":"turn","type":"uint8"},{"internalType":"uint8","name":"game","type":"uint8"},{"internalType":"uint256","name":"gameStartTime","type":"uint256"},{"internalType":"uint256","name":"lastMoveTime","type":"uint256"},{"internalType":"uint256","name":"timeRemainingP1","type":"uint256"},{"internalType":"uint256","name":"timeRemainingP2","type":"uint256"},{"internalType":"bool","name":"gameEnded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"sessionId","type":"uint256"},{"internalType":"uint8","name":"game","type":"uint8"}],"name":"getInitialStacks","outputs":[{"components":[{"internalType":"uint8","name":"x","type":"uint8"},{"internalType":"uint8","name":"z","type":"uint8"},{"internalType":"uint8","name":"y","type":"uint8"},{"internalType":"uint8","name":"color","type":"uint8"}],"internalType":"struct Huego.topStack[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"sessionId","type":"uint256"},{"internalType":"uint8","name":"game","type":"uint8"}],"name":"getStacksGrid","outputs":[{"components":[{"internalType":"uint8","name":"x","type":"uint8"},{"internalType":"uint8","name":"z","type":"uint8"},{"internalType":"uint8","name":"y","type":"uint8"},{"internalType":"uint8","name":"color","type":"uint8"}],"internalType":"struct Huego.topStack[8][8]","name":"","type":"tuple[8][8]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"sessionId","type":"uint256"},{"internalType":"uint8","name":"x","type":"uint8"},{"internalType":"uint8","name":"z","type":"uint8"},{"internalType":"enum Huego.Rotation","name":"rotation","type":"uint8"}],"name":"play","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sessionId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"proposeWager","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feePercentage","type":"uint256"}],"name":"setFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timeLimit","type":"uint256"}],"name":"setGameTimeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"timeLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userGameSession","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"wagerProposals","outputs":[{"internalType":"uint256","name":"sessionId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"erc20Token","type":"address"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
9c4d535b0000000000000000000000000000000000000000000000000000000000000000010005931642c2c6ee284e8a34fb1c6e20217264d7a297737e03226274231bae00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x0003000000000002001f000000000002000000000601034f000000600110027000000522011001970002000000160355000100000006035500000001002001900000008002000039000000a70000c13d000000400020043f000000040010008c000006000000413d000000000206043b000000e002200270000005260020009c000000c00000213d000005340020009c000000d90000213d0000053b0020009c000001150000a13d0000053c0020009c0000025d0000613d0000053d0020009c000001780000613d0000053e0020009c000006000000c13d000000440010008c000006000000413d0000000001000416000000000001004b000006000000c13d0000000401600370000000000101043b001c00000001001d000005410010009c000006000000213d0000002401600370000000000101043b000005410010009c000006000000213d0000000002000411000000000012004b000005cb0000c13d0000001c01000029000000000010043f0000000401000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b000000000101041a000000000001004b0000085e0000c13d0000000001000411000000000010043f0000000401000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b000000000101041a000000000001004b000008df0000c13d0000000604000039000000000304041a000005460030009c000000ba0000213d00000000020300190000000001030019001b00000002001d0000000102200039000000000024041b148410fd0000040f001a00000001001d000000000201041a00000523032001970000001c023001af000000000021041b0000000104100039000000000204041a00000523022001970000000003000411000000000232019f000000000024041b000000400100043d001900000001001d1484110b0000040f00000019020000290000002001200039000000000001043500000000000204350000001a040000290000000201400039000000000001041b0000000301400039000000000201041a0000058602200197000000000021041b0000000403400039001900000003001d000000000203041a0000058701200197000000000013041b0000800b0100003900000000040004150000001f0440008a000000050440021000000560020000410000000403000039148414630000040f0000001a040000290000000502400039000000000012041b0000000602400039000000000012041b0000000701400039000000000200041a000000000021041b0000000801400039000000000021041b0000000901400039000000000201041a0000058602200197000000000021041b0000000a01400039001a00000001001d1484118d0000040f0000001a010000291484118d0000040f0000001c01000029000000000010043f0000000401000039000000200010043f000000400200003900000000010000191484144e0000040f0000001b02000029000000000021041b0000000001000411000000000010043f000000000100001900000040020000391484144e0000040f0000001b02000029000000000021041b0000001903000029000000000103041a000005860110019700000001011001bf000000000013041b0000000001000019000014850001042e000000400020043f0000000001000416000000000001004b000006000000c13d0000025801000039000000000010041b000001f4010000390000000202000039000000000012041b0000000101000039000000000201041a00000523022001970000000003000411000000000232019f000000000021041b0000000601000039000000000201041a000005240020009c000000d10000413d0000058101000041000000000010043f0000004101000039000000040010043f0000054b010000410000148600010430000005270020009c000000ef0000213d0000052e0020009c0000013c0000a13d0000052f0020009c000002b40000613d000005300020009c000001950000613d000005310020009c000006000000c13d0000000001000416000000000001004b000006000000c13d000000000100041a000000800010043f0000057301000041000014850001042e0000000102200039000000000021041b000000000010043f0000002001000039000001000010044300000120000004430000052501000041000014850001042e000005350020009c000001590000a13d000005360020009c0000047d0000613d000005370020009c000001a80000613d000005380020009c000006000000c13d148411160000040f001c00000001001d001b00000002001d0000000001000416000000000021004b00000000010000390000000101006039148411790000040f00000000030004110000001c010000290000001b020000291484127f0000040f0000000001000019000014850001042e000005280020009c000001660000a13d000005290020009c0000048d0000613d0000052a0020009c0000022f0000613d0000052b0020009c000006000000c13d000000240010008c000006000000413d0000000002000416000000000002004b000006000000c13d0000000402600370000000000202043b000005410020009c000006000000213d0000000103000039000000000303041a00000541033001970000000004000411000000000034004b000005890000c13d00000541022001970000054203000041000000800030043f0000000003000410000000840030043f0000000003000414000000040020008c001c00000002001d000005d50000c13d000000000116034f0000000003000031000000200030008c00000020040000390000000004034019000005fa0000013d0000053f0020009c000004b90000613d000005400020009c000006000000c13d000000240010008c000006000000413d0000000001000416000000000001004b000006000000c13d0000000102000039000000000102041a00000541011001970000000004000411000000000014004b000005890000c13d0000000401600370000000000301043b0000000001000414000000040040008c000001350000613d000005220010009c0000052201008041000000c001100210000000000003004b000005500110c1c70000800902000039000000000204601900000000050000191484147a0000040f0000006003100270000005220030019d0002000000010355001c00000002001d148411220000040f0000001c01000029000000010110018f148411510000040f0000000001000019000014850001042e000005320020009c0000050c0000613d000005330020009c000006000000c13d000000240010008c000006000000413d0000000001000416000000000001004b000006000000c13d0000000401600370000000000101043b0000000102000039000000000202041a00000541022001970000000003000411000000000023004b000005890000c13d000003e90010008c000005a40000413d0000055201000041000000800010043f0000002001000039000000840010043f0000000c01000039000000a40010043f0000057501000041000000c40010043f0000055b010000410000148600010430000005390020009c000005140000613d0000053a0020009c000006000000c13d0000000001000416000000000001004b000006000000c13d0000000101000039000000000101041a0000054101100197000000800010043f0000057301000041000014850001042e0000052c0020009c000005330000613d0000052d0020009c000006000000c13d148411160000040f001c00000001001d001b00000002001d0000000001000416000000000021004b00000000010000390000000101006039148411790000040f00000000030004110000001c010000290000001b02000029148411b00000040f0000000001000019000014850001042e000000640010008c000006000000413d0000002401600370000000000301043b0000004401600370000000000201043b000000000032001a0000060f0000413d0000000001320019001b00000002001d0000000002000416000000000012004b000000000100003900000001010060390000000402600370000000000202043b001c00000002001d001a00000003001d148411790000040f00000000030004110000001c010000290000001a02000029148411b00000040f0000001c010000290000001b0200002900000000030004111484127f0000040f0000000001000019000014850001042e000000240010008c000006000000413d0000000001000416000000000001004b000006000000c13d0000000101000039000000000101041a00000541011001970000000002000411000000000012004b00000000010000390000000101006039148411650000040f00000004010000390000000101100367000000000101043b000000000010041b0000000001000019000014850001042e000000440010008c000006000000413d0000000001000416000000000001004b000006000000c13d0000002401600370000000000101043b001c00000001001d000000ff0010008c000006000000213d0000000401600370000000000101043b0000000602000039000000000202041a000000000012004b000008ca0000a13d0000000b011000c90000056b0110009a000000000201041a0000001c0020006c000008ca0000a13d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001c01100029000000000401041a000005460040009c000000ba0000213d00000005024002100000003f022000390000057602200197000000400500043d0000000002250019000000000052004b00000000030000390000000103004039000005460020009c000000ba0000213d0000000100300190000000ba0000c13d000000400020043f001c00000004001d001b00000005001d0000000002450436001a00000002001d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d0000001c08000029000000000008004b0000001b09000029000002070000613d000000000101043b00000000020000190000001a03000029000000400400043d000005570040009c000000ba0000213d0000008005400039000000400050043f000000000501041a0000001806500270000000ff0660018f000000600740003900000000006704350000001006500270000000ff0660018f000000400740003900000000006704350000000806500270000000ff0660018f00000020074000390000000000670435000000ff0550018f0000000000540435000000000343043600000001011000390000000102200039000000000082004b000001ee0000413d000000400100043d00000020020000390000000002210436000000000309043300000000003204350000004002100039000000000003004b000002260000613d00000000040000190000001a0800002900000000850804340000000076050434000000ff0660018f00000000066204360000000007070433000000ff0770018f000000000076043500000040065000390000000006060433000000ff0660018f0000004007200039000000000067043500000060055000390000000005050433000000ff0550018f0000006006200039000000000056043500000080022000390000000104400039000000000034004b000002110000413d0000000002120049000005220020009c00000522020080410000006002200210000005220010009c00000522010080410000004001100210000000000112019f000014850001042e000000240010008c000006000000413d0000000001000416000000000001004b000006000000c13d0000000401600370000000000101043b001c00000001001d0000000001000411000000000010043f0000000301000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001c02000029000000000020043f000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000000101100039000000000101041a000000000001004b000005a80000c13d000000400100043d00000044021000390000055103000041000000000032043500000024021000390000001803000039000005990000013d000000240010008c000006000000413d0000000001000416000000000001004b000006000000c13d0000000401600370000000000101043b0000000602000039000000000202041a000000000021004b000006000000813d148410fd0000040f0000000002010019001a00000001001d0000000101100039000000000101041a001b00000001001d000000000102041a001c00000001001d000000400100043d001900000001001d1484110b0000040f0000001a020000290000000201200039000000000101041a000000190b00002900000000031b04360000000301200039000000000101041a000000ff001001900000000001000039000000010100c03900000000001304350000001b010000290000054104100197000000090120003900000008052000390000000706200039000000060720003900000005082000390000000402200039000000000202041a000000000808041a000000000707041a000000000606041a000000000505041a000000000901041a000000400100043d000000200a10003900000000004a04350000001c040000290000054104400197000000000041043500000000040b0433000000400a10003900000000004a04350000000003030433000000ff009001900000000004000039000000010400c039000001400910003900000000004904350000012004100039000000000054043500000100041000390000000000640435000000e0041000390000000000740435000000c00410003900000000008404350000000804200270000000ff0440018f000000a0051000390000000000450435000000ff0220018f00000080041000390000000000240435000000000003004b0000000002000039000000010200c03900000060031000390000000000230435000005220010009c000005220100804100000040011002100000057b011001c7000014850001042e000000440010008c000006000000413d0000000001000416000000000001004b000006000000c13d0000000401600370000000000101043b001900000001001d0000002401600370000000000101043b001b00000001001d000000ff0010008c000006000000213d0000001b01000029001500060010021800000019010000290000000b011000c9001a056b001000a2001c00000000001d0000000002000019001800000002001d0000000601000039000000000101041a000000190010006c000008ca0000a13d0000001a01000029000000000101041a0000001b0010006c000008ca0000a13d0000001a01000029000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001b01100029000000000201041a0000001c0020006c000008ca0000a13d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000000602000039000000000202041a000000190020006c000008ca0000a13d0000001a02000029000000000202041a0000001b0020006c000008ca0000a13d0000001c01100029000000000101041a001700000001001d0000001a01000029000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001b01100029000000000201041a0000001c0020006c000008ca0000a13d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001c01100029000000000101041a001600000001001d0000001901000029000000000010043f0000000501000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d0000001b02000029000000010020008c000008ca0000213d0000001702000029000000ff0320018f000000070030008c000008ca0000213d00000016020000290000000802200270000000ff0420018f000000070040008c000008ca0000213d000000400200043d000005570020009c000000ba0000213d000000000101043b0000008005200039000000400050043f0000000303300210000000150330002900000000034300190000000001130019000000000101041a0000001803100270000000ff0330018f000000600420003900000000003404350000000803100270000000ff0330018f00000020042000390000000000340435000000ff0310018f00000000003204350000001001100270000000ff0110018f000000400220003900000000001204350000001803000029000000ff0230018f000000000021004b000000000103a0190000001c020000290000000e0020008c001c00010020003d0000000002010019000002c80000a13d000000ff0110018f001c00000000001d001400000001001d001800000001001d0000000601000039000000000101041a000000190010006c000008ca0000a13d0000001a01000029000000000101041a0000001b0010006c000008ca0000a13d0000001a01000029000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001b01100029000000000201041a0000001c0020006c000008ca0000a13d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000000602000039000000000202041a000000190020006c000008ca0000a13d0000001a02000029000000000202041a0000001b0020006c000008ca0000a13d0000001c01100029000000000101041a001700000001001d0000001a01000029000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001b01100029000000000201041a0000001c0020006c000008ca0000a13d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001c01100029000000000101041a001600000001001d0000001901000029000000000010043f0000000501000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d0000001702000029000000ff0320018f000000070030008c000008ca0000213d00000016020000290000000802200270000000ff0420018f000000070040008c000008ca0000213d000000400200043d000005570020009c000000ba0000213d000000000101043b0000008005200039000000400050043f0000000303300210000000150330002900000000034300190000000001130019000000000101041a0000001803100270000000ff0330018f000000600420003900000000003404350000000803100270000000ff0330018f00000020042000390000000000340435000000ff0310018f00000000003204350000001001100270000000ff0310018f00000040012000390000000000310435000000180030006c00000018030080290000001c010000290000000101100039000000ff0110018f001c00000001001d000000100010008c001800000003001d000003540000413d001200000003001d001c00000000001d001600000000001d001300000000001d000003e60000013d0000001301000029001300010010003e0000060f0000613d0000001c010000290000000101100039000000ff0110018f001c00000001001d000000100010008c00000a310000813d0000000601000039000000000101041a000000190010006c000008ca0000a13d0000001a01000029000000000101041a0000001b0010006c000008ca0000a13d0000001a01000029000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001b01100029000000000201041a0000001c0020006c000008ca0000a13d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000000602000039000000000202041a000000190020006c000008ca0000a13d0000001a02000029000000000202041a0000001b0020006c000008ca0000a13d0000001c01100029000000000101041a001800000001001d0000001a01000029000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001b01100029000000000201041a0000001c0020006c000008ca0000a13d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001c01100029000000000101041a001700000001001d0000001901000029000000000010043f0000000501000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d0000001802000029000000ff0320018f000000070030008c000008ca0000213d00000017020000290000000802200270000000ff0420018f000000070040008c000008ca0000213d000000400200043d000005570020009c000000ba0000213d000000000101043b0000008005200039000000400050043f0000000303300210000000150330002900000000034300190000000001130019000000000301041a0000001801300270000000ff0410018f000000600520003900000000004504350000000804300270000000ff0440018f00000020052000390000000000450435000000ff0430018f00000000004204350000001003300270000000ff0330018f00000040022000390000000000320435000000140030006c0000046d0000613d000000120030006c0000046d0000613d00000002011001bf000000ff0110018f000000030010008c000003dd0000c13d0000001601000029001600010010003e000003e00000c13d0000060f0000013d00000002011001bf000000ff0110018f000000030010008c000004770000c13d000000030200008a000000160020006b0000060f0000213d0000001601000029001600020010003d000003e00000013d000000030200008a000000130020006b0000060f0000213d0000001301000029001300020010003d000003e00000013d000000240010008c000006000000413d0000000001000416000000000001004b000006000000c13d0000000401600370000000000101043b000005410010009c000006000000213d000000000010043f0000000401000039000000200010043f000000400200003900000000010000191484144e0000040f000005100000013d000000440010008c000006000000413d0000000001000416000000000001004b000006000000c13d0000002401600370000000000101043b001c00000001001d000000ff0010008c000006000000213d000001800200003900000000010000190000010003200039000000400030043f000005540020009c000000ba0000213d00000000040000190000008005300039000000400050043f000000600530003900000000000504350000004005300039000000000005043500000020053000390000000000050435000000000003043500000000052400190000000000350435000000e00040008c000004b00000813d0000002004400039000000400300043d000005570030009c0000049e0000a13d000000ba0000013d00000080031000390000000000230435000000df0010008c000008b90000213d0000002001100039000000400200043d000005550020009c000004990000a13d000000ba0000013d000000240010008c000006000000413d0000000001000416000000000001004b000006000000c13d0000000401600370000000000201043b0000000001000415001300000001001d0000000601000039000000000101041a001a00000002001d000000000021004b000008ca0000a13d0000000601000039000000000010043f0000001a010000290000000b041000c90000057e0140009a000000000201041a000000ff00200190000005930000c13d0011057d004000a2000005580540009a000005860220019700000001022001bf000000000021041b0000055d0140009a000000000101041a0000000802100270000000ff0220018f000000ff0310018f0000001d0030008c001200000004001d000004e20000c13d000000010020008c000004e20000c13d000005590340009a000000000303041a000000ff00300190000006680000c13d0000055c0640009a000000000002004b00000000020600190000000002056019000000000202041a00000000030500190000000003066019000000000303041a0000000100100190000000000302c0190000055f0140009a000000000101041a001c00000001001d000000000105041a0000056002000041000000000020044300000541023001970000054101100197000000000012004b000006020000c13d001b00000006001d0000000001000414000005220010009c0000052201008041000000c00110021000000561011001c70000800b020000391484147f0000040f00000001002001900000094e0000613d000000000101043b0000001c0110006c0000060f0000413d0000001202000029000005640220009a000000000202041a000000000021004b000008d70000a13d0000001b01000029000000000101041a001b05410010019b0000086a0000013d0000000001000416000000000001004b000006000000c13d0000000201000039000000000101041a000000800010043f0000057301000041000014850001042e000000440010008c000006000000413d0000000001000416000000000001004b000006000000c13d0000000401600370000000000101043b000005410010009c000006000000213d000000000010043f0000000301000039000000200010043f00000040020000390000000001000019001c0000000603531484144e0000040f0000001c0200035f0000002402200370000000000202043b000000000020043f000000200010043f000000000100001900000040020000391484144e0000040f0000000102100039000000000202041a000000000101041a000000800010043f000000a00020043f0000057701000041000014850001042e000000840010008c000006000000413d0000000001000416000000000001004b000006000000c13d0000002401600370000000000101043b001c00000001001d000000ff0010008c000006000000213d0000004401600370000000000101043b000000ff0010008c000006000000213d0000006401600370000000000101043b000000020010008c000006000000213d0000000401600370000000000101043b0000000602000039000000000202041a000000000012004b000008ca0000a13d0000000602000039000000000020043f0000000b071000c9000005590670009a000000000106041a000000ff00100190000008540000c13d000005580170009a0000055c0370009a0000055d0570009a000000000205041a0000ff0000200190000000000401001900000000040360190000000003016019000000000303041a000000000404041a0000000100200190000000000403c01900000541044001970000000003000411000000000043004b000008af0000c13d001900000006001d001b00000005001d000000ff0220018f000000010220008a001a00000002001d000000ff0020008c0000060f0000213d000000000101041a001800000007001d0000055f0270009a001600000002001d000000000202041a001700000002001d00000560020000410000000000200443000000000131013f00000541001001980000090d0000c13d0000000001000414000005220010009c0000052201008041000000c00110021000000561011001c70000800b020000391484147f0000040f00000001002001900000094e0000613d000000000101043b000000170210006c00000018010000290000060f0000413d000005640110009a000000000301041a000000000223004b0000091e0000213d000000400100043d00000044021000390000056503000041000002590000013d0000055201000041000000800010043f0000002001000039000000840010043f0000000d01000039000000a40010043f0000057c01000041000000c40010043f0000055b010000410000148600010430000000400100043d00000044021000390000057f03000041000000000032043500000024021000390000001703000039000000000032043500000552020000410000000000210435000000040210003900000020030000390000000000320435000005220010009c0000052201008041000000400110021000000553011001c700001486000104300000000202000039000000000012041b0000000001000019000014850001042e0000000001000411000000000010043f0000000301000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001c02000029000000000020043f000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000000101100039000000000301041a00000000010004140000000002000411000000040020008c0000088b0000c13d001b00010000003d000008990000013d0000055201000041000000800010043f0000002001000039000000840010043f0000000c01000039000000a40010043f0000057801000041000000c40010043f0000055b010000410000148600010430000005220030009c0000052203008041000000c00130021000000543011001c71484147f0000040f000000800a00003900000060031002700000052203300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000005e90000613d000000000801034f000000008908043c000000000a9a043600000000005a004b000005e50000c13d000000000006004b000005f60000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f000200000001035500000001002001900000064a0000613d0000001f02400039000000600520018f00000080025001bf000000400020043f000000200040008c000006150000813d00000000010000190000148600010430001b00000001001d0000000001000414000005220010009c0000052201008041000000c00110021000000561011001c70000800b020000391484147f0000040f00000001002001900000094e0000613d000000000101043b0000001c0110006c000008650000813d0000058101000041000000000010043f0000001101000039000000040010043f0000054b010000410000148600010430000000c404500039000000800600043d0000000000640435000000a00450003900000545060000410000000000640435000000a406500039000000000700041100000000007604350000004406000039000000000062043500000100055001bf000000400050043f000000000502043300000000020004140000001c08000029000000040080008c0000000109000039000006390000613d0000004001400210000005220050009c00000522050080410000006003500210000000000113019f000005220020009c0000052202008041000000c002200210000000000112019f00000000020800191484147a0000040f0000001c08000029000000010920018f00020000000103550000006002100270000005220020019d0000052203200197000000000003004b000008130000c13d000000600b000039000000800a00003900000000010b0433000000000009004b0000083a0000c13d000000000001004b000008830000c13d000000400100043d0000054d020000410000000000210435000005220010009c000005220100804100000040011002100000054e011001c700001486000104300000001f0530018f0000054406300198000000400200043d0000000004620019000006550000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000006510000c13d000000000005004b000006620000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000005220020009c00000522020080410000004002200210000000000112019f0000148600010430001000000005001d001b056b004000a2001c00000000001d001900000000001d0000000601000039000000000101041a0000001a0010006c000008ca0000a13d0000001b01000029000000000101041a000000000001004b000008ca0000613d0000001b01000029000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b000000000201041a0000001c0020006c000008ca0000a13d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000000602000039000000000202041a0000001a0020006c000008ca0000a13d0000001b02000029000000000202041a000000000002004b000008ca0000613d0000001c01100029000000000101041a001800000001001d0000001b01000029000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b000000000201041a0000001c0020006c000008ca0000a13d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001c01100029000000000101041a001700000001001d0000001a01000029000000000010043f0000000501000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d0000001802000029000000ff0320018f000000070030008c000008ca0000213d00000017020000290000000802200270000000ff0420018f000000070040008c000008ca0000213d000000400200043d000005570020009c000000ba0000213d000000000101043b0000008005200039000000400050043f000000030330021000000000033400190000000001130019000000000101041a0000001803100270000000ff0330018f000000600420003900000000003404350000000803100270000000ff0330018f00000020042000390000000000340435000000ff0310018f00000000003204350000001001100270000000ff0110018f000000400220003900000000001204350000001903000029000000ff0230018f000000000021004b000000000103a0190000001c020000290000000f0020008c001c00010020003d001900000001001d0000066c0000413d000000ff0110018f001c00000000001d001600000001001d001900000001001d0000000601000039000000000101041a0000001a0010006c000008ca0000a13d0000001b01000029000000000101041a000000000001004b000008ca0000613d0000001b01000029000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b000000000201041a0000001c0020006c000008ca0000a13d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000000602000039000000000202041a0000001a0020006c000008ca0000a13d0000001b02000029000000000202041a000000000002004b000008ca0000613d0000001c01100029000000000101041a001800000001001d0000001b01000029000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b000000000201041a0000001c0020006c000008ca0000a13d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001c01100029000000000101041a001700000001001d0000001a01000029000000000010043f0000000501000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d0000001802000029000000ff0320018f000000070030008c000008ca0000213d00000017020000290000000802200270000000ff0420018f000000070040008c000008ca0000213d000000400200043d000005570020009c000000ba0000213d000000000101043b0000008005200039000000400050043f000000030330021000000000033400190000000001130019000000000101041a0000001803100270000000ff0330018f000000600420003900000000003404350000000803100270000000ff0330018f00000020042000390000000000340435000000ff0310018f00000000003204350000001001100270000000ff0310018f00000040012000390000000000310435000000190030006c00000019030080290000001c010000290000000101100039000000ff0110018f001c00000001001d000000100010008c001900000003001d000006f10000413d001400000003001d001c00000000001d001700000000001d001500000000001d000007800000013d0000001501000029001500010010003e0000060f0000613d0000001c010000290000000101100039000000ff0110018f001c00000001001d000000100010008c00000af00000813d0000000601000039000000000101041a0000001a0010006c000008ca0000a13d0000001b01000029000000000101041a000000000001004b000008ca0000613d0000001b01000029000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b000000000201041a0000001c0020006c000008ca0000a13d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000000602000039000000000202041a0000001a0020006c000008ca0000a13d0000001b02000029000000000202041a000000000002004b000008ca0000613d0000001c01100029000000000101041a001900000001001d0000001b01000029000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b000000000201041a0000001c0020006c000008ca0000a13d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001c01100029000000000101041a001800000001001d0000001a01000029000000000010043f0000000501000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d0000001902000029000000ff0320018f000000070030008c000008ca0000213d00000018020000290000000802200270000000ff0420018f000000070040008c000008ca0000213d000000400200043d000005570020009c000000ba0000213d000000000101043b0000008005200039000000400050043f000000030330021000000000033400190000000001130019000000000101041a0000001804100270000000ff0340018f000000600520003900000000003504350000000803100270000000ff0330018f00000020052000390000000000350435000000ff0310018f00000000003204350000001001100270000000ff0310018f00000040012000390000000000310435000000160030006c00000002014001bf000008040000613d000000140030006c000008040000613d000000ff0110018f000000030010008c000007770000c13d0000001701000029001700010010003e0000077a0000c13d0000060f0000013d000000ff0110018f000000030010008c0000080d0000c13d000000030200008a000000170020006b0000060f0000213d0000001701000029001700020010003d0000077a0000013d000000030200008a000000150020006b0000060f0000213d0000001501000029001500020010003d0000077a0000013d0000001f0430003900000588044001970000003f044000390000058804400197000000400b00043d00000000044b00190000000000b4004b00000000050000390000000105004039000005460040009c000000ba0000213d0000000100500190000000ba0000c13d000000400040043f000000000a3b043600000588043001980000001f0330018f00000000024a00190000082c0000613d000000000501034f00000000060a0019000000005705043c0000000006760436000000000026004b000008280000c13d000000000003004b0000063d0000613d000000000141034f0000000303300210000000000402043300000000043401cf000000000434022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000141019f00000000001204350000063d0000013d001a0000000b001d001b0000000a001d000000000001004b000008fe0000c13d0000054701000041000000000010044300000004008004430000000001000414000005220010009c0000052201008041000000c00110021000000548011001c700008002020000391484147f0000040f00000001002001900000094e0000613d000000000101043b000000000001004b000008f90000c13d000000400100043d0000054c02000041000000000021043500000004021000390000001c030000290000000000320435000009890000013d0000055201000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f0000055a01000041000000c40010043f0000055b010000410000148600010430000000400100043d00000044021000390000057903000041000000000032043500000024021000390000001e03000039000005990000013d0000001202000029000005620220009a000000000202041a000000000021004b000008db0000a13d00000000040004110000001b0040006c000008d00000c13d00000000010004150000001e0110008a00000005011002100000001102000029000000000302041a0000000102300210000000000003004b0000000006000019000008e60000c13d000027100360011a0000000501100270000000000103001f001c00000003001d000000000332004b0000060f0000413d001b00000006001d0000000001000414000000040040008c0000098e0000c13d000000010200003900000000010000310000099d0000013d0000052200a0009c000005220a0080410000004002a00210000005220010009c00000522010080410000006001100210000000000121019f0000148600010430000005220010009c0000052201008041000000c001100210000000000003004b000005500110c1c700000000040004110000800902000039000000000204601900000000050000191484147a0000040f001b00000002001d0000006002100270000005220020019d0002000000010355148411220000040f0000001b01000029000000010110018f148411510000040f0000000001000411000000000010043f0000000301000039000000200010043f000000400200003900000000010000191484144e0000040f0000001c02000029000000000020043f000000200010043f000000000100001900000040020000391484144e0000040f000000000001041b0000000101100039000000000001041b0000000001000019000014850001042e0000055201000041000000800010043f0000002001000039000000840010043f0000000d01000039000000a40010043f0000055e01000041000000c40010043f0000055b0100004100001486000104300000000401600370000000000101043b000000000010043f0000000501000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d0000001c02000029000000010020008c0000094f0000a13d0000058101000041000000000010043f0000003201000039000000040010043f0000054b010000410000148600010430000000400100043d00000044021000390000058403000041000000000032043500000024021000390000000e03000039000005990000013d000000400100043d00000044021000390000058303000041000005960000013d000000400100043d00000044021000390000058203000041000005960000013d000000400100043d00000044021000390000057a03000041000000000032043500000024021000390000001b03000039000005990000013d00000000013200d9000000020010008c0000060f0000c13d00000000010004150000001d0110008a0000000501100210000000000002004b0000000006000019000008760000613d00000000010004150000001d0110008a00000005011002100000000203000039000000000303041a00000000062300a900000000052600d9000000000035004b0000060f0000c13d000008760000013d0000001a010000290000000001010433000000000001004b0000001c080000290000090b0000613d000005490010009c000006000000213d000000200010008c000006000000413d0000001b010000290000000001010433000000000001004b0000000002000039000000010200c039000000000021004b000006000000c13d000000000001004b000009840000613d0000000001000019000014850001042e0000000001000414000005220010009c0000052201008041000000c00110021000000561011001c70000800b020000391484147f0000040f00000001002001900000094e0000613d000000000101043b000000170210006c00000018010000290000060f0000413d000005620110009a000000000301041a000000000223004b000009d60000a13d000000000021041b0000001a01000029000000030110018f001a00010010003d0000001b01000029000000000101041a0000000802100270001800ff00200193000000ff0110018f000000040010008c000009da0000a13d00000001020003670000000401200370000000000101043b0000004402200370000000000402043b00000018020000290000001c030000290000001a05000029148413470000040f00000001020003670000000401200370000000000101043b0000001b03000029000000000303041a0000000803300270001800ff003001930000006403200370000000000303043b000000000003004b00000a3c0000613d000000010030008c00000a480000c13d00000018020000290000001a03000029148413bb0000040f000000000001004b00000a410000613d00000001010003670000004402100370000000000202043b000000ff0220018f000000ff0020008c0000060f0000613d0000000401100370000000000101043b000000010420003900000a4a0000013d000000000001042f000000400200043d000005550020009c000000ba0000213d0000001c030000290000000603300210000000000101043b00000000033100190000010001200039000000400010043f00000000040000190000000005020019000009610000013d0000000005150436000000070040008c00000001044000390000000803300039000000400100043d00000acd0000813d000005550010009c000000ba0000213d0000010007100039000000400070043f000005540010009c000000ba0000213d000000000601001900000000080300190000000009000019000000800a7000390000004000a0043f000000000a08041a000000180ba00270000000ff0bb0018f000000600c7000390000000000bc0435000000100ba00270000000ff0bb0018f000000400c7000390000000000bc0435000000080ba00270000000ff0bb0018f000000200c7000390000000000bc0435000000ff0aa0018f0000000000a704350000000006760436000000070090008c0000095b0000813d00000001088000390000000109900039000000400700043d000005570070009c0000096a0000a13d000000ba0000013d000000400100043d0000054a02000041000000000021043500000004021000390000000000820435000005220010009c000005220100804100000040011002100000054b011001c70000148600010430000005220010009c0000052201008041000000c0011002100000001c0020006c000009950000c13d0000000002040019000009980000013d00000550011001c7000080090200003900000000050000191484147a0000040f00020000000103550000006001100270000005220010019d0000052201100197000000000001004b000009af0000c13d0000000100200190000010150000613d0000000102000039000000000402041a00000000030004140000054104400197000000040040008c000009ed0000613d000005220030009c0000052203008041000000c0013002100000001b02000029000027100020008c000009e40000813d0000000002040019000009e80000013d0000001f0410003900000588044001970000003f044000390000058805400197000000400400043d0000000005540019000000000045004b00000000060000390000000106004039000005460050009c000000ba0000213d0000000100600190000000ba0000c13d000000400050043f000000000714043600000588041001980000001f0510018f00000000034700190000000206000367000009c80000613d000000000806034f000000008908043c0000000007970436000000000037004b000009c40000c13d000000000005004b0000099f0000613d000000000446034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004304350000099f0000013d000000400100043d00000044021000390000056303000041000002590000013d0000001801000029000000020010008c00000a1c0000413d000000400100043d00000044021000390000057003000041000000000032043500000024021000390000001203000039000005990000013d00000550011001c700008009020000390000001c0300002900000000050000191484147a0000040f00020000000103550000006001100270000005220010019d0000052201100197000000000001004b00000a150000613d0000001f0410003900000588044001970000003f044000390000058805400197000000400400043d0000000005540019000000000045004b00000000060000390000000106004039000005460050009c000000ba0000213d0000000100600190000000ba0000c13d000000400050043f000000000614043600000588031001980000001f0410018f0000000001360019000000020500036700000a080000613d000000000705034f000000007807043c0000000006860436000000000016004b00000a040000c13d000000000004004b00000a150000613d000000000335034f0000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003104350000000100200190000010150000613d0000000001000415000000130110006900000000010000020000000001000019000014850001042e0000001c01000029000000ff0010008c0000060f0000613d0000001c01000029000000060010008c00000a2a0000213d00000001010003670000004402100370000000000202043b000000ff0220018f000000ff0020008c0000060f0000613d000000070020008c00000ca30000413d000000400100043d00000044021000390000056f03000041000000000032043500000024021000390000001303000039000005990000013d000000400100043d00000020021000390000001303000029000000000032043500000016020000290000000000210435000005220010009c0000052201008041000000400110021000000574011001c7000014850001042e00000018020000290000001a03000029148413bb0000040f000000000001004b00000a600000c13d000000400100043d00000044021000390000057103000041000000000032043500000024021000390000001a03000039000005990000013d0000004402200370000000000402043b00000018020000290000001c030000290000001a05000029148413470000040f0000001b01000029000000000101041a001a00000001001d000000ff0110018f001800000001001d0000001c0010008c00000a710000c13d0000001a010000290000ff000010019000000a6c0000c13d0000001a01000029000005720110019700000100021001bf0000001b01000029001a00000002001d000000000021041b001800000000001d00000a710000013d0000001c01000029000000ff0010008c0000060f0000613d00000001020003670000000401200370000000000101043b0000004402200370000000000402043b0000001c020000290000000103200039000000180200002900000a4c0000013d0000001903000029000000000103041a000005860110019700000001011001bf000000000013041b00000004010000390000000101100367000000000101043b000000000010043f0000000501000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d0000001c02000029000000070020008c000008ca0000213d0000001a020000290000000802200270000000ff0620018f000000010060008c000008ca0000213d00000001020003670000004403200370000000000303043b000000070030008c000008ca0000213d0000001c070000290000000304700210000000060560021000000000044500190000000004340019000000000101043b0000000001140019000000000101041a000000400400043d00000060054000390000000000350435000000400340003900000000007304350000002003400039000000020500003900000000005304350000001001100270000000ff0110018f00000080034000390000000000130435000000180100002900000000001404350000006401200370000000000101043b000000a0034000390000000000130435000005220040009c000005220400804100000040014002100000000402200370000000000502043b0000000002000414000005220020009c0000052202008041000000c002200210000000000112019f0000056d011001c70000800d0200003900000003030000390000056e040000411484147a0000040f0000000100200190000006000000613d0000800b01000039000000040300003900000000040004150000001f0440008a00000005044002100000056002000041148414630000040f0000001602000029000000000012041b0000001b01000029000000000101041a001c00000001001d000000ff0110018f148411a50000040f000001000200008a0000001c0220017f000000000112019f0000001b02000029000000000012041b0000000001000019000014850001042e00000000030000190000000004010019000000002502043400000000060000190000000007040019000000005805043400000000a9080434000000ff0990018f0000000009970436000000000a0a0433000000ff0aa0018f0000000000a9043500000040098000390000000009090433000000ff0990018f000000400a70003900000000009a043500000060088000390000000008080433000000ff0880018f00000060097000390000000000890435000000070060008c0000000106600039000000800770003900000ad20000413d000000060030008c0000000103300039000004000440003900000acf0000a13d000005220010009c0000052201008041000000400110021000000556011001c7000014850001042e001c00000000001d001900000000001d0000000601000039000000000101041a0000001a0010006c000008ca0000a13d0000001b01000029000000000101041a000000020010008c000008ca0000413d0000001b01000029000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000000101100039000000000201041a0000001c0020006c000008ca0000a13d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000000602000039000000000202041a0000001a0020006c000008ca0000a13d0000001b02000029000000000202041a000000020020008c000008ca0000413d0000001c01100029000000000101041a001800000001001d0000001b01000029000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000000101100039000000000201041a0000001c0020006c000008ca0000a13d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001c01100029000000000101041a001600000001001d0000001a01000029000000000010043f0000000501000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d0000001802000029000000ff0320018f000000070030008c000008ca0000213d00000016020000290000000802200270000000ff0420018f000000070040008c000008ca0000213d000000400200043d000005570020009c000000ba0000213d000000000101043b0000008005200039000000400050043f0000000303300210000000000343001900000000011300190000004001100039000000000101041a0000001803100270000000ff0330018f000000600420003900000000003404350000000803100270000000ff0330018f00000020042000390000000000340435000000ff0310018f00000000003204350000001001100270000000ff0110018f000000400220003900000000001204350000001903000029000000ff0230018f000000000021004b000000000103a0190000001c020000290000000f0020008c001c00010020003d001900000001001d00000af20000413d000000ff0110018f001c00000000001d001400000001001d001900000001001d0000000601000039000000000101041a0000001a0010006c000008ca0000a13d0000001b01000029000000000101041a000000020010008c000008ca0000413d0000001b01000029000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000000101100039000000000201041a0000001c0020006c000008ca0000a13d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000000602000039000000000202041a0000001a0020006c000008ca0000a13d0000001b02000029000000000202041a000000020020008c000008ca0000413d0000001c01100029000000000101041a001800000001001d0000001b01000029000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000000101100039000000000201041a0000001c0020006c000008ca0000a13d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001c01100029000000000101041a001600000001001d0000001a01000029000000000010043f0000000501000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d0000001802000029000000ff0320018f000000070030008c000008ca0000213d00000016020000290000000802200270000000ff0420018f000000070040008c000008ca0000213d000000400200043d000005570020009c000000ba0000213d000000000101043b0000008005200039000000400050043f0000000303300210000000000343001900000000011300190000004001100039000000000101041a0000001803100270000000ff0330018f000000600420003900000000003404350000000803100270000000ff0330018f00000020042000390000000000340435000000ff0310018f00000000003204350000001001100270000000ff0310018f00000040012000390000000000310435000000190030006c00000019030080290000001c010000290000000101100039000000ff0110018f001c00000001001d000000100010008c001900000003001d00000b7a0000413d000e00000003001d001c00000000001d001600000000001d000f00000000001d00000c0c0000013d0000000f01000029000f00010010003e0000060f0000613d0000001c010000290000000101100039000000ff0110018f001c00000001001d000000100010008c00000f6f0000813d0000000601000039000000000101041a0000001a0010006c000008ca0000a13d0000001b01000029000000000101041a000000020010008c000008ca0000413d0000001b01000029000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000000101100039000000000201041a0000001c0020006c000008ca0000a13d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000000602000039000000000202041a0000001a0020006c000008ca0000a13d0000001b02000029000000000202041a000000020020008c000008ca0000413d0000001c01100029000000000101041a001900000001001d0000001b01000029000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000000101100039000000000201041a0000001c0020006c000008ca0000a13d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001c01100029000000000101041a001800000001001d0000001a01000029000000000010043f0000000501000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d0000001902000029000000ff0320018f000000070030008c000008ca0000213d00000018020000290000000802200270000000ff0420018f000000070040008c000008ca0000213d000000400200043d000005570020009c000000ba0000213d000000000101043b0000008005200039000000400050043f0000000303300210000000000343001900000000011300190000004001100039000000000301041a0000001801300270000000ff0410018f000000600520003900000000004504350000000804300270000000ff0440018f00000020052000390000000000450435000000ff0430018f00000000004204350000001003300270000000ff0330018f00000040022000390000000000320435000000140030006c00000c930000613d0000000e0030006c00000c930000613d00000002011001bf000000ff0110018f000000030010008c00000c030000c13d0000001601000029001600010010003e00000c060000c13d0000060f0000013d00000002011001bf000000ff0110018f000000030010008c00000c9d0000c13d000000030100008a000000160010006b0000060f0000213d0000001601000029001600020010003d00000c060000013d000000030100008a0000000f0010006b0000060f0000213d0000000f01000029000f00020010003d00000c060000013d0000000401100370000000000101043b000000000010043f0000000501000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d00000001020003670000004403200370000000000303043b000000070030008c000008ca0000213d0000001c04000029000000030540021000000018040000290000000604400210001500000005001d001900000004001d001700000054001d0000001703300029000000000101043b0000000001130019000000000101041a000005660010019800000f680000c13d0000000401200370000000000101043b000000000010043f0000000501000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d00000001020003670000004403200370000000000303043b000000070030008c000008ca0000213d0000001c040000290000000104400039001300000004001d0000000304400210001400190040002d0000001403300029000000000101043b0000000001130019000000000101041a000005660010019800000f680000c13d0000000401200370000000000101043b000000000010043f0000000501000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000201043b00000001010003670000004403100370000000000303043b000000ff0330018f000000ff0030008c0000060f0000613d000000060030008c000008ca0000213d000000170400002900000001044001bf00000000022400190000000002320019000000000202041a000005660020019800000f680000c13d0000000401100370000000000101043b000000000010043f0000000501000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000401043b00000001010003670000004402100370000000000202043b000000ff0320018f000000ff0030008c0000060f0000613d000000060030008c000008ca0000213d000000010230003900000014044000290000000004240019000000000404041a000005660040019800000f680000c13d000000400400043d001000000004001d000005570040009c000000ba0000213d00000010050000290000008004500039000000400040043f0000006004500039000e00000004001d0000001a0600002900000000006404350000002004500039000c00000004001d00000000003404350000001c0400002900000000004504350000004004500039000d00000004001d0000000000040435000000400400043d000f00000004001d000005570040009c000000ba0000213d0000000f050000290000008004500039000000400040043f0000006004500039000a00000004001d0000001a0600002900000000006404350000002004500039000800000004001d0000000000340435000000130300002900000000003504350000004003500039000900000003001d0000000000030435000000400300043d000b00000003001d000005570030009c000000ba0000213d0000000b040000290000008003400039000000400030043f0000006003400039000600000003001d0000001a0500002900000000005304350000002003400039000400000003001d00000000002304350000001c0300002900000000003404350000004003400039000500000003001d0000000000030435000000400300043d000700000003001d000005570030009c000000ba0000213d00000007040000290000008003400039000000400030043f0000006003400039000300000003001d0000001a0500002900000000005304350000002003400039000100000003001d0000000000230435000000130200002900000000002404350000004002400039000200000002001d00000000000204350000000401100370000000000101043b0000000602000039000000000202041a000000000012004b000008ca0000a13d0000000602000039000000000020043f0000000b021000c90000055d0220009a000000000202041a000000fe00200190000010690000c13d000000000010043f0000000501000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d00000001020003670000004403200370000000000303043b000000070030008c000008ca0000213d0000001703300029000000000101043b0000000001130019000000000301041a000005690330019700000010040000290000000004040433000000ff0440018f000000000343019f0000000c04000029000000000404043300000008044002100000ff000440018f000000000343019f0000000d04000029000000000404043300000010044002100000056a04400197000000000343019f0000000e04000029000000000404043300000018044002100000056604400197000000000343019f000000000031041b0000000401200370000000000101043b000000000010043f0000000501000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d0000001c02000029000000060020008c000008ca0000213d00000001020003670000004403200370000000000303043b000000070030008c000008ca0000213d00000015040000290000000805400039001a00000005001d00000019045000290000000003340019000000000101043b0000000001130019000000000301041a00000569033001970000000f040000290000000004040433000000ff0440018f000000000343019f0000000804000029000000000404043300000008044002100000ff000440018f000000000343019f0000000904000029000000000404043300000010044002100000056a04400197000000000343019f0000000a04000029000000000404043300000018044002100000056604400197000000000343019f000000000031041b0000000401200370000000000101043b000000000010043f0000000501000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000201043b00000001010003670000004403100370000000000303043b000000ff0330018f000000ff0030008c0000060f0000613d000000060030008c000008ca0000213d000000190400002900000001054001bf001900000005001d000000150450002900000000022400190000000002320019000000000302041a00000569033001970000000b040000290000000004040433000000ff0440018f000000000343019f0000000404000029000000000404043300000008044002100000ff000440018f000000000343019f0000000504000029000000000404043300000010044002100000056a04400197000000000343019f0000000604000029000000000404043300000018044002100000056604400197000000000343019f000000000032041b0000000401100370000000000101043b000000000010043f0000000501000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000201043b00000001010003670000004403100370000000000303043b000000ff0330018f000000ff0030008c0000060f0000613d000000060030008c000008ca0000213d00000019050000290000001a0450002900000000022400190000000002320019000000000302041a000005690330019700000007040000290000000004040433000000ff0440018f000000000343019f0000000104000029000000000404043300000008044002100000ff000440018f000000000343019f0000000204000029000000000404043300000010044002100000056a04400197000000000343019f0000000304000029000000000404043300000018044002100000056604400197000000000343019f000000000032041b0000000401100370000000000101043b0000000602000039000000000202041a000000000012004b000008ca0000a13d0000000b011000c90000056b0110009a000000000201041a000000180020006c000008ca0000a13d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001801100029000000000201041a001a00000002001d000005460020009c000000ba0000213d0000001a020000290000000102200039000000000021041b000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001a01100029000000000201041a000005690220019700000010030000290000000003030433000000ff0330018f000000000232019f0000000c03000029000000000303043300000008033002100000ff000330018f000000000232019f0000000d03000029000000000303043300000010033002100000056a03300197000000000232019f0000000e03000029000000000303043300000018033002100000056603300197000000000232019f000000000021041b00000004010000390000000101100367000000000101043b0000000602000039000000000202041a000000000012004b000008ca0000a13d0000000b011000c90000056b0110009a000000000201041a000000180020006c000008ca0000a13d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001801100029000000000201041a001a00000002001d000005460020009c000000ba0000213d0000001a020000290000000102200039000000000021041b000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001a01100029000000000201041a00000569022001970000000f030000290000000003030433000000ff0330018f000000000232019f0000000803000029000000000303043300000008033002100000ff000330018f000000000232019f0000000903000029000000000303043300000010033002100000056a03300197000000000232019f0000000a03000029000000000303043300000018033002100000056603300197000000000232019f000000000021041b00000004010000390000000101100367000000000101043b0000000602000039000000000202041a000000000012004b000008ca0000a13d0000000b011000c90000056b0110009a000000000201041a000000180020006c000008ca0000a13d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001801100029000000000201041a001a00000002001d000005460020009c000000ba0000213d0000001a020000290000000102200039000000000021041b000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001a01100029000000000201041a00000569022001970000000b030000290000000003030433000000ff0330018f000000000232019f0000000403000029000000000303043300000008033002100000ff000330018f000000000232019f0000000503000029000000000303043300000010033002100000056a03300197000000000232019f0000000603000029000000000303043300000018033002100000056603300197000000000232019f000000000021041b00000004010000390000000101100367000000000101043b0000000602000039000000000202041a000000000012004b000008ca0000a13d0000000b011000c90000056b0110009a000000000201041a000000180020006c000008ca0000a13d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001801100029000000000201041a001a00000002001d000005460020009c000000ba0000213d0000001a020000290000000102200039000000000021041b000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000006000000613d000000000101043b0000001a01100029000000000201041a000005690220019700000007030000290000000003030433000000ff0330018f000000000232019f0000000103000029000000000303043300000008033002100000ff000330018f000000000232019f0000000203000029000000000303043300000010033002100000056a03300197000000000232019f0000000303000029000000000303043300000018033002100000056603300197000000000232019f000000000021041b00000001010003670000000402100370000000000502043b0000000602000039000000000202041a000000000052004b000008ca0000a13d0000000602000039000000000020043f0000000b025000c90000055d0220009a000000000202041a000000400300043d00000040043000390000001c060000290000000000640435000000200430003900000001060000390000000000640435000000ff0220018f00000000002304350000004401100370000000000101043b000000ff0110018f00000060023000390000000000120435000000a001300039000000000001043500000080013000390000000000010435000005220030009c000005220300804100000040013002100000000002000414000005220020009c0000052202008041000000c002200210000000000112019f0000056d011001c70000800d0200003900000003030000390000056e0400004100000018060000291484147a0000040f0000000100200190000006000000613d00000ab80000013d000000400100043d00000044021000390000056703000041000000000032043500000024021000390000001003000039000005990000013d0000000f02000029000000170020002a0000060f0000413d0000001602000029000000150020002a0000060f0000413d0000000f02000029000000170120002900000016030000290000001502300029000000000021004b00000f7d0000a13d000000100100002900000f810000013d000000000012004b00000f830000a13d00000012010000290000055c0110009a001b00000001001d000005080000013d0000001001000029000000000101041a00000541041001970000000001000411000000000041004b00000f8f0000613d00000012020000290000055c0220009a000000000202041a0000054102200197000000000021004b00000fa60000c13d0000000201000039000000000101041a0000001102000029000000000302041a001b0000003100ad001c00000003001d000000000003004b00000f9b0000613d0000001c030000290000001b023000f9000000000012004b0000060f0000c13d0000001b01000029000027100110011a001a00000001001d0019001c001000730000060f0000413d0000000001000414000000040040008c00000fad0000c13d0000000102000039000000000100003100000fbe0000013d000000400100043d00000044021000390000058003000041000000000032043500000024021000390000001903000039000005990000013d000005220010009c0000052201008041000000c0011002100000001c030000290000001a0030006c00000fb50000c13d000000000204001900000fb90000013d00000550011001c70000800902000039000000190300002900000000050000191484147a0000040f00020000000103550000006001100270000005220010019d0000052201100197000000000001004b00000fcb0000c13d0000000100200190000010150000613d00000012020000290000055c0220009a000000000302041a00000000020004140000054104300197000000040040008c00000ff20000c13d0000000102000039000010030000013d0000001f0410003900000588044001970000003f044000390000058805400197000000400400043d0000000005540019000000000045004b00000000060000390000000106004039000005460050009c000000ba0000213d0000000100600190000000ba0000c13d000000400050043f000000000714043600000588041001980000001f0510018f0000000003470019000000020600036700000fe40000613d000000000806034f000000008908043c0000000007970436000000000037004b00000fe00000c13d000000000005004b00000fc00000613d000000000446034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f000000000043043500000fc00000013d000005220020009c0000052202008041000000c0012002100000001c030000290000001a0030006c00000ffa0000c13d000000000204001900000ffe0000013d00000550011001c70000800902000039000000190300002900000000050000191484147a0000040f00020000000103550000006001100270000005220010019d0000052201100197000000000001004b0000101c0000c13d0000000100200190000010150000613d0000000102000039000000000402041a00000000030004140000054104400197000000040040008c0000104d0000613d000005220030009c0000052203008041000000c0013002100000001b02000029000027100020008c000010430000813d0000000002040019000010480000013d000000400100043d00000044021000390000058503000041000000000032043500000024021000390000000f03000039000005990000013d0000001f0410003900000588044001970000003f044000390000058805400197000000400400043d0000000005540019000000000045004b00000000060000390000000106004039000005460050009c000000ba0000213d0000000100600190000000ba0000c13d000000400050043f000000000714043600000588041001980000001f0510018f00000000034700190000000206000367000010350000613d000000000806034f000000008908043c0000000007970436000000000037004b000010310000c13d000000000005004b000010050000613d000000000446034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000430435000010050000013d0000001a02000029000000010320021000000550011001c7000080090200003900000000050000191484147a0000040f00020000000103550000006001100270000005220010019d0000052201100197000000000001004b00000a150000613d0000001f0410003900000588044001970000003f044000390000058805400197000000400400043d0000000005540019000000000045004b00000000060000390000000106004039000005460050009c000000ba0000213d0000000100600190000000ba0000c13d000000400050043f000000000614043600000588031001980000001f0410018f0000000001360019000000020500036700000a080000613d000000000705034f000000007807043c0000000006860436000000000016004b000010640000c13d00000a080000013d000000400100043d001200000001001d000005550010009c000000ba0000213d00000012050000290000010001500039000000400010043f000000e00250003900000001010000390000000000120435000000a00350003900000002020000390000000000230435000000800350003900000000002304350000002004500039000000010300008a00000000003404350000000000350435000000c00450003900000000000404350000006004500039000000000004043500000040045000390000000000040435000000400400043d001100000004001d000005550040009c000000ba0000213d00000011050000290000010004500039000000400040043f000000e0045000390000000000340435000000c00450003900000000003404350000006003500039000000000023043500000040035000390000000000230435000000a002500039000000000012043500000020025000390000000000120435000000800150003900000000000104350000000000050435001a00000000001d0000109e0000013d0000001a01000029000000070010008c001a00010010003d000010f60000813d0000001a010000290000000501100210000000120210002900000000020204330000008000200190000000800300008a00000000030060190000007f0220018f000000000223019f0000001c02200029001300000002001d000000800220008a000005860020009c0000060f0000413d000000110110002900000000010104330000008000100190000000800400008a000000000204001900000000020060190000007f0110018f000000000212019f00000001010003670000004403100370000000000303043b000000800030019000000000040060190000007f0330018f000000000334019f0000000002230019001400000002001d000000800220008a000005860020009c0000060f0000413d00000013030000290000008000300190000000800200008a0000000002006019000000780330018f000000000332019f0000001402000029000000800220018f00000000002301a00000109a0000c13d000000000002004b000000800200008a000000000200601900000014030000290000007f0330018f000000000232019f000005490020009c000010d40000213d000000070020008c0000109a0000213d0000000401100370000000000101043b000000000010043f0000000501000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000006000000613d0000001302000029000000ff0220018f000000070020008c000008ca0000213d0000001403000029000000ff0330018f000000070030008c000008ca0000213d000000030220021000000019022000290000000002320019000000000101043b0000000001120019000000000101041a00000566001001980000109a0000613d00000004010000390000000101100367000000000101043b00000d750000013d000000400100043d00000044021000390000056803000041000000000032043500000024021000390000001103000039000005990000013d0000000602000039000000000302041a000000000013004b000011050000a13d000000000020043f0000000b011000c9000005580110009a000000000001042d0000058101000041000000000010043f0000003201000039000000040010043f0000054b010000410000148600010430000005890010009c000011100000813d0000004001100039000000400010043f000000000001042d0000058101000041000000000010043f0000004101000039000000040010043f0000054b010000410000148600010430000005490010009c000011200000213d000000430010008c000011200000a13d00000001020003670000000401200370000000000101043b0000002402200370000000000202043b000000000001042d0000000001000019000014860001043000000000010000320000114a0000613d0000001f0310003900000588033001970000003f033000390000058804300197000000400300043d0000000004430019000000000034004b00000000050000390000000105004039000005460040009c0000114b0000213d00000001005001900000114b0000c13d000000400040043f000000000513043600000588021001980000001f0310018f000000000125001900000002040003670000113d0000613d000000000604034f000000006706043c0000000005750436000000000015004b000011390000c13d000000000003004b0000114a0000613d000000000224034f0000000303300210000000000401043300000000043401cf000000000434022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000242019f0000000000210435000000000001042d0000058101000041000000000010043f0000004101000039000000040010043f0000054b010000410000148600010430000000000001004b000011540000613d000000000001042d000000400100043d00000044021000390000058503000041000000000032043500000024021000390000000f03000039000000000032043500000552020000410000000000210435000000040210003900000020030000390000000000320435000005220010009c0000052201008041000000400110021000000553011001c70000148600010430000000000001004b000011680000613d000000000001042d000000400100043d00000044021000390000057c03000041000000000032043500000024021000390000000d03000039000000000032043500000552020000410000000000210435000000040210003900000020030000390000000000320435000005220010009c0000052201008041000000400110021000000553011001c70000148600010430000000000001004b0000117c0000613d000000000001042d000000400100043d00000044021000390000058a03000041000000000032043500000024021000390000001503000039000000000032043500000552020000410000000000210435000000040210003900000020030000390000000000320435000005220010009c0000052201008041000000400110021000000553011001c70000148600010430000000000201041a000005240020009c0000119d0000813d0000000102200039000000000021041b000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f0000000100200190000011a30000613d000000000001042d0000058101000041000000000010043f0000004101000039000000040010043f0000054b01000041000014860001043000000000010000190000148600010430000000ff0110018f000000ff0010008c000011aa0000613d0000000101100039000000000001042d0000058101000041000000000010043f0000001101000039000000040010043f0000054b01000041000014860001043000040000000000020000000604000039000000000404041a000400000001001d000000000014004b000012540000a13d000100000002001d00000004010000290000000b011000c9000200000001001d000005580110009a000000000101041a000000000231013f0000054100200198000011c20000c13d00000002010000290000055c0110009a000000000101041a0000054101100197000300000001001d000000000010043f0000000301000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000012520000613d000000000101043b0000000402000029000000000020043f000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000012520000613d000000000101043b0000000101100039000000000101041a000000010010006c0000125a0000c13d0000000301000029000000000010043f0000000301000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000012520000613d000000000101043b0000000402000029000000000020043f000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000012520000613d000000000101043b0000000101100039000000000101041a000000000001004b000012610000613d0000000603000039000000000103041a000000040010006c000012540000a13d000000000030043f00000002010000290000057e0110009a000000000101041a000000ff00100190000012680000c13d0000000301000029000000000010043f0000000301000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000012520000613d000000000101043b0000000402000029000000000020043f000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000012520000613d0000000602000039000000000202041a000000040020006c000012540000a13d00000002020000290000057d0220009a000000000302041a000000000101043b0000000101100039000000000101041a000000000013001a000012790000413d0000000001130019000000000012041b0000000301000029000000000010043f0000000301000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000012520000613d000000000101043b0000000402000029000000000020043f000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000012520000613d000000000101043b000000000001041b0000000101100039000000000001041b000000000001042d000000000100001900001486000104300000058101000041000000000010043f0000003201000039000000040010043f0000054b010000410000148600010430000000400100043d00000044021000390000058a030000410000000000320435000000240210003900000015030000390000126e0000013d000000400100043d00000044021000390000058b030000410000000000320435000000240210003900000011030000390000126e0000013d000000400100043d00000044021000390000057f03000041000000000032043500000024021000390000001703000039000000000032043500000552020000410000000000210435000000040210003900000020030000390000000000320435000005220010009c0000052201008041000000400110021000000553011001c700001486000104300000058101000041000000000010043f0000001101000039000000040010043f0000054b01000041000014860001043000060000000000020000000605000039000000000405041a000000000014004b000013290000a13d000400000002001d0000054104300197000600000001001d0000000b021000c9000005580320009a000000000303041a0000054103300197000000000034004b000012930000613d000000000050043f0000055c0120009a000000000101041a0000054101100197000000000014004b000013360000c13d000500000004001d000000000040043f0000000301000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000013210000613d000000000101043b0000000602000029000000000020043f000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000013210000613d000000000101043b000000400300043d000005890030009c0000000602000029000013230000813d0000000101100039000000000101041a000300000001001d0000004001300039000000400010043f000200000003001d00000000022304360000000401000029000100000002001d00000000001204350000000501000029000000000010043f0000000301000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000013210000613d000000000101043b0000000602000029000000000020043f000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f0000000100200190000013210000613d00000002020000290000000002020433000000000101043b000000000021041b000000010110003900000001020000290000000002020433000000000021041b0000000303000029000000000003004b000013200000613d00000000010004140000000504000029000000040040008c000012ea0000c13d00000001020000390000000001000031000000000001004b000012f80000c13d0000131e0000013d000005220010009c0000052201008041000000c00110021000000550011001c7000080090200003900000000050000191484147a0000040f000000010220018f00020000000103550000006001100270000005220010019d0000052201100197000000000001004b0000131e0000613d0000001f0410003900000588044001970000003f044000390000058805400197000000400400043d0000000005540019000000000045004b00000000060000390000000106004039000005460050009c000013230000213d0000000100600190000013230000c13d000000400050043f000000000614043600000588031001980000001f0410018f00000000013600190000000205000367000013110000613d000000000705034f000000007807043c0000000006860436000000000016004b0000130d0000c13d000000000004004b0000131e0000613d000000000335034f0000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000000000002004b0000132f0000613d000000000001042d000000000100001900001486000104300000058101000041000000000010043f0000004101000039000000040010043f0000054b0100004100001486000104300000058101000041000000000010043f0000003201000039000000040010043f0000054b010000410000148600010430000000400100043d00000044021000390000058c03000041000000000032043500000024021000390000000d030000390000133c0000013d000000400100043d00000044021000390000058003000041000000000032043500000024021000390000001903000039000000000032043500000552020000410000000000210435000000040210003900000020030000390000000000320435000005220010009c0000052201008041000000400110021000000553011001c700001486000104300005000000000002000100000005001d000400000004001d000300000003001d000200000002001d000500000001001d000000000010043f0000000501000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f00000001002001900000139c0000613d0000000202000029000000020020008c000000040400002900000003030000290000139e0000813d000000070030008c0000139e0000213d000000070040008c0000139e0000213d000000060220021000000003033002100000000002230019000400000042001d000000000101043b0000000401100029000000000101041a0000056600100198000013a40000613d0000000501000029000000000010043f0000000501000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f00000001002001900000139c0000613d000000000101043b0000000401100029000000000201041a0000001003200270000000ff0330018f000000ff0030008c000013b50000613d0000058d022001970000001003300210000005720330009a0000056a03300197000000000223019f000000000021041b0000000501000029000000000010043f0000000501000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f00000001002001900000139c0000613d000000000101043b0000000401100029000000000201041a0000058e02200197000000010300002900000018033002100000056603300197000000000232019f000000000021041b000000000001042d000000000100001900001486000104300000058101000041000000000010043f0000003201000039000000040010043f0000054b010000410000148600010430000000400100043d00000044021000390000058f03000041000000000032043500000024021000390000001403000039000000000032043500000552020000410000000000210435000000040210003900000020030000390000000000320435000005220010009c0000052201008041000000400110021000000553011001c700001486000104300000058101000041000000000010043f0000001101000039000000040010043f0000054b0100004100001486000104300008000000000002000200000003001d000000010020008c000014390000213d0000000b031000c90007056b003000a2000600000002001d0001000600200218000800000000001d000500000001001d000000000010043f0000000501000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f00000001002001900000144b0000613d000000000101043b000400000001001d0000000601000039000000000101041a000000050010006c000014450000a13d0000000701000029000000000101041a000000060010006c000014450000a13d0000000701000029000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f00000001002001900000144b0000613d000000000101043b0000000601100029000000000201041a000000080020006c000014450000a13d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f00000001002001900000144b0000613d000000000101043b0000000801100029000000000101041a000000ff0110018f000300000001001d000000070010008c000014450000213d0000000601000039000000000101041a000000050010006c000014450000a13d0000000701000029000000000101041a000000060010006c000014450000a13d0000000701000029000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f00000001002001900000144b0000613d000000000101043b0000000601100029000000000201041a000000080020006c000014450000a13d000000000010043f0000000001000414000005220010009c0000052201008041000000c0011002100000056c011001c700008010020000391484147f0000040f00000001002001900000144b0000613d000000000101043b0000000801100029000000000101041a0000000801100270000000ff0110018f000000070010008c000014450000213d000000040300002900000001023000290000000303000029000000030330021000000000023200190000000001120019000000000101041a0000001801100270000000020110014f000000ff00100190000014370000613d00000008010000290000000e0010008c000800010010003d0000000501000029000013c50000a13d0000000001000019000000000001042d0000000101000039000000000001042d000000000010043f0000000501000039000000200010043f0000000001000414000005220010009c0000052201008041000000c0011002100000054f011001c700008010020000391484147f0000040f00000001002001900000144b0000613d0000058101000041000000000010043f0000003201000039000000040010043f0000054b01000041000014860001043000000000010000190000148600010430000000000001042f000005220010009c00000522010080410000004001100210000005220020009c00000522020080410000006002200210000000000112019f0000000002000414000005220020009c0000052202008041000000c002200210000000000112019f00000550011001c700008010020000391484147f0000040f0000000100200190000014610000613d000000000101043b000000000001042d0000000001000019000014860001043000000000050100190000000000200443000000040030008c0000146a0000a13d000000050140027000000000010100310000000400100443000005220030009c000005220300804100000060013002100000000002000414000005220020009c0000052202008041000000c002200210000000000112019f00000590011001c700000000020500191484147f0000040f0000000100200190000014790000613d000000000101043b000000000001042d000000000001042f0000147d002104210000000102000039000000000001042d0000000002000019000000000001042d00001482002104230000000102000039000000000001042d0000000002000019000000000001042d0000148400000432000014850001042e0000148600010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000a001ecdc00000000000000000000000000000000000000000000000000000000cd00cb8900000000000000000000000000000000000000000000000000000000e80053f900000000000000000000000000000000000000000000000000000000e80053fa00000000000000000000000000000000000000000000000000000000f0e301a500000000000000000000000000000000000000000000000000000000f4f3b20000000000000000000000000000000000000000000000000000000000cd00cb8a00000000000000000000000000000000000000000000000000000000cf453a2e00000000000000000000000000000000000000000000000000000000b86ae7d200000000000000000000000000000000000000000000000000000000b86ae7d300000000000000000000000000000000000000000000000000000000bbbcd3c400000000000000000000000000000000000000000000000000000000c08d1fe500000000000000000000000000000000000000000000000000000000a001ecdd00000000000000000000000000000000000000000000000000000000ae06c1b700000000000000000000000000000000000000000000000000000000728772f30000000000000000000000000000000000000000000000000000000093653c130000000000000000000000000000000000000000000000000000000093653c1400000000000000000000000000000000000000000000000000000000953a7381000000000000000000000000000000000000000000000000000000009a56ab7f00000000000000000000000000000000000000000000000000000000728772f4000000000000000000000000000000000000000000000000000000008da5cb5b0000000000000000000000000000000000000000000000000000000034a8014a0000000000000000000000000000000000000000000000000000000034a8014b00000000000000000000000000000000000000000000000000000000642de2e6000000000000000000000000000000000000000000000000000000006e888d8a000000000000000000000000000000000000000000000000000000000d022043000000000000000000000000000000000000000000000000000000002e1a7d4d000000000000000000000000ffffffffffffffffffffffffffffffffffffffff70a0823100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000080000000000000000000000000000000000000000000000000000000000000000000000000ffffffe0a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff1806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b8302000002000000000000000000000000000000240000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5274afe70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000009996b315000000000000000000000000000000000000000000000000000000001425ea42000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000020000000000000000000000000000000000004000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004e6f2077616765722070726f706f73616c20657869737473000000000000000008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffe7f000000000000000000000000000000000000000000000000fffffffffffffeff0000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f09addddcec1d7ba6ad726df49aeea3e93fb0c1037d551236841a60c0c883f2c109addddcec1d7ba6ad726df49aeea3e93fb0c1037d551236841a60c0c883f2b847616d6553657373696f6e2068617320656e6465640000000000000000000000000000000000000000000000000000000000006400000080000000000000000009addddcec1d7ba6ad726df49aeea3e93fb0c1037d551236841a60c0c883f2c009addddcec1d7ba6ad726df49aeea3e93fb0c1037d551236841a60c0c883f2bd4e6f7420796f7572207475726e0000000000000000000000000000000000000009addddcec1d7ba6ad726df49aeea3e93fb0c1037d551236841a60c0c883f2bb796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d95539132020000020000000000000000000000000000000400000000000000000000000009addddcec1d7ba6ad726df49aeea3e93fb0c1037d551236841a60c0c883f2b9506c6179657220322072616e206f7574206f662074696d65000000000000000009addddcec1d7ba6ad726df49aeea3e93fb0c1037d551236841a60c0c883f2ba506c6179657220312072616e206f7574206f662074696d65000000000000000000000000000000000000000000000000000000000000000000000000ff0000004772696420686173206120737461636b000000000000000000000000000000004e6f2061646a6163656e7420737461636b000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000ff000009addddcec1d7ba6ad726df49aeea3e93fb0c1037d551236841a60c0c883f2b7020000000000000000000000000000000000002000000000000000000000000002000000000000000000000000000000000000c00000000000000000000000000105be8a55914fe98f3e45e26997b7279e726a2a8282aa42bfeedd0b5d383f51496e76616c696420636f6f7264696e6174657300000000000000000000000000496e76616c69642067616d6520696e64657800000000000000000000000000004e6f20737461636b207769746820636f6c6f7220657869737473000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000020000000800000000000000000000000000000000000000000000000000000004000000000000000000000000046656520746f6f206869676800000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe000000000000000000000000000000000000000400000008000000000000000004e6f7420706c6179657220320000000000000000000000000000000000000000506c6179657220312068617320616e206163746976652073657373696f6e0000506c6179657220322068617320616e206163746976652067616d65000000000000000000000000000000000000000000000001600000000000000000000000004e6f7420746865206f776e65720000000000000000000000000000000000000009addddcec1d7ba6ad726df49aeea3e93fb0c1037d551236841a60c0c883f2bf09addddcec1d7ba6ad726df49aeea3e93fb0c1037d551236841a60c0c883f2be576167657220616c72656164792070726f6365737365640000000000000000004e6f74206120706c61796572206f6620746869732067616d65000000000000004e487b7100000000000000000000000000000000000000000000000000000000506c617965722032207374696c6c206861732074696d65000000000000000000506c617965722031207374696c6c206861732074696d650000000000000000004e6f74207468652077696e6e65720000000000000000000000000000000000005472616e73666572206661696c65640000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffffc0576167657220616d6f756e74206d69736d6174636800000000000000000000004e6f2077616765722070726f706f73616c000000000000000000000000000000526566756e64206661696c656400000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff537461636b20646f6573206e6f7420657869737400000000000000000000000002000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000da7c541a1d7118f4614feb198726c9bc5c5c8b1415ae2370d370b2ea6b9a30d7
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.