APE Price: $0.14 (-15.94%)

Contract

0x8ad43087850d844F32901739B0bB6189EB824651

Overview

APE Balance

Apechain LogoApechain LogoApechain Logo3.528 APE

APE Value

$0.50 (@ $0.14/APE)

More Info

Private Name Tags

Multichain Info

N/A
Transaction Hash
Block
From
To
Play194583442025-07-18 4:16:43197 days ago1752812203IN
0x8ad43087...9EB824651
10.02 APE0.01550125.42069
Play194583122025-07-18 4:15:55197 days ago1752812155IN
0x8ad43087...9EB824651
5.02 APE0.0153852825.42069
Play194582942025-07-18 4:15:27197 days ago1752812127IN
0x8ad43087...9EB824651
5.02 APE0.0153852825.42069
Play194582722025-07-18 4:15:02197 days ago1752812102IN
0x8ad43087...9EB824651
5.02 APE0.0170559625.42069
Set Partner Fee ...194581252025-07-18 4:09:43197 days ago1752811783IN
0x8ad43087...9EB824651
0 APE0.000813225.42069
Set Partner Addr...194581232025-07-18 4:09:37197 days ago1752811777IN
0x8ad43087...9EB824651
0 APE0.0012572525.42069
Play194543372025-07-18 1:30:46197 days ago1752802246IN
0x8ad43087...9EB824651
5.02 APE0.0151925.42069
Play194542882025-07-18 1:28:47197 days ago1752802127IN
0x8ad43087...9EB824651
5.02 APE0.0151899825.42069
Play193820192025-07-16 7:03:54199 days ago1752649434IN
0x8ad43087...9EB824651
6.02 APE0.0149871225.42069
Play193820062025-07-16 7:03:35199 days ago1752649415IN
0x8ad43087...9EB824651
10.02 APE0.0149292625.42069
Play193819482025-07-16 7:01:51199 days ago1752649311IN
0x8ad43087...9EB824651
10.02 APE0.0159722225.42069
Play193646462025-07-15 19:20:57200 days ago1752607257IN
0x8ad43087...9EB824651
2.02 APE0.0151028125.42069
Play193645752025-07-15 19:18:24200 days ago1752607104IN
0x8ad43087...9EB824651
2.02 APE0.0151028125.42069
Play193430802025-07-15 8:43:48200 days ago1752569028IN
0x8ad43087...9EB824651
2.02 APE0.0148135225.42069
Play193429222025-07-15 8:40:08200 days ago1752568808IN
0x8ad43087...9EB824651
5.02 APE0.0164066125.42069

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
194583452025-07-18 4:16:45197 days ago1752812205
0x8ad43087...9EB824651
0.66416666 APE
194583452025-07-18 4:16:45197 days ago1752812205
0x8ad43087...9EB824651
9.17583333 APE
194583442025-07-18 4:16:43197 days ago1752812203
0x8ad43087...9EB824651
0.02 APE
194583442025-07-18 4:16:43197 days ago1752812203
0x8ad43087...9EB824651
0.16 APE
194583442025-07-18 4:16:43197 days ago1752812203
0x8ad43087...9EB824651
0.0528 APE
194583442025-07-18 4:16:43197 days ago1752812203
0x8ad43087...9EB824651
0.1072 APE
194583362025-07-18 4:16:26197 days ago1752812186
0x8ad43087...9EB824651
4.92 APE
194583352025-07-18 4:16:25197 days ago1752812185
0x8ad43087...9EB824651
0.02 APE
194583352025-07-18 4:16:25197 days ago1752812185
0x8ad43087...9EB824651
0.08 APE
194583352025-07-18 4:16:25197 days ago1752812185
0x8ad43087...9EB824651
0.0264 APE
194583352025-07-18 4:16:25197 days ago1752812185
0x8ad43087...9EB824651
0.0536 APE
194583352025-07-18 4:16:25197 days ago1752812185
0x8ad43087...9EB824651
5.02 APE
194583282025-07-18 4:16:11197 days ago1752812171
0x8ad43087...9EB824651
4.92 APE
194583242025-07-18 4:16:08197 days ago1752812168
0x8ad43087...9EB824651
0.02 APE
194583242025-07-18 4:16:08197 days ago1752812168
0x8ad43087...9EB824651
0.08 APE
194583242025-07-18 4:16:08197 days ago1752812168
0x8ad43087...9EB824651
0.0264 APE
194583242025-07-18 4:16:08197 days ago1752812168
0x8ad43087...9EB824651
0.0536 APE
194583242025-07-18 4:16:08197 days ago1752812168
0x8ad43087...9EB824651
5.02 APE
194583152025-07-18 4:15:56197 days ago1752812156
0x8ad43087...9EB824651
0.03458333 APE
194583152025-07-18 4:15:56197 days ago1752812156
0x8ad43087...9EB824651
4.88541666 APE
194583122025-07-18 4:15:55197 days ago1752812155
0x8ad43087...9EB824651
0.02 APE
194583122025-07-18 4:15:55197 days ago1752812155
0x8ad43087...9EB824651
0.08 APE
194583122025-07-18 4:15:55197 days ago1752812155
0x8ad43087...9EB824651
0.0264 APE
194583122025-07-18 4:15:55197 days ago1752812155
0x8ad43087...9EB824651
0.0536 APE
194582972025-07-18 4:15:28197 days ago1752812128
0x8ad43087...9EB824651
2.8746875 APE
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GemHunt

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at apescan.io on 2025-07-15
*/

//SPDX-License-Identifier: MIT
pragma solidity 0.8.28;

interface IGovernanceManager {
    function RNG() external view returns (address);
    function owner() external view returns (address);
    function referralManager() external view returns (address);
    function feeReceiver() external view returns (address);
    function claimManager() external view returns (address);
    function house() external view returns (address);
    function isGame(address game) external view returns (bool);
    function userInfoTracker() external view returns (address);
    function canPlayForOthers(address addr) external view returns (bool);
    function paused() external view returns (bool);
    function isAdmin(address admin) external view returns (bool);
}

interface IRNG {
    function requestRandom(bytes32 userRandomNumber, uint8 numWords) external payable returns (uint64);
    function getFee() external view returns (uint256);
}

contract ApeOwnable {

    // Governance Manager
    IGovernanceManager public constant manager = IGovernanceManager(0x8632f22e5A921C751CFbBFF92F058A3b11E96b8a);

    modifier onlyOwner() {
        require(
            msg.sender == manager.owner(),
            'Only Owner'
        );
        _;
    }

    modifier onlyGame() {
        require(
            manager.isGame(msg.sender),
            'UnAuthorized'
        );
        _;
    }

    modifier onlyRNG() {
        require(
            msg.sender == manager.RNG(),
            'Only RNG Contract'
        );
        _;
    }

    modifier validatePlayer(address player) {
        if (player != msg.sender) {
            require(
                manager.canPlayForOthers(msg.sender),
                'UnAuthorized To Play For Others'
            );
        }
        _;
    }

    modifier notPaused() {
        require(
            manager.paused() == false,
            'All Games Paused'
        );
        _;
    }

    modifier onlyAdmin() {
        require(
            manager.isAdmin(msg.sender),
            'UnAuthorized'
        );
        _;
    }
}

interface IGame {
    /**
        Callback to provide us with randomness
     */
    function fulfillRandomWords(
        uint64 requestId,
        uint256[] calldata randomWords
    ) external;

    function play(address user, bytes calldata gameData) external payable;
}

interface IUserInfoTracker {
    function wagered(address user, uint256 amount, uint256 GAME_ID) external;
}

interface IClaimManager {
    function credit(
        uint256 GAME_ID,
        address user
    ) external payable;
    function claim() external;
}

interface IHistoryManager {
    function addData(address user, uint256 GAME_ID, uint256 gameId) external;
}

interface IFeeRecipient {
    function takeFee(address ref, address player) external payable;
}

// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    function safeApprove(
        address token,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            'TransferHelper::safeApprove: approve failed'
        );
    }

    function safeTransfer(
        address token,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            'TransferHelper::safeTransfer: transfer failed'
        );
    }

    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            'TransferHelper::transferFrom: transferFrom failed'
        );
    }

    function safeTransferETH(address to, uint256 value) internal {
        (bool success, ) = to.call{value: value}(new bytes(0));
        require(success, 'TransferHelper::safeTransferETH: ETH transfer failed');
    }
}

interface IHouse {
    
    /**
        House has profited from game, call this to send value into the house and emit the correct event for SubGraphs
     */
    function houseProfit(uint256 GAME_ID) external payable;

    /**
        Function Games Call to tell the house that a user has won the bet
     */
    function payout(uint256 GAME_ID, address user, uint256 value) external;
    
    /**
        Read function to determine the maximum payout allowed by the house at the current time
     */
    function maxPayout() external view returns (uint256);

    /**
        Randomness has been requested, withdrawals are paused until it is resolved by called `randomRequestResolved()`
     */
    function randomRequested() external;

    /**
        Resolves a random request from chainlink, allowing house users to withdraw
     */
    function randomRequestResolved() external;

}

/**
    Game Master Class, any inheriting game must pass the necessary fields into the constructor
 */
contract GameMasterclass is ApeOwnable, IGame {

    // GAME ID
    uint256 public immutable GAME_ID;

    // History Manager
    IHistoryManager public immutable history;

    /** Game Is Either Paused Or Unpaused */
    bool public paused = false;

    /** List of all used game ids */
    uint256[] public usedGameIds;
    mapping ( uint256 => bool ) internal isUsedGameId;

    // request ID => GameID
    mapping ( uint64 => uint256 ) private requestToGame;

    /// @notice emitted after a random request has been sent out
    event RandomnessRequested(uint256 gameId);

    /**
        Builds The Necessary Components Of Any Game
     */
    constructor(
        uint256 GAME_ID_,
        address history_
    )  {

        // set other variables
        GAME_ID = GAME_ID_;
        history = IHistoryManager(history_);
    }

    //////////////////////////////////////
    ///////    OWNER FUNCTIONS    ////////
    //////////////////////////////////////

    function pause() external onlyOwner {
        paused = true;
    }

    function resume() external onlyOwner {
        paused = false;
    }

    function withdrawETH(address to, uint256 amount) external onlyOwner {
        (bool s,) = payable(to).call{value: amount}("");
        require(s);
    }

    function withdrawToken(address token, uint amount) external onlyOwner {
        TransferHelper.safeTransfer(token, msg.sender, amount);
    }

    function _registerBet(address user, uint256 amount) internal {
        IUserInfoTracker(manager.userInfoTracker()).wagered(user, amount, GAME_ID);
    }

    function _processFee(uint256 feeAmount, address ref, address player) internal {
        IFeeRecipient(manager.feeReceiver()).takeFee{value: feeAmount}(ref, player);
    }
    
    function getVRFFee() public view returns (uint256) {
        return IRNG(manager.RNG()).getFee();
    }

    function fulfillRandomWords(uint64 requestId, uint256[] calldata randomWords) external virtual {}

    function play(address player, bytes calldata gameData) external payable override validatePlayer(player) notPaused() {
        require(
            !paused,
            'Paused'
        );

        // play game
        _playGame(player, gameData);
    }

    function _playGame(address player, bytes calldata gameData) internal virtual {}

    function _handlePayout(address player, uint256 totalToPayout, uint256 amountForHouse) internal {

        if (totalToPayout > 0) {
            // there is a payout, we won something

            if (totalToPayout >= amountForHouse) {
                // the user has won more than we are giving to the house
                // this means we need to send them (to claim manager) amountForHouse directly
                // and only request that the house `payout` the difference!

                // add to user's claim manager the amount for the house
                IClaimManager(manager.claimManager()).credit{value: amountForHouse}(
                    GAME_ID,
                    player
                );

                // get the difference
                uint256 remaining = totalToPayout - amountForHouse;
                if (remaining > 0) {
                    // payout the rest from the house
                    IHouse(manager.house()).payout(GAME_ID, player, remaining);
                }
                
            } else {
                // the user has won less than we are giving to the house
                // pay them out directly in full, send whatever is left over to the house

                // add to user's claim manager the amount for the house
                IClaimManager(manager.claimManager()).credit{value: totalToPayout}(
                    GAME_ID,
                    player
                );

                // calculate remaining left for the house
                uint256 remaining = amountForHouse - totalToPayout;

                // send the remaining to the house
                IHouse(manager.house()).houseProfit{value: remaining }(GAME_ID);

            }
        
        } else {
            // we won nothing, send the house everything
            IHouse(manager.house()).houseProfit{value: amountForHouse }(GAME_ID);
        }

    }

    /// @dev logs the gameId in the used list and adds game to player's history
    function _registerGameId(address player, uint256 gameId) internal {

        // set history data
        history.addData(player, GAME_ID, gameId);

        // add to list of used game ids
        usedGameIds.push(gameId);
        isUsedGameId[gameId] = true;
    }

    function _requestRandom(uint256 gameId, uint8 numWords, bytes32 userRandomWord) internal {

        // request random words from RNG contract
        uint64 requestId = IRNG(manager.RNG()).requestRandom{value: getVRFFee()}(
            userRandomWord, // random user seed
            numWords        // the number of random results to return
        );

        // require that the requestId is unused
        require(
            requestToGame[requestId] == 0,
            'RequestId In Use'
        );

        // map this request ID to the game it belongs to
        requestToGame[requestId] = gameId;

        // set data in house
        IHouse(manager.house()).randomRequested();

        // emit event
        emit RandomnessRequested(gameId);
    }

    function _resolveRandom(uint64 requestId) internal {
        // resolve request in house
        IHouse(manager.house()).randomRequestResolved();

        // clear storage
        delete requestToGame[requestId];
    }

    function getGameIdFromRequest(uint64 requestId) internal view returns (uint256) {
        return requestToGame[requestId];
    }

    function getHouse() public view returns (address) {
        return manager.house();
    }

    function isValidGameId(uint256 gameId) public view returns (bool) {
        return isUsedGameId[gameId] == false && gameId > 0;
    }

    function batchCallIsUsedGameId(uint256[] calldata gameIds) external view returns (bool[] memory isUsed) {
        uint len = gameIds.length;
        isUsed = new bool[](len);
        for (uint i = 0; i < len;) {
            isUsed[i] = isUsedGameId[gameIds[i]];
            unchecked { ++i; }
        }
    }

    function paginateUsedGameIDs(uint256 start, uint256 end) external view returns (uint256[] memory) {
        if (end > usedGameIds.length) {
            end = usedGameIds.length;
        }
        uint256[] memory ids = new uint256[](end - start);
        for (uint i = start; i < end;) {
            ids[i - start] = usedGameIds[i];
            unchecked { ++i; }
        }
        return ids;
    }

    function numUsedGameIDs() external view returns (uint256) {
        return usedGameIds.length;
    }

    function getEssentialGameInfo(uint256[] calldata gameIds) external view virtual returns (
        address[] memory players,
        uint256[] memory buyInAmounts,
        uint256[] memory totalPayouts,
        uint256[] memory timestamps,
        bool[] memory hasEndeds
    ) {}

    function batchRawGameInfo(uint256[] calldata gameIds) external view virtual returns (bytes[] memory) {}
}

