ETH Price: $2,680.53 (-2.25%)

Contract

0x06D7Ee1D50828Ca96e11890A1601f6fe61F1e584

Overview

ETH Balance

0 ETH

ETH Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim Many23866212025-02-22 1:23:172 secs ago1740187397IN
Onchain Heroes: Game
0 ETH0.000008230.04525
Upgrade Many23866182025-02-22 1:23:145 secs ago1740187394IN
Onchain Heroes: Game
0 ETH0.00000710.04525
Claim Many23866182025-02-22 1:23:145 secs ago1740187394IN
Onchain Heroes: Game
0 ETH0.000006530.04525
Claim Many23866142025-02-22 1:23:109 secs ago1740187390IN
Onchain Heroes: Game
0 ETH0.00000880.04525
Upgrade Many23866082025-02-22 1:23:0415 secs ago1740187384IN
Onchain Heroes: Game
0 ETH0.000007250.04525
Upgrade Many23866012025-02-22 1:22:5722 secs ago1740187377IN
Onchain Heroes: Game
0 ETH0.000007220.04525
Upgrade Many23865922025-02-22 1:22:4831 secs ago1740187368IN
Onchain Heroes: Game
0 ETH0.00000710.04525
Unstake Many23865902025-02-22 1:22:4633 secs ago1740187366IN
Onchain Heroes: Game
0 ETH0.000005930.04525
Upgrade Many23865892025-02-22 1:22:4534 secs ago1740187365IN
Onchain Heroes: Game
0 ETH0.000007320.04525
Claim Many23865882025-02-22 1:22:4435 secs ago1740187364IN
Onchain Heroes: Game
0 ETH0.000008320.04525
Claim Many23865882025-02-22 1:22:4435 secs ago1740187364IN
Onchain Heroes: Game
0 ETH0.000004750.04525
Upgrade Many23865862025-02-22 1:22:4237 secs ago1740187362IN
Onchain Heroes: Game
0 ETH0.000006970.04525
Claim Many23865782025-02-22 1:22:3445 secs ago1740187354IN
Onchain Heroes: Game
0 ETH0.000012090.04525
Claim Many23865752025-02-22 1:22:3148 secs ago1740187351IN
Onchain Heroes: Game
0 ETH0.000008830.04525
Claim Many23865722025-02-22 1:22:2851 secs ago1740187348IN
Onchain Heroes: Game
0 ETH0.000006530.04525
Claim Many23865662025-02-22 1:22:2257 secs ago1740187342IN
Onchain Heroes: Game
0 ETH0.000005760.04525
Claim Many23865632025-02-22 1:22:191 min ago1740187339IN
Onchain Heroes: Game
0 ETH0.000012110.04525
Claim Many23865602025-02-22 1:22:161 min ago1740187336IN
Onchain Heroes: Game
0 ETH0.000007450.04525
Stake Many23865592025-02-22 1:22:151 min ago1740187335IN
Onchain Heroes: Game
0 ETH0.000004630.04525
Claim Many23865522025-02-22 1:22:081 min ago1740187328IN
Onchain Heroes: Game
0 ETH0.000004750.04525
Unstake Many23865472025-02-22 1:22:031 min ago1740187323IN
Onchain Heroes: Game
0 ETH0.000008530.04525
Claim Many23865432025-02-22 1:21:591 min ago1740187319IN
Onchain Heroes: Game
0 ETH0.000006510.04525
Unstake Many23865412025-02-22 1:21:571 min ago1740187317IN
Onchain Heroes: Game
0 ETH0.000008420.04525
Unstake Many23865392025-02-22 1:21:551 min ago1740187315IN
Onchain Heroes: Game
0 ETH0.000008490.04525
Unstake Many23865392025-02-22 1:21:551 min ago1740187315IN
Onchain Heroes: Game
0 ETH0.000005930.04525
View all transactions

Latest 1 internal transaction

Parent Transaction Hash Block From To
22510952025-02-20 11:02:0738 hrs ago1740049327  Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LevelingGame

Compiler Version
v0.8.28+commit.7893614a

ZkSolc Version
v1.5.10

Optimization Enabled:
Yes with Mode 3

Other Settings:
cancun EvmVersion
File 1 of 6 : LevelingGame.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.27;

import {IERC20} from "./interfaces/IERC20.sol";
import {IERC721} from "./interfaces/IERC721.sol";
import {IVRFSystem} from "./interfaces/IVRFSystem.sol";
import {Ownable} from "solady/auth/Ownable.sol";
import {DelegateCheckerLib} from "solady/utils/ext/zksync/delegatexyz/DelegateCheckerLib.sol";