/**
    GemHunt Game
 */
contract GemHunt is GameMasterclass {

    // Number of cells - must be a perfect square
    uint8 public constant numCells = 16;

    // Game Struct
    struct Game {

        /** Player */
        address player;

        /** Amount Bet Per Guess */
        uint256 betAmount;

        /** Total Amount For House */
        uint256 amountForHouse;

        /** Number of Gems */
        uint8 numGems;

        /** Final Output -- list of bucket indexes */
        uint256[] payouts;

        /** Total Payout Amount */
        uint256 totalPayout;

        /** timestamp */
        uint256 timestamp;

        /** Whether or not the game has ended and the VRF has called back */
        bool hasEnded;
    }

    // GameInfoReturnType
    struct GameInfoReturnType {
        address player;
        uint256 betAmount;
        uint8 numGems;
        uint256[] payouts;
        uint256 totalPayout;
        bool hasEnded;
        uint256 timestamp;
    }

    // mapping from GameID => Game
    mapping ( uint256 => Game ) public games;

    // request ID => GameID
    mapping ( uint256 => uint256 ) private requestToGame;

    /** Platform Fee Taken Out Of Buy In */
    uint256 public platformFee = 160;

    /** Partner Cut */
    uint256 public partnerFeeCut = 40;
    address public partnerAddress;

    /** Payout Reducer To Give House An Edge */
    uint256 public constant payoutReducer = 9_800; // 98% return to player

    /** Precision Denominator */
    uint256 private constant PRECISION_DENOM = 10_000; // 0.01x precision

    /// @notice emitted after the platform fee has been changed
    event SetPlatformFee(uint256 newFee);

    /// @notice emitted after a game has been started at a specific table
    event GameStarted(address indexed user, uint256 gameId);

    /// @notice Emitted after the VRF comes back with the index of the winning player
    event GameEnded(
        address indexed user, 
        uint256 gameId, 
        uint256 buyIn,
        uint256 payout
    );

    /// @notice Emitted if the fulfilRandomWords function needs to return out for any reason
    event FulfilRandomFailed(uint256 requestId, uint256 gameId, uint256[] randomWords);

    /// @notice Emitted when the reel data is updated, emits the odds associated with the reel data
    event OddsLocked();

    constructor(

        /** History Manager */
        address history_

    ) GameMasterclass(10, history_) {

    }

    function setPlatformFee(uint256 newPlatform) external onlyOwner {
        require(
            newPlatform <= PRECISION_DENOM / 20,
            'Cannot Exceed 5%'
        );
        platformFee = newPlatform;
        emit SetPlatformFee(newPlatform);
    }

    function setPartnerAddress(address partner_) external onlyOwner {
        partnerAddress = partner_;
    }

    function setPartnerFeeCut(uint256 newCut) external onlyOwner {
        require(
            newCut < 100,
            '100% Partner Fee'
        );
        partnerFeeCut = newCut;
    }

    function _playGame(address player, bytes calldata gameData) internal override {

        // determine vrf fee
        uint256 vrfFee = getVRFFee();

        // decode gameData
        (
            uint8 numGems,
            uint256 gameId,
            address ref,
            bytes32 userRandomWord
        ) = abi.decode(gameData, (uint8, uint256, address, bytes32));

        // validate inputs
        require(
            msg.value >= vrfFee,
            'ERR: MIN BUY IN'
        );
        require(
            isValidGameId(gameId) == true,
            'ERR: INVALID GAME ID'
        );
        require(
            numGems > 0 && numGems < numCells,
            'Invalid Number of Gems'
        );

        // determine total bet amount
        uint256 totalBetAmount = msg.value - vrfFee;

        // take platform fee out of the buy in
        uint256 platformFeeAmount = ( totalBetAmount * platformFee ) / PRECISION_DENOM;

        if (partnerAddress == address(0) || partnerFeeCut == 0) {

            // send to platform receiver (taking ref into account)
            _processFee(platformFeeAmount, ref, player);

        } else {

            // partner cut
            uint256 partnerCut = ( platformFeeAmount * partnerFeeCut ) / 100;

            // subtract from platform fee
            uint256 realPlatformAmount = platformFeeAmount - partnerCut;

            // send to platform receiver (taking ref into account)
            _processFee(realPlatformAmount, ref, player);

            // send to partner
            TransferHelper.safeTransferETH(partnerAddress, partnerCut);
        }

        // determine bet amount
        uint256 betAmount = totalBetAmount / numGems; // get bet amount guess
        require(
            betAmount > 0,
            'Invalid Bet Amount'
        );

        // send to platform receiver (taking ref into account)
        _processFee(platformFeeAmount, ref, player);

        // save game data
        games[gameId].player = player;
        games[gameId].betAmount = betAmount;
        games[gameId].amountForHouse = totalBetAmount - platformFeeAmount;
        games[gameId].numGems = numGems;
        games[gameId].timestamp = block.timestamp;
        games[gameId].payouts = new uint256[](numGems); // set payout length to equal the number of guesses over the number of games

        // register game Id
        _registerGameId(player, gameId);

        // register bet
        _registerBet(player, totalBetAmount);
        
        // emit event
        emit GameStarted(player, gameId);

        // fetch random number
        _requestRandom(gameId, numGems, userRandomWord);

    }

    /**
        Callback to provide us with randomness
     */
    function fulfillRandomWords(
        uint64 requestId,
        uint256[] calldata randomWords
    ) external override onlyRNG {

        // get game ID from requestId
        uint256 gameId = getGameIdFromRequest(requestId);

        // resolve randomness
        _resolveRandom(requestId);

        // get game ID from requestId
        uint256 betAmount = games[gameId].betAmount;
        uint8 numGems = games[gameId].numGems;
        
        // if faulty ID, remove
        if (
            gameId == 0 || 
            games[gameId].player == address(0) || 
            games[gameId].hasEnded == true ||
            betAmount == 0 ||
            numGems == 0
        ) {
            emit FulfilRandomFailed(requestId, gameId, randomWords);
            return;
        }

        // set game has ended
        games[gameId].hasEnded = true;

        // total to pay out for the house and total to send the house
        uint256 totalToPayout = 0;

        // define remaining gems to get
        uint256 remainingGems = numGems;

        // loop through number of guesses in each game
        for (uint8 g = 0; g < numGems;) {
            if (remainingGems == 0) {
                break;
            }

            // get random word
            uint256 rando = randomWords[g] % (numCells - g);
            if (rando < remainingGems) {

                // we hit a gem! determine payout based on odds
                uint256 payout = ( payoutReducer * ( betAmount * ( numCells - g ) ) ) / ( remainingGems * PRECISION_DENOM );

                // save payout in array
                games[gameId].payouts[g] = payout;

                // add to total payout
                unchecked {
                    totalToPayout += payout;
                }

                // decrement remaining gems
                unchecked { --remainingGems; }
            }

            unchecked { ++g; }
        }

        // save payout info
        games[gameId].totalPayout = totalToPayout;

        // handle payouts
        _handlePayout(games[gameId].player, totalToPayout, games[gameId].amountForHouse);

        // emit game ended event
        emit GameEnded(games[gameId].player, gameId, games[gameId].betAmount * numGems, totalToPayout);
    }

    function getPayoutAmount(uint256 betAmount, uint8 numCellsRemaining, uint8 remainingGems) external pure returns (uint256) {
        return ( payoutReducer * ( betAmount * ( numCellsRemaining ) ) ) / ( remainingGems * PRECISION_DENOM );
    }

    function getGameInfo(uint256 gameId) public view returns (
        GameInfoReturnType memory
    ) {
        return GameInfoReturnType({
            player: games[gameId].player,
            betAmount: games[gameId].betAmount * games[gameId].numGems,
            numGems: games[gameId].numGems,
            payouts: games[gameId].payouts,
            totalPayout: games[gameId].totalPayout,
            hasEnded: games[gameId].hasEnded,
            timestamp: games[gameId].timestamp
        });
    }

    function batchGameInfo(uint256[] calldata gameIds) external view returns (
        GameInfoReturnType[] memory
    ) {
        uint len = gameIds.length;
        GameInfoReturnType[] memory retTypes = new GameInfoReturnType[](len);
        
        for (uint i = 0; i < len;) {
            retTypes[i] = getGameInfo(gameIds[i]);
            unchecked { ++i; }
        }

        return retTypes;
    }

    function batchRawGameInfo(uint256[] calldata gameIds) external view override returns (bytes[] memory) {
        uint len = gameIds.length;
        bytes[] memory retTypes = new bytes[](len);
        for (uint i = 0; i < len;) {
            retTypes[i] = abi.encode(getGameInfo(gameIds[i]));
            unchecked { ++i; }
        }
        return retTypes;
    }

    function getEssentialGameInfo(uint256[] calldata gameIds) external view override returns (
        address[] memory players,
        uint256[] memory buyInAmounts,
        uint256[] memory totalPayouts,
        uint256[] memory timestamps,
        bool[] memory hasEndeds
    ) {
        uint len = gameIds.length;
        players = new address[](len);
        buyInAmounts = new uint256[](len);
        totalPayouts = new uint256[](len);
        timestamps = new uint256[](len);
        hasEndeds = new bool[](len);

        for (uint i = 0; i < len;) {
            players[i] = games[gameIds[i]].player;
            buyInAmounts[i] = games[gameIds[i]].betAmount * games[gameIds[i]].numGems;
            totalPayouts[i] = games[gameIds[i]].totalPayout;
            timestamps[i] = games[gameIds[i]].timestamp;
            hasEndeds[i] = games[gameIds[i]].hasEnded;
            unchecked { ++i; }
        }
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"history_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"FulfilRandomFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"payout","type":"uint256"}],"name":"GameEnded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"GameStarted","type":"event"},{"anonymous":false,"inputs":[],"name":"OddsLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"RandomnessRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"SetPlatformFee","type":"event"},{"inputs":[],"name":"GAME_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"gameIds","type":"uint256[]"}],"name":"batchCallIsUsedGameId","outputs":[{"internalType":"bool[]","name":"isUsed","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"gameIds","type":"uint256[]"}],"name":"batchGameInfo","outputs":[{"components":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"betAmount","type":"uint256"},{"internalType":"uint8","name":"numGems","type":"uint8"},{"internalType":"uint256[]","name":"payouts","type":"uint256[]"},{"internalType":"uint256","name":"totalPayout","type":"uint256"},{"internalType":"bool","name":"hasEnded","type":"bool"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"internalType":"struct GemHunt.GameInfoReturnType[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"gameIds","type":"uint256[]"}],"name":"batchRawGameInfo","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"requestId","type":"uint64"},{"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"fulfillRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"games","outputs":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"betAmount","type":"uint256"},{"internalType":"uint256","name":"amountForHouse","type":"uint256"},{"internalType":"uint8","name":"numGems","type":"uint8"},{"internalType":"uint256","name":"totalPayout","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bool","name":"hasEnded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"gameIds","type":"uint256[]"}],"name":"getEssentialGameInfo","outputs":[{"internalType":"address[]","name":"players","type":"address[]"},{"internalType":"uint256[]","name":"buyInAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"totalPayouts","type":"uint256[]"},{"internalType":"uint256[]","name":"timestamps","type":"uint256[]"},{"internalType":"bool[]","name":"hasEndeds","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"getGameInfo","outputs":[{"components":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"betAmount","type":"uint256"},{"internalType":"uint8","name":"numGems","type":"uint8"},{"internalType":"uint256[]","name":"payouts","type":"uint256[]"},{"internalType":"uint256","name":"totalPayout","type":"uint256"},{"internalType":"bool","name":"hasEnded","type":"bool"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"internalType":"struct GemHunt.GameInfoReturnType","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHouse","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"betAmount","type":"uint256"},{"internalType":"uint8","name":"numCellsRemaining","type":"uint8"},{"internalType":"uint8","name":"remainingGems","type":"uint8"}],"name":"getPayoutAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getVRFFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"history","outputs":[{"internalType":"contract IHistoryManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"isValidGameId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"contract IGovernanceManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numCells","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numUsedGameIDs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"paginateUsedGameIDs","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"partnerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"partnerFeeCut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payoutReducer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platformFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"},{"internalType":"bytes","name":"gameData","type":"bytes"}],"name":"play","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"resume","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"partner_","type":"address"}],"name":"setPartnerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCut","type":"uint256"}],"name":"setPartnerFeeCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPlatform","type":"uint256"}],"name":"setPlatformFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"usedGameIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526000805460ff1916905560a0600655602860075534801561002457600080fd5b5060405161345e38038061345e83398101604081905261004391610059565b600a6080526001600160a01b031660a052610089565b60006020828403121561006b57600080fd5b81516001600160a01b038116811461008257600080fd5b9392505050565b60805160a0516133786100e66000396000818161059c015261270101526000818161067e01528181611c4401528181611d4f01528181611e4f01528181611f560152818161204c015281816126d4015261283f01526133786000f3fe6080604052600436106101d85760003560e01c80635c975abb1161010257806398daac8311610095578063c811ad7111610064578063c811ad711461062f578063cc81d05514610642578063f0034a7e14610657578063fdcdb06b1461066c57600080fd5b806398daac831461058a5780639e281a98146105be578063a1087fb0146105de578063c4fd5d6d146105fe57600080fd5b80638456cb59116100d15780638456cb591461051257806389fc2c0f1461052757806391ea41e61461054757806398af61601461057457600080fd5b80635c975abb14610495578063749fa03c146104af5780637b8d3879146104cf57806382c60c16146104fc57600080fd5b806332883e7e1161017a57806348e8294a1161014957806348e8294a146103f157806351e925591461041e57806352d55c111461044e578063576168fc1461047557600080fd5b806332883e7e146103555780634782f7791461038257806347e1d550146103a2578063481c6a75146103cf57600080fd5b806312e8e2c3116101b657806312e8e2c3146102d157806326232a2e146102f15780632dffa869146103155780632e6e800b1461033557600080fd5b8063046f7da2146101dd57806304e2064f146101f4578063117a5b9014610226575b600080fd5b3480156101e957600080fd5b506101f26106a0565b005b34801561020057600080fd5b50610209610755565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561023257600080fd5b5061028e610241366004612bbc565b60046020526000908152604090208054600182015460028301546003840154600585015460068601546007909601546001600160a01b03909516959394929360ff92831693919290911687565b604080516001600160a01b03909816885260208801969096529486019390935260ff9091166060850152608084015260a0830152151560c082015260e00161021d565b3480156102dd57600080fd5b506101f26102ec366004612bbc565b6107cc565b3480156102fd57600080fd5b5061030760065481565b60405190815260200161021d565b34801561032157600080fd5b506101f2610330366004612bbc565b6108f6565b34801561034157600080fd5b506101f2610350366004612bed565b6109de565b34801561036157600080fd5b50610375610370366004612c11565b610aa0565b60405161021d9190612c6f565b34801561038e57600080fd5b506101f261039d366004612c82565b610b64565b3480156103ae57600080fd5b506103c26103bd366004612bbc565b610c69565b60405161021d9190612d4f565b3480156103db57600080fd5b5061020960008051602061332383398151915281565b3480156103fd57600080fd5b5061041161040c366004612dad565b610d76565b60405161021d9190612dee565b34801561042a57600080fd5b5061043e610439366004612bbc565b610e29565b604051901515815260200161021d565b34801561045a57600080fd5b50610463601081565b60405160ff909116815260200161021d565b34801561048157600080fd5b50600854610209906001600160a01b031681565b3480156104a157600080fd5b5060005461043e9060ff1681565b3480156104bb57600080fd5b506101f26104ca366004612e68565b610e49565b3480156104db57600080fd5b506104ef6104ea366004612dad565b61119e565b60405161021d9190612ef0565b34801561050857600080fd5b5061030761264881565b34801561051e57600080fd5b506101f261125b565b34801561053357600080fd5b50610307610542366004612bbc565b61130a565b34801561055357600080fd5b50610567610562366004612dad565b61132b565b60405161021d9190612f27565b34801561058057600080fd5b5061030760075481565b34801561059657600080fd5b506102097f000000000000000000000000000000000000000000000000000000000000000081565b3480156105ca57600080fd5b506101f26105d9366004612c82565b6113e2565b3480156105ea57600080fd5b506103076105f9366004612fb1565b611491565b34801561060a57600080fd5b5061061e610619366004612dad565b6114cd565b60405161021d959493929190612fed565b6101f261063d36600461308d565b611842565b34801561064e57600080fd5b50600154610307565b34801561066357600080fd5b50610307611a09565b34801561067857600080fd5b506103077f000000000000000000000000000000000000000000000000000000000000000081565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107109190613112565b6001600160a01b0316336001600160a01b0316146107495760405162461bcd60e51b81526004016107409061312f565b60405180910390fd5b6000805460ff19169055565b60006000805160206133238339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c79190613112565b905090565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083c9190613112565b6001600160a01b0316336001600160a01b03161461086c5760405162461bcd60e51b81526004016107409061312f565b610879601461271061317f565b8111156108bb5760405162461bcd60e51b815260206004820152601060248201526f43616e6e6f742045786365656420352560801b6044820152606401610740565b60068190556040518181527f05fd392cc4f8fe360ff8b094f628b1c29b9000441290e2f8a597c12d5379b06d9060200160405180910390a150565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610942573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109669190613112565b6001600160a01b0316336001600160a01b0316146109965760405162461bcd60e51b81526004016107409061312f565b606481106109d95760405162461bcd60e51b815260206004820152601060248201526f3130302520506172746e65722046656560801b6044820152606401610740565b600755565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4e9190613112565b6001600160a01b0316336001600160a01b031614610a7e5760405162461bcd60e51b81526004016107409061312f565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600154606090821115610ab35760015491505b6000610abf8484613193565b6001600160401b03811115610ad657610ad66131a6565b604051908082528060200260200182016040528015610aff578160200160208202803683370190505b509050835b83811015610b5a5760018181548110610b1f57610b1f6131bc565b9060005260206000200154828683610b379190613193565b81518110610b4757610b476131bc565b6020908102919091010152600101610b04565b5090505b92915050565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd49190613112565b6001600160a01b0316336001600160a01b031614610c045760405162461bcd60e51b81526004016107409061312f565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c51576040519150601f19603f3d011682016040523d82523d6000602084013e610c56565b606091505b5050905080610c6457600080fd5b505050565b610c71612b11565b6040805160e08101825260008481526004602081815293822080546001600160a01b0316845291869052835260038101546001909101549192830191610cba9160ff16906131d2565b81526000848152600460208181526040808420600381015460ff168387015293889052828252929091018054835181840281018401855281815293909401939091830182828015610d2a57602002820191906000526020600020905b815481526020019060010190808311610d16575b50505091835250506000848152600460208181526040808420600581015483870152600781015460ff161515918601919091529690925290526006909301546060909301929092525090565b6060816000816001600160401b03811115610d9357610d936131a6565b604051908082528060200260200182016040528015610dcc57816020015b610db9612b11565b815260200190600190039081610db15790505b50905060005b82811015610e2057610dfb868683818110610def57610def6131bc565b90506020020135610c69565b828281518110610e0d57610e0d6131bc565b6020908102919091010152600101610dd2565b50949350505050565b60008181526002602052604081205460ff16158015610b5e575050151590565b6000805160206133238339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb99190613112565b6001600160a01b0316336001600160a01b031614610f0d5760405162461bcd60e51b815260206004820152601160248201527013db9b1e48149391c810dbdb9d1c9858dd607a1b6044820152606401610740565b6001600160401b038316600090815260036020526040902054610f2f84611adc565b6000818152600460205260409020600181015460039091015460ff16821580610f6d57506000838152600460205260409020546001600160a01b0316155b80610f8e575060008381526004602052604090206007015460ff1615156001145b80610f97575081155b80610fa3575060ff8116155b15610fed577f2acb79a40a39601d6c546f6db7b37fd1018c0401f5f5e07754bff874ce6ac8a586848787604051610fdd94939291906131e9565b60405180910390a1505050505050565b6000838152600460205260408120600701805460ff1916600117905560ff8216815b8360ff168160ff1610156110ee5781156110ee57600061103082601061323b565b60ff1689898460ff16818110611048576110486131bc565b905060200201356110599190613254565b9050828110156110e5576000611071612710856131d2565b61107c84601061323b565b6110899060ff16896131d2565b611095906126486131d2565b61109f919061317f565b905080600460008a81526020019081526020016000206004018460ff16815481106110cc576110cc6131bc565b6000918252602090912001559390930192600019909201915b5060010161100f565b506000858152600460205260409020600581018390558054600290910154611121916001600160a01b0316908490611bb8565b600085815260046020526040902080546001909101546001600160a01b03909116907fc542d3f545425a3b913c4056355fd70bae2039ab35205203499d8bfd03c01ae89087906111759060ff8816906131d2565b604080519283526020830191909152810185905260600160405180910390a25050505050505050565b606081806001600160401b038111156111b9576111b96131a6565b6040519080825280602002602001820160405280156111e2578160200160208202803683370190505b50915060005b818110156112535760026000868684818110611206576112066131bc565b90506020020135815260200190815260200160002060009054906101000a900460ff1683828151811061123b5761123b6131bc565b911515602092830291909101909101526001016111e8565b505092915050565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cb9190613112565b6001600160a01b0316336001600160a01b0316146112fb5760405162461bcd60e51b81526004016107409061312f565b6000805460ff19166001179055565b6001818154811061131a57600080fd5b600091825260209091200154905081565b6060816000816001600160401b03811115611348576113486131a6565b60405190808252806020026020018201604052801561137b57816020015b60608152602001906001900390816113665790505b50905060005b82811015610e205761139e868683818110610def57610def6131bc565b6040516020016113ae9190612d4f565b6040516020818303038152906040528282815181106113cf576113cf6131bc565b6020908102919091010152600101611381565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561142e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114529190613112565b6001600160a01b0316336001600160a01b0316146114825760405162461bcd60e51b81526004016107409061312f565b61148d8233836120a2565b5050565b60006114a261271060ff84166131d2565b6114af60ff8516866131d2565b6114bb906126486131d2565b6114c5919061317f565b949350505050565b60608080808085806001600160401b038111156114ec576114ec6131a6565b604051908082528060200260200182016040528015611515578160200160208202803683370190505b509550806001600160401b03811115611530576115306131a6565b604051908082528060200260200182016040528015611559578160200160208202803683370190505b509450806001600160401b03811115611574576115746131a6565b60405190808252806020026020018201604052801561159d578160200160208202803683370190505b509350806001600160401b038111156115b8576115b86131a6565b6040519080825280602002602001820160405280156115e1578160200160208202803683370190505b509250806001600160401b038111156115fc576115fc6131a6565b604051908082528060200260200182016040528015611625578160200160208202803683370190505b50915060005b8181101561183657600460008a8a84818110611649576116496131bc565b90506020020135815260200190815260200160002060000160009054906101000a90046001600160a01b0316878281518110611687576116876131bc565b60200260200101906001600160a01b031690816001600160a01b031681525050600460008a8a848181106116bd576116bd6131bc565b6020908102929092013583525081019190915260400160009081206003015460ff16906004908b8b858181106116f5576116f56131bc565b9050602002013581526020019081526020016000206001015461171891906131d2565b86828151811061172a5761172a6131bc565b602002602001018181525050600460008a8a8481811061174c5761174c6131bc565b90506020020135815260200190815260200160002060050154858281518110611777576117776131bc565b602002602001018181525050600460008a8a84818110611799576117996131bc565b905060200201358152602001908152602001600020600601548482815181106117c4576117c46131bc565b602002602001018181525050600460008a8a848181106117e6576117e66131bc565b90506020020135815260200190815260200160002060070160009054906101000a900460ff1683828151811061181e5761181e6131bc565b9115156020928302919091019091015260010161162b565b50509295509295909350565b826001600160a01b038116331461190c57604051636d6d50a160e11b81523360048201526000805160206133238339815191529063dadaa14290602401602060405180830381865afa15801561189c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c09190613268565b61190c5760405162461bcd60e51b815260206004820152601f60248201527f556e417574686f72697a656420546f20506c617920466f72204f7468657273006044820152606401610740565b6000805160206133238339815191526001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611958573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197c9190613268565b156119bc5760405162461bcd60e51b815260206004820152601060248201526f105b1b0811d85b595cc814185d5cd95960821b6044820152606401610740565b60005460ff16156119f85760405162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b6044820152606401610740565b611a038484846121d3565b50505050565b60006000805160206133238339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7b9190613112565b6001600160a01b031663ced72f876040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ab8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c7919061328a565b6000805160206133238339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4c9190613112565b6001600160a01b0316638b3939f26040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b8657600080fd5b505af1158015611b9a573d6000803e3d6000fd5b505050506001600160401b0316600090815260036020526040812055565b8115611fcb57808210611dd0576000805160206133238339815191526001600160a01b031663a9a36dcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c359190613112565b6040516304ff60cf60e51b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b0385811660248301529190911690639fec19e09083906044016000604051808303818588803b158015611ca157600080fd5b505af1158015611cb5573d6000803e3d6000fd5b505050505060008183611cc89190613193565b90508015611a03576000805160206133238339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d409190613112565b60405163ae2f5d9360e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b03868116602483015260448201849052919091169063ae2f5d9390606401600060405180830381600087803b158015611db257600080fd5b505af1158015611dc6573d6000803e3d6000fd5b5050505050505050565b6000805160206133238339815191526001600160a01b031663a9a36dcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e409190613112565b6040516304ff60cf60e51b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b0385811660248301529190911690639fec19e09084906044016000604051808303818588803b158015611eac57600080fd5b505af1158015611ec0573d6000803e3d6000fd5b505050505060008282611ed39190613193565b90506000805160206133238339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f459190613112565b6001600160a01b031663b3cb6f1a827f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b8152600401611f9391815260200190565b6000604051808303818588803b158015611fac57600080fd5b505af1158015611fc0573d6000803e3d6000fd5b505050505050505050565b6000805160206133238339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203b9190613112565b6001600160a01b031663b3cb6f1a827f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b815260040161208991815260200190565b6000604051808303818588803b158015611db257600080fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916120fe91906132a3565b6000604051808303816000865af19150503d806000811461213b576040519150601f19603f3d011682016040523d82523d6000602084013e612140565b606091505b509150915081801561216a57508051158061216a57508080602001905181019061216a9190613268565b6121cc5760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b6064820152608401610740565b5050505050565b60006121dd611a09565b905060008080806121f0868801886132bf565b93509350935093508434101561223a5760405162461bcd60e51b815260206004820152600f60248201526e22a9291d1026a4a710212aac9024a760891b6044820152606401610740565b61224383610e29565b151560011461228b5760405162461bcd60e51b81526020600482015260146024820152731154948e88125395905312510811d0535148125160621b6044820152606401610740565b60008460ff161180156122a15750601060ff8516105b6122e65760405162461bcd60e51b8152602060048201526016602482015275496e76616c6964204e756d626572206f662047656d7360501b6044820152606401610740565b60006122f28634613193565b905060006127106006548361230791906131d2565b612311919061317f565b6008549091506001600160a01b0316158061232c5750600754155b156123415761233c81858c612531565b612391565b600060646007548361235391906131d2565b61235d919061317f565b9050600061236b8284613193565b905061237881878e612531565b60085461238e906001600160a01b0316836125db565b50505b60006123a060ff88168461317f565b9050600081116123e75760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a590810995d08105b5bdd5b9d60721b6044820152606401610740565b6123f282868d612531565b600086815260046020526040902080546001600160a01b0319166001600160a01b038d161781556001018190556124298284613193565b6000878152600460205260409020600281019190915560038101805460ff191660ff8a16908117909155426006909201919091556001600160401b03811115612474576124746131a6565b60405190808252806020026020018201604052801561249d578160200160208202803683370190505b50600087815260046020818152604090922083516124c19491909201920190612b5c565b506124cc8b876126b5565b6124d68b846127a9565b8a6001600160a01b03167fea32a03505fd9f04d664676d72295a86c5fb0465e69654751907ca305bc1d1c78760405161251191815260200190565b60405180910390a26125248688866128a7565b5050505050505050505050565b6000805160206133238339815191526001600160a01b031663b3f006746040518163ffffffff1660e01b8152600401602060405180830381865afa15801561257d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a19190613112565b60405163bc5101e560e01b81526001600160a01b0384811660048301528381166024830152919091169063bc5101e5908590604401612089565b604080516000808252602082019092526001600160a01b03841690839060405161260591906132a3565b60006040518083038185875af1925050503d8060008114612642576040519150601f19603f3d011682016040523d82523d6000602084013e612647565b606091505b5050905080610c645760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527308115512081d1c985b9cd9995c8819985a5b195960621b6064820152608401610740565b604051639a4918c160e01b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000006024830152604482018390527f00000000000000000000000000000000000000000000000000000000000000001690639a4918c190606401600060405180830381600087803b15801561274557600080fd5b505af1158015612759573d6000803e3d6000fd5b50506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601849055600093845260026020526040909320805460ff1916909317909255505050565b6000805160206133238339815191526001600160a01b031663846c43986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128199190613112565b60405163759ecdf560e11b81526001600160a01b038481166004830152602482018490527f00000000000000000000000000000000000000000000000000000000000000006044830152919091169063eb3d9bea90606401600060405180830381600087803b15801561288b57600080fd5b505af115801561289f573d6000803e3d6000fd5b505050505050565b60006000805160206133238339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129199190613112565b6001600160a01b03166397cca7af61292f611a09565b6040516001600160e01b031960e084901b1681526004810186905260ff8716602482015260440160206040518083038185885af1158015612974573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129999190613305565b6001600160401b038116600090815260036020526040902054909150156129f55760405162461bcd60e51b815260206004820152601060248201526f52657175657374496420496e2055736560801b6044820152606401610740565b6001600160401b038116600090815260036020908152604091829020869055815160016264c53160e01b0319815291516000805160206133238339815191529263ff9b3acf9260048083019391928290030181865afa158015612a5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a809190613112565b6001600160a01b0316638d7fe4786040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612aba57600080fd5b505af1158015612ace573d6000803e3d6000fd5b505050507f9ac10fb18c93d33ad7b0a941897aef048d0f8d30756684e82b4552ba12764d4584604051612b0391815260200190565b60405180910390a150505050565b6040518060e0016040528060006001600160a01b0316815260200160008152602001600060ff1681526020016060815260200160008152602001600015158152602001600081525090565b828054828255906000526020600020908101928215612b97579160200282015b82811115612b97578251825591602001919060010190612b7c565b50612ba3929150612ba7565b5090565b5b80821115612ba35760008155600101612ba8565b600060208284031215612bce57600080fd5b5035919050565b6001600160a01b0381168114612bea57600080fd5b50565b600060208284031215612bff57600080fd5b8135612c0a81612bd5565b9392505050565b60008060408385031215612c2457600080fd5b50508035926020909101359150565b600081518084526020840193506020830160005b82811015612c65578151865260209586019590910190600101612c47565b5093949350505050565b602081526000612c0a6020830184612c33565b60008060408385031215612c9557600080fd5b8235612ca081612bd5565b946020939093013593505050565b80516001600160a01b031682526020808201518184015260408083015160ff169084015260608083015160e09185018290528051918501829052600092019082906101008601905b80831015612d195783518252602082019150602084019350600183019250612cf6565b506080850151608087015260a08501519250612d3960a087018415159052565b60c085015160c087015280935050505092915050565b602081526000612c0a6020830184612cae565b60008083601f840112612d7457600080fd5b5081356001600160401b03811115612d8b57600080fd5b6020830191508360208260051b8501011115612da657600080fd5b9250929050565b60008060208385031215612dc057600080fd5b82356001600160401b03811115612dd657600080fd5b612de285828601612d62565b90969095509350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612e4757603f19878603018452612e32858351612cae565b94506020938401939190910190600101612e16565b50929695505050505050565b6001600160401b0381168114612bea57600080fd5b600080600060408486031215612e7d57600080fd5b8335612e8881612e53565b925060208401356001600160401b03811115612ea357600080fd5b612eaf86828701612d62565b9497909650939450505050565b600081518084526020840193506020830160005b82811015612c655781511515865260209586019590910190600101612ed0565b602081526000612c0a6020830184612ebc565b60005b83811015612f1e578181015183820152602001612f06565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612e4757603f1987860301845281518051808752612f78816020890160208501612f03565b601f01601f19169590950160209081019550938401939190910190600101612f4f565b803560ff81168114612fac57600080fd5b919050565b600080600060608486031215612fc657600080fd5b83359250612fd660208501612f9b565b9150612fe460408501612f9b565b90509250925092565b60a08082528651908201819052600090602088019060c0840190835b818110156130305783516001600160a01b0316835260209384019390920191600101613009565b505083810360208501526130448189612c33565b91505082810360408401526130598187612c33565b9050828103606084015261306d8186612c33565b905082810360808401526130818185612ebc565b98975050505050505050565b6000806000604084860312156130a257600080fd5b83356130ad81612bd5565b925060208401356001600160401b038111156130c857600080fd5b8401601f810186136130d957600080fd5b80356001600160401b038111156130ef57600080fd5b86602082840101111561310157600080fd5b939660209190910195509293505050565b60006020828403121561312457600080fd5b8151612c0a81612bd5565b6020808252600a908201526927b7363c9027bbb732b960b11b604082015260600190565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008261318e5761318e613153565b500490565b81810381811115610b5e57610b5e613169565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417610b5e57610b5e613169565b6001600160401b038516815260208101849052606060408201819052810182905260006001600160fb1b0383111561322057600080fd5b8260051b808560808501379190910160800195945050505050565b60ff8281168282160390811115610b5e57610b5e613169565b60008261326357613263613153565b500690565b60006020828403121561327a57600080fd5b81518015158114612c0a57600080fd5b60006020828403121561329c57600080fd5b5051919050565b600082516132b5818460208701612f03565b9190910192915050565b600080600080608085870312156132d557600080fd5b6132de85612f9b565b93506020850135925060408501356132f581612bd5565b9396929550929360600135925050565b60006020828403121561331757600080fd5b8151612c0a81612e5356fe0000000000000000000000008632f22e5a921c751cfbbff92f058a3b11e96b8aa264697066735822122078824013472f108b199f3a5b726ae2dd718d60799d2cd3b007d8b425584f4baf64736f6c634300081c0033000000000000000000000000fa296156dac165af92f7fdb012b61a874670e1aa

Deployed Bytecode

0x6080604052600436106101d85760003560e01c80635c975abb1161010257806398daac8311610095578063c811ad7111610064578063c811ad711461062f578063cc81d05514610642578063f0034a7e14610657578063fdcdb06b1461066c57600080fd5b806398daac831461058a5780639e281a98146105be578063a1087fb0146105de578063c4fd5d6d146105fe57600080fd5b80638456cb59116100d15780638456cb591461051257806389fc2c0f1461052757806391ea41e61461054757806398af61601461057457600080fd5b80635c975abb14610495578063749fa03c146104af5780637b8d3879146104cf57806382c60c16146104fc57600080fd5b806332883e7e1161017a57806348e8294a1161014957806348e8294a146103f157806351e925591461041e57806352d55c111461044e578063576168fc1461047557600080fd5b806332883e7e146103555780634782f7791461038257806347e1d550146103a2578063481c6a75146103cf57600080fd5b806312e8e2c3116101b657806312e8e2c3146102d157806326232a2e146102f15780632dffa869146103155780632e6e800b1461033557600080fd5b8063046f7da2146101dd57806304e2064f146101f4578063117a5b9014610226575b600080fd5b3480156101e957600080fd5b506101f26106a0565b005b34801561020057600080fd5b50610209610755565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561023257600080fd5b5061028e610241366004612bbc565b60046020526000908152604090208054600182015460028301546003840154600585015460068601546007909601546001600160a01b03909516959394929360ff92831693919290911687565b604080516001600160a01b03909816885260208801969096529486019390935260ff9091166060850152608084015260a0830152151560c082015260e00161021d565b3480156102dd57600080fd5b506101f26102ec366004612bbc565b6107cc565b3480156102fd57600080fd5b5061030760065481565b60405190815260200161021d565b34801561032157600080fd5b506101f2610330366004612bbc565b6108f6565b34801561034157600080fd5b506101f2610350366004612bed565b6109de565b34801561036157600080fd5b50610375610370366004612c11565b610aa0565b60405161021d9190612c6f565b34801561038e57600080fd5b506101f261039d366004612c82565b610b64565b3480156103ae57600080fd5b506103c26103bd366004612bbc565b610c69565b60405161021d9190612d4f565b3480156103db57600080fd5b5061020960008051602061332383398151915281565b3480156103fd57600080fd5b5061041161040c366004612dad565b610d76565b60405161021d9190612dee565b34801561042a57600080fd5b5061043e610439366004612bbc565b610e29565b604051901515815260200161021d565b34801561045a57600080fd5b50610463601081565b60405160ff909116815260200161021d565b34801561048157600080fd5b50600854610209906001600160a01b031681565b3480156104a157600080fd5b5060005461043e9060ff1681565b3480156104bb57600080fd5b506101f26104ca366004612e68565b610e49565b3480156104db57600080fd5b506104ef6104ea366004612dad565b61119e565b60405161021d9190612ef0565b34801561050857600080fd5b5061030761264881565b34801561051e57600080fd5b506101f261125b565b34801561053357600080fd5b50610307610542366004612bbc565b61130a565b34801561055357600080fd5b50610567610562366004612dad565b61132b565b60405161021d9190612f27565b34801561058057600080fd5b5061030760075481565b34801561059657600080fd5b506102097f000000000000000000000000fa296156dac165af92f7fdb012b61a874670e1aa81565b3480156105ca57600080fd5b506101f26105d9366004612c82565b6113e2565b3480156105ea57600080fd5b506103076105f9366004612fb1565b611491565b34801561060a57600080fd5b5061061e610619366004612dad565b6114cd565b60405161021d959493929190612fed565b6101f261063d36600461308d565b611842565b34801561064e57600080fd5b50600154610307565b34801561066357600080fd5b50610307611a09565b34801561067857600080fd5b506103077f000000000000000000000000000000000000000000000000000000000000000a81565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107109190613112565b6001600160a01b0316336001600160a01b0316146107495760405162461bcd60e51b81526004016107409061312f565b60405180910390fd5b6000805460ff19169055565b60006000805160206133238339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c79190613112565b905090565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083c9190613112565b6001600160a01b0316336001600160a01b03161461086c5760405162461bcd60e51b81526004016107409061312f565b610879601461271061317f565b8111156108bb5760405162461bcd60e51b815260206004820152601060248201526f43616e6e6f742045786365656420352560801b6044820152606401610740565b60068190556040518181527f05fd392cc4f8fe360ff8b094f628b1c29b9000441290e2f8a597c12d5379b06d9060200160405180910390a150565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610942573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109669190613112565b6001600160a01b0316336001600160a01b0316146109965760405162461bcd60e51b81526004016107409061312f565b606481106109d95760405162461bcd60e51b815260206004820152601060248201526f3130302520506172746e65722046656560801b6044820152606401610740565b600755565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4e9190613112565b6001600160a01b0316336001600160a01b031614610a7e5760405162461bcd60e51b81526004016107409061312f565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600154606090821115610ab35760015491505b6000610abf8484613193565b6001600160401b03811115610ad657610ad66131a6565b604051908082528060200260200182016040528015610aff578160200160208202803683370190505b509050835b83811015610b5a5760018181548110610b1f57610b1f6131bc565b9060005260206000200154828683610b379190613193565b81518110610b4757610b476131bc565b6020908102919091010152600101610b04565b5090505b92915050565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd49190613112565b6001600160a01b0316336001600160a01b031614610c045760405162461bcd60e51b81526004016107409061312f565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c51576040519150601f19603f3d011682016040523d82523d6000602084013e610c56565b606091505b5050905080610c6457600080fd5b505050565b610c71612b11565b6040805160e08101825260008481526004602081815293822080546001600160a01b0316845291869052835260038101546001909101549192830191610cba9160ff16906131d2565b81526000848152600460208181526040808420600381015460ff168387015293889052828252929091018054835181840281018401855281815293909401939091830182828015610d2a57602002820191906000526020600020905b815481526020019060010190808311610d16575b50505091835250506000848152600460208181526040808420600581015483870152600781015460ff161515918601919091529690925290526006909301546060909301929092525090565b6060816000816001600160401b03811115610d9357610d936131a6565b604051908082528060200260200182016040528015610dcc57816020015b610db9612b11565b815260200190600190039081610db15790505b50905060005b82811015610e2057610dfb868683818110610def57610def6131bc565b90506020020135610c69565b828281518110610e0d57610e0d6131bc565b6020908102919091010152600101610dd2565b50949350505050565b60008181526002602052604081205460ff16158015610b5e575050151590565b6000805160206133238339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb99190613112565b6001600160a01b0316336001600160a01b031614610f0d5760405162461bcd60e51b815260206004820152601160248201527013db9b1e48149391c810dbdb9d1c9858dd607a1b6044820152606401610740565b6001600160401b038316600090815260036020526040902054610f2f84611adc565b6000818152600460205260409020600181015460039091015460ff16821580610f6d57506000838152600460205260409020546001600160a01b0316155b80610f8e575060008381526004602052604090206007015460ff1615156001145b80610f97575081155b80610fa3575060ff8116155b15610fed577f2acb79a40a39601d6c546f6db7b37fd1018c0401f5f5e07754bff874ce6ac8a586848787604051610fdd94939291906131e9565b60405180910390a1505050505050565b6000838152600460205260408120600701805460ff1916600117905560ff8216815b8360ff168160ff1610156110ee5781156110ee57600061103082601061323b565b60ff1689898460ff16818110611048576110486131bc565b905060200201356110599190613254565b9050828110156110e5576000611071612710856131d2565b61107c84601061323b565b6110899060ff16896131d2565b611095906126486131d2565b61109f919061317f565b905080600460008a81526020019081526020016000206004018460ff16815481106110cc576110cc6131bc565b6000918252602090912001559390930192600019909201915b5060010161100f565b506000858152600460205260409020600581018390558054600290910154611121916001600160a01b0316908490611bb8565b600085815260046020526040902080546001909101546001600160a01b03909116907fc542d3f545425a3b913c4056355fd70bae2039ab35205203499d8bfd03c01ae89087906111759060ff8816906131d2565b604080519283526020830191909152810185905260600160405180910390a25050505050505050565b606081806001600160401b038111156111b9576111b96131a6565b6040519080825280602002602001820160405280156111e2578160200160208202803683370190505b50915060005b818110156112535760026000868684818110611206576112066131bc565b90506020020135815260200190815260200160002060009054906101000a900460ff1683828151811061123b5761123b6131bc565b911515602092830291909101909101526001016111e8565b505092915050565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cb9190613112565b6001600160a01b0316336001600160a01b0316146112fb5760405162461bcd60e51b81526004016107409061312f565b6000805460ff19166001179055565b6001818154811061131a57600080fd5b600091825260209091200154905081565b6060816000816001600160401b03811115611348576113486131a6565b60405190808252806020026020018201604052801561137b57816020015b60608152602001906001900390816113665790505b50905060005b82811015610e205761139e868683818110610def57610def6131bc565b6040516020016113ae9190612d4f565b6040516020818303038152906040528282815181106113cf576113cf6131bc565b6020908102919091010152600101611381565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561142e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114529190613112565b6001600160a01b0316336001600160a01b0316146114825760405162461bcd60e51b81526004016107409061312f565b61148d8233836120a2565b5050565b60006114a261271060ff84166131d2565b6114af60ff8516866131d2565b6114bb906126486131d2565b6114c5919061317f565b949350505050565b60608080808085806001600160401b038111156114ec576114ec6131a6565b604051908082528060200260200182016040528015611515578160200160208202803683370190505b509550806001600160401b03811115611530576115306131a6565b604051908082528060200260200182016040528015611559578160200160208202803683370190505b509450806001600160401b03811115611574576115746131a6565b60405190808252806020026020018201604052801561159d578160200160208202803683370190505b509350806001600160401b038111156115b8576115b86131a6565b6040519080825280602002602001820160405280156115e1578160200160208202803683370190505b509250806001600160401b038111156115fc576115fc6131a6565b604051908082528060200260200182016040528015611625578160200160208202803683370190505b50915060005b8181101561183657600460008a8a84818110611649576116496131bc565b90506020020135815260200190815260200160002060000160009054906101000a90046001600160a01b0316878281518110611687576116876131bc565b60200260200101906001600160a01b031690816001600160a01b031681525050600460008a8a848181106116bd576116bd6131bc565b6020908102929092013583525081019190915260400160009081206003015460ff16906004908b8b858181106116f5576116f56131bc565b9050602002013581526020019081526020016000206001015461171891906131d2565b86828151811061172a5761172a6131bc565b602002602001018181525050600460008a8a8481811061174c5761174c6131bc565b90506020020135815260200190815260200160002060050154858281518110611777576117776131bc565b602002602001018181525050600460008a8a84818110611799576117996131bc565b905060200201358152602001908152602001600020600601548482815181106117c4576117c46131bc565b602002602001018181525050600460008a8a848181106117e6576117e66131bc565b90506020020135815260200190815260200160002060070160009054906101000a900460ff1683828151811061181e5761181e6131bc565b9115156020928302919091019091015260010161162b565b50509295509295909350565b826001600160a01b038116331461190c57604051636d6d50a160e11b81523360048201526000805160206133238339815191529063dadaa14290602401602060405180830381865afa15801561189c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c09190613268565b61190c5760405162461bcd60e51b815260206004820152601f60248201527f556e417574686f72697a656420546f20506c617920466f72204f7468657273006044820152606401610740565b6000805160206133238339815191526001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611958573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197c9190613268565b156119bc5760405162461bcd60e51b815260206004820152601060248201526f105b1b0811d85b595cc814185d5cd95960821b6044820152606401610740565b60005460ff16156119f85760405162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b6044820152606401610740565b611a038484846121d3565b50505050565b60006000805160206133238339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7b9190613112565b6001600160a01b031663ced72f876040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ab8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c7919061328a565b6000805160206133238339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4c9190613112565b6001600160a01b0316638b3939f26040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b8657600080fd5b505af1158015611b9a573d6000803e3d6000fd5b505050506001600160401b0316600090815260036020526040812055565b8115611fcb57808210611dd0576000805160206133238339815191526001600160a01b031663a9a36dcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c359190613112565b6040516304ff60cf60e51b81527f000000000000000000000000000000000000000000000000000000000000000a60048201526001600160a01b0385811660248301529190911690639fec19e09083906044016000604051808303818588803b158015611ca157600080fd5b505af1158015611cb5573d6000803e3d6000fd5b505050505060008183611cc89190613193565b90508015611a03576000805160206133238339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d409190613112565b60405163ae2f5d9360e01b81527f000000000000000000000000000000000000000000000000000000000000000a60048201526001600160a01b03868116602483015260448201849052919091169063ae2f5d9390606401600060405180830381600087803b158015611db257600080fd5b505af1158015611dc6573d6000803e3d6000fd5b5050505050505050565b6000805160206133238339815191526001600160a01b031663a9a36dcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e409190613112565b6040516304ff60cf60e51b81527f000000000000000000000000000000000000000000000000000000000000000a60048201526001600160a01b0385811660248301529190911690639fec19e09084906044016000604051808303818588803b158015611eac57600080fd5b505af1158015611ec0573d6000803e3d6000fd5b505050505060008282611ed39190613193565b90506000805160206133238339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f459190613112565b6001600160a01b031663b3cb6f1a827f000000000000000000000000000000000000000000000000000000000000000a6040518363ffffffff1660e01b8152600401611f9391815260200190565b6000604051808303818588803b158015611fac57600080fd5b505af1158015611fc0573d6000803e3d6000fd5b505050505050505050565b6000805160206133238339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203b9190613112565b6001600160a01b031663b3cb6f1a827f000000000000000000000000000000000000000000000000000000000000000a6040518363ffffffff1660e01b815260040161208991815260200190565b6000604051808303818588803b158015611db257600080fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916120fe91906132a3565b6000604051808303816000865af19150503d806000811461213b576040519150601f19603f3d011682016040523d82523d6000602084013e612140565b606091505b509150915081801561216a57508051158061216a57508080602001905181019061216a9190613268565b6121cc5760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b6064820152608401610740565b5050505050565b60006121dd611a09565b905060008080806121f0868801886132bf565b93509350935093508434101561223a5760405162461bcd60e51b815260206004820152600f60248201526e22a9291d1026a4a710212aac9024a760891b6044820152606401610740565b61224383610e29565b151560011461228b5760405162461bcd60e51b81526020600482015260146024820152731154948e88125395905312510811d0535148125160621b6044820152606401610740565b60008460ff161180156122a15750601060ff8516105b6122e65760405162461bcd60e51b8152602060048201526016602482015275496e76616c6964204e756d626572206f662047656d7360501b6044820152606401610740565b60006122f28634613193565b905060006127106006548361230791906131d2565b612311919061317f565b6008549091506001600160a01b0316158061232c5750600754155b156123415761233c81858c612531565b612391565b600060646007548361235391906131d2565b61235d919061317f565b9050600061236b8284613193565b905061237881878e612531565b60085461238e906001600160a01b0316836125db565b50505b60006123a060ff88168461317f565b9050600081116123e75760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a590810995d08105b5bdd5b9d60721b6044820152606401610740565b6123f282868d612531565b600086815260046020526040902080546001600160a01b0319166001600160a01b038d161781556001018190556124298284613193565b6000878152600460205260409020600281019190915560038101805460ff191660ff8a16908117909155426006909201919091556001600160401b03811115612474576124746131a6565b60405190808252806020026020018201604052801561249d578160200160208202803683370190505b50600087815260046020818152604090922083516124c19491909201920190612b5c565b506124cc8b876126b5565b6124d68b846127a9565b8a6001600160a01b03167fea32a03505fd9f04d664676d72295a86c5fb0465e69654751907ca305bc1d1c78760405161251191815260200190565b60405180910390a26125248688866128a7565b5050505050505050505050565b6000805160206133238339815191526001600160a01b031663b3f006746040518163ffffffff1660e01b8152600401602060405180830381865afa15801561257d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a19190613112565b60405163bc5101e560e01b81526001600160a01b0384811660048301528381166024830152919091169063bc5101e5908590604401612089565b604080516000808252602082019092526001600160a01b03841690839060405161260591906132a3565b60006040518083038185875af1925050503d8060008114612642576040519150601f19603f3d011682016040523d82523d6000602084013e612647565b606091505b5050905080610c645760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527308115512081d1c985b9cd9995c8819985a5b195960621b6064820152608401610740565b604051639a4918c160e01b81526001600160a01b0383811660048301527f000000000000000000000000000000000000000000000000000000000000000a6024830152604482018390527f000000000000000000000000fa296156dac165af92f7fdb012b61a874670e1aa1690639a4918c190606401600060405180830381600087803b15801561274557600080fd5b505af1158015612759573d6000803e3d6000fd5b50506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601849055600093845260026020526040909320805460ff1916909317909255505050565b6000805160206133238339815191526001600160a01b031663846c43986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128199190613112565b60405163759ecdf560e11b81526001600160a01b038481166004830152602482018490527f000000000000000000000000000000000000000000000000000000000000000a6044830152919091169063eb3d9bea90606401600060405180830381600087803b15801561288b57600080fd5b505af115801561289f573d6000803e3d6000fd5b505050505050565b60006000805160206133238339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129199190613112565b6001600160a01b03166397cca7af61292f611a09565b6040516001600160e01b031960e084901b1681526004810186905260ff8716602482015260440160206040518083038185885af1158015612974573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129999190613305565b6001600160401b038116600090815260036020526040902054909150156129f55760405162461bcd60e51b815260206004820152601060248201526f52657175657374496420496e2055736560801b6044820152606401610740565b6001600160401b038116600090815260036020908152604091829020869055815160016264c53160e01b0319815291516000805160206133238339815191529263ff9b3acf9260048083019391928290030181865afa158015612a5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a809190613112565b6001600160a01b0316638d7fe4786040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612aba57600080fd5b505af1158015612ace573d6000803e3d6000fd5b505050507f9ac10fb18c93d33ad7b0a941897aef048d0f8d30756684e82b4552ba12764d4584604051612b0391815260200190565b60405180910390a150505050565b6040518060e0016040528060006001600160a01b0316815260200160008152602001600060ff1681526020016060815260200160008152602001600015158152602001600081525090565b828054828255906000526020600020908101928215612b97579160200282015b82811115612b97578251825591602001919060010190612b7c565b50612ba3929150612ba7565b5090565b5b80821115612ba35760008155600101612ba8565b600060208284031215612bce57600080fd5b5035919050565b6001600160a01b0381168114612bea57600080fd5b50565b600060208284031215612bff57600080fd5b8135612c0a81612bd5565b9392505050565b60008060408385031215612c2457600080fd5b50508035926020909101359150565b600081518084526020840193506020830160005b82811015612c65578151865260209586019590910190600101612c47565b5093949350505050565b602081526000612c0a6020830184612c33565b60008060408385031215612c9557600080fd5b8235612ca081612bd5565b946020939093013593505050565b80516001600160a01b031682526020808201518184015260408083015160ff169084015260608083015160e09185018290528051918501829052600092019082906101008601905b80831015612d195783518252602082019150602084019350600183019250612cf6565b506080850151608087015260a08501519250612d3960a087018415159052565b60c085015160c087015280935050505092915050565b602081526000612c0a6020830184612cae565b60008083601f840112612d7457600080fd5b5081356001600160401b03811115612d8b57600080fd5b6020830191508360208260051b8501011115612da657600080fd5b9250929050565b60008060208385031215612dc057600080fd5b82356001600160401b03811115612dd657600080fd5b612de285828601612d62565b90969095509350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612e4757603f19878603018452612e32858351612cae565b94506020938401939190910190600101612e16565b50929695505050505050565b6001600160401b0381168114612bea57600080fd5b600080600060408486031215612e7d57600080fd5b8335612e8881612e53565b925060208401356001600160401b03811115612ea357600080fd5b612eaf86828701612d62565b9497909650939450505050565b600081518084526020840193506020830160005b82811015612c655781511515865260209586019590910190600101612ed0565b602081526000612c0a6020830184612ebc565b60005b83811015612f1e578181015183820152602001612f06565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612e4757603f1987860301845281518051808752612f78816020890160208501612f03565b601f01601f19169590950160209081019550938401939190910190600101612f4f565b803560ff81168114612fac57600080fd5b919050565b600080600060608486031215612fc657600080fd5b83359250612fd660208501612f9b565b9150612fe460408501612f9b565b90509250925092565b60a08082528651908201819052600090602088019060c0840190835b818110156130305783516001600160a01b0316835260209384019390920191600101613009565b505083810360208501526130448189612c33565b91505082810360408401526130598187612c33565b9050828103606084015261306d8186612c33565b905082810360808401526130818185612ebc565b98975050505050505050565b6000806000604084860312156130a257600080fd5b83356130ad81612bd5565b925060208401356001600160401b038111156130c857600080fd5b8401601f810186136130d957600080fd5b80356001600160401b038111156130ef57600080fd5b86602082840101111561310157600080fd5b939660209190910195509293505050565b60006020828403121561312457600080fd5b8151612c0a81612bd5565b6020808252600a908201526927b7363c9027bbb732b960b11b604082015260600190565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008261318e5761318e613153565b500490565b81810381811115610b5e57610b5e613169565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417610b5e57610b5e613169565b6001600160401b038516815260208101849052606060408201819052810182905260006001600160fb1b0383111561322057600080fd5b8260051b808560808501379190910160800195945050505050565b60ff8281168282160390811115610b5e57610b5e613169565b60008261326357613263613153565b500690565b60006020828403121561327a57600080fd5b81518015158114612c0a57600080fd5b60006020828403121561329c57600080fd5b5051919050565b600082516132b5818460208701612f03565b9190910192915050565b600080600080608085870312156132d557600080fd5b6132de85612f9b565b93506020850135925060408501356132f581612bd5565b9396929550929360600135925050565b60006020828403121561331757600080fd5b8151612c0a81612e5356fe0000000000000000000000008632f22e5a921c751cfbbff92f058a3b11e96b8aa264697066735822122078824013472f108b199f3a5b726ae2dd718d60799d2cd3b007d8b425584f4baf64736f6c634300081c0033

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

000000000000000000000000fa296156dac165af92f7fdb012b61a874670e1aa

-----Decoded View---------------
Arg [0] : history_ (address): 0xFa296156dAc165Af92F7Fdb012B61a874670e1AA

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000fa296156dac165af92f7fdb012b61a874670e1aa


Deployed Bytecode Sourcemap

13094:10739:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6794:70;;;;;;;;;;;;;:::i;:::-;;11571:91;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;11571:91:0;;;;;;;;14135:40;;;;;;;;;;-1:-1:-1;14135:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14135:40:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;872:32:1;;;854:51;;936:2;921:18;;914:34;;;;964:18;;;957:34;;;;1039:4;1027:17;;;1022:2;1007:18;;1000:45;1076:3;1061:19;;1054:35;892:3;1105:19;;1098:35;1177:14;1170:22;1164:3;1149:19;;1142:51;841:3;826:19;14135:40:0;549:650:1;15617:263:0;;;;;;;;;;-1:-1:-1;15617:263:0;;;;;:::i;:::-;;:::i;14319:32::-;;;;;;;;;;;;;;;;;;;1350:25:1;;;1338:2;1323:18;14319:32:0;1204:177:1;16004:191:0;;;;;;;;;;-1:-1:-1;16004:191:0;;;;;:::i;:::-;;:::i;15888:108::-;;;;;;;;;;-1:-1:-1;15888:108:0;;;;;:::i;:::-;;:::i;12136:409::-;;;;;;;;;;-1:-1:-1;12136:409:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;6872:155::-;;;;;;;;;;-1:-1:-1;6872:155:0;;;;;:::i;:::-;;:::i;21576:513::-;;;;;;;;;;-1:-1:-1;21576:513:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1012:107::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1012:107:0;;22097:413;;;;;;;;;;-1:-1:-1;22097:413:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11670:135::-;;;;;;;;;;-1:-1:-1;11670:135:0;;;;;:::i;:::-;;:::i;:::-;;;6566:14:1;;6559:22;6541:41;;6529:2;6514:18;11670:135:0;6401:187:1;13190:35:0;;;;;;;;;;;;13223:2;13190:35;;;;;6765:4:1;6753:17;;;6735:36;;6723:2;6708:18;13190:35:0;6593:184:1;14424:29:0;;;;;;;;;;-1:-1:-1;14424:29:0;;;;-1:-1:-1;;;;;14424:29:0;;;5943:26;;;;;;;;;;-1:-1:-1;5943:26:0;;;;;;;;19004:2313;;;;;;;;;;-1:-1:-1;19004:2313:0;;;;;:::i;:::-;;:::i;11813:315::-;;;;;;;;;;-1:-1:-1;11813:315:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;14511:45::-;;;;;;;;;;;;14551:5;14511:45;;6718:68;;;;;;;;;;;;;:::i;6016:28::-;;;;;;;;;;-1:-1:-1;6016:28:0;;;;;:::i;:::-;;:::i;22518:370::-;;;;;;;;;;-1:-1:-1;22518:370:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;14384:33::-;;;;;;;;;;;;;;;;5848:40;;;;;;;;;;;;;;;7035:143;;;;;;;;;;-1:-1:-1;7035:143:0;;;;;:::i;:::-;;:::i;21325:243::-;;;;;;;;;;-1:-1:-1;21325:243:0;;;;;:::i;:::-;;:::i;22896:934::-;;;;;;;;;;-1:-1:-1;22896:934:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;7750:260::-;;;;;;:::i;:::-;;:::i;12553:102::-;;;;;;;;;;-1:-1:-1;12629:11:0;:18;12553:102;;7532:105;;;;;;;;;;;;;:::i;5783:32::-;;;;;;;;;;;;;;;6794:70;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;;;;;;;;;6851:5:::1;6842:14:::0;;-1:-1:-1;;6842:14:0::1;::::0;;6794:70::o;11571:91::-;11612:7;-1:-1:-1;;;;;;;;;;;;;;;;11639:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11632:22;;11571:91;:::o;15617:263::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;15729:20:::1;15747:2;14666:6;15729:20;:::i;:::-;15714:11;:35;;15692:101;;;::::0;-1:-1:-1;;;15692:101:0;;13541:2:1;15692:101:0::1;::::0;::::1;13523:21:1::0;13580:2;13560:18;;;13553:30;-1:-1:-1;;;13599:18:1;;;13592:46;13655:18;;15692:101:0::1;13339:340:1::0;15692:101:0::1;15804:11;:25:::0;;;15845:27:::1;::::0;1350:25:1;;;15845:27:0::1;::::0;1338:2:1;1323:18;15845:27:0::1;;;;;;;15617:263:::0;:::o;16004:191::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;16107:3:::1;16098:6;:12;16076:78;;;::::0;-1:-1:-1;;;16076:78:0;;13886:2:1;16076:78:0::1;::::0;::::1;13868:21:1::0;13925:2;13905:18;;;13898:30;-1:-1:-1;;;13944:18:1;;;13937:46;14000:18;;16076:78:0::1;13684:340:1::0;16076:78:0::1;16165:13;:22:::0;16004:191::o;15888:108::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;15963:14:::1;:25:::0;;-1:-1:-1;;;;;;15963:25:0::1;-1:-1:-1::0;;;;;15963:25:0;;;::::1;::::0;;;::::1;::::0;;15888:108::o;12136:409::-;12255:11;:18;12216:16;;12249:24;;12245:81;;;12296:11;:18;;-1:-1:-1;12245:81:0;12336:20;12373:11;12379:5;12373:3;:11;:::i;:::-;-1:-1:-1;;;;;12359:26:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12359:26:0;-1:-1:-1;12336:49:0;-1:-1:-1;12410:5:0;12396:121;12421:3;12417:1;:7;12396:121;;;12459:11;12471:1;12459:14;;;;;;;;:::i;:::-;;;;;;;;;12442:3;12450:5;12446:1;:9;;;;:::i;:::-;12442:14;;;;;;;;:::i;:::-;;;;;;;;;;:31;12500:3;;12396:121;;;-1:-1:-1;12534:3:0;-1:-1:-1;12136:409:0;;;;;:::o;6872:155::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;6952:6:::1;6971:2;-1:-1:-1::0;;;;;6963:16:0::1;6987:6;6963:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6951:47;;;7017:1;7009:10;;;::::0;::::1;;6940:87;6872:155:::0;;:::o;21576:513::-;21644:25;;:::i;:::-;21695:386;;;;;;;;-1:-1:-1;21737:13:0;;;:5;:13;;;;;;;:20;;-1:-1:-1;;;;;21737:20:0;21695:386;;21809:13;;;;;;:21;;;;21737:20;21783:23;;;;21695:386;;;;;21783:47;;21809:21;;;21783:47;:::i;:::-;21695:386;;21854:13;;;;:5;21695:386;21854:13;;;;;;;:21;;;;;;21695:386;;;;21899:13;;;;;;;:21;;;;21695:386;;;;;;;;;;;;;;;;;;;;;21899:21;;21695:386;;21899:21;21695:386;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21695:386:0;;;-1:-1:-1;;21948:13:0;;;;:5;21695:386;21948:13;;;;;;;:25;;;;21695:386;;;;21998:22;;;;;;21695:386;;;;;;;;;22046:13;;;;;;:23;;;;;21695:386;;;;;;;;-1:-1:-1;21688:393:0;21576:513::o;22097:413::-;22181:27;22238:7;22227:8;22238:7;-1:-1:-1;;;;;22302:29:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;22263:68;;22357:6;22352:123;22373:3;22369:1;:7;22352:123;;;22408:23;22420:7;;22428:1;22420:10;;;;;;;:::i;:::-;;;;;;;22408:11;:23::i;:::-;22394:8;22403:1;22394:11;;;;;;;;:::i;:::-;;;;;;;;;;:37;22458:3;;22352:123;;;-1:-1:-1;22494:8:0;22097:413;-1:-1:-1;;;;22097:413:0:o;11670:135::-;11730:4;11754:20;;;:12;:20;;;;;;;;:29;;;:43;;-1:-1:-1;;11787:10:0;;;11670:135::o;19004:2313::-;-1:-1:-1;;;;;;;;;;;;;;;;1490:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1476:27:0;:10;-1:-1:-1;;;;;1476:27:0;;1454:94;;;;-1:-1:-1;;;1454:94:0;;15011:2:1;1454:94:0;;;14993:21:1;15050:2;15030:18;;;15023:30;-1:-1:-1;;;15069:18:1;;;15062:47;15126:18;;1454:94:0;14809:341:1;1454:94:0;-1:-1:-1;;;;;11531:24:0;;19185:14:::1;11531:24:::0;;;:13;:24;;;;;;19277:25:::1;11531:24:::0;19277:14:::1;:25::i;:::-;19354:17;19374:13:::0;;;:5:::1;:13;::::0;;;;:23:::1;::::0;::::1;::::0;19424:21:::1;::::0;;::::1;::::0;::::1;;19517:11:::0;;;:63:::1;;-1:-1:-1::0;19578:1:0::1;19546:13:::0;;;:5:::1;:13;::::0;;;;:20;-1:-1:-1;;;;;19546:20:0::1;:34:::0;19517:63:::1;:111;;;-1:-1:-1::0;19598:13:0::1;::::0;;;:5:::1;:13;::::0;;;;:22:::1;;::::0;::::1;;:30;;:22:::0;:30:::1;19517:111;:142;;;-1:-1:-1::0;19645:14:0;;19517:142:::1;:171;;;-1:-1:-1::0;19676:12:0::1;::::0;::::1;::::0;19517:171:::1;19499:304;;;19720:50;19739:9;19750:6;19758:11;;19720:50;;;;;;;;;:::i;:::-;;;;;;;;19785:7;;;6940:87;6872:155:::0;;:::o;19499:304::-:1;19846:13;::::0;;;:5:::1;:13;::::0;;;;:22:::1;;:29:::0;;-1:-1:-1;;19846:29:0::1;19871:4;19846:29;::::0;;::::1;20038:31:::0;::::1;19846:13:::0;20138:828:::1;20160:7;20156:11;;:1;:11;;;20138:828;;;20185:64:::0;;20228:5:::1;20185:64;20297:13;20331:12;20342:1:::0;13223:2:::1;20331:12;:::i;:::-;20313:31;;:11;;20325:1;20313:14;;;;;;;;;:::i;:::-;;;;;;;:31;;;;:::i;:::-;20297:47;;20371:13;20363:5;:21;20359:562;;;20472:14;20546:31;14666:6;20546:13:::0;:31:::1;:::i;:::-;20523:12;20534:1:::0;13223:2:::1;20523:12;:::i;:::-;20509:28;::::0;::::1;;:9:::0;:28:::1;:::i;:::-;20491:48;::::0;14551:5:::1;20491:48;:::i;:::-;20489:90;;;;:::i;:::-;20472:107;;20668:6;20641:5;:13;20647:6;20641:13;;;;;;;;;;;:21;;20663:1;20641:24;;;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;:33:::0;20768:23;;;::::1;::::0;-1:-1:-1;;20888:15:0;;;;20359:562:::1;-1:-1:-1::0;20949:3:0::1;;20138:828;;;-1:-1:-1::0;21007:13:0::1;::::0;;;:5:::1;:13;::::0;;;;:25:::1;::::0;::::1;:41:::0;;;21102:20;;21139:28:::1;::::0;;::::1;::::0;21088:80:::1;::::0;-1:-1:-1;;;;;21102:20:0::1;::::0;21035:13;;21088::::1;:80::i;:::-;21230:13;::::0;;;:5:::1;:13;::::0;;;;:20;;;21260:23;;::::1;::::0;-1:-1:-1;;;;;21230:20:0;;::::1;::::0;21220:89:::1;::::0;21236:6;;21260:33:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;21220:89;::::0;;16246:25:1;;;16302:2;16287:18;;16280:34;;;;16330:18;;16323:34;;;16234:2;16219:18;21220:89:0::1;;;;;;;19133:2184;;;;;19004:2313:::0;;;:::o;11813:315::-;11895:20;11939:7;;-1:-1:-1;;;;;11973:15:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11973:15:0;;11964:24;;12004:6;11999:122;12020:3;12016:1;:7;11999:122;;;12053:12;:24;12066:7;;12074:1;12066:10;;;;;;;:::i;:::-;;;;;;;12053:24;;;;;;;;;;;;;;;;;;;;;12041:6;12048:1;12041:9;;;;;;;;:::i;:::-;:36;;;:9;;;;;;;;;;;:36;12104:3;;11999:122;;;;11917:211;11813:315;;;;:::o;6718:68::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;6765:6:::1;:13:::0;;-1:-1:-1;;6765:13:0::1;6774:4;6765:13;::::0;;6718:68::o;6016:28::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6016:28:0;:::o;22518:370::-;22604:14;22642:7;22631:8;22642:7;-1:-1:-1;;;;;22693:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22667:42;;22725:6;22720:135;22741:3;22737:1;:7;22720:135;;;22787:23;22799:7;;22807:1;22799:10;;;;;;;:::i;22787:23::-;22776:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;22762:8;22771:1;22762:11;;;;;;;;:::i;:::-;;;;;;;;;;:49;22838:3;;22720:135;;7035:143;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;7116:54:::1;7144:5;7151:10;7163:6;7116:27;:54::i;:::-;7035:143:::0;;:::o;21325:243::-;21438:7;21527:31;14666:6;21527:31;;;;:::i;:::-;21485:33;;;;:9;:33;:::i;:::-;21467:53;;14551:5;21467:53;:::i;:::-;21465:95;;;;:::i;:::-;21458:102;21325:243;-1:-1:-1;;;;21325:243:0:o;22896:934::-;22996:24;;;;;23202:7;;-1:-1:-1;;;;;23237:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23237:18:0;;23227:28;;23295:3;-1:-1:-1;;;;;23281:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23281:18:0;;23266:33;;23339:3;-1:-1:-1;;;;;23325:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23325:18:0;;23310:33;;23381:3;-1:-1:-1;;;;;23367:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23367:18:0;;23354:31;;23419:3;-1:-1:-1;;;;;23408:15:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23408:15:0;;23396:27;;23441:6;23436:387;23457:3;23453:1;:7;23436:387;;;23491:5;:17;23497:7;;23505:1;23497:10;;;;;;;:::i;:::-;;;;;;;23491:17;;;;;;;;;;;:24;;;;;;;;;;-1:-1:-1;;;;;23491:24:0;23478:7;23486:1;23478:10;;;;;;;;:::i;:::-;;;;;;:37;-1:-1:-1;;;;;23478:37:0;;;-1:-1:-1;;;;;23478:37:0;;;;;23578:5;:17;23584:7;;23592:1;23584:10;;;;;;;:::i;:::-;;;;;;;;;;23578:17;;-1:-1:-1;23578:17:0;;;;;;;;-1:-1:-1;23578:17:0;;;:25;;;;;;23548:5;;23554:7;;23562:1;23554:10;;;;;;;:::i;:::-;;;;;;;23548:17;;;;;;;;;;;:27;;;:55;;;;:::i;:::-;23530:12;23543:1;23530:15;;;;;;;;:::i;:::-;;;;;;:73;;;;;23636:5;:17;23642:7;;23650:1;23642:10;;;;;;;:::i;:::-;;;;;;;23636:17;;;;;;;;;;;:29;;;23618:12;23631:1;23618:15;;;;;;;;:::i;:::-;;;;;;:47;;;;;23696:5;:17;23702:7;;23710:1;23702:10;;;;;;;:::i;:::-;;;;;;;23696:17;;;;;;;;;;;:27;;;23680:10;23691:1;23680:13;;;;;;;;:::i;:::-;;;;;;:43;;;;;23753:5;:17;23759:7;;23767:1;23759:10;;;;;;;:::i;:::-;;;;;;;23753:17;;;;;;;;;;;:26;;;;;;;;;;;;23738:9;23748:1;23738:12;;;;;;;;:::i;:::-;:41;;;:12;;;;;;;;;;;:41;23806:3;;23436:387;;;;23180:650;22896:934;;;;;;;;:::o;7750:260::-;7846:6;-1:-1:-1;;;;;1631:20:0;;1641:10;1631:20;1627:182;;1694:36;;-1:-1:-1;;;1694:36:0;;1719:10;1694:36;;;160:51:1;-1:-1:-1;;;;;;;;;;;1076:42:0;1694:24;;133:18:1;;1694:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1668:129;;;;-1:-1:-1;;;1668:129:0;;16852:2:1;1668:129:0;;;16834:21:1;16891:2;16871:18;;;16864:30;16930:33;16910:18;;;16903:61;16981:18;;1668:129:0;16650:355:1;1668:129:0;-1:-1:-1;;;;;;;;;;;;;;;;1890:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:25;1868:91;;;::::0;-1:-1:-1;;;1868:91:0;;17212:2:1;1868:91:0::1;::::0;::::1;17194:21:1::0;17251:2;17231:18;;;17224:30;-1:-1:-1;;;17270:18:1;;;17263:46;17326:18;;1868:91:0::1;17010:340:1::0;1868:91:0::1;7900:6:::2;::::0;::::2;;7899:7;7877:63;;;::::0;-1:-1:-1;;;7877:63:0;;17557:2:1;7877:63:0::2;::::0;::::2;17539:21:1::0;17596:1;17576:18;;;17569:29;-1:-1:-1;;;17614:18:1;;;17607:36;17660:18;;7877:63:0::2;17355:329:1::0;7877:63:0::2;7975:27;7985:6;7993:8;;7975:9;:27::i;:::-;7750:260:::0;;;;:::o;7532:105::-;7574:7;-1:-1:-1;;;;;;;;;;;;;;;;7606:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7601:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;11201:224::-;-1:-1:-1;;;;;;;;;;;;;;;;11307:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11300:45:0;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;11393:24:0;;;;;:13;:24;;;;;11386:31;11201:224::o;8105:1941::-;8217:17;;8213:1824;;8326:14;8309:13;:31;8305:1552;;-1:-1:-1;;;;;;;;;;;;;;;;8696:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8682:145;;-1:-1:-1;;;8682:145:0;;8772:7;8682:145;;;18052:25:1;-1:-1:-1;;;;;18113:32:1;;;18093:18;;;18086:60;8682:44:0;;;;;;;8734:14;;18025:18:1;;8682:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8887:17;8923:14;8907:13;:30;;;;:::i;:::-;8887:50;-1:-1:-1;8960:13:0;;8956:175;;-1:-1:-1;;;;;;;;;;;;;;;;9060:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9053:58;;-1:-1:-1;;;9053:58:0;;9084:7;9053:58;;;18359:25:1;-1:-1:-1;;;;;18420:32:1;;;18400:18;;;18393:60;18469:18;;;18462:34;;;9053:30:0;;;;;;;18332:18:1;;9053:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8342:822;6940:87:::1;6872:155:::0;;:::o;8305:1552::-;-1:-1:-1;;;;;;;;;;;;;;;;9443:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9429:144;;-1:-1:-1;;;9429:144:0;;9518:7;9429:144;;;18052:25:1;-1:-1:-1;;;;;18113:32:1;;;18093:18;;;18086:60;9429:44:0;;;;;;;9481:13;;18025:18:1;;9429:144:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9653:17;9690:13;9673:14;:30;;;;:::i;:::-;9653:50;;-1:-1:-1;;;;;;;;;;;;;;;;9783:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9776:35:0;;9819:9;9831:7;9776:63;;;;;;;;;;;;;1350:25:1;;1338:2;1323:18;;1204:177;9776:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9170:687;6940:87:::1;6872:155:::0;;:::o;8213:1824::-;-1:-1:-1;;;;;;;;;;;;;;;;9964:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9957:35:0;;10000:14;10017:7;9957:68;;;;;;;;;;;;;1350:25:1;;1338:2;1323:18;;1204:177;9957:68:0;;;;;;;;;;;;;;;;;;;;3503:449;3735:45;;;-1:-1:-1;;;;;18699:32:1;;;3735:45:0;;;18681:51:1;18748:18;;;;18741:34;;;3735:45:0;;;;;;;;;;18654:18:1;;;;3735:45:0;;;;;;;-1:-1:-1;;;;;3735:45:0;-1:-1:-1;;;3735:45:0;;;3724:57;;-1:-1:-1;;;;3724:10:0;;;;:57;;3735:45;3724:57;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3688:93;;;;3814:7;:57;;;;-1:-1:-1;3826:11:0;;:16;;:44;;;3857:4;3846:24;;;;;;;;;;;;:::i;:::-;3792:152;;;;-1:-1:-1;;;3792:152:0;;19280:2:1;3792:152:0;;;19262:21:1;19319:2;19299:18;;;19292:30;19358:34;19338:18;;;19331:62;-1:-1:-1;;;19409:18:1;;;19402:43;19462:19;;3792:152:0;19078:409:1;3792:152:0;3610:342;;3503:449;;;:::o;16203:2727::-;16324:14;16341:11;:9;:11::i;:::-;16324:28;-1:-1:-1;16408:13:0;;;;16527:56;;;;16538:8;16527:56;:::i;:::-;16393:190;;;;;;;;16659:6;16646:9;:19;;16624:84;;;;-1:-1:-1;;;16624:84:0;;20213:2:1;16624:84:0;;;20195:21:1;20252:2;20232:18;;;20225:30;-1:-1:-1;;;20271:18:1;;;20264:45;20326:18;;16624:84:0;20011:339:1;16624:84:0;16741:21;16755:6;16741:13;:21::i;:::-;:29;;16766:4;16741:29;16719:99;;;;-1:-1:-1;;;16719:99:0;;20557:2:1;16719:99:0;;;20539:21:1;20596:2;20576:18;;;20569:30;-1:-1:-1;;;20615:18:1;;;20608:50;20675:18;;16719:99:0;20355:344:1;16719:99:0;16861:1;16851:7;:11;;;:33;;;;-1:-1:-1;13223:2:0;16866:18;;;;16851:33;16829:105;;;;-1:-1:-1;;;16829:105:0;;20906:2:1;16829:105:0;;;20888:21:1;20945:2;20925:18;;;20918:30;-1:-1:-1;;;20964:18:1;;;20957:52;21026:18;;16829:105:0;20704:346:1;16829:105:0;16986:22;17011:18;17023:6;17011:9;:18;:::i;:::-;16986:43;;17090:25;14666:6;17137:11;;17120:14;:28;;;;:::i;:::-;17118:50;;;;:::i;:::-;17185:14;;17090:78;;-1:-1:-1;;;;;;17185:14:0;:28;;:50;;-1:-1:-1;17217:13:0;;:18;17185:50;17181:680;;;17322:43;17334:17;17353:3;17358:6;17322:11;:43::i;:::-;17181:680;;;17430:18;17491:3;17473:13;;17453:17;:33;;;;:::i;:::-;17451:43;;;;:::i;:::-;17430:64;-1:-1:-1;17554:26:0;17583:30;17430:64;17583:17;:30;:::i;:::-;17554:59;;17698:44;17710:18;17730:3;17735:6;17698:11;:44::i;:::-;17822:14;;17791:58;;-1:-1:-1;;;;;17822:14:0;17838:10;17791:30;:58::i;:::-;17385:476;;17181:680;17906:17;17926:24;;;;:14;:24;:::i;:::-;17906:44;;18019:1;18007:9;:13;17985:81;;;;-1:-1:-1;;;17985:81:0;;21257:2:1;17985:81:0;;;21239:21:1;21296:2;21276:18;;;21269:30;-1:-1:-1;;;21315:18:1;;;21308:48;21373:18;;17985:81:0;21055:342:1;17985:81:0;18143:43;18155:17;18174:3;18179:6;18143:11;:43::i;:::-;18226:13;;;;:5;:13;;;;;:29;;-1:-1:-1;;;;;;18226:29:0;-1:-1:-1;;;;;18226:29:0;;;;;-1:-1:-1;18266:23:0;:35;;;18343:34;18360:17;18343:14;:34;:::i;:::-;18312:13;;;;:5;:13;;;;;:28;;;:65;;;;18388:21;;;:31;;-1:-1:-1;;18388:31:0;;;;;;;;;;18456:15;18430:23;;;;:41;;;;-1:-1:-1;;;;;18506:22:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18506:22:0;-1:-1:-1;18482:13:0;;;;:5;:13;;;;;;;;:46;;;;:21;;;;;:46;;;:::i;:::-;;18647:31;18663:6;18671;18647:15;:31::i;:::-;18716:36;18729:6;18737:14;18716:12;:36::i;:::-;18813:6;-1:-1:-1;;;;;18801:27:0;;18821:6;18801:27;;;;1350:25:1;;1338:2;1323:18;;1204:177;18801:27:0;;;;;;;;18873:47;18888:6;18896:7;18905:14;18873;:47::i;:::-;16281:2649;;;;;;;;16203:2727;;;:::o;7348:172::-;-1:-1:-1;;;;;;;;;;;;;;;;7451:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7437:75;;-1:-1:-1;;;7437:75:0;;-1:-1:-1;;;;;21594:32:1;;;7437:75:0;;;21576:51:1;21663:32;;;21643:18;;;21636:60;7437:44:0;;;;;;;7489:9;;21549:18:1;;7437:75:0;21402:300:1;4466:217:0;4579:12;;;4539;4579;;;;;;;;;-1:-1:-1;;;;;4557:7:0;;;4572:5;;4557:35;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4538:54;;;4611:7;4603:72;;;;-1:-1:-1;;;4603:72:0;;21909:2:1;4603:72:0;;;21891:21:1;21948:2;21928:18;;;21921:30;21987:34;21967:18;;;21960:62;-1:-1:-1;;;22038:18:1;;;22031:50;22098:19;;4603:72:0;21707:416:1;10135:272:0;10243:40;;-1:-1:-1;;;10243:40:0;;-1:-1:-1;;;;;22348:32:1;;;10243:40:0;;;22330:51:1;10267:7:0;22397:18:1;;;22390:34;22440:18;;;22433:34;;;10243:7:0;:15;;;;22303:18:1;;10243:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10337:11:0;:24;;;;;;;;;;;;-1:-1:-1;10372:20:0;;;:12;10337:24;10372:20;;;;;:27;;-1:-1:-1;;10372:27:0;;;;;;;-1:-1:-1;;;10135:272:0:o;7186:154::-;-1:-1:-1;;;;;;;;;;;;;;;;7275:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7258:74;;-1:-1:-1;;;7258:74:0;;-1:-1:-1;;;;;22348:32:1;;;7258:74:0;;;22330:51:1;22397:18;;;22390:34;;;7324:7:0;22440:18:1;;;22433:34;7258:51:0;;;;;;;22303:18:1;;7258:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7186:154;;:::o;10415:778::-;10568:16;-1:-1:-1;;;;;;;;;;;;;;;;10592:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10587:33:0;;10628:11;:9;:11::i;:::-;10587:185;;-1:-1:-1;;;;;;10587:185:0;;;;;;;;;;22648:25:1;;;22721:4;22709:17;;22689:18;;;22682:45;22621:18;;10587:185:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10856:24:0;;;;;;:13;:24;;;;;;10568:204;;-1:-1:-1;10856:29:0;10834:95;;;;-1:-1:-1;;;10834:95:0;;23194:2:1;10834:95:0;;;23176:21:1;23233:2;23213:18;;;23206:30;-1:-1:-1;;;23252:18:1;;;23245:46;23308:18;;10834:95:0;22992:340:1;10834:95:0;-1:-1:-1;;;;;11000:24:0;;;;;;:13;:24;;;;;;;;;:33;;;11083:15;;-1:-1:-1;;;;;;11083:15:0;;;;-1:-1:-1;;;;;;;;;;;1076:42:0;11083:13;;:15;;;;;11000:24;;11083:15;;;;;1076:42;11083:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11076:39:0;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11158:27;11178:6;11158:27;;;;1350:25:1;;1338:2;1323:18;;1204:177;11158:27:0;;;;;;;;10504:689;10415:778;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;222:226:1;281:6;334:2;322:9;313:7;309:23;305:32;302:52;;;350:1;347;340:12;302:52;-1:-1:-1;395:23:1;;222:226;-1:-1:-1;222:226:1:o;1386:131::-;-1:-1:-1;;;;;1461:31:1;;1451:42;;1441:70;;1507:1;1504;1497:12;1441:70;1386:131;:::o;1522:247::-;1581:6;1634:2;1622:9;1613:7;1609:23;1605:32;1602:52;;;1650:1;1647;1640:12;1602:52;1689:9;1676:23;1708:31;1733:5;1708:31;:::i;:::-;1758:5;1522:247;-1:-1:-1;;;1522:247:1:o;1774:346::-;1842:6;1850;1903:2;1891:9;1882:7;1878:23;1874:32;1871:52;;;1919:1;1916;1909:12;1871:52;-1:-1:-1;;1964:23:1;;;2084:2;2069:18;;;2056:32;;-1:-1:-1;1774:346:1:o;2125:420::-;2178:3;2216:5;2210:12;2243:6;2238:3;2231:19;2275:4;2270:3;2266:14;2259:21;;2314:4;2307:5;2303:16;2337:1;2347:173;2361:6;2358:1;2355:13;2347:173;;;2422:13;;2410:26;;2465:4;2456:14;;;;2493:17;;;;2383:1;2376:9;2347:173;;;-1:-1:-1;2536:3:1;;2125:420;-1:-1:-1;;;;2125:420:1:o;2550:261::-;2729:2;2718:9;2711:21;2692:4;2749:56;2801:2;2790:9;2786:18;2778:6;2749:56;:::i;2816:367::-;2884:6;2892;2945:2;2933:9;2924:7;2920:23;2916:32;2913:52;;;2961:1;2958;2951:12;2913:52;3000:9;2987:23;3019:31;3044:5;3019:31;:::i;:::-;3069:5;3147:2;3132:18;;;;3119:32;;-1:-1:-1;;;2816:367:1:o;3188:1007::-;3318:12;;-1:-1:-1;;;;;3314:38:1;3302:51;;3402:4;3391:16;;;3385:23;3369:14;;;3362:47;3462:4;3451:16;;;3445:23;3470:4;3441:34;3425:14;;;3418:58;3522:4;3511:16;;;3505:23;3288:4;3544:14;;;3537:28;;;3614:19;;3279:14;;;3642:20;;;3249:3;;3716:23;;3249:3;;3689;3680:13;;;3767:179;3781:6;3778:1;3775:13;3767:179;;;3850:6;3844:13;3837:5;3830:28;3891:4;3884:5;3880:16;3871:25;;3931:4;3923:6;3919:17;3909:27;;3803:1;3800;3796:9;3791:14;;3767:179;;;3771:3;3995:4;3988:5;3984:16;3978:23;3971:4;3966:3;3962:14;3955:47;4050:4;4043:5;4039:16;4033:23;4011:45;;4065:47;4106:4;4101:3;4097:14;4081;523:13;516:21;504:34;;453:91;4065:47;4161:4;4154:5;4150:16;4144:23;4137:4;4132:3;4128:14;4121:47;4184:5;4177:12;;;;;3188:1007;;;;:::o;4200:291::-;4401:2;4390:9;4383:21;4364:4;4421:64;4481:2;4470:9;4466:18;4458:6;4421:64;:::i;4729:367::-;4792:8;4802:6;4856:3;4849:4;4841:6;4837:17;4833:27;4823:55;;4874:1;4871;4864:12;4823:55;-1:-1:-1;4897:20:1;;-1:-1:-1;;;;;4929:30:1;;4926:50;;;4972:1;4969;4962:12;4926:50;5009:4;5001:6;4997:17;4985:29;;5069:3;5062:4;5052:6;5049:1;5045:14;5037:6;5033:27;5029:38;5026:47;5023:67;;;5086:1;5083;5076:12;5023:67;4729:367;;;;;:::o;5101:437::-;5187:6;5195;5248:2;5236:9;5227:7;5223:23;5219:32;5216:52;;;5264:1;5261;5254:12;5216:52;5304:9;5291:23;-1:-1:-1;;;;;5329:6:1;5326:30;5323:50;;;5369:1;5366;5359:12;5323:50;5408:70;5470:7;5461:6;5450:9;5446:22;5408:70;:::i;:::-;5497:8;;5382:96;;-1:-1:-1;5101:437:1;-1:-1:-1;;;;5101:437:1:o;5543:853::-;5757:4;5805:2;5794:9;5790:18;5835:2;5824:9;5817:21;5858:6;5893;5887:13;5924:6;5916;5909:22;5962:2;5951:9;5947:18;5940:25;;6024:2;6014:6;6011:1;6007:14;5996:9;5992:30;5988:39;5974:53;;6062:2;6054:6;6050:15;6083:1;6093:274;6107:6;6104:1;6101:13;6093:274;;;6200:2;6196:7;6184:9;6176:6;6172:22;6168:36;6163:3;6156:49;6228:59;6280:6;6271;6265:13;6228:59;:::i;:::-;6218:69;-1:-1:-1;6322:2:1;6345:12;;;;6310:15;;;;;6129:1;6122:9;6093:274;;;-1:-1:-1;6384:6:1;;5543:853;-1:-1:-1;;;;;;5543:853:1:o;6782:129::-;-1:-1:-1;;;;;6860:5:1;6856:30;6849:5;6846:41;6836:69;;6901:1;6898;6891:12;6916:570;7010:6;7018;7026;7079:2;7067:9;7058:7;7054:23;7050:32;7047:52;;;7095:1;7092;7085:12;7047:52;7134:9;7121:23;7153:30;7177:5;7153:30;:::i;:::-;7202:5;-1:-1:-1;7258:2:1;7243:18;;7230:32;-1:-1:-1;;;;;7274:30:1;;7271:50;;;7317:1;7314;7307:12;7271:50;7356:70;7418:7;7409:6;7398:9;7394:22;7356:70;:::i;:::-;6916:570;;7445:8;;-1:-1:-1;7330:96:1;;-1:-1:-1;;;;6916:570:1:o;7491:433::-;7541:3;7579:5;7573:12;7606:6;7601:3;7594:19;7638:4;7633:3;7629:14;7622:21;;7677:4;7670:5;7666:16;7700:1;7710:189;7724:6;7721:1;7718:13;7710:189;;;7799:13;;7792:21;7785:29;7773:42;;7844:4;7835:14;;;;7872:17;;;;7746:1;7739:9;7710:189;;7929:252;8102:2;8091:9;8084:21;8065:4;8122:53;8171:2;8160:9;8156:18;8148:6;8122:53;:::i;8186:250::-;8271:1;8281:113;8295:6;8292:1;8289:13;8281:113;;;8371:11;;;8365:18;8352:11;;;8345:39;8317:2;8310:10;8281:113;;;-1:-1:-1;;8428:1:1;8410:16;;8403:27;8186:250::o;8441:991::-;8601:4;8649:2;8638:9;8634:18;8679:2;8668:9;8661:21;8702:6;8737;8731:13;8768:6;8760;8753:22;8806:2;8795:9;8791:18;8784:25;;8868:2;8858:6;8855:1;8851:14;8840:9;8836:30;8832:39;8818:53;;8906:2;8898:6;8894:15;8927:1;8937:466;8951:6;8948:1;8945:13;8937:466;;;9044:2;9040:7;9028:9;9020:6;9016:22;9012:36;9007:3;9000:49;9078:6;9072:13;9120:2;9114:9;9151:8;9143:6;9136:24;9173:74;9238:8;9233:2;9225:6;9221:15;9216:2;9212;9208:11;9173:74;:::i;:::-;9313:2;9290:17;-1:-1:-1;;9286:31:1;9274:44;;;;9320:2;9270:53;;;;-1:-1:-1;9381:12:1;;;;9346:15;;;;;8973:1;8966:9;8937:466;;9668:156;9734:20;;9794:4;9783:16;;9773:27;;9763:55;;9814:1;9811;9804:12;9763:55;9668:156;;;:::o;9829:366::-;9902:6;9910;9918;9971:2;9959:9;9950:7;9946:23;9942:32;9939:52;;;9987:1;9984;9977:12;9939:52;10032:23;;;-1:-1:-1;10098:36:1;10130:2;10115:18;;10098:36;:::i;:::-;10088:46;;10153:36;10185:2;10174:9;10170:18;10153:36;:::i;:::-;10143:46;;9829:366;;;;;:::o;10200:1424::-;10696:3;10709:22;;;10780:13;;10681:19;;;10802:22;;;10648:4;;10894;10882:17;;;10855:3;10840:19;;;10648:4;10927:199;10941:6;10938:1;10935:13;10927:199;;;11006:13;;-1:-1:-1;;;;;11002:39:1;10990:52;;11071:4;11099:17;;;;11062:14;;;;11038:1;10956:9;10927:199;;;10931:3;;11173:9;11168:3;11164:19;11157:4;11146:9;11142:20;11135:49;11207:41;11244:3;11236:6;11207:41;:::i;:::-;11193:55;;;11296:9;11288:6;11284:22;11279:2;11268:9;11264:18;11257:50;11330:44;11367:6;11359;11330:44;:::i;:::-;11316:58;;11422:9;11414:6;11410:22;11405:2;11394:9;11390:18;11383:50;11456:44;11493:6;11485;11456:44;:::i;:::-;11442:58;;11549:9;11541:6;11537:22;11531:3;11520:9;11516:19;11509:51;11577:41;11611:6;11603;11577:41;:::i;:::-;11569:49;10200:1424;-1:-1:-1;;;;;;;;10200:1424:1:o;11629:721::-;11708:6;11716;11724;11777:2;11765:9;11756:7;11752:23;11748:32;11745:52;;;11793:1;11790;11783:12;11745:52;11832:9;11819:23;11851:31;11876:5;11851:31;:::i;:::-;11901:5;-1:-1:-1;11957:2:1;11942:18;;11929:32;-1:-1:-1;;;;;11973:30:1;;11970:50;;;12016:1;12013;12006:12;11970:50;12039:22;;12092:4;12084:13;;12080:27;-1:-1:-1;12070:55:1;;12121:1;12118;12111:12;12070:55;12161:2;12148:16;-1:-1:-1;;;;;12179:6:1;12176:30;12173:50;;;12219:1;12216;12209:12;12173:50;12264:7;12259:2;12250:6;12246:2;12242:15;12238:24;12235:37;12232:57;;;12285:1;12282;12275:12;12232:57;11629:721;;12316:2;12308:11;;;;;-1:-1:-1;12338:6:1;;-1:-1:-1;;;11629:721:1:o;12355:251::-;12425:6;12478:2;12466:9;12457:7;12453:23;12449:32;12446:52;;;12494:1;12491;12484:12;12446:52;12526:9;12520:16;12545:31;12570:5;12545:31;:::i;12611:334::-;12813:2;12795:21;;;12852:2;12832:18;;;12825:30;-1:-1:-1;;;12886:2:1;12871:18;;12864:40;12936:2;12921:18;;12611:334::o;12950:127::-;13011:10;13006:3;13002:20;12999:1;12992:31;13042:4;13039:1;13032:15;13066:4;13063:1;13056:15;13082:127;13143:10;13138:3;13134:20;13131:1;13124:31;13174:4;13171:1;13164:15;13198:4;13195:1;13188:15;13214:120;13254:1;13280;13270:35;;13285:18;;:::i;:::-;-1:-1:-1;13319:9:1;;13214:120::o;14029:128::-;14096:9;;;14117:11;;;14114:37;;;14131:18;;:::i;14162:127::-;14223:10;14218:3;14214:20;14211:1;14204:31;14254:4;14251:1;14244:15;14278:4;14275:1;14268:15;14294:127;14355:10;14350:3;14346:20;14343:1;14336:31;14386:4;14383:1;14376:15;14410:4;14407:1;14400:15;14636:168;14709:9;;;14740;;14757:15;;;14751:22;;14737:37;14727:71;;14778:18;;:::i;15155:611::-;-1:-1:-1;;;;;15399:31:1;;15381:50;;15462:2;15447:18;;15440:34;;;15510:2;15505;15490:18;;15483:30;;;15529:18;;15522:34;;;-1:-1:-1;;;;;;15568:31:1;;15565:51;;;15612:1;15609;15602:12;15565:51;15646:6;15643:1;15639:14;15704:6;15696;15690:3;15679:9;15675:19;15662:49;15732:22;;;;15756:3;15728:32;;15155:611;-1:-1:-1;;;;;15155:611:1:o;15771:151::-;15861:4;15854:12;;;15840;;;15836:31;;15879:14;;15876:40;;;15896:18;;:::i;15927:112::-;15959:1;15985;15975:35;;15990:18;;:::i;:::-;-1:-1:-1;16024:9:1;;15927:112::o;16368:277::-;16435:6;16488:2;16476:9;16467:7;16463:23;16459:32;16456:52;;;16504:1;16501;16494:12;16456:52;16536:9;16530:16;16589:5;16582:13;16575:21;16568:5;16565:32;16555:60;;16611:1;16608;16601:12;17689:184;17759:6;17812:2;17800:9;17791:7;17787:23;17783:32;17780:52;;;17828:1;17825;17818:12;17780:52;-1:-1:-1;17851:16:1;;17689:184;-1:-1:-1;17689:184:1:o;18786:287::-;18915:3;18953:6;18947:13;18969:66;19028:6;19023:3;19016:4;19008:6;19004:17;18969:66;:::i;:::-;19051:16;;;;;18786:287;-1:-1:-1;;18786:287:1:o;19492:514::-;19584:6;19592;19600;19608;19661:3;19649:9;19640:7;19636:23;19632:33;19629:53;;;19678:1;19675;19668:12;19629:53;19701:27;19718:9;19701:27;:::i;:::-;19691:37;-1:-1:-1;19797:2:1;19782:18;;19769:32;;-1:-1:-1;19877:2:1;19862:18;;19849:32;19890:33;19849:32;19890:33;:::i;:::-;19492:514;;;;-1:-1:-1;19942:7:1;;19996:2;19981:18;19968:32;;-1:-1:-1;;19492:514:1:o;22738:249::-;22807:6;22860:2;22848:9;22839:7;22835:23;22831:32;22828:52;;;22876:1;22873;22866:12;22828:52;22908:9;22902:16;22927:30;22951:5;22927:30;:::i

Swarm Source

ipfs://78824013472f108b199f3a5b726ae2dd718d60799d2cd3b007d8b425584f4baf

Block Transaction Difficulty 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
0x8ad43087850d844F32901739B0bB6189EB824651
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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