/// @notice Leveling contract for the Genesis Heroes.
/// @author Onchain-Heroes (https://www.onchainheroes.xyz/)
/// @author atarpara (https://www.github.com/atarpara)
contract LevelingGame is Ownable {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                       CUSTOM ERRORS                        */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Caller is not a owner or delegate wallet.
    error CallerIsNotOwnerOrDelegateWallet();

    /// @dev Level is not upgraded yet.
    error LevelUpgradeInProgress();

    /// @dev Level upgrade type is not valid.
    error InvalidLevelUpgradeType();

    /// @dev Already reached max level.
    error MaxLevelReached();

    /// @dev Not eligible for upgrade level.
    error NotEligible();

    /// @dev Cooldown period is not over yet.
    error CoolDownPeriod();

    /// @dev Contract is paused.
    error Paused();

    /// @dev Contract is not paused.
    error Unpaused();

    /// @dev Given action is not allowed.
    error NotAllowed();

    /// @dev Request is already fulfilled.
    error AlreadyFulfilled();

    /// @dev Request is not exist.
    error RequestNotExist();

    /// @dev Season is not running yet.
    error NotActiveSeason();

    /// @dev Hero must be unstake before a upgrade.
    error RequiresUnstakedForUpgrade();

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                           EVENTS                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Emitted when `owner` stakes `tokenId` at `timestamp`.
    event Staked(address owner, uint256 tokenId, uint256 timestamp);

    /// @dev Emitted when `user` claims rewards for `tokenID` with `amount` at `timestamp`.
    event Claimed(address indexed user, uint256 tokenId, uint256 timestamp, uint256 amount);

    /// @dev Emitted when `owner` unstakes `tokenId` at `timestamp`.
    event Unstaked(address owner, uint256 tokenId, uint256 timestamp);

    /// @dev Emitted when `user` requested upgrade `tokenId` for `levelUpType`.
    event UpgradeRequested(address indexed user, uint256 indexed tokenId, uint8 levelUpType);

    /// @dev Emitted when `tokenId` is upgraded from `oldLevel` to `newLevel`.
    event Upgraded(address indexed user, uint256 tokenId, uint256 oldLevel, uint256 newLevel);

    /// @dev Emitted when `tokenId` is lucky upgraded from `oldLevel` to `newLevel`.
    event LuckyUpgraded(address indexed user, uint256 tokenId, uint256 oldLevel, uint256 newLevel);

    /// @dev Emitted when `tokenId` is chaos upgraded from `oldLevel` to `newLevel`.
    event ChaosUpgraded(address indexed user, uint256 tokenId, uint256 oldLevel, uint256 newLevel);

    /// @dev Emitted when `chaosLevel` is changed.
    event ChaosPercentageChanged(uint256[5] percentags);

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                          CONSTANT                          */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Hero must unstake after 6 hours.
    uint256 internal constant _MINIMUM_STAKING_TIME = 6 hours;

    /// @dev Maximum possible level of `hero`.
    uint256 internal constant _MAX_LEVEL = 69;

    /// @dev Hero next level upgrade possible after 12 hours.
    uint256 internal constant _MINIMUM_UPGRADE_TIME = 12 hours;

    /// @dev Bitmask for the retrieve value of last level upgrade time.
    uint256 internal constant _BITMASK_LEVEL_UPGRADE = 0x0fffffffffff << 8;

    /// @dev Bitmask for the retrieve value of level of the hero.
    uint256 internal constant _BITMASK_LEVEL = 0xff;

    /// @dev Bitmask for the retrieve value of stake time of the hero.
    uint256 internal constant _BITMASK_STAKE_TIME = 0x0fffffffffff << 52;

    /// @dev Bitmask for the retrieve value of `tokenID` of the hero.
    uint256 internal constant _BITMASK_TOKEN_ID = 0x3fffffffffff << 8;

    /// @dev ERC-20 reward token `HERO20`.
    IERC20 internal constant hero20 = IERC20(0x33EE11cE309854a45B65368C078616ABcb5c6e3d);

    /// @dev ERC-721A token representing in-game assets (`HeroERC721AC`).
    IERC721 internal constant hero721 = IERC721(0x7c47ea32FD27d1a74Fc6e9F31Ce8162e6Ce070eB);

    /// @dev VRF system contract for getting verifiable random numbers in the POP Network.
    IVRFSystem internal constant vrf = IVRFSystem(0xBDC8B6eb1840215A22fC1134046f595b7D42C2DE);

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                          STORAGE                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev `requestData` bit layout
    ///     [255..256) fulfilled: Boolean value which used checking request fulfill status.
    ///     [254..255) exists: Boolean value which checks request existence.
    ///     [214..254) chaosLevel : Percentage of chaos for request.
    ///     [54..214) account : Address of the user.
    ///     [8..54) tokenId: Indicate which `tokenId` will be upgrade.
    ///     [0..8) levelUpType: Indicates which type of level upgrade.
    mapping(uint256 requestId => uint256 requestData) private _requests;

    /// @dev `stakeInfomation` bit layout.
    ///     [96..256) owner: Address of the user who stake hero.
    ///     [52..96) stakeTime : Indicate timestamp of the last staking. ( 2^44 -1 )
    ///     [8..52) upgradeTime: Indicate timestamp of the level upgraded.
    ///     [0..8) level: Indicates current level of hero.
    mapping(uint256 id => uint256) public stakeI;

    /// @dev Tracks the last claim time for each hero.
    mapping(uint256 id => uint256) public claimTime;

    /// @dev Timestamp of start season for staking.
    uint64 public startSeasonTime;

    /// @dev Timestamp of end season for staking.
    uint64 public endSeasonTime;

    /// @dev Flag for checking contract pause.
    uint64 pauseFlag;

    /// @dev Chaos level Percentage Bit Layout.
    ///      [32..39] Percentage of upgrade by 3
    ///      [24..31] Percentage of upgrade by 2
    ///      [16..23] Percentage of upgrade by 1
    ///      [8..15] Percentage of upgrade by 0
    ///      [0..7] Percentage of upgrade by -1
    uint40 chaosLevel;

    constructor(address _owner) {
        _initializeOwner(_owner);
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                          MODIFIERS                         */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Modifier for the checking season running.
    modifier onlyDuringActiveSeason() {
        if (block.timestamp >= endSeasonTime || block.timestamp < startSeasonTime) {
            revert NotActiveSeason();
        }
        _;
    }

    /// @dev Modifier for the checking contract pause status.
    modifier whenNotPaused() {
        if (pauseFlag != 0) revert Paused();
        _;
    }

    /// @dev Modifier for the checking contract unpause status.
    modifier whenPaused() {
        if (pauseFlag == 0) revert Unpaused();
        _;
    }

    /// @dev Allows the owner of a tokens to stake it during an active season.
    ///
    /// Requirements:
    /// - caller is must owner of `id`
    /// - season must be active
    /// - contract must be not pause
    ///
    /// Emits a `Staked` event upon successful staking
    function stakeMany(uint256[] calldata ids) external onlyDuringActiveSeason whenNotPaused {
        uint256 len = ids.length;
        for (uint256 i = 0; i < len;) {
            uint256 id = ids[i];

            address owner = hero721.ownerOf(id);

            // Caller must owner of given token id or delegated wallet
            if (owner != msg.sender) {
                if (!DelegateCheckerLib.checkDelegateForERC721(msg.sender, owner, address(hero721), id)) {
                    revert CallerIsNotOwnerOrDelegateWallet();
                }
            }

            uint256 stake = stakeI[id];

            // Can't allow to stake in between level upgrade.
            if ((stake & _BITMASK_LEVEL_UPGRADE) >> 8 == 0x0fffffffffff) revert LevelUpgradeInProgress();

            uint256 level = (stake & _BITMASK_LEVEL) == 0 ? 1 : stake & _BITMASK_LEVEL;

            /// @solidity memory-safe-assembly
            assembly {
                // Store staking information
                stake := or(or(shl(96, owner), or(shl(52, timestamp()), level)), and(stake, _BITMASK_LEVEL_UPGRADE))
            }

            stakeI[id] = stake;

            // updates claim time for correct rewards
            claimTime[id] = block.timestamp;

            hero721.transferFrom(owner, address(this), id);

            emit Staked(owner, id, block.timestamp);
            ++i;
        }
    }

    /// @dev Unstake the heroes and give pending rewards to owner.
    ///
    /// Requirements:
    /// - caller must be original owner.
    /// - must be staked for at least 6 hr.
    ///
    /// Emits a `Unstaked` event upon successful unstaking.
    function unstakeMany(uint256[] calldata ids) external whenNotPaused {
        uint256 len = ids.length;
        for (uint256 i = 0; i < len;) {
            uint256 id = ids[i];
            uint256 stake = stakeI[id];

            address owner = address(uint160(stake >> 96));

            // Caller must owner of given token id or delegated wallet
            if (owner != msg.sender) {
                if (!DelegateCheckerLib.checkDelegateForERC721(msg.sender, owner, address(hero721), id)) {
                    revert CallerIsNotOwnerOrDelegateWallet();
                }
            }

            if ((block.timestamp - ((stake & _BITMASK_STAKE_TIME) >> 52)) < _MINIMUM_STAKING_TIME) {
                revert CoolDownPeriod();
            }

            // claim remmaing tokens
            _claim(id, stake);

            // Clear owner and staking time
            stakeI[id] = (stakeI[id] << 204) >> 204;

            emit Unstaked(owner, id, block.timestamp);

            // Transfer back to original owner.
            hero721.transferFrom(address(this), owner, id);
            ++i;
        }
    }

    /// @dev Claims staking rewards against staked hero based on level.
    ///
    /// Requirements:
    /// - contract must be not pause
    ///
    /// Emits a `Claimed` event upon successful claim.
    function claimMany(uint256[] calldata ids) public whenNotPaused {
        uint256 len = ids.length;
        for (uint256 i; i < len;) {
            uint256 id = ids[i];
            uint256 stake = stakeI[id];

            address owner = address(uint160(stake >> 96));

            // Caller must owner of given token id or delegated wallet
            if (owner != msg.sender) {
                if (!DelegateCheckerLib.checkDelegateForERC721(msg.sender, owner, address(hero721), id)) {
                    revert CallerIsNotOwnerOrDelegateWallet();
                }
            }
            _claim(id, stake);
            ++i;
        }
    }

    /// @dev Upgrades the level of a `ids` with `levelUpType` and `randomness`.
    /// Requirements:
    /// - contract must be not paused
    /// - must be passed 12h cooldown period
    ///
    function upgradeMany(uint256[] calldata ids, uint8 levelUpType)
        external
        payable
        whenNotPaused
        onlyDuringActiveSeason
    {
        // Checks the levelUpType
        if (levelUpType > 2) revert InvalidLevelUpgradeType();
        uint256 len = ids.length;
        for (uint256 i = 0; i < len; ++i) {
            _upgradeLevel(ids[i], levelUpType);
        }
    }

    /// @dev Upgrade the level of a `id` with `levelUpType`.
    function _upgradeLevel(uint256 id, uint8 levelUpType) internal {
        address owner = hero721.ownerOf(id);

        // Caller must owner of given token id or delegated wallet
        if (owner != msg.sender) {
            // forgefmt: disable-next-item
            if (!(DelegateCheckerLib.checkDelegateForERC721(msg.sender, owner, address(hero721), id)
                      && DelegateCheckerLib.checkDelegateForContract(msg.sender, owner, address(hero20)))) {
                    revert CallerIsNotOwnerOrDelegateWallet();
                }
        }

        // Get a hero information
        uint256 stake = stakeI[id];

        // Current level of hero
        uint256 level = stake & _BITMASK_LEVEL;

        // Can't upgrade more if already reached `MAX_LEVEL`
        if (level == _MAX_LEVEL) revert MaxLevelReached();

        // Must be staked a once for a upgrade
        if (level == 0) revert NotEligible();

        // For a upgrade hero must be unstaked
        if ((stake >> 96) != 0) revert RequiresUnstakedForUpgrade();

        // For a next upgrade must be wait `_MINIMUM_UPGRADE_TIME`
        if (block.timestamp - ((stake & _BITMASK_LEVEL_UPGRADE) >> 8) <= _MINIMUM_UPGRADE_TIME) {
            revert CoolDownPeriod();
        }

        // Pays amount of HERO20 token for a upgrade
        uint256 amount = getRewardsPerDay(id);

        hero20.transferFrom(owner, address(this), amount);

        if (levelUpType == 0) {
            /// @solidity memory-safe-assembly
            assembly {
                stake := or(shl(8, timestamp()), add(level, 1))
            }
            // Updates hero information
            stakeI[id] = stake;

            emit Upgraded(owner, id, level, level + 1);
        } else {
            uint256 requestId = vrf.requestRandomNumberWithTraceId(0);

            uint256 req;

            uint40 currentChaosLevel = chaosLevel;

            /// @solidity memory-safe-assembly
            assembly {
                req := or(or(or(or(shl(254, 1), shl(214, currentChaosLevel)), shl(54, owner)), shl(8, id)), levelUpType)
            }

            _requests[requestId] = req;
            stakeI[id] = stake | _BITMASK_LEVEL_UPGRADE;

            emit UpgradeRequested(owner, id, levelUpType);
        }
    }

    /// @dev Returns earned per day $HERO20.
    function getRewardsPerDay(uint256 id) public view returns (uint256) {
        uint256 level = stakeI[id] & 0xff;
        return (2000 * level * 10 ** 18) / (20 + level);
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                     INTERNAL FUNCTIONS                     */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Handdles the callback for random number vrf used to upgrade token levels.
    function vrfCallback(uint256 requestId, uint256 randomNumber) internal {
        // Retrieve request data from `requestId`.
        uint256 requestData = _requests[requestId];
        // Check requests fulfill status.
        if (requestData >> 255 & 1 == 1) revert AlreadyFulfilled();
        // Check requests exists status.
        if (requestData >> 254 & 1 == 0) revert RequestNotExist();

        // Set a fulfill status
        _requests[requestId] |= 1 << 255;

        uint256 levelType = requestData & _BITMASK_LEVEL; // Upgrade Level Type
        uint256 tokenId = (requestData & _BITMASK_TOKEN_ID) >> 8; // Hero tokenId

        address account = address(uint160(requestData >> 54));

        uint256 stake = stakeI[tokenId];
        uint256 oldLevel = stake & _BITMASK_LEVEL; // Current Level of tokenId

        randomNumber = uint256(keccak256(abi.encode(requestId, randomNumber)));

        if (levelType == 1) {
            // lucky level
            uint256 newLevel = oldLevel + (uint256(randomNumber) & 2);

            if (newLevel > _MAX_LEVEL) newLevel = _MAX_LEVEL;

            emit LuckyUpgraded(account, uint64(tokenId), oldLevel, newLevel);

            stakeI[tokenId] = block.timestamp << 8 | newLevel;
        } else {
            // chaos level
            uint256 newLevel;
            /// @solidity memory-safe-assembly
            assembly {
                for {
                    let up
                    let i := 0x00
                    let chaosPercentage := and(shr(214, requestData), 0xffffffffff)
                    let chance := mod(randomNumber, 100)
                } 1 {} {
                    up := add(up, and(shr(i, chaosPercentage), 0xff))
                    if lt(chance, up) {
                        newLevel := sub(add(oldLevel, shr(3, i)), 1)
                        break
                    }
                    i := add(i, 0x08)
                }
            }

            if (newLevel > _MAX_LEVEL) newLevel = _MAX_LEVEL;
            if (newLevel == 0) newLevel = 1;

            emit ChaosUpgraded(account, uint64(tokenId), oldLevel, newLevel);

            stakeI[tokenId] = block.timestamp << 8 | newLevel;
        }
    }

    /// @dev Claims remanning earned tokens.
    function _claim(uint256 id, uint256 stake) internal {
        uint256 lastClaimTime = claimTime[id];

        if (lastClaimTime >= endSeasonTime) return;

        uint256 duration;

        if (block.timestamp > endSeasonTime) {
            duration = endSeasonTime - lastClaimTime;
        } else {
            duration = block.timestamp - lastClaimTime;
        }

        uint256 level = stake & 0xff;

        uint256 rewards = ((2000 * level * 10 ** 18 * duration) / (20 + level)) / 1 days;

        if (rewards == 0) return;

        claimTime[id] = uint256(block.timestamp);

        address user = address(uint160(stake >> 96));

        emit Claimed(user, id, block.timestamp, rewards);

        hero20.transfer(user, rewards);
    }

    /// @dev Recovery mechanisms for retrieving heroes when contract paused.
    ///
    /// Requirements:
    /// - caller must be original owner.
    ///
    /// Note: This function doesn't give any pending rewards.
    function emergencyUnstake(uint256[] memory ids) external whenPaused {
        uint256 len = ids.length;
        for (uint256 i = 0; i < len;) {
            uint256 id = ids[i];
            uint256 stake = stakeI[id];

            address owner = address(uint160(stake >> 96));

            // Caller must owner of given token id or delegated wallet
            if (owner != msg.sender) {
                if (!DelegateCheckerLib.checkDelegateForERC721(msg.sender, owner, address(hero721), id)) {
                    revert CallerIsNotOwnerOrDelegateWallet();
                }
            }

            // Clear owner and staking time
            stakeI[id] = (stakeI[id] << 204) >> 204;

            emit Unstaked(owner, id, block.timestamp);

            // Transfer back to original owner.
            hero721.transferFrom(address(this), owner, id);
            ++i;
        }
    }

    function isPaused() external view returns (bool) {
        return pauseFlag != 0;
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                      OWNER FUNCTIONS                       */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Owner can set chaos level percentage.
    function setChaosLevelPercentage(uint256[5] calldata per) external onlyOwner {
        uint256 newchaos = per[0] + per[1] + per[2] + per[3] + per[4];
        if (newchaos != 100) revert NotAllowed();
        chaosLevel = uint40(per[4] << 32 | per[3] << 24 | per[2] << 16 | per[1] << 8 | per[0]);
        emit ChaosPercentageChanged(per);
    }

    /// @dev Get chaos level percentage.
    function getChaosLevelPercentage() public view returns (uint256[5] memory result) {
        result[0] = chaosLevel & 0xff;
        result[1] = (chaosLevel >> 8) & 0xff;
        result[2] = (chaosLevel >> 16) & 0xff;
        result[3] = (chaosLevel >> 24) & 0xff;
        result[4] = (chaosLevel >> 32) & 0xff;
    }

    /// @dev Owner can set pause flag.
    /// Note: Non-zero values means contract paused.
    function setFlag(uint64 flag) external onlyOwner {
        pauseFlag = flag;
    }

    /// @dev Owner can set timestamp of the season.
    function setParameter(uint64 startTimestamp, uint64 endTimestamp) external onlyOwner {
        if (startSeasonTime != startTimestamp) {
            // Reverts if season stared.
            if (block.timestamp >= startSeasonTime && startSeasonTime != 0) revert NotAllowed();
            startSeasonTime = startTimestamp;
        }

        if (endSeasonTime != endTimestamp) {
            // Reverts if season ended.
            if ((block.timestamp > endSeasonTime && endSeasonTime != 0) || endTimestamp < startTimestamp) {
                revert NotAllowed();
            }
            endSeasonTime = endTimestamp;
        }
    }

    /// @dev Withdraw `HERO20` tokens to `to`.
    function withdrawFee(address to) external onlyOwner {
        uint256 balance = hero20.balanceOf(address(this));
        hero20.transfer(to, balance);
    }
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                       POP FUNCTIONS                        */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev This method is called by Entropy contract of Play-of-proof network.
    function randomNumberCallback(uint256 requestId, uint256 randomNumber) external {
        if (msg.sender != address(vrf)) revert Unauthorized();
        vrfCallback(requestId, randomNumber);
    }
}

File 2 of 6 : IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IERC20 {
    function mint(address to, uint256 amount) external;

    function transferFrom(address from, address to, uint256 amount) external returns (bool);

    function transfer(address to, uint256 amount) external returns (bool);

    function balanceOf(address to) external returns (uint256);

    function burn(uint256 amount) external;
}

File 3 of 6 : IERC721.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IERC721 {
    function transferFrom(address from, address to, uint256 amount) external;

    function safeTransferFrom(address from, address to, uint256 amount) external;

    function ownerOf(uint256 tokenId) external view returns (address owner);
}

File 4 of 6 : IVRFSystem.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IVRFSystem {
    function requestRandomNumberWithTraceId(uint256 traceId) external returns (uint256 requestId);
}

File 5 of 6 : Ownable.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

/// @notice Simple single owner authorization mixin.
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/auth/Ownable.sol)
///
/// @dev Note:
/// This implementation does NOT auto-initialize the owner to `msg.sender`.
/// You MUST call the `_initializeOwner` in the constructor / initializer.
///
/// While the ownable portion follows
/// [EIP-173](https://eips.ethereum.org/EIPS/eip-173) for compatibility,
/// the nomenclature for the 2-step ownership handover may be unique to this codebase.
abstract contract Ownable {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                       CUSTOM ERRORS                        */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The caller is not authorized to call the function.
    error Unauthorized();

    /// @dev The `newOwner` cannot be the zero address.
    error NewOwnerIsZeroAddress();

    /// @dev The `pendingOwner` does not have a valid handover request.
    error NoHandoverRequest();

    /// @dev Cannot double-initialize.
    error AlreadyInitialized();

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                           EVENTS                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The ownership is transferred from `oldOwner` to `newOwner`.
    /// This event is intentionally kept the same as OpenZeppelin's Ownable to be
    /// compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173),
    /// despite it not being as lightweight as a single argument event.
    event OwnershipTransferred(address indexed oldOwner, address indexed newOwner);

    /// @dev An ownership handover to `pendingOwner` has been requested.
    event OwnershipHandoverRequested(address indexed pendingOwner);

    /// @dev The ownership handover to `pendingOwner` has been canceled.
    event OwnershipHandoverCanceled(address indexed pendingOwner);

    /// @dev `keccak256(bytes("OwnershipTransferred(address,address)"))`.
    uint256 private constant _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE =
        0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0;

    /// @dev `keccak256(bytes("OwnershipHandoverRequested(address)"))`.
    uint256 private constant _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE =
        0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d;

    /// @dev `keccak256(bytes("OwnershipHandoverCanceled(address)"))`.
    uint256 private constant _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE =
        0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                          STORAGE                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The owner slot is given by:
    /// `bytes32(~uint256(uint32(bytes4(keccak256("_OWNER_SLOT_NOT")))))`.
    /// It is intentionally chosen to be a high value
    /// to avoid collision with lower slots.
    /// The choice of manual storage layout is to enable compatibility
    /// with both regular and upgradeable contracts.
    bytes32 internal constant _OWNER_SLOT =
        0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927;

    /// The ownership handover slot of `newOwner` is given by:
    /// ```
    ///     mstore(0x00, or(shl(96, user), _HANDOVER_SLOT_SEED))
    ///     let handoverSlot := keccak256(0x00, 0x20)
    /// ```
    /// It stores the expiry timestamp of the two-step ownership handover.
    uint256 private constant _HANDOVER_SLOT_SEED = 0x389a75e1;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                     INTERNAL FUNCTIONS                     */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Override to return true to make `_initializeOwner` prevent double-initialization.
    function _guardInitializeOwner() internal pure virtual returns (bool guard) {}

    /// @dev Initializes the owner directly without authorization guard.
    /// This function must be called upon initialization,
    /// regardless of whether the contract is upgradeable or not.
    /// This is to enable generalization to both regular and upgradeable contracts,
    /// and to save gas in case the initial owner is not the caller.
    /// For performance reasons, this function will not check if there
    /// is an existing owner.
    function _initializeOwner(address newOwner) internal virtual {
        if (_guardInitializeOwner()) {
            /// @solidity memory-safe-assembly
            assembly {
                let ownerSlot := _OWNER_SLOT
                if sload(ownerSlot) {
                    mstore(0x00, 0x0dc149f0) // `AlreadyInitialized()`.
                    revert(0x1c, 0x04)
                }
                // Clean the upper 96 bits.
                newOwner := shr(96, shl(96, newOwner))
                // Store the new value.
                sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner))))
                // Emit the {OwnershipTransferred} event.
                log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner)
            }
        } else {
            /// @solidity memory-safe-assembly
            assembly {
                // Clean the upper 96 bits.
                newOwner := shr(96, shl(96, newOwner))
                // Store the new value.
                sstore(_OWNER_SLOT, newOwner)
                // Emit the {OwnershipTransferred} event.
                log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner)
            }
        }
    }

    /// @dev Sets the owner directly without authorization guard.
    function _setOwner(address newOwner) internal virtual {
        if (_guardInitializeOwner()) {
            /// @solidity memory-safe-assembly
            assembly {
                let ownerSlot := _OWNER_SLOT
                // Clean the upper 96 bits.
                newOwner := shr(96, shl(96, newOwner))
                // Emit the {OwnershipTransferred} event.
                log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner)
                // Store the new value.
                sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner))))
            }
        } else {
            /// @solidity memory-safe-assembly
            assembly {
                let ownerSlot := _OWNER_SLOT
                // Clean the upper 96 bits.
                newOwner := shr(96, shl(96, newOwner))
                // Emit the {OwnershipTransferred} event.
                log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner)
                // Store the new value.
                sstore(ownerSlot, newOwner)
            }
        }
    }

    /// @dev Throws if the sender is not the owner.
    function _checkOwner() internal view virtual {
        /// @solidity memory-safe-assembly
        assembly {
            // If the caller is not the stored owner, revert.
            if iszero(eq(caller(), sload(_OWNER_SLOT))) {
                mstore(0x00, 0x82b42900) // `Unauthorized()`.
                revert(0x1c, 0x04)
            }
        }
    }

    /// @dev Returns how long a two-step ownership handover is valid for in seconds.
    /// Override to return a different value if needed.
    /// Made internal to conserve bytecode. Wrap it in a public function if needed.
    function _ownershipHandoverValidFor() internal view virtual returns (uint64) {
        return 48 * 3600;
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                  PUBLIC UPDATE FUNCTIONS                   */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Allows the owner to transfer the ownership to `newOwner`.
    function transferOwnership(address newOwner) public payable virtual onlyOwner {
        /// @solidity memory-safe-assembly
        assembly {
            if iszero(shl(96, newOwner)) {
                mstore(0x00, 0x7448fbae) // `NewOwnerIsZeroAddress()`.
                revert(0x1c, 0x04)
            }
        }
        _setOwner(newOwner);
    }

    /// @dev Allows the owner to renounce their ownership.
    function renounceOwnership() public payable virtual onlyOwner {
        _setOwner(address(0));
    }

    /// @dev Request a two-step ownership handover to the caller.
    /// The request will automatically expire in 48 hours (172800 seconds) by default.
    function requestOwnershipHandover() public payable virtual {
        unchecked {
            uint256 expires = block.timestamp + _ownershipHandoverValidFor();
            /// @solidity memory-safe-assembly
            assembly {
                // Compute and set the handover slot to `expires`.
                mstore(0x0c, _HANDOVER_SLOT_SEED)
                mstore(0x00, caller())
                sstore(keccak256(0x0c, 0x20), expires)
                // Emit the {OwnershipHandoverRequested} event.
                log2(0, 0, _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE, caller())
            }
        }
    }

    /// @dev Cancels the two-step ownership handover to the caller, if any.
    function cancelOwnershipHandover() public payable virtual {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute and set the handover slot to 0.
            mstore(0x0c, _HANDOVER_SLOT_SEED)
            mstore(0x00, caller())
            sstore(keccak256(0x0c, 0x20), 0)
            // Emit the {OwnershipHandoverCanceled} event.
            log2(0, 0, _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE, caller())
        }
    }

    /// @dev Allows the owner to complete the two-step ownership handover to `pendingOwner`.
    /// Reverts if there is no existing ownership handover requested by `pendingOwner`.
    function completeOwnershipHandover(address pendingOwner) public payable virtual onlyOwner {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute and set the handover slot to 0.
            mstore(0x0c, _HANDOVER_SLOT_SEED)
            mstore(0x00, pendingOwner)
            let handoverSlot := keccak256(0x0c, 0x20)
            // If the handover does not exist, or has expired.
            if gt(timestamp(), sload(handoverSlot)) {
                mstore(0x00, 0x6f5e8818) // `NoHandoverRequest()`.
                revert(0x1c, 0x04)
            }
            // Set the handover slot to 0.
            sstore(handoverSlot, 0)
        }
        _setOwner(pendingOwner);
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                   PUBLIC READ FUNCTIONS                    */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Returns the owner of the contract.
    function owner() public view virtual returns (address result) {
        /// @solidity memory-safe-assembly
        assembly {
            result := sload(_OWNER_SLOT)
        }
    }

    /// @dev Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.
    function ownershipHandoverExpiresAt(address pendingOwner)
        public
        view
        virtual
        returns (uint256 result)
    {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute the handover slot.
            mstore(0x0c, _HANDOVER_SLOT_SEED)
            mstore(0x00, pendingOwner)
            // Load the handover slot.
            result := sload(keccak256(0x0c, 0x20))
        }
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                         MODIFIERS                          */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Marks a function as only callable by the owner.
    modifier onlyOwner() virtual {
        _checkOwner();
        _;
    }
}

File 6 of 6 : DelegateCheckerLib.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

/// @notice Library for efficient querying of the delegate registry on ZKsync.
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/ext/zksync/delegatexyz/DelegateCheckerLib.sol)
library DelegateCheckerLib {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                         CONSTANTS                          */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The canonical delegate registry V2 on ZKsync.
    /// There's no V1 on ZKsync.
    /// See: https://sepolia.abscan.org/address/0x0000000059A24EB229eED07Ac44229DB56C5d797
    address internal constant DELEGATE_REGISTRY_V2 = 0x0000000059A24EB229eED07Ac44229DB56C5d797;

    /// @dev The storage slot to store an override address for the `DELEGATE_REGISTRY_V2`.
    /// If the address is non-zero, it will be used instead.
    /// This is so that you can avoid using `vm.etch` in ZKsync Foundry,
    /// and instead use `vm.store` instead.
    bytes32 internal constant DELEGATE_REGISTRY_V2_OVERRIDE_SLOT =
        0x04ecb0522ab37ca0b278a89c6884dfdbcde83c177150fc939ab02e069068bdef;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                DELEGATE CHECKING OPERATIONS                */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    // Note:
    // - `to` is the delegate. Typically called the "hot wallet".
    // - `from` is the grantor of the delegate rights. Typically called the "cold vault".

    /// @dev Returns if `to` is a delegate of `from`.
    /// ```
    ///     v2.checkDelegateForAll(to, from, "")
    /// ```
    function checkDelegateForAll(address to, address from) internal view returns (bool isValid) {
        address v2 = _delegateRegistryV2();
        /// @solidity memory-safe-assembly
        assembly {
            let m := mload(0x40)
            // `0x60` is already 0.
            mstore(0x40, from)
            mstore(0x2c, shl(96, to))
            mstore(0x0c, 0xe839bd53000000000000000000000000) // `checkDelegateForAll(address,address,bytes32)`.
            isValid := eq(mload(staticcall(gas(), v2, 0x1c, 0x64, 0x01, 0x20)), 1)
            mstore(0x40, m) // Restore the free memory pointer.
        }
    }

    /// @dev Returns if `to` is a delegate of `from`.
    /// ```
    ///     v2.checkDelegateForAll(to, from, rights)
    /// ```
    function checkDelegateForAll(address to, address from, bytes32 rights)
        internal
        view
        returns (bool isValid)
    {
        address v2 = _delegateRegistryV2();
        /// @solidity memory-safe-assembly
        assembly {
            let m := mload(0x40)
            mstore(0x60, rights)
            mstore(0x40, from)
            mstore(0x2c, shl(96, to))
            mstore(0x0c, 0xe839bd53000000000000000000000000) // `checkDelegateForAll(address,address,bytes32)`.
            isValid := eq(mload(staticcall(gas(), v2, 0x1c, 0x64, 0x01, 0x20)), 1)
            mstore(0x40, m) // Restore the free memory pointer.
            mstore(0x60, 0) // Restore the zero pointer.
        }
    }

    /// @dev Returns if `to` is a delegate of `from` for the specified `contract_`.
    /// ```
    ///     v2.checkDelegateForContract(to, from, contract_, "")
    /// ```
    /// Returns true if `checkDelegateForAll(to, from)` returns true.
    function checkDelegateForContract(address to, address from, address contract_)
        internal
        view
        returns (bool isValid)
    {
        address v2 = _delegateRegistryV2();
        /// @solidity memory-safe-assembly
        assembly {
            let m := mload(0x40)
            mstore(add(0x80, m), 0)
            mstore(add(0x60, m), contract_)
            mstore(add(0x4c, m), shl(96, from))
            mstore(add(0x2c, m), shl(96, to))
            // `checkDelegateForContract(address,address,address,bytes32)`.
            mstore(add(0x0c, m), 0x8988eea9000000000000000000000000)
            isValid := staticcall(gas(), v2, add(m, 0x1c), 0x84, m, 0x20)
            isValid := and(eq(mload(m), 1), isValid)
        }
    }

    /// @dev Returns if `to` is a delegate of `from` for the specified `contract_`.
    /// ```
    ///     v2.checkDelegateForContract(to, from, contract_, rights)
    /// ```
    /// Returns true if `checkDelegateForAll(to, from, rights)` returns true.
    function checkDelegateForContract(address to, address from, address contract_, bytes32 rights)
        internal
        view
        returns (bool isValid)
    {
        address v2 = _delegateRegistryV2();
        /// @solidity memory-safe-assembly
        assembly {
            let m := mload(0x40)
            mstore(add(0x80, m), rights)
            mstore(add(0x60, m), contract_)
            mstore(add(0x4c, m), shl(96, from))
            mstore(add(0x2c, m), shl(96, to))
            // `checkDelegateForContract(address,address,address,bytes32)`.
            mstore(add(0x0c, m), 0x8988eea9000000000000000000000000)
            isValid := staticcall(gas(), v2, add(m, 0x1c), 0x84, m, 0x20)
            isValid := and(eq(mload(m), 1), isValid)
        }
    }

    /// @dev Returns if `to` is a delegate of `from` for the specified `contract_` and token `id`.
    /// ```
    ///     v2.checkDelegateForERC721(to, from, contract_, id, "")
    /// ```
    /// Returns true if `checkDelegateForContract(to, from, contract_)` returns true.
    function checkDelegateForERC721(address to, address from, address contract_, uint256 id)
        internal
        view
        returns (bool isValid)
    {
        address v2 = _delegateRegistryV2();
        /// @solidity memory-safe-assembly
        assembly {
            let m := mload(0x40)
            mstore(add(0xa0, m), 0)
            mstore(add(0x80, m), id)
            mstore(add(0x60, m), contract_)
            mstore(add(0x4c, m), shl(96, from))
            mstore(add(0x2c, m), shl(96, to))
            // `checkDelegateForERC721(address,address,address,uint256,bytes32)`.
            mstore(add(0x0c, m), 0xb9f36874000000000000000000000000)
            isValid := staticcall(gas(), v2, add(m, 0x1c), 0xa4, m, 0x20)
            isValid := and(eq(mload(m), 1), isValid)
        }
    }

    /// @dev Returns if `to` is a delegate of `from` for the specified `contract_` and token `id`.
    /// ```
    ///     v2.checkDelegateForERC721(to, from, contract_, id, rights)
    /// ```
    /// Returns true if `checkDelegateForContract(to, from, contract_, rights)` returns true.
    function checkDelegateForERC721(
        address to,
        address from,
        address contract_,
        uint256 id,
        bytes32 rights
    ) internal view returns (bool isValid) {
        address v2 = _delegateRegistryV2();
        /// @solidity memory-safe-assembly
        assembly {
            let m := mload(0x40)
            mstore(add(0xa0, m), rights)
            mstore(add(0x80, m), id)
            mstore(add(0x60, m), contract_)
            mstore(add(0x4c, m), shl(96, from))
            mstore(add(0x2c, m), shl(96, to))
            // `checkDelegateForERC721(address,address,address,uint256,bytes32)`.
            mstore(add(0x0c, m), 0xb9f36874000000000000000000000000)
            isValid := staticcall(gas(), v2, add(m, 0x1c), 0xa4, m, 0x20)
            isValid := and(eq(mload(m), 1), isValid)
        }
    }

    /// @dev Returns the amount of an ERC20 token for `contract_`
    /// that `to` is granted rights to act on the behalf of `from`.
    /// ```
    ///     v2.checkDelegateForERC20(to, from, contract_, "")
    /// ```
    /// Returns `type(uint256).max` if `checkDelegateForContract(to, from, contract_)` returns true.
    function checkDelegateForERC20(address to, address from, address contract_)
        internal
        view
        returns (uint256 amount)
    {
        address v2 = _delegateRegistryV2();
        /// @solidity memory-safe-assembly
        assembly {
            let m := mload(0x40)
            let o := add(0x80, m)
            mstore(o, 0)
            mstore(add(0x60, m), contract_)
            mstore(add(0x4c, m), shl(96, from))
            mstore(add(0x2c, m), shl(96, to))
            // `checkDelegateForERC20(address,address,address,bytes32)`.
            mstore(add(0x0c, m), 0xba63c817000000000000000000000000)
            amount := staticcall(gas(), v2, add(m, 0x1c), 0x84, o, 0x20)
            amount := mul(mload(o), amount)
        }
    }

    /// @dev Returns the amount of an ERC20 token for `contract_`
    /// that `to` is granted rights to act on the behalf of `from`.
    /// ```
    ///     v2.checkDelegateForERC20(to, from, contract_, rights)
    /// ```
    /// Returns `type(uint256).max` if `checkDelegateForContract(to, from, contract_, rights)` returns true.
    function checkDelegateForERC20(address to, address from, address contract_, bytes32 rights)
        internal
        view
        returns (uint256 amount)
    {
        address v2 = _delegateRegistryV2();
        /// @solidity memory-safe-assembly
        assembly {
            let m := mload(0x40)
            mstore(0x00, 0)
            mstore(add(0x80, m), rights)
            mstore(add(0x60, m), contract_)
            mstore(add(0x4c, m), shl(96, from))
            mstore(add(0x2c, m), shl(96, to))
            // `checkDelegateForERC20(address,address,address,bytes32)`.
            mstore(add(0x0c, m), 0xba63c817000000000000000000000000)
            amount := staticcall(gas(), v2, add(m, 0x1c), 0x84, 0x00, 0x20)
            amount := mul(mload(0x00), amount)
        }
    }

    /// @dev Returns the amount of an ERC1155 token `id` for `contract_`
    /// that `to` is granted rights to act on the behalf of `from`.
    /// ```
    ///     v2.checkDelegateForERC1155(to, from, contract_, id, "")
    /// ```
    /// Returns `type(uint256).max` if `checkDelegateForContract(to, from, contract_)` returns true.
    function checkDelegateForERC1155(address to, address from, address contract_, uint256 id)
        internal
        view
        returns (uint256 amount)
    {
        address v2 = _delegateRegistryV2();
        /// @solidity memory-safe-assembly
        assembly {
            let m := mload(0x40)
            let o := add(0xa0, m)
            mstore(o, 0)
            mstore(add(0x80, m), id)
            mstore(add(0x60, m), contract_)
            mstore(add(0x4c, m), shl(96, from))
            mstore(add(0x2c, m), shl(96, to))
            // `checkDelegateForERC1155(address,address,address,uint256,bytes32)`.
            mstore(add(0x0c, m), 0xb8705875000000000000000000000000)
            amount := staticcall(gas(), v2, add(m, 0x1c), 0xa4, o, 0x20)
            amount := mul(mload(o), amount)
        }
    }

    /// @dev Returns the amount of an ERC1155 token `id` for `contract_`
    /// that `to` is granted rights to act on the behalf of `from`.
    /// ```
    ///     v2.checkDelegateForERC1155(to, from, contract_, id, rights)
    /// ```
    /// Returns `type(uint256).max` if `checkDelegateForContract(to, from, contract_, rights)` returns true.
    function checkDelegateForERC1155(
        address to,
        address from,
        address contract_,
        uint256 id,
        bytes32 rights
    ) internal view returns (uint256 amount) {
        address v2 = _delegateRegistryV2();
        /// @solidity memory-safe-assembly
        assembly {
            let m := mload(0x40)
            mstore(0x00, 0)
            mstore(add(0xa0, m), rights)
            mstore(add(0x80, m), id)
            mstore(add(0x60, m), contract_)
            mstore(add(0x4c, m), shl(96, from))
            mstore(add(0x2c, m), shl(96, to))
            // `checkDelegateForERC1155(address,address,address,uint256,bytes32)`.
            mstore(add(0x0c, m), 0xb8705875000000000000000000000000)
            amount := staticcall(gas(), v2, add(m, 0x1c), 0xa4, 0x00, 0x20)
            amount := mul(mload(0x00), amount)
        }
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                      PRIVATE HELPERS                       */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Returns the address of the delegate registry V2.
    function _delegateRegistryV2() private view returns (address result) {
        /// @solidity memory-safe-assembly
        assembly {
            // Don't worry about it, storage read is cheap on ZKsync VM.
            result := shr(96, shl(96, sload(DELEGATE_REGISTRY_V2_OVERRIDE_SLOT)))
            result := or(mul(DELEGATE_REGISTRY_V2, iszero(result)), result)
        }
    }
}

Settings
{
  "viaIR": false,
  "codegen": "yul",
  "remappings": [
    "@limitbreak/permit-c/=lib/creator-token-standards/lib/PermitC/src/",
    "@opensea/tstorish/=lib/creator-token-standards/lib/tstorish/src/",
    "@openzeppelin/=lib/creator-token-standards/lib/openzeppelin-contracts/",
    "@rari-capital/solmate/=lib/creator-token-standards/lib/PermitC/lib/solmate/",
    "ERC721A/=lib/ERC721A/contracts/",
    "PermitC/=lib/creator-token-standards/lib/PermitC/",
    "creator-token-standards/=lib/creator-token-standards/",
    "delegate-registry/=lib/delegate-registry/",
    "ds-test/=lib/creator-token-standards/lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/delegate-registry/lib/openzeppelin-contracts/lib/erc4626-tests/",
    "erc721a/=lib/creator-token-standards/lib/ERC721A/",
    "forge-gas-metering/=lib/creator-token-standards/lib/PermitC/lib/forge-gas-metering/",
    "forge-std/=lib/forge-std/src/",
    "forge-zksync-std/=lib/forge-zksync-std/src/",
    "murky/=lib/creator-token-standards/lib/murky/",
    "openzeppelin-contracts/=lib/creator-token-standards/lib/openzeppelin-contracts/",
    "openzeppelin/=lib/delegate-registry/lib/openzeppelin-contracts/contracts/",
    "solady/=lib/solady/src/",
    "solmate/=lib/creator-token-standards/lib/PermitC/lib/solmate/src/",
    "tstorish/=lib/creator-token-standards/lib/tstorish/src/"
  ],
  "evmVersion": "cancun",
  "outputSelection": {
    "*": {
      "*": [
        "abi"
      ]
    }
  },
  "optimizer": {
    "enabled": true,
    "mode": "3",
    "fallback_to_optimizing_for_size": false,
    "disable_system_request_memoization": true
  },
  "metadata": {},
  "libraries": {},
  "enableEraVMExtensions": false,
  "forceEVMLA": false
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyFulfilled","type":"error"},{"inputs":[],"name":"AlreadyInitialized","type":"error"},{"inputs":[],"name":"CallerIsNotOwnerOrDelegateWallet","type":"error"},{"inputs":[],"name":"CoolDownPeriod","type":"error"},{"inputs":[],"name":"InvalidLevelUpgradeType","type":"error"},{"inputs":[],"name":"LevelUpgradeInProgress","type":"error"},{"inputs":[],"name":"MaxLevelReached","type":"error"},{"inputs":[],"name":"NewOwnerIsZeroAddress","type":"error"},{"inputs":[],"name":"NoHandoverRequest","type":"error"},{"inputs":[],"name":"NotActiveSeason","type":"error"},{"inputs":[],"name":"NotAllowed","type":"error"},{"inputs":[],"name":"NotEligible","type":"error"},{"inputs":[],"name":"Paused","type":"error"},{"inputs":[],"name":"RequestNotExist","type":"error"},{"inputs":[],"name":"RequiresUnstakedForUpgrade","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"Unpaused","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[5]","name":"percentags","type":"uint256[5]"}],"name":"ChaosPercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldLevel","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newLevel","type":"uint256"}],"name":"ChaosUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldLevel","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newLevel","type":"uint256"}],"name":"LuckyUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Unstaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"levelUpType","type":"uint8"}],"name":"UpgradeRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldLevel","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newLevel","type":"uint256"}],"name":"Upgraded","type":"event"},{"inputs":[],"name":"cancelOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"claimMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"claimTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"completeOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"emergencyUnstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endSeasonTime","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChaosLevelPercentage","outputs":[{"internalType":"uint256[5]","name":"result","type":"uint256[5]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getRewardsPerDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"result","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"ownershipHandoverExpiresAt","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"uint256","name":"randomNumber","type":"uint256"}],"name":"randomNumberCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"requestOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[5]","name":"per","type":"uint256[5]"}],"name":"setChaosLevelPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"flag","type":"uint64"}],"name":"setFlag","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"uint64","name":"endTimestamp","type":"uint64"}],"name":"setParameter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"stakeI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"stakeMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startSeasonTime","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"unstakeMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint8","name":"levelUpType","type":"uint8"}],"name":"upgradeMany","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"withdrawFee","outputs":[],"stateMutability":"nonpayable","type":"function"}]

9c4d535b0000000000000000000000000000000000000000000000000000000000000000010003b1ff1399fefc2f88ce5fd2e06f968beed38823d466f7238c435aa52ad4000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000200000000000000000000000001b2c84dd7957b1e207cd7b01ded77984ec16fdef

Deployed Bytecode

0x0001000000000002000e000000000002000000000001035500000060031002700000032e033001970000000100200190000000550000c13d0000008002000039000000400020043f000000040030008c00000b9b0000413d000000000401043b000000e004400270000003360040009c0000008b0000213d000003460040009c000000d30000213d0000034e0040009c000000fe0000213d000003520040009c000001610000613d000003530040009c000001840000613d000003540040009c00000b9b0000c13d000000440030008c00000b9b0000413d0000000402100370000000000202043b000003570020009c00000b9b0000213d0000002304200039000000000034004b00000b9b0000813d0000000404200039000000000441034f000000000404043b000400000004001d000003570040009c00000b9b0000213d000300240020003d000000040200002900000005022002100000000302200029000000000032004b00000b9b0000213d0000002401100370000000000101043b000100000001001d000000ff0010008c00000b9b0000213d0000000301000039000000000101041a0000035a00100198000007660000c13d000c00000001001d0000035801000041000000000010044300000000010004140000032e0010009c0000032e01008041000000c00110021000000359011001c70000800b020000390cb20cad0000040f000000010020019000000b9d0000613d000000000101043b0000000c0300002900000040023002700000035702200197000000000021004b000008350000813d0000035702300197000000000021004b000008350000413d0000000101000029000000ff0110018f000700000001001d000000030010008c000009330000413d000003a701000041000000000010043f0000036c0100004100000cb4000104300000000002000416000000000002004b00000b9b0000c13d0000001f023000390000032f022001970000008002200039000000400020043f0000001f0430018f00000330053001980000008002500039000000660000613d0000008006000039000000000701034f000000007807043c0000000006860436000000000026004b000000620000c13d000000000004004b000000730000613d000000000151034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000200030008c00000b9b0000413d000000800600043d000003310060009c00000b9b0000213d0000033201000041000000000061041b00000000010004140000032e0010009c0000032e01008041000000c00110021000000333011001c70000800d020000390000000303000039000003340400004100000000050000190cb20ca80000040f000000010020019000000b9b0000613d000000200100003900000100001004430000012000000443000003350100004100000cb30001042e000003370040009c000000e50000213d0000033f0040009c0000010b0000213d000003430040009c000003370000613d000003440040009c0000046d0000613d000003450040009c00000b9b0000c13d000000a40030008c00000b9b0000413d0000000003000416000000000003004b00000b9b0000c13d0000033203000041000000000303041a0000000004000411000000000034004b000005f60000c13d0000000403100370000000000403043b0000002405100370000000000505043b000000000045001a00000b400000413d00000000074500190000004406100370000000000606043b000000000076001a00000b400000413d00000000087600190000006407100370000000000707043b000000000087001a00000b400000413d00000000088700190000008401100370000000000101043b000000000081001a00000b400000413d0000000008810019000000640080008c000008310000c13d00000010066002100000000805500210000000000565019f0000001806700210000000000565019f0000002001100210000000000115019f000000000141019f000000c0011002100000037e011001970000000304000039000000000504041a0000037f05500197000000000115019f000000000014041b000000003103043c0000000002120436000001200020008c000000c60000c13d00000000010004140000032e0010009c0000032e01008041000000c00110021000000380011001c70000800d0200003900000001030000390000038104000041000005b50000013d000003470040009c000001260000213d0000034b0040009c0000047c0000613d0000034c0040009c000004850000613d0000034d0040009c00000b9b0000c13d000000240030008c00000b9b0000413d0000000002000416000000000002004b00000b9b0000c13d0000000401100370000000000101043b000000000010043f00000002010000390000060c0000013d000003380040009c0000014c0000213d0000033c0040009c0000049d0000613d0000033d0040009c000004e70000613d0000033e0040009c00000b9b0000c13d000000240030008c00000b9b0000413d0000000401100370000000000101043b000003310010009c00000b9b0000213d0000033202000041000000000202041a0000000003000411000000000023004b000005f60000c13d000000000001004b0000083c0000c13d0000036d01000041000000000010043f0000036e0100004100000cb4000104300000034f0040009c000005160000613d000003500040009c0000058e0000613d000003510040009c00000b9b0000c13d0000000001000416000000000001004b00000b9b0000c13d0000000301000039000000000101041a0000004001100270000004810000013d000003400040009c000005ba0000613d000003410040009c000005c50000613d000003420040009c00000b9b0000c13d000000240030008c00000b9b0000413d0000000002000416000000000002004b00000b9b0000c13d0000000401100370000000000101043b000c00000001001d000003570010009c00000b9b0000213d0cb20c720000040f0000000c0100002900000080011002100000035a011001970000000302000039000000000302041a0000037403300197000000000113019f000000000012041b000000000100001900000cb30001042e000003480040009c000005e10000613d000003490040009c000005fa0000613d0000034a0040009c00000b9b0000c13d000000440030008c00000b9b0000413d0000000002000416000000000002004b00000b9b0000c13d0000000401100370000000000201043b00000000010004110000038a0010009c000007620000c13d000c00000002001d000000000020043f000000200000043f00000000010004140000032e0010009c0000032e01008041000000c00110021000000363011001c700008010020000390cb20cad0000040f000000010020019000000b9b0000613d000000000101043b000000000101041a0000038c0010009c0000076a0000813d0000038e00100198000007a40000c13d0000039401000041000000000010043f0000036c0100004100000cb400010430000003390040009c000006030000613d0000033a0040009c000006140000613d0000033b0040009c00000b9b0000c13d000000240030008c00000b9b0000413d0000000002000416000000000002004b00000b9b0000c13d0000000401100370000000000101043b000003310010009c00000b9b0000213d00000355020000410000000c0020043f000000000010043f0000000c0100003900000020020000390000060f0000013d0000000002000416000000000002004b00000b9b0000c13d0000012002000039000000400020043f000000000131034f0000008002000039000000001301043c0000000002320436000001200020008c000001680000c13d0000000301000039000000000101041a000000c002100270000000ff0220018f000000800020043f000000c803100270000000ff0330018f000000a00030043f000000d004100270000000ff0440018f000000c00040043f000000d805100270000000ff0550018f000000e00050043f000000e001100270000000ff0110018f000001000010043f000001200020043f000001400030043f000001600040043f000001800050043f000001a00010043f000003ac0100004100000cb30001042e000000240030008c00000b9b0000413d0000000002000416000000000002004b00000b9b0000c13d0000000402100370000000000202043b000003570020009c00000b9b0000213d0000002304200039000000000034004b00000b9b0000813d0000000404200039000000000141034f000000000101043b000700000001001d000003570010009c00000b9b0000213d000600240020003d000000070100002900000005011002100000000601100029000000000031004b00000b9b0000213d0000000301000039000000000101041a0000035a00100198000007660000c13d000000070000006b000005b80000613d0000000001000410000503310010019b000900000000001d0000000901000029000000050110021000000006011000290000000001100367000000000101043b000c00000001001d000000000010043f0000000101000039000000200010043f00000000010004140000032e0010009c0000032e01008041000000c00110021000000363011001c700008010020000390cb20cad0000040f000000010020019000000b9b0000613d000000000101043b000000000101041a000a00000001001d000b00600010027800000000010004110000000b0010006b000002050000613d0000035e01000041000000000101041a000000400400043d000800000004001d00000060024000390000035d03000041000000000032043500000080024000390000000c030000290000000000320435000000000200041100000060022002100000002c0340003900000000002304350000000c024000390000035f0300004100000000003204350000000a0200002900000378022001970000004c034000390000000000230435000000a0024000390000000000020435000003310110019800000000020000190000036002006041000000000212019f0000001c014000390000032e0010009c0000032e01008041000000400110021000000000030004140000032e0030009c0000032e03008041000000c003300210000000000113019f00000379011001c70cb20cad0000040f000000080900002900000060031002700000032e05300197000000200050008c000000200500803900000020045001900000000003490019000001f20000613d000000000601034f0000000007090019000000006806043c0000000007870436000000000037004b000001ee0000c13d0000001f05500190000001ff0000613d000000000141034f0000000304500210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000003ad012001670000000002090433000000010020008c000000010110c1bf000000010010019000000b460000c13d0000035801000041000000000010044300000000010004140000032e0010009c0000032e01008041000000c00110021000000359011001c70000800b020000390cb20cad0000040f000000010020019000000b9d0000613d0000000a020000290000003402200270000003a102200197000000000101043b000800000001001d000000000121004b00000b400000413d000054600010008c00000b4a0000413d0000000c01000029000000000010043f0000000201000039000000200010043f00000000010004140000032e0010009c0000032e01008041000000c00110021000000363011001c700008010020000390cb20cad0000040f000000010020019000000b9b0000613d000000000101043b000000000201041a0000000301000039000000000101041a00000040011002700000035701100197000000000012004b000002c90000813d000300000001001d000400000002001d0000035801000041000000000010044300000000010004140000032e0010009c0000032e01008041000000c00110021000000359011001c70000800b020000390cb20cad0000040f000000010020019000000b9d0000613d000000000501043b0000000306000029000000000065004b0000000404000029000002430000213d000000000054004b000000000605001900000b400000213d0000000a01000029000000ff01100190000002510000613d00000383031000d1000007d0021000c900000000022300d9000003840020009c00000b400000c13d000000000446004900000000023400a900000000033200d9000000000034004b000002520000613d00000b400000013d0000000002000019000000140110003900000000021200d9000003850020009c000002c90000413d0000000c01000029000000000010043f0000000201000039000000200010043f00000000010004140000032e0010009c0000032e01008041000000c00110021000000363011001c7000400000002001d0000801002000039000a00000005001d0cb20cad0000040f0000000a030000290000000100200190000000040200002900000b9b0000613d000003850420012a000000000101043b000000000031041b000000400100043d0000004002100039000400000004001d0000000000420435000000200210003900000000003204350000000c0200002900000000002104350000032e0010009c0000032e01008041000000400110021000000000020004140000032e0020009c0000032e02008041000000c002200210000000000112019f00000369011001c70000800d02000039000000020300003900000386040000410000000b050000290cb20ca80000040f000000010020019000000b9b0000613d000000400300043d000a00000003001d0000002401300039000000040200002900000000002104350000038701000041000000000013043500000004013000390000000b0200002900000000002104350000032e0030009c0000032e010000410000000001034019000000400110021000000000020004140000032e0020009c0000032e02008041000000c002200210000000000112019f00000388011001c700000389020000410cb20ca80000040f0000000a0a00002900000060031002700000032e03300197000000200030008c00000020040000390000000004034019000000200640019000000000056a0019000002a70000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000058004b000002a30000c13d0000001f07400190000002b40000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000000010020019000000bf60000613d0000001f01400039000000600210018f0000000001a20019000000000021004b00000000020000390000000102004039000003570010009c000005db0000213d0000000100200190000005db0000c13d000000400010043f000000200030008c00000b9b0000413d00000000010a0433000000000001004b0000000002000039000000010200c039000000000021004b00000b9b0000c13d0000000c01000029000000000010043f0000000101000039000000200010043f00000000010004140000032e0010009c0000032e01008041000000c00110021000000363011001c700008010020000390cb20cad0000040f000000010020019000000b9b0000613d000000000101043b000000000101041a000a00000001001d0000000c01000029000000000010043f0000000101000039000000200010043f00000000010004140000032e0010009c0000032e01008041000000c00110021000000363011001c700008010020000390cb20cad0000040f000000010020019000000b9b0000613d000000000101043b0000000a020000290000037a02200197000000000021041b000000400100043d00000040021000390000000803000029000000000032043500000020021000390000000c0300002900000000003204350000000b0200002900000000002104350000032e0010009c0000032e01008041000000400110021000000000020004140000032e0020009c0000032e02008041000000c002200210000000000112019f00000369011001c70000800d0200003900000001030000390000037b040000410cb20ca80000040f000000010020019000000b9b0000613d000003650100004100000000001004430000035d01000041000000040010044300000000010004140000032e0010009c0000032e01008041000000c00110021000000366011001c700008002020000390cb20cad0000040f000000010020019000000b9d0000613d000000000101043b000000000001004b00000b9b0000613d000000400300043d00000044013000390000000c02000029000000000021043500000024013000390000000b020000290000000000210435000003670100004100000000001304350000000401300039000000050200002900000000002104350000032e0030009c000c00000003001d0000032e010000410000000001034019000000400110021000000000020004140000032e0020009c0000032e02008041000000c002200210000000000112019f00000368011001c70000035d020000410cb20ca80000040f000000010020019000000b9e0000613d0000000c01000029000003570010009c000005db0000213d000000400010043f00000009020000290000000102200039000900000002001d000000070020006c000001a50000413d000005b80000013d000000240030008c00000b9b0000413d0000000002000416000000000002004b00000b9b0000c13d0000000402100370000000000202043b000003570020009c00000b9b0000213d0000002304200039000000000034004b00000b9b0000813d0000000404200039000000000141034f000000000101043b000800000001001d000003570010009c00000b9b0000213d000700240020003d000000080100002900000005011002100000000701100029000000000031004b00000b9b0000213d0000000301000039000000000101041a0000035a00100198000007660000c13d000000080000006b000005b80000613d000c00000000001d0000035c0000013d0000000c020000290000000102200039000c00000002001d000000080020006c000005b80000813d0000000c01000029000000050110021000000007011000290000000001100367000000000101043b000b00000001001d000000000010043f0000000101000039000000200010043f00000000010004140000032e0010009c0000032e01008041000000c00110021000000363011001c700008010020000390cb20cad0000040f000000010020019000000b9b0000613d000000000101043b000000000101041a000a00000001001d00090060001002780000000001000411000000090010006b000003bc0000613d0000035e01000041000000000101041a000000400400043d000600000004001d00000060024000390000035d03000041000000000032043500000080024000390000000b030000290000000000320435000000000200041100000060022002100000002c0340003900000000002304350000000c024000390000035f0300004100000000003204350000000a0200002900000378022001970000004c034000390000000000230435000000a0024000390000000000020435000003310110019800000000020000190000036002006041000000000212019f0000001c014000390000032e0010009c0000032e01008041000000400110021000000000030004140000032e0030009c0000032e03008041000000c003300210000000000113019f00000379011001c70cb20cad0000040f000000060900002900000060031002700000032e05300197000000200050008c000000200500803900000020045001900000000003490019000003a90000613d000000000601034f0000000007090019000000006806043c0000000007870436000000000037004b000003a50000c13d0000001f05500190000003b60000613d000000000141034f0000000304500210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000003ad012001670000000002090433000000010020008c000000010110c1bf000000010010019000000b460000c13d0000000b01000029000000000010043f0000000201000039000000200010043f00000000010004140000032e0010009c0000032e01008041000000c00110021000000363011001c700008010020000390cb20cad0000040f000000010020019000000b9b0000613d000000000101043b000000000201041a0000000301000039000000000101041a00000040011002700000035701100197000000000012004b000003570000813d000500000001001d000600000002001d0000035801000041000000000010044300000000010004140000032e0010009c0000032e01008041000000c00110021000000359011001c70000800b020000390cb20cad0000040f000000010020019000000b9d0000613d000000000501043b0000000506000029000000000065004b0000000604000029000003e60000213d000000000054004b000000000605001900000b400000213d0000000a01000029000000ff01100190000003f40000613d00000383031000d1000007d0021000c900000000022300d9000003840020009c00000b400000c13d000000000446004900000000023400a900000000033200d9000000000034004b000003f50000613d00000b400000013d0000000002000019000000140110003900000000021200d9000003850020009c000003570000413d0000000b01000029000000000010043f0000000201000039000000200010043f00000000010004140000032e0010009c0000032e01008041000000c00110021000000363011001c7000600000002001d0000801002000039000a00000005001d0cb20cad0000040f0000000a030000290000000100200190000000060200002900000b9b0000613d000003850420012a000000000101043b000000000031041b000000400100043d0000004002100039000600000004001d0000000000420435000000200210003900000000003204350000000b0200002900000000002104350000032e0010009c0000032e01008041000000400110021000000000020004140000032e0020009c0000032e02008041000000c002200210000000000112019f00000369011001c70000800d020000390000000203000039000003860400004100000009050000290cb20ca80000040f000000010020019000000b9b0000613d000000400300043d000b00000003001d000000240130003900000006020000290000000000210435000003870100004100000000001304350000000401300039000000090200002900000000002104350000032e0030009c0000032e010000410000000001034019000000400110021000000000020004140000032e0020009c0000032e02008041000000c002200210000000000112019f00000388011001c700000389020000410cb20ca80000040f0000000b0a00002900000060031002700000032e03300197000000200030008c00000020040000390000000004034019000000200640019000000000056a00190000044a0000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000058004b000004460000c13d0000001f07400190000004570000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000000010020019000000bbe0000613d0000001f01400039000000600210018f0000000001a20019000000000021004b00000000020000390000000102004039000003570010009c000005db0000213d0000000100200190000005db0000c13d000000400010043f000000200030008c00000b9b0000413d00000000010a0433000000000001004b0000000002000039000000010200c039000000000021004b000003570000613d00000b9b0000013d000000240030008c00000b9b0000413d0000000002000416000000000002004b00000b9b0000c13d0000000401100370000000000101043b0cb20c520000040f000000400200043d00000000001204350000032e0020009c0000032e02008041000000400120021000000382011001c700000cb30001042e0000000001000416000000000001004b00000b9b0000c13d0000000301000039000000000101041a0000035701100197000000800010043f000003560100004100000cb30001042e00000355010000410000000c0010043f0000000001000411000000000010043f00000000010004140000032e0010009c0000032e01008041000000c0011002100000036f011001c700008010020000390cb20cad0000040f000000010020019000000b9b0000613d000000000101043b000000000001041b00000000010004140000032e0010009c0000032e01008041000000c00110021000000333011001c70000800d0200003900000002030000390000039504000041000005b40000013d000000440030008c00000b9b0000413d0000000002000416000000000002004b00000b9b0000c13d0000000402100370000000000202043b000c00000002001d000003570020009c00000b9b0000213d0000002401100370000000000101043b000b00000001001d000003570010009c00000b9b0000213d0000033201000041000000000101041a0000000002000411000000000012004b000005f60000c13d0000000301000039000900000001001d000000000201041a00000357032001970000000c0030006c0000081f0000c13d0000000b010000290000035703100197000a00000002001d00000040012002700000035701100197000700000003001d000800000001001d000000000031004b000005b80000613d0000035801000041000000000010044300000000010004140000032e0010009c0000032e01008041000000c00110021000000359011001c70000800b020000390cb20cad0000040f000000010020019000000b9d0000613d00000000020004150000000e0220008a0000000502200210000000000101043b0000000803000029000000000031004b000004d70000a13d00000000020004150000000d0220008a0000000502200210000000000003004b000008310000c13d00000007030000290000000c0030006c0000000501200270000000000100003f000000010100403f000008310000413d0000000a0100002900000372011001970000000b0200002900000040022002100000037302200197000000000221019f0000000901000029000000000021041b000000000100001900000cb30001042e000000240030008c00000b9b0000413d0000000401100370000000000101043b000c00000001001d000003310010009c00000b9b0000213d0000033201000041000000000101041a0000000002000411000000000012004b000005f60000c13d00000355010000410000000c0010043f0000000c01000029000000000010043f00000000010004140000032e0010009c0000032e01008041000000c0011002100000036f011001c700008010020000390cb20cad0000040f000000010020019000000b9b0000613d000000000101043b000a00000001001d000000000101041a000b00000001001d0000035801000041000000000010044300000000010004140000032e0010009c0000032e01008041000000c00110021000000359011001c70000800b020000390cb20cad0000040f000000010020019000000b9d0000613d000000000101043b0000000b0010006c000008390000a13d0000037001000041000000000010043f0000036e0100004100000cb400010430000000240030008c00000b9b0000413d0000000002000416000000000002004b00000b9b0000c13d0000000401100370000000000101043b000c00000001001d000003310010009c00000b9b0000213d0000033201000041000000000101041a0000000002000411000000000012004b000005f60000c13d0000039901000041000000800010043f0000000001000410000000840010043f00000000010004140000032e0010009c0000032e01008041000000c0011002100000039a011001c700000389020000410cb20ca80000040f00000060031002700000032e03300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf0000053f0000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b0000053b0000c13d000000000006004b0000054c0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f000000000065043500000001002001900000076e0000613d0000001f01400039000000600110018f00000080021001bf000b00000002001d000000400020043f000000200030008c00000b9b0000413d000000800200043d00000387030000410000000b05000029000000000035043500000084031001bf0000000c040000290000000000430435000000a401100039000000000021043500000000010004140000032e0010009c0000032e01008041000000c0011002100000004002500210000000000121019f00000388011001c700000389020000410cb20ca80000040f00000060031002700000032e03300197000000200030008c000000200a000039000000000a0340190000001f05a0018f0000002006a001900000000b04600029000005760000613d000000000701034f0000000b08000029000000007907043c0000000008980436000000000048004b000005720000c13d000000000005004b000005830000613d000000000661034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f000000000054043500000001002001900000083f0000613d0000000b0100002900000000020a0019000c0000000a001d0cb20c320000040f0000000b010000290000000c021000290cb20c440000040f000000000100001900000cb30001042e00000355010000410000000c0010043f0000000001000411000000000010043f0000035801000041000000000010044300000000010004140000032e0010009c0000032e01008041000000c00110021000000359011001c70000800b020000390cb20cad0000040f000000010020019000000b9d0000613d000000000101043b000c00000001001d00000000010004140000032e0010009c0000032e01008041000000c0011002100000036f011001c700008010020000390cb20cad0000040f000000010020019000000b9b0000613d000000000101043b0000000c02000029000003960220009a000000000021041b00000000010004140000032e0010009c0000032e01008041000000c00110021000000333011001c70000800d020000390000000203000039000003970400004100000000050004110cb20ca80000040f000000010020019000000b9b0000613d000000000100001900000cb30001042e0000000001000416000000000001004b00000b9b0000c13d0000000301000039000000000101041a0000035a001001980000000001000039000000010100c039000000800010043f000003560100004100000cb30001042e000000240030008c00000b9b0000413d0000000002000416000000000002004b00000b9b0000c13d0000000402100370000000000202043b000003570020009c00000b9b0000213d0000002304200039000000000034004b00000b9b0000813d0000000404200039000000000441034f000000000504043b000003570050009c000005db0000213d00000005045002100000003f064000390000037506600197000003760060009c0000078c0000a13d0000037701000041000000000010043f0000004101000039000000040010043f0000035c0100004100000cb4000104300000033201000041000000000101041a0000000005000411000000000015004b000005f60000c13d00000000010004140000032e0010009c0000032e01008041000000c00110021000000333011001c70000800d020000390000000303000039000003340400004100000000060000190cb20ca80000040f000000010020019000000b9b0000613d0000033201000041000000000001041b000000000100001900000cb30001042e0000039801000041000000000010043f0000036e0100004100000cb4000104300000000001000416000000000001004b00000b9b0000c13d0000033201000041000000000101041a0000033101100197000000800010043f000003560100004100000cb30001042e000000240030008c00000b9b0000413d0000000002000416000000000002004b00000b9b0000c13d0000000401100370000000000101043b000000000010043f0000000101000039000000200010043f000000400200003900000000010000190cb20c930000040f000000000101041a000000800010043f000003560100004100000cb30001042e000000240030008c00000b9b0000413d0000000002000416000000000002004b00000b9b0000c13d0000000402100370000000000202043b000003570020009c00000b9b0000213d0000002304200039000000000034004b00000b9b0000813d0000000404200039000000000141034f000000000101043b000500000001001d000003570010009c00000b9b0000213d000400240020003d000000050100002900000005011002100000000401100029000000000031004b00000b9b0000213d0000000301000039000000000101041a000c00000001001d0000035801000041000000000010044300000000010004140000032e0010009c0000032e01008041000000c00110021000000359011001c70000800b020000390cb20cad0000040f000000010020019000000b9d0000613d000000000201043b0000000c0300002900000040013002700000035701100197000000000012004b000008350000813d0000035701300197000000000012004b000008350000413d000800000002001d0000035a00300198000007660000c13d000000050000006b000005b80000613d000000080100002900030034001002180000000001000410000203310010019b000a00000000001d0000000a01000029000000050110021000000004011000290000000001100367000000000201043b000000400300043d000b00000003001d0000035b0100004100000000001304350000000401300039000c00000002001d00000000002104350000032e0030009c0000032e010000410000000001034019000000400110021000000000020004140000032e0020009c0000032e02008041000000c002200210000000000112019f0000035c011001c70000035d020000410cb20cad0000040f0000000b0a00002900000060031002700000032e03300197000000200030008c00000020040000390000000004034019000000200640019000000000056a0019000006740000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000058004b000006700000c13d0000001f07400190000006810000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000000010020019000000bca0000613d0000001f01400039000000600110018f0000000004a10019000000000014004b00000000010000390000000101004039000003570040009c000005db0000213d0000000100100190000005db0000c13d000000400040043f000000200030008c00000b9b0000413d00000000010a0433000b00000001001d000003310010009c00000b9b0000213d00000000010004110000000b02000029000000000012004b0009006000200218000006de0000613d0000035e01000041000000000101041a00000060024000390000035d03000041000000000032043500000080024000390000000c030000290000000000320435000000000200041100000060022002100000002c0340003900000000002304350000000c024000390000035f0300004100000000003204350000004c0240003900000009030000290000000000320435000000a0024000390000000000020435000003310110019800000000020000190000036002006041000000000212019f000003610040009c00000361010000410000000001044019000000400110021000000000030004140000032e0030009c0000032e03008041000000c003300210000000000131019f000003620110009a000700000004001d0cb20cad0000040f000000070900002900000060031002700000032e05300197000000200050008c000000200500803900000020045001900000000003490019000006cb0000613d000000000601034f0000000007090019000000006806043c0000000007870436000000000037004b000006c70000c13d0000001f05500190000006d80000613d000000000141034f0000000304500210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000003ad012001670000000002090433000000010020008c000000010110c1bf000000010010019000000b460000c13d0000000c01000029000000000010043f0000000101000039000000200010043f00000000010004140000032e0010009c0000032e01008041000000c00110021000000363011001c700008010020000390cb20cad0000040f000000010020019000000b9b0000613d000000000101043b000000000101041a000600000001001d0000036401100197000700000001001d000003640010009c00000bd60000613d0000000c01000029000000000010043f0000000101000039000000200010043f00000000010004140000032e0010009c0000032e01008041000000c00110021000000363011001c700008010020000390cb20cad0000040f000000010020019000000b9b0000613d0000000602000029000000ff0220018f000000010020008c000000010200a03900000003022001af00000009022001af00000007022001af000000000101043b000000000021041b0000000c01000029000000000010043f0000000201000039000000200010043f00000000010004140000032e0010009c0000032e01008041000000c00110021000000363011001c700008010020000390cb20cad0000040f000000010020019000000b9b0000613d000000000101043b0000000802000029000000000021041b000003650100004100000000001004430000035d01000041000000040010044300000000010004140000032e0010009c0000032e01008041000000c00110021000000366011001c700008002020000390cb20cad0000040f000000010020019000000b9d0000613d000000000101043b000000000001004b00000b9b0000613d000000400300043d00000044013000390000000c02000029000000000021043500000024013000390000000202000029000000000021043500000367010000410000000001130436000600000001001d00000004013000390000000b0200002900000000002104350000032e0030009c000900000003001d0000032e010000410000000001034019000700400010021800000000010004140000032e0010009c0000032e01008041000000c00110021000000007011001af00000368011001c70000035d020000410cb20ca80000040f000000010020019000000bda0000613d0000000903000029000003570030009c000005db0000213d000000400030043f0000004001300039000000080200002900000000002104350000000c01000029000000060200002900000000001204350000000b01000029000000000013043500000000010004140000032e0010009c0000032e01008041000000c00110021000000007011001af00000369011001c70000800d0200003900000001030000390000036a040000410cb20ca80000040f000000010020019000000b9b0000613d0000000a020000290000000102200039000a00000002001d000000050020006c0000064d0000413d000005b80000013d0000038b01000041000000000010043f0000036c0100004100000cb400010430000003a901000041000000000010043f0000036c0100004100000cb4000104300000038d01000041000000000010043f0000036c0100004100000cb4000104300000001f0530018f0000033006300198000000400200043d0000000004620019000007790000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000007750000c13d000000000005004b000007860000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f000000000014043500000060013002100000032e0020009c0000032e020080410000004002200210000000000112019f00000cb4000104300000008006600039000000400060043f000000800050043f00000024022000390000000004240019000000000034004b00000b9b0000213d000000000005004b0000079c0000613d000000a003000039000000000521034f000000000505043b00000000035304360000002002200039000000000042004b000007960000413d0000000301000039000000000101041a0000035a001001980000084b0000c13d0000037c01000041000000000010043f0000036c0100004100000cb400010430000b00000001001d0000000c01000029000000000010043f000000200000043f00000000010004140000032e0010009c0000032e01008041000000c00110021000000363011001c700008010020000390cb20cad0000040f000000010020019000000b9b0000613d000000000101043b000000000201041a0000038c022001c7000000000021041b0000000b0100002900000008011002700000038f01100197000a00000001001d000000000010043f0000000101000039000000200010043f00000000010004140000032e0010009c0000032e01008041000000c00110021000000363011001c700008010020000390cb20cad0000040f000000010020019000000b9b0000613d000000000101043b000000000101041a000900000001001d000000400100043d00000020021000390000000c03000029000000000032043500000024030000390000000003300367000000000303043b0000004004100039000000000034043500000040030000390000000000310435000003900010009c000005db0000213d0000006003100039000000400030043f0000032e0020009c0000032e02008041000000400220021000000000010104330000032e0010009c0000032e010080410000006001100210000000000121019f00000000020004140000032e0020009c0000032e02008041000000c002200210000000000112019f00000333011001c700008010020000390cb20cad0000040f000000010020019000000b9b0000613d0000000b03000029000000360230027000000331052001970000000902000029000000ff0220018f000000000101043b000000ff0330018f000000010030008c00000b4e0000c13d000000400300043d0000000a0400002900000000044304360000000000240435000000020110018f0000000002210019000000450020008c00000045020080390000004001300039000c00000002001d00000000002104350000032e0030009c0000032e03008041000000400130021000000000020004140000032e0020009c0000032e02008041000000c002200210000000000112019f00000369011001c70000800d02000039000000020300003900000393040000410cb20ca80000040f000000010020019000000b9b0000613d0000000a01000029000000000010043f0000000101000039000000200010043f0000035801000041000000000010044300000000010004140000032e0010009c0000032e01008041000000c00110021000000359011001c70000800b020000390cb20cad0000040f000000010020019000000b9d0000613d000000000101043b000b00000001001d000000000100041400000b8d0000013d000800000003001d000a00000002001d0000035801000041000000000010044300000000010004140000032e0010009c0000032e01008041000000c00110021000000359011001c70000800b020000390cb20cad0000040f000000010020019000000b9d0000613d000000000101043b0000000802000029000000010220008a000000000012004b0000092d0000813d0000037d01000041000000000010043f0000036c0100004100000cb400010430000003a801000041000000000010043f0000036c0100004100000cb4000104300000000a01000029000000000001041b0000000c010000290cb20c7c0000040f000000000100001900000cb30001042e0000001f0530018f0000033006300198000000400200043d0000000004620019000007790000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000008460000c13d000007790000013d000000800100043d000800000001001d000000000001004b000005b80000613d0000000001000410000703310010019b000b00000000001d000000800100043d0000000b02000029000000000012004b00000bab0000813d0000000501200210000000a0011000390000000001010433000c00000001001d000000000010043f0000000101000039000000200010043f00000000010004140000032e0010009c0000032e01008041000000c00110021000000363011001c700008010020000390cb20cad0000040f000000010020019000000b9b0000613d000000000101043b000000000101041a000a00600010027800000000020004110000000a0020006b000008b20000613d0000035e02000041000000000202041a000000400500043d000900000005001d00000060035000390000035d04000041000000000043043500000080035000390000000c040000290000000000430435000000000300041100000060033002100000002c0450003900000000003404350000000c035000390000035f04000041000000000043043500000378011001970000004c035000390000000000130435000000a0015000390000000000010435000003310120019800000000020000190000036002006041000000000212019f0000001c015000390000032e0010009c0000032e01008041000000400110021000000000030004140000032e0030009c0000032e03008041000000c003300210000000000113019f00000379011001c70cb20cad0000040f000000090900002900000060031002700000032e05300197000000200050008c0000002005008039000000200450019000000000034900190000089f0000613d000000000601034f0000000007090019000000006806043c0000000007870436000000000037004b0000089b0000c13d0000001f05500190000008ac0000613d000000000141034f0000000304500210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000003ad012001670000000002090433000000010020008c000000010110c1bf000000010010019000000b460000c13d0000000c01000029000000000010043f0000000101000039000000200010043f00000000010004140000032e0010009c0000032e01008041000000c00110021000000363011001c700008010020000390cb20cad0000040f000000010020019000000b9b0000613d000000000101043b000000000101041a000900000001001d0000000c01000029000000000010043f0000000101000039000000200010043f00000000010004140000032e0010009c0000032e01008041000000c00110021000000363011001c700008010020000390cb20cad0000040f000000010020019000000b9b0000613d000000000101043b00000009020000290000037a02200197000000000021041b000000400100043d000900000001001d0000035801000041000000000010044300000000010004140000032e0010009c0000032e01008041000000c00110021000000359011001c70000800b020000390cb20cad0000040f000000010020019000000b9d0000613d000000000101043b00000009030000290000004002300039000000000012043500000020013000390000000c0200002900000000002104350000000a0100002900000000001304350000032e0030009c0000032e03008041000000400130021000000000020004140000032e0020009c0000032e02008041000000c002200210000000000112019f00000369011001c70000800d0200003900000001030000390000037b040000410cb20ca80000040f000000010020019000000b9b0000613d000003650100004100000000001004430000035d01000041000000040010044300000000010004140000032e0010009c0000032e01008041000000c00110021000000366011001c700008002020000390cb20cad0000040f000000010020019000000b9d0000613d000000000101043b000000000001004b00000b9b0000613d000000400300043d00000044013000390000000c02000029000000000021043500000024013000390000000a020000290000000000210435000003670100004100000000001304350000000401300039000000070200002900000000002104350000032e0030009c000c00000003001d0000032e010000410000000001034019000000400110021000000000020004140000032e0020009c0000032e02008041000000c002200210000000000112019f00000368011001c70000035d020000410cb20ca80000040f000000010020019000000bb10000613d0000000c01000029000003570010009c0000000b02000029000005db0000213d000000400010043f0000000102200039000b00000002001d000000080020006c000008520000413d000005b80000013d0000000a0100002900000371011001970000000c021001af0000000301000039000000000021041b000004b70000013d000000040000006b000005b80000613d0000000001000410000203310010019b000a00000000001d0000000a01000029000000050110021000000003011000290000000001100367000000000201043b000000400300043d000b00000003001d0000035b0100004100000000001304350000000401300039000c00000002001d00000000002104350000032e0030009c0000032e010000410000000001034019000000400110021000000000020004140000032e0020009c0000032e02008041000000c002200210000000000112019f0000035c011001c70000035d020000410cb20cad0000040f0000000b0a00002900000060031002700000032e03300197000000200030008c00000020040000390000000004034019000000200640019000000000056a00190000095f0000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000058004b0000095b0000c13d0000001f074001900000096c0000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000000010020019000000c020000613d0000001f01400039000000600110018f0000000004a10019000000000014004b00000000010000390000000101004039000003570040009c000005db0000213d0000000100100190000005db0000c13d000000400040043f000000200030008c00000b9b0000413d00000000010a0433000b00000001001d000003310010009c00000b9b0000213d00000000010004110000000b0010006b00000a0e0000613d0000035e01000041000000000101041a00000060024000390000035d03000041000000000032043500000080024000390000000c0300002900000000003204350000000c024000390000035f030000410000000000320435000000000200041100000060032002100000002c02400039000600000003001d00000000003204350000000b0200002900000060032002100000004c02400039000800000003001d0000000000320435000000a0024000390000000000020435000003310110019800000000020000190000036002006041000000000212019f000003610040009c00000361010000410000000001044019000000400110021000000000030004140000032e0030009c0000032e03008041000000c003300210000000000131019f000003620110009a000900000004001d0cb20cad0000040f000000090900002900000060031002700000032e05300197000000200050008c000000200500803900000020045001900000000003490019000009b70000613d000000000601034f0000000007090019000000006806043c0000000007870436000000000037004b000009b30000c13d0000001f05500190000009c40000613d000000000141034f0000000304500210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000000001090433000000010010008c00000000010000390000000101006039000000000112016f000000010010019000000b460000613d0000035e01000041000000000101041a000000400400043d000900000004001d0000006002400039000003890300004100000000003204350000002c02400039000000060300002900000000003204350000000c024000390000039b0300004100000000003204350000004c024000390000000803000029000000000032043500000080024000390000000000020435000003310110019800000000020000190000036002006041000000000212019f0000001c014000390000032e0010009c0000032e01008041000000400110021000000000030004140000032e0030009c0000032e03008041000000c003300210000000000113019f0000039c011001c70cb20cad0000040f000000090900002900000060031002700000032e05300197000000200050008c000000200500803900000020045001900000000003490019000009fa0000613d000000000601034f0000000007090019000000006806043c0000000007870436000000000037004b000009f60000c13d0000001f0550019000000a070000613d000000000141034f0000000304500210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000000001090433000000010010008c00000000010000390000000101006039000000000112016f000000010010019000000b460000613d0000000c01000029000000000010043f0000000101000039000000200010043f00000000010004140000032e0010009c0000032e01008041000000c00110021000000363011001c700008010020000390cb20cad0000040f000000010020019000000b9b0000613d000000000101043b000000000101041a000000ff0210019000000c0e0000613d000000450020008c00000c120000613d000600000002001d000900000001001d0000039f0010009c00000c160000813d0000035801000041000000000010044300000000010004140000032e0010009c0000032e01008041000000c00110021000000359011001c70000800b020000390cb20cad0000040f000000010020019000000b9d0000613d00000009020000290000000802200270000003a102200197000000000301043b000000000123004b00000b400000413d000500000003001d0000a8c10010008c00000b4a0000413d0000000c01000029000000000010043f0000000101000039000000200010043f00000000010004140000032e0010009c0000032e01008041000000c00110021000000363011001c700008010020000390cb20cad0000040f000000010020019000000b9b0000613d000000000101043b000000000101041a000000400400043d000800000004001d0000002402400039000000020300002900000000003204350000036702000041000000000024043500000004024000390000000b030000290000000000320435000000ff0110018f000000140210003900000383011000d100000000012100d9000000440240003900000000001204350000032e0040009c0000032e010000410000000001044019000000400110021000000000020004140000032e0020009c0000032e02008041000000c002200210000000000112019f00000368011001c700000389020000410cb20ca80000040f000000080a00002900000060031002700000032e03300197000000200030008c00000020040000390000000004034019000000200640019000000000056a001900000a730000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000058004b00000a6f0000c13d0000001f0740019000000a800000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000000010020019000000c1a0000613d0000001f01400039000000600110018f0000000004a10019000000000014004b00000000010000390000000101004039000003570040009c000005db0000213d0000000100100190000005db0000c13d000000400040043f000000200030008c00000b9b0000413d00000000010a0433000000000001004b0000000002000039000000010200c039000000000021004b00000b9b0000c13d000000070000006b00000b0f0000613d000003a2010000410000000000140435000000040140003900000000000104350000032e0040009c0000032e010000410000000001044019000000400110021000000000020004140000032e0020009c0000032e02008041000000c002200210000000000112019f0000035c011001c70000038a02000041000800000004001d0cb20ca80000040f000000080a00002900000060031002700000032e03300197000000200030008c00000020040000390000000004034019000000200640019000000000056a001900000ab70000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000058004b00000ab30000c13d0000001f0740019000000ac40000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000000010020019000000c260000613d0000001f01400039000000600110018f0000000001a10019000003570010009c000005db0000213d000000400010043f000000200030008c00000b9b0000413d0000000301000039000000000101041a000600000001001d00000000010a0433000000000010043f000000200000043f00000000010004140000032e0010009c0000032e01008041000000c00110021000000363011001c700008010020000390cb20cad0000040f000000010020019000000b9b0000613d0000000b0200002900000036022002100000000c040000290000000803400210000000000223019f00000006030000290000001603300210000003a303300197000000000232019f00000001022001af0000038e022001c7000000000101043b000000000021041b000000000040043f0000000101000039000000200010043f00000000010004140000032e0010009c0000032e01008041000000c00110021000000363011001c700008010020000390cb20cad0000040f000000010020019000000b9b0000613d000000000101043b000000090200002900000364022001c7000000000021041b000000400100043d000000070200002900000000002104350000032e0010009c0000032e01008041000000400110021000000000020004140000032e0020009c0000032e02008041000000c002200210000000000112019f000003a4011001c70000800d020000390000000303000039000003a5040000410000000b050000290000000c060000290cb20ca80000040f000000010020019000000b3a0000c13d00000b9b0000013d0000000c01000029000000000010043f0000000101000039000000200010043f00000000010004140000032e0010009c0000032e01008041000000c00110021000000363011001c700008010020000390cb20cad0000040f000000010020019000000b9b0000613d0000000502000029000000080220021000000006040000290000000103400039000000000232019f000000000101043b000000000021041b000000400100043d00000040021000390000000000320435000000200210003900000000004204350000000c0200002900000000002104350000032e0010009c0000032e01008041000000400110021000000000020004140000032e0020009c0000032e02008041000000c002200210000000000112019f00000369011001c70000800d020000390000000203000039000003a6040000410000000b050000290cb20ca80000040f000000010020019000000b9b0000613d0000000a020000290000000102200039000a00000002001d000000040020006c000009380000413d000005b80000013d0000037701000041000000000010043f0000001101000039000000040010043f0000035c0100004100000cb400010430000003aa01000041000000000010043f0000036c0100004100000cb400010430000003ab01000041000000000010043f0000036c0100004100000cb400010430000000641010011a0000000b03000029000000d6033002700000039103300197000000000600001900000000070000190000000004070019000000000773022f000000ff0770018f000000ff0040008c000000000700201900000000066700190000000807400039000000000061004b00000b540000813d000000400100043d00000020031000390000000000230435000000030340027000000000023200190000000a030000290000000000310435000000010320008a000000450030008c0000004503008039000000010030008c000000010300a0390000004002100039000c00000003001d00000000003204350000032e0010009c0000032e01008041000000400110021000000000020004140000032e0020009c0000032e02008041000000c002200210000000000112019f00000369011001c70000800d02000039000000020300003900000392040000410cb20ca80000040f000000010020019000000b9b0000613d0000000a01000029000000000010043f0000000101000039000000200010043f0000035801000041000000000010044300000000010004140000032e0010009c0000032e01008041000000c00110021000000359011001c70000800b020000390cb20cad0000040f000000010020019000000b9d0000613d000000000101043b000b00000001001d00000000010004140000032e0010009c0000032e01008041000000c00110021000000363011001c700008010020000390cb20cad0000040f000000010020019000000b9b0000613d0000000b0200002900000008022002100000000c022001af000000000101043b000900000001001d000004e30000013d000000000100001900000cb400010430000000000001042f00000060061002700000001f0460018f0000033005600198000000400200043d000000000352001900000be60000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000ba60000c13d00000be60000013d0000037701000041000000000010043f0000003201000039000000040010043f0000035c0100004100000cb40001043000000060061002700000001f0460018f0000033005600198000000400200043d000000000352001900000be60000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000bb90000c13d00000be60000013d0000001f0530018f0000033006300198000000400200043d0000000004620019000007790000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000bc50000c13d000007790000013d0000001f0530018f0000033006300198000000400200043d0000000004620019000007790000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000bd10000c13d000007790000013d0000036b01000041000000000010043f0000036c0100004100000cb40001043000000060061002700000001f0460018f0000033005600198000000400200043d000000000352001900000be60000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000be20000c13d0000032e06600197000000000004004b00000bf40000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000006001600210000007870000013d0000001f0530018f0000033006300198000000400200043d0000000004620019000007790000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000bfd0000c13d000007790000013d0000001f0530018f0000033006300198000000400200043d0000000004620019000007790000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000c090000c13d000007790000013d0000039d01000041000000000010043f0000036c0100004100000cb4000104300000039e01000041000000000010043f0000036c0100004100000cb400010430000003a001000041000000000010043f0000036c0100004100000cb4000104300000001f0530018f0000033006300198000000400200043d0000000004620019000007790000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000c210000c13d000007790000013d0000001f0530018f0000033006300198000000400200043d0000000004620019000007790000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000c2d0000c13d000007790000013d0000001f02200039000003ae022001970000000001120019000000000021004b00000000020000390000000102004039000003570010009c00000c3e0000213d000000010020019000000c3e0000c13d000000400010043f000000000001042d0000037701000041000000000010043f0000004101000039000000040010043f0000035c0100004100000cb4000104300000000002120049000003af0020009c00000c500000213d0000001f0020008c00000c500000a13d0000000001010433000000000001004b0000000002000039000000010200c039000000000021004b00000c500000c13d000000000001042d000000000100001900000cb400010430000000000010043f0000000101000039000000200010043f00000000010004140000032e0010009c0000032e01008041000000c00110021000000363011001c700008010020000390cb20cad0000040f000000010020019000000c6a0000613d000000000101043b000000000101041a000000ff0110019000000383021000d100000c670000613d000007d0031000c900000000033200d9000003840030009c00000c6c0000c13d000000140110003900000000011200d9000000000001042d000000000100001900000cb4000104300000037701000041000000000010043f0000001101000039000000040010043f0000035c0100004100000cb4000104300000033201000041000000000101041a0000000002000411000000000012004b00000c780000c13d000000000001042d0000039801000041000000000010043f0000036e0100004100000cb40001043000010000000000020000033202000041000000000502041a000000000200041400000331061001970000032e0020009c0000032e02008041000000c00120021000000333011001c70000800d0200003900000003030000390000033404000041000100000006001d0cb20ca80000040f000000010020019000000c900000613d00000332010000410000000102000029000000000021041b000000000001042d000000000100001900000cb400010430000000000001042f0000032e0010009c0000032e0100804100000040011002100000032e0020009c0000032e020080410000006002200210000000000112019f00000000020004140000032e0020009c0000032e02008041000000c002200210000000000112019f00000333011001c700008010020000390cb20cad0000040f000000010020019000000ca60000613d000000000101043b000000000001042d000000000100001900000cb40001043000000cab002104210000000102000039000000000001042d0000000002000019000000000001042d00000cb0002104230000000102000039000000000001042d0000000002000019000000000001042d00000cb20000043200000cb30001042e00000cb40001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392702000000000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000925489a700000000000000000000000000000000000000000000000000000000e147243900000000000000000000000000000000000000000000000000000000f3388ee200000000000000000000000000000000000000000000000000000000f3388ee300000000000000000000000000000000000000000000000000000000fe939afc00000000000000000000000000000000000000000000000000000000fee81cf400000000000000000000000000000000000000000000000000000000e147243a00000000000000000000000000000000000000000000000000000000f04e283e00000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000b187bd2500000000000000000000000000000000000000000000000000000000b187bd2600000000000000000000000000000000000000000000000000000000bf0e5b9500000000000000000000000000000000000000000000000000000000d19e74a700000000000000000000000000000000000000000000000000000000925489a800000000000000000000000000000000000000000000000000000000a49c3f6400000000000000000000000000000000000000000000000000000000a9bda858000000000000000000000000000000000000000000000000000000004ccabce700000000000000000000000000000000000000000000000000000000715018a500000000000000000000000000000000000000000000000000000000715018a6000000000000000000000000000000000000000000000000000000008da5cb5b000000000000000000000000000000000000000000000000000000008f561acc000000000000000000000000000000000000000000000000000000004ccabce80000000000000000000000000000000000000000000000000000000054d1f13d000000000000000000000000000000000000000000000000000000005c1154b0000000000000000000000000000000000000000000000000000000001ac3ddea000000000000000000000000000000000000000000000000000000001ac3ddeb0000000000000000000000000000000000000000000000000000000025692962000000000000000000000000000000000000000000000000000000002ae9b92f0000000000000000000000000000000000000000000000000000000002c2d378000000000000000000000000000000000000000000000000000000000d50c189000000000000000000000000000000000000000000000000000000001228f55500000000000000000000000000000000000000000000000000000000389a75e10000000000000000000000000000000000000020000000800000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d9553913202000002000000000000000000000000000000040000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000000000006352211e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000007c47ea32fd27d1a74fc6e9f31ce8162e6ce070eb04ecb0522ab37ca0b278a89c6884dfdbcde83c177150fc939ab02e069068bdef00000000000000000000000000000000b9f368740000000000000000000000000000000000000000000000000000000059a24eb229eed07ac44229db56c5d79700000000000000000000000000000000000000000000000000000000ffffffe3ffffffffffffffffffffffffffffffffffffff5bffffffe400000000000000000200000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffff001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000023b872dd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006400000000000000000000000002000000000000000000000000000000000000600000000000000000000000001449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee90f48bc120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000007448fbae00000000000000000000000000000000000000040000001c000000000000000002000000000000000000000000000000000000200000000c0000000000000000000000000000000000000000000000000000000000000000000000006f5e8818ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff00000000000000000000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff7f4e487b7100000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000a4000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffff7fc4727e062e336010f2c282598ef5f14facb3de68cf8195c2f23e1454b2b74ea45f47fd000000000000000000000000000000000000000000000000000000003d693ada00000000000000000000000000000000000000000000000000000000000000ffffffffff000000000000000000000000000000000000000000000000ffffff0000000000ffffffffffffffffffffffffffffffffffffffffffffffff02000000000000000000000000000000000000a0000000800000000000000000180b97b35ce46133f993779fee7f244de0b27896299ea4943f445d4bbd79931e000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000006c6b935b8bbd4000000000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000151809cdcf2f7714cca3508c7f0110b04a90a80a3a8dd0e35de99689db74d28c5383ea9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000033ee11ce309854a45b65368c078616abcb5c6e3d000000000000000000000000bdc8b6eb1840215a22fc1134046f595b7d42c2de82b429000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000004a4117f900000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003fffffffffff000000000000000000000000000000000000000000000000ffffffffffffff9f000000000000000000000000000000000000000000000000000000ffffffffffccc6ac05762b455dbab58ae589940712720fd28dbcb6262a741c1681e4d8406a21964768aefca4775352e6b0c5935a1e5d7f0189faf7fc5637a267b3891f62a1f9fbb6c000000000000000000000000000000000000000000000000000000000fa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d00dbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d0000000000000000000000000000000000000000000000000000000082b4290070a08231000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000800000000000000000000000000000000000000000000000008988eea90000000000000000000000000000000000000000000000000000000000000084000000000000000000000000f8eb54de00000000000000000000000000000000000000000000000000000000921c7d5f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000ecaa4880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffe3914472000000000000000000000000000000000000000000000000000000003fffffffffc000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000020000000000000000000000000b1e4d0cace0f62ae74ea2fa522dcad1736dba8347c70f0144736275ec6d644609c1ccdc91bf8cfe9ff410fa78f489a2cfd882132809cf9779293003b043a9e302400dba000000000000000000000000000000000000000000000000000000000e0bbc9fb000000000000000000000000000000000000000000000000000000009e87fac800000000000000000000000000000000000000000000000000000000eab52f840000000000000000000000000000000000000000000000000000000033e0294c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000001200000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e6bdba5e07fecfbba88aa700ab18f5c0e5b551cf06c0b26814d46500acc05b3

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000001b2c84dd7957b1e207cd7b01ded77984ec16fdef

-----Decoded View---------------
Arg [0] : _owner (address): 0x1B2C84dd7957b1e207Cd7b01Ded77984eC16fDEf

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000001b2c84dd7957b1e207cd7b01ded77984ec16fdef


Block Transaction Gas Used Reward
view all blocks produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.