MATIC Price: $1.00 (-1.13%)
Gas: 110 GWei
 
Transaction Hash
Method
Block
From
To
Value
Manual Payout256165142022-03-05 17:32:52754 days ago1646501572IN
0x54437E99...90da50452
0 MATIC0.0011814745
Manual Payout256165142022-03-05 17:32:52754 days ago1646501572IN
0x54437E99...90da50452
0 MATIC0.0014440255
Manual Payout256165142022-03-05 17:32:52754 days ago1646501572IN
0x54437E99...90da50452
0 MATIC0.0007876530
Manual Payout256165142022-03-05 17:32:52754 days ago1646501572IN
0x54437E99...90da50452
0 MATIC0.0009976938
Manual Payout256165142022-03-05 17:32:52754 days ago1646501572IN
0x54437E99...90da50452
0 MATIC0.001575360
Manual Payout256165142022-03-05 17:32:52754 days ago1646501572IN
0x54437E99...90da50452
0 MATIC0.0010239439
Manual Payout256165142022-03-05 17:32:52754 days ago1646501572IN
0x54437E99...90da50452
0 MATIC0.001575360
Manual Payout256165142022-03-05 17:32:52754 days ago1646501572IN
0x54437E99...90da50452
0 MATIC0.001575360
Manual Payout256165142022-03-05 17:32:52754 days ago1646501572IN
0x54437E99...90da50452
0 MATIC0.0012077346
Manual Payout256165142022-03-05 17:32:52754 days ago1646501572IN
0x54437E99...90da50452
0 MATIC0.0008157631
Manual Payout256165142022-03-05 17:32:52754 days ago1646501572IN
0x54437E99...90da50452
0 MATIC0.0008157631
Manual Payout256165142022-03-05 17:32:52754 days ago1646501572IN
0x54437E99...90da50452
0 MATIC0.0008683933
Manual Payout256165142022-03-05 17:32:52754 days ago1646501572IN
0x54437E99...90da50452
0 MATIC0.0008420832
Manual Payout256165142022-03-05 17:32:52754 days ago1646501572IN
0x54437E99...90da50452
0 MATIC0.0007894530
Manual Payout256165142022-03-05 17:32:52754 days ago1646501572IN
0x54437E99...90da50452
0 MATIC0.0007894530
Manual Payout256165142022-03-05 17:32:52754 days ago1646501572IN
0x54437E99...90da50452
0 MATIC0.0007894530
Manual Payout256165142022-03-05 17:32:52754 days ago1646501572IN
0x54437E99...90da50452
0 MATIC0.0007894530
Manual Payout256165142022-03-05 17:32:52754 days ago1646501572IN
0x54437E99...90da50452
0 MATIC0.0013157550
Manual Payout256165142022-03-05 17:32:52754 days ago1646501572IN
0x54437E99...90da50452
0 MATIC0.0008157631
Manual Payout256165142022-03-05 17:32:52754 days ago1646501572IN
0x54437E99...90da50452
0 MATIC0.0008157631
Manual Payout256165142022-03-05 17:32:52754 days ago1646501572IN
0x54437E99...90da50452
0 MATIC0.0007894530
Manual Payout256165142022-03-05 17:32:52754 days ago1646501572IN
0x54437E99...90da50452
0 MATIC0.0010262839
Manual Payout256165142022-03-05 17:32:52754 days ago1646501572IN
0x54437E99...90da50452
0 MATIC0.0008157631
Manual Payout256165142022-03-05 17:32:52754 days ago1646501572IN
0x54437E99...90da50452
0 MATIC0.0008157631
Manual Payout256165142022-03-05 17:32:52754 days ago1646501572IN
0x54437E99...90da50452
0 MATIC0.0007894530
View all transactions

Parent Txn Hash Block From To Value
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
dgBlackJack

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-06-10
*/

// SPDX-License-Identifier: -- 🎲 --

pragma solidity ^0.7.5;

interface TreasuryInstance {

    function getTokenAddress(
        uint8 _tokenIndex
    ) external view returns (address);

    function tokenInboundTransfer(
        uint8 _tokenIndex,
        address _from,
        uint256 _amount
    )  external returns (bool);

    function tokenOutboundTransfer(
        uint8 _tokenIndex,
        address _to,
        uint256 _amount
    ) external returns (bool);

    function checkAllocatedTokens(
        uint8 _tokenIndex
    ) external view returns (uint256);

    function checkApproval(
        address _userAddress,
        uint8 _tokenIndex
    ) external view returns (uint256 approved);

    function getMaximumBet(
        uint8 _tokenIndex
    ) external view returns (uint128);

    function consumeHash(
        bytes32 _localhash
    ) external returns (bool);
}

contract AccessController {

    address public ceoAddress;

    bool public paused = false;

    mapping (address => bool) public isWorker;

    event CEOSet(
        address newCEO
    );

    event WorkerAdded(
        address newWorker
    );

    event WorkerRemoved(
        address existingWorker
    );

    event Paused();
    event Unpaused();

    constructor() {

        address creator = msg.sender;

        ceoAddress = creator;

        isWorker[creator] = true;

        emit CEOSet(
            creator
        );

        emit WorkerAdded(
            creator
        );
    }

    modifier onlyCEO() {
        require(
            msg.sender == ceoAddress,
            'AccessControl: CEO access denied'
        );
        _;
    }

    modifier onlyWorker() {
        require(
            isWorker[msg.sender] == true,
            'AccessControl: worker access denied'
        );
        _;
    }

    modifier nonZeroAddress(address checkingAddress) {
        require(
            checkingAddress != address(0x0),
            'AccessControl: invalid address'
        );
        _;
    }

    modifier whenNotPaused() {
        require(
            !paused,
            'AccessControl: currently paused'
        );
        _;
    }

    modifier whenPaused {
        require(
            paused,
            'AccessControl: currenlty not paused'
        );
        _;
    }

    function setCEO(
        address _newCEO
    )
        external
        nonZeroAddress(_newCEO)
        onlyCEO
    {
        ceoAddress = _newCEO;

        emit CEOSet(
            ceoAddress
        );
    }

    function addWorker(
        address _newWorker
    )
        external
        onlyCEO
    {
        _addWorker(
            _newWorker
        );
    }

    function addWorkerBulk(
        address[] calldata _newWorkers
    )
        external
        onlyCEO
    {
        for (uint8 index = 0; index < _newWorkers.length; index++) {
            _addWorker(_newWorkers[index]);
        }
    }

    function _addWorker(
        address _newWorker
    )
        internal
        nonZeroAddress(_newWorker)
    {
        require(
            isWorker[_newWorker] == false,
            'AccessControl: worker already exist'
        );

        isWorker[_newWorker] = true;

        emit WorkerAdded(
            _newWorker
        );
    }

    function removeWorker(
        address _existingWorker
    )
        external
        onlyCEO
    {
        _removeWorker(
            _existingWorker
        );
    }

    function removeWorkerBulk(
        address[] calldata _workerArray
    )
        external
        onlyCEO
    {
        for (uint8 index = 0; index < _workerArray.length; index++) {
            _removeWorker(_workerArray[index]);
        }
    }

    function _removeWorker(
        address _existingWorker
    )
        internal
        nonZeroAddress(_existingWorker)
    {
        require(
            isWorker[_existingWorker] == true,
            "AccessControl: worker not detected"
        );

        isWorker[_existingWorker] = false;

        emit WorkerRemoved(
            _existingWorker
        );
    }

    function pause()
        external
        onlyWorker
        whenNotPaused
    {
        paused = true;
        emit Paused();
    }

    function unpause()
        external
        onlyCEO
        whenPaused
    {
        paused = false;
        emit Unpaused();
    }
}

interface PointerInstance {

    function addPoints(
        address _player,
        uint256 _points,
        address _token,
        uint256 _numPlayers,
        uint256 _wearableBonus
    ) external returns (
        uint256 newPoints,
        uint256 multiplierA,
        uint256 multiplierB
    );

    function addPoints(
        address _player,
        uint256 _points,
        address _token,
        uint256 _numPlayers
    ) external returns (
        uint256 newPoints,
        uint256 multiplierA,
        uint256 multiplierB
    );

    function addPoints(
        address _player,
        uint256 _points,
        address _token
    ) external returns (
        uint256 newPoints,
        uint256 multiplierA,
        uint256 multiplierB
    );
}

contract BlackJackHelper {

    function getCardsRawData(
        uint8 _card
    )
        public
        pure
        returns (uint8, uint8)
    {
        return (_card / 13, _card % 13);
    }

    function getCardsDetails(
        uint8 _card
    )
        public
        pure
        returns (string memory, string memory)
    {
        string[4] memory Suits = ["C", "D", "H", "S"];
        string[13] memory Vals = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "T", "J", "Q", "K"];

        (uint8 _suit, uint8 _val) = getCardsRawData(_card);
        return (Suits[_suit], Vals[_val]);
    }

    function getRandomCardIndex(
        bytes32 _localhash,
        uint256 _length
    )
        internal
        pure
        returns (uint256)
    {
        return uint256(
            keccak256(
                abi.encodePacked(
                    _localhash, _length
                )
            )
        ) % _length;
    }

    function getCardsPower(
        uint8 _card
    )
        public
        pure
        returns (uint8 power)
    {
        bytes13 cardsPower = "\x0B\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0A\x0A\x0A";
        return uint8(cardsPower[_card % 13]);
    }

    function getHandsPower(
        uint8[] memory _cards
    )
        public
        pure
        returns (uint8 powerMax)
    {
        uint8 aces;
        uint8 power;

        for (uint8 i = 0; i < _cards.length; i++) {
            power = getCardsPower(_cards[i]);
            powerMax += power;
            if (power == 11) {
                aces += 1;
            }
        }
        if (powerMax > 21) {
            for (uint8 i = 0; i < aces; i++) {
                powerMax -= 10;
                if (powerMax <= 21) {
                    break;
                }
            }
        }
        return powerMax;
    }

    function isBlackJack(
        uint8[] memory _cards
    )

        public
        pure
        returns (bool)
    {
        return getHandsPower(_cards) == 21 && _cards.length == 2;
    }

    function canSplitCards(
        uint8[] memory _cards
    )
        public
        pure
        returns (bool)
    {
        return getCardsPower(_cards[0]) == getCardsPower(_cards[1]) && _cards.length == 2;
    }

    function verifyHiddenCard(
        bytes32 _hashChild,
        bytes32 _hashParent
    )
        public
        pure
        returns (bool)
    {
        return keccak256(
            abi.encodePacked(_hashParent)
        ) == _hashChild ? true : false;
    }
}

contract dgBlackJack is AccessController, BlackJackHelper {

    enum inGameState { notJoined, Playing, EndedPlay }
    enum GameState { NewGame, OnGoingGame, EndedGame }
    enum PlayerState { notBusted, hasSplit, isSplit, isSettled, isBusted, hasBlackJack }

    struct Game {
        address[] players;
        uint128[] bets;
        uint8[] tokens;
        uint8[] deck;
        uint8 playersCount;
        PlayerState[] pState;
        GameState state;
    }

    struct HiddenCard {
        bytes32 hashChild;
        bytes32 hashParent;
    }

    mapping(bytes16 => Game) public Games;
    mapping(bytes16 => HiddenCard) public DealersHidden;
    mapping(bytes16 => uint8[]) public DealersVisible;
    mapping(bytes16 => uint8[]) public NonBustedPlayers;
    mapping(address => mapping(bytes16 => uint8[])) PlayersHand;
    mapping(address => mapping(bytes16 => uint8[])) public PlayerSplit;
    mapping(address => mapping(bytes16 => bool)) public PlayersInsurance;
    mapping(address => mapping(bytes16 => inGameState)) public inGame;

    modifier onlyOnGoingGame(bytes16 _gameId) {
        require(
            Games[_gameId].state == GameState.OnGoingGame
        );
        _;
    }

    modifier ifPlayerInGame(bytes16 _gameId, address _player, uint8 _pIndex) {
        require(
            Games[_gameId].players[_pIndex] == _player &&
            inGame[_player][_gameId] == inGameState.Playing
        );
        _;
    }

    modifier onlyNonBustedOrSplit(bytes16 _gameId, uint8 _pIndex) {
        require(
            Games[_gameId].pState[_pIndex] == PlayerState.notBusted ||
            Games[_gameId].pState[_pIndex] == PlayerState.hasSplit ||
            Games[_gameId].pState[_pIndex] == PlayerState.isSplit
        );
        _;
    }

    modifier onlyNonBusted(bytes16 _gameId, uint8 _pIndex) {
        require(
            Games[_gameId].pState[_pIndex] == PlayerState.notBusted
        );
        _;
    }

    modifier whenTableSettled(bytes16 _gameId) {
        address[] memory _players = Games[_gameId].players;
        for (uint256 i = 0; i < _players.length; i++) {
            require(
                uint8(Games[_gameId].pState[i]) >= uint8(PlayerState.isSettled)
            );
        }
        _;
    }

    TreasuryInstance public treasury;

    uint8 maxPlayers;
    // uint256 nonce;

    event BetPlaced(
        uint8 tokenIndex,
        address player,
        uint256 betAmount
    );

    event GameInitializing(
        bytes16 gameId
    );

    event GameInitialized(
        bytes16 indexed gameId,
        uint128[] bets,
        uint8[] tokens,
        uint256 serverId,
        uint256 indexed landId,
        uint256 indexed tableId
    );

    event PlayerCardDrawn(
        bytes16 gameId,
        address player,
        uint8 playerIndex,
        uint8 cardsIndex,
        string cardSuit,
        string cardVal
    );

    event DealersCardDrawn(
        bytes16 gameId,
        uint8 cardsIndex,
        string cardSuit,
        string cardVal
    );

    event DealersCardRevealed(
        bytes16 gameId,
        uint8 cardsIndex,
        string cardSuit,
        string cardVal
    );

    event splitHand(
        bytes16 gameId,
        address player,
        uint256 newIndex,
        uint8[] hand,
        uint8[] split
    );

    event InsurancePurchased(
        bytes16 gameId,
        address player,
        uint8 playerIndex
    );

    event InsurancePayout(
        address player,
        uint256 amount
    );

    event PlayersPayout(
        address player,
        uint256 amount
    );

    event FinishedGame(
        bytes16 gameId
    );

    event FinishedGameDetails(
        uint256 serverId,
        uint256 landId,
        uint256 tableId
    );

    event DoubleDown(
        uint256 powerAfter
    );

    event Busted(
        bool
    );

    PointerInstance public pointerContract;

    constructor(
        address _treasuryAddress,
        uint8 _maxPlayers,
        address _pointerAddress

    ) {
        require(_maxPlayers < 10);
        treasury = TreasuryInstance(_treasuryAddress);
        maxPlayers = _maxPlayers;
        pointerContract = PointerInstance(_pointerAddress);
    }

    /* function setMultiTail(
        uint256 _serverId,
        uint256 _landId,
        uint256 _tableId,
        bytes32 _localhashB
    ) external onlyCEO {
        _setMultiTail(
            _serverId,
            _landId,
            _tableId,
            _localhashB
        );
    } */

    function _addPoints(
        address _player,
        uint256 _points,
        address _token,
        uint256 _numPlayers,
        uint256 _wearableBonus
    )
        private
    {
        pointerContract.addPoints(
            _player,
            _points,
            _token,
            _numPlayers,
            _wearableBonus
        );
    }

    function checkPlayer(
        bytes16 _gameId,
        address _player
    )
        private
    {
        require(
            inGame[_player][_gameId] == inGameState.notJoined ||
            inGame[_player][_gameId] == inGameState.EndedPlay
        );

        inGame[_player][_gameId] = inGameState.Playing;
    }

    function takePlayersBet(
        bytes16 _gameId,
        uint8 _playerIndex
    )
        private
    {
        uint8 tokenIndex = Games[_gameId].tokens[_playerIndex];
        address player = Games[_gameId].players[_playerIndex];
        uint256 betAmount = Games[_gameId].bets[_playerIndex];

        require(
            treasury.getMaximumBet(tokenIndex) >= betAmount
        );

        treasury.tokenInboundTransfer(
            tokenIndex, player, betAmount
        );

        emit BetPlaced(
            tokenIndex, player, betAmount
        );
    }

    function initializePlayer(
        bytes16 _gameId,
        uint8 _pIndex
    )
        private
    {
        address[] memory _players = Games[_gameId].players;

        checkPlayer(
            _gameId, _players[_pIndex]
        );

        Games[_gameId].pState[_pIndex] = PlayerState.notBusted;
    }

    function checkForBlackJack(
        bytes16 _gameId,
        uint8 _playerIndex
    )
        private
    {
        address[] memory _players = Games[_gameId].players;

        if (
            isBlackJack(
                    getHand(_gameId, _players[_playerIndex], _playerIndex)
            )) {
            NonBustedPlayers[_gameId].push(_playerIndex);
            Games[_gameId].pState[_playerIndex] = PlayerState.hasBlackJack;
        }
    }

    function drawDealersCard(
        bytes16 _gameId,
        bytes32 _localhashA
    )
        private
    {
        uint8 _card = drawCard(_gameId, _localhashA);

        (
            string memory _cardsSuit,
            string memory _cardsVal
        ) = getCardsDetails(_card);

        DealersVisible[_gameId].push(_card);

        emit DealersCardDrawn(
            _gameId,
            _card,
            _cardsSuit,
            _cardsVal
        );
    }

    function drawPlayersCard(
        bytes16 _gameId,
        uint8 _pIndex,
        bytes32 _localhashA
    )
        private
    {
        address _player = Games[_gameId].players[_pIndex];

        uint8 _card = drawCard(_gameId, _localhashA);

        (
            string memory _cardsSuit,
            string memory _cardsVal
        ) = getCardsDetails(_card);

        uint8[] storage playersHand = hasSplit(_gameId, _pIndex)
            ? PlayerSplit[_player][_gameId]
            : PlayersHand[_player][_gameId];

        playersHand.push(_card);

        emit PlayerCardDrawn(
            _gameId,
            _player,
            _pIndex,
            _card,
            _cardsSuit,
            _cardsVal
        );
    }

    function initializeGame(
        bytes16 _gameId,
        address[] calldata _players,
        uint128[] calldata _bets,
        uint8[] calldata _tokens,
        uint256 _serverId,
        uint256 _landId,
        uint256 _tableId
        // bytes32 _localhashA,
        // bytes32 _localhashB
    )
        external
        whenNotPaused
        onlyWorker
    {
        require(
            _players.length <= maxPlayers &&
            _bets.length == _tokens.length &&
            _tokens.length == _players.length
        );

        /* _consumeMulti(
            _serverId,
            _landId,
            _tableId,
            _localhashB
        ); */

        // treasury.consumeHash(_localhashA);

        // gameId = getGameId(_serverId, _landId, _tableId, _players, nonce);
        // nonce = nonce + 1;

        require(
            Games[_gameId].state == GameState.NewGame ||
            Games[_gameId].state == GameState.EndedGame
        );

        // starting to initialize game
        emit GameInitializing(_gameId);

        uint8[] storage _deck = prepareDeck(
            _gameId
        );

        Game memory _game = Game(
            _players,
            _bets,
            _tokens,
            _deck,
            uint8(_players.length),
            new PlayerState[](_players.length),
            GameState.OnGoingGame
        );

        Games[_gameId] = _game;

        uint8 pIndex; // playersIndex

        // first card drawn to each player + take bets
        for (pIndex = 0; pIndex < _players.length; pIndex++) {

            initializePlayer(
                _gameId, pIndex
            );

            takePlayersBet(
                _gameId, pIndex
            );

            /* drawPlayersCard(
                _gameId, pIndex, _localhashA
            );*/
        }

        // dealers first card (visible)
        /*drawDealersCard(
            _gameId, _localhashA
        );*/

        delete NonBustedPlayers[_gameId];

        // players second cards (visible)
        for (pIndex = 0; pIndex < _players.length; pIndex++) {

            /*drawPlayersCard(
                _gameId, pIndex, _localhashA
            );*/

            checkForBlackJack(
                _gameId, pIndex
            );
        }

        delete pIndex;

        /*DealersHidden[_gameId] =
            HiddenCard({
                hashChild: _localhashB,
                hashParent: 0x0
        });*/

        emit GameInitialized(
            _gameId,
            _bets,
            _tokens,
            _serverId,
            _landId,
            _tableId
        );
    }

    function manualPayout(
        bytes16 _gameId,
        uint256 _serverId,
        uint256 _landId,
        uint256 _tableId,
        uint128[] calldata _payoutAmounts,
        uint128[] calldata _refundAmounts,
        uint128[] calldata _wearableBonus
    )
        external
        onlyOnGoingGame(_gameId)
        whenNotPaused
        onlyWorker
    {

        /*_consumeHashes(
            _serverId,
            _landId,
            _tableId,
            _localHashes
        );*/

        _payout(
            _gameId,
            _payoutAmounts,
            _refundAmounts,
            _wearableBonus
        );

        emit FinishedGame(
            _gameId
            // _localhashB
        );

        emit FinishedGameDetails(
            _serverId,
            _landId,
            _tableId
        );
    }

    function _payout(
        bytes16 _gameId,
        uint128[] calldata _payoutAmounts,
        uint128[] calldata _refundAmounts,
        uint128[] calldata _wearableBonus
    )
        internal
    {
        Games[_gameId].state = GameState.EndedGame;
        for (uint8 i = 0; i < _payoutAmounts.length; i++) {
            payoutAmount(
                Games[_gameId].tokens[i],
                Games[_gameId].players[i],
                _payoutAmounts[i] + _refundAmounts[i]
            );

            _smartPoints(
                _gameId,
                i,
                _refundAmounts[i],
                _wearableBonus[i]
            );
        }
    }

    /* function _consumeHashes(
        uint256 _serverId,
        uint256 _landId,
        uint256 _tableId,
        bytes32[] calldata _localHashes
    )
        internal
    {
        for (uint256 i = 0; i < _localHashes.length; i++) {
            _consumeMulti(
                _serverId,
                _landId,
                _tableId,
                _localHashes[i]
            );
        }
    } */

    function _smartPoints(
        bytes16 _gameId,
        uint8 _pIndex,
        uint128 _refundAmount,
        uint128 _wearableBonus
    )
        internal
    {
        require(Games[_gameId].bets[_pIndex] >= _refundAmount);

        _addPoints(
            Games[_gameId].players[_pIndex],
            Games[_gameId].bets[_pIndex] - _refundAmount,
            treasury.getTokenAddress(Games[_gameId].tokens[_pIndex]),
            Games[_gameId].players.length,
            _wearableBonus
        );
    }

    function prepareDeck(
        bytes16 _gameId
    )
        internal
        returns (uint8[] storage _deck)
    {
        _deck = Games[_gameId].deck;
        for (uint8 i = 0; i < 52; i++) {
            _deck.push(i);
        }
    }

    function drawCard(
        bytes16 _gameId,
        bytes32 _localhashA
    )
        internal
        returns (uint8)
    {
        uint8[] storage _deck = Games[_gameId].deck;
        uint256 _card = getRandomCardIndex(
            _localhashA, _deck.length
        );
        uint8 card = _deck[_card];
        _deck[_card] = _deck[_deck.length - 1];
        _deck.pop();
        return card;
    }

    function hitMove(
        bytes16 _gameId,
        address _player,
        uint8 _pIndex,
        bytes32 _localhashA
    )
        external
        onlyWorker
        onlyOnGoingGame(_gameId)
        onlyNonBustedOrSplit(_gameId, _pIndex)
        ifPlayerInGame(_gameId, _player, _pIndex)
    {
        // treasury.consumeHash(_localhashA);

        drawPlayersCard(
           _gameId, _pIndex, _localhashA
        );

        uint256 playersPower = getHandsPower(
            getHand(_gameId, _player, _pIndex)
        );

        if (playersPower > 21) {
            Games[_gameId].pState[_pIndex] = PlayerState.isBusted;
        }

        if (playersPower == 21) {
            NonBustedPlayers[_gameId].push(_pIndex);
            Games[_gameId].pState[_pIndex] = PlayerState.isSettled;
        }
    }

    function stayMove(
        bytes16 _gameId,
        address _player,
        uint8 _pIndex
    )
        external
        onlyWorker
        onlyOnGoingGame(_gameId)
        onlyNonBustedOrSplit(_gameId, _pIndex)
        ifPlayerInGame(_gameId, _player, _pIndex)
    {
        NonBustedPlayers[_gameId].push(_pIndex);
        Games[_gameId].pState[_pIndex] = PlayerState.isSettled;
    }

    function revealDealersCard(
        bytes16 _gameId,
        // uint256 _serverId,
        // uint256 _landId,
        // uint256 _tableId,
        bytes32 _localhashB
    )
        internal
    {
        uint8 revealed = drawCard(_gameId, _localhashB);

        /*_consumeMulti(
            _serverId,
            _landId,
            _tableId,
            _localhashB
        );*/

        (
            string memory _cardsSuit,
            string memory _cardsVal
        ) = getCardsDetails(revealed);

        DealersVisible[_gameId].push(revealed);

        emit DealersCardRevealed(
            _gameId,
            revealed,
            _cardsSuit,
            _cardsVal
        );
    }

    function dealersMove(
        bytes16 _gameId,
        // uint256 _serverId,
        // uint256 _landId,
        // uint256 _tableId,
        bytes32 _localhashA,
        bytes32 _localhashB
    )
        external
        onlyWorker
        onlyOnGoingGame(_gameId)
        whenTableSettled(_gameId)
    {
        require(
            DealersHidden[_gameId].hashParent == 0x0
        );

        DealersHidden[_gameId].hashParent = _localhashB;

        require(
            verifyHiddenCard(
                DealersHidden[_gameId].hashChild,
                DealersHidden[_gameId].hashParent
            ) == true
        );

        // treasury.consumeHash(_localhashA);

        /* revealDealersCard(
            _gameId,
            _serverId,
            _landId,
            _tableId,
            _localhashB
        ); */

        uint8[] memory _leftPlayers = getNotBustedPlayers(_gameId);

        // check if any player left in the game
        if (_leftPlayers.length > 0) {

            // check if dealer has a blackjack - proceed to payout
            if (isBlackJack(DealersVisible[_gameId])) {

                $payoutAgainstBlackJack(_gameId, _leftPlayers);

            // check if dealer needs more cards
            } else {

                uint256 dealersPower = getHandsPower(
                    DealersVisible[_gameId]
                );

                uint8 _card;

                // draw cards for dealer with _localhashA
                while (dealersPower <= 16) {

                    _card = drawCard(_gameId, _localhashA);

                    (
                        string memory _cardsSuit,
                        string memory _cardsVal
                    ) = getCardsDetails(_card);

                    dealersPower = _dealerAddVisible(
                        _gameId,
                        _card,
                        _cardsSuit,
                        _cardsVal
                    );

                }

                delete _card;

                // calculate any winnings and payout
                $payoutAgainstDealersHand(_gameId, _leftPlayers, dealersPower);
            }
        }

        // mark all players finishing the game
        address[] memory _players = Games[_gameId].players;
        for (uint256 i = 0; i < _players.length; i++) {
            inGame[_players[i]][_gameId] = inGameState.EndedPlay;
        }

        // set game status to ended
        Games[_gameId].state = GameState.EndedGame;

        emit FinishedGame(
            _gameId
            // _localhashB
        );
    }

    function _dealerAddVisible(
        bytes16 _gameId,
        uint8 _card,
        string memory _cardsSuit,
        string memory _cardsVal
    )
        internal
        returns (uint256)
    {
        DealersVisible[_gameId].push(_card);

        emit DealersCardDrawn(
            _gameId,
            _card,
            _cardsSuit,
            _cardsVal
        );

        return getHandsPower(
            DealersVisible[_gameId]
        );
    }

    function $payoutAgainstBlackJack(
        bytes16 _gameId,
        uint8[] memory _leftPlayers
    )
        private
    {
        for (uint256 i = 0; i < _leftPlayers.length; i++) {

            address player = Games[_gameId].players[_leftPlayers[i]];

            // payout if player also has a blackjack
            if (Games[_gameId].pState[i] == PlayerState.hasBlackJack) {

                uint128 amount = Games[_gameId].bets[_leftPlayers[i]];

                payoutAmount(
                    Games[_gameId].tokens[_leftPlayers[i]],
                    player,
                    amount
                );

                emit PlayersPayout(
                    player,
                    amount
                );
            }

            // payout if player purchased insurance
            if (PlayersInsurance[player][_gameId] == true) {

                uint128 amount = Games[_gameId].bets[_leftPlayers[i]];

                payoutAmount(
                    Games[_gameId].tokens[_leftPlayers[i]],
                    player,
                    amount
                );

                emit InsurancePayout(
                    player,
                    amount
                );
            }
        }
    }

    function $payoutAgainstDealersHand(
        bytes16 _gameId,
        uint8[] memory _leftPlayers,
        uint256 _dealersPower
    )
        private
    {
        for (uint256 i = 0; i < _leftPlayers.length; i++) {

            uint8 pi = _leftPlayers[i]; // players index
            address player = Games[_gameId].players[pi];
            uint256 playersPower = getHandsPower(getHand(_gameId, player, pi));
            uint128 payout;

            if (Games[_gameId].pState[pi] == PlayerState.hasBlackJack) {
                payout = Games[_gameId].bets[pi] * 250 / 100;
            }
            else if (playersPower > _dealersPower) {
                payout = Games[_gameId].bets[pi] * 200 / 100;
            }
            else if (playersPower == _dealersPower) {
                payout = Games[_gameId].bets[pi];
            }

            if (payout > 0) {
                payoutAmount(
                    Games[_gameId].tokens[pi],
                    player,
                    payout
                );
                emit PlayersPayout(
                    player,
                    payout
                );
            }
        }
    }

    function getNotBustedPlayers(
        bytes16 _gameId
    )
        public
        view
        returns (uint8[] memory)
    {
        return NonBustedPlayers[_gameId];
    }

    function payoutAmount(
        uint8 _tokenIndex,
        address _player,
        uint128 _amount
    )
        private
    {
        treasury.tokenOutboundTransfer(
            _tokenIndex, _player, uint256(_amount)
        );
    }

    function splitCards(
        bytes16 _gameId,
        address _player,
        uint8 _pIndex
    )
        external
        onlyWorker
        onlyOnGoingGame(_gameId)
        onlyNonBusted(_gameId, _pIndex)
        ifPlayerInGame(_gameId, _player, _pIndex)
    {
        require(
            PlayerSplit[_player][_gameId].length == 0 &&
            canSplitCards(PlayersHand[_player][_gameId])
        );

        Games[_gameId].players.push(_player);
        Games[_gameId].bets.push(Games[_gameId].bets[_pIndex]);
        Games[_gameId].tokens.push(Games[_gameId].tokens[_pIndex]);
        Games[_gameId].pState.push(PlayerState.isSplit);
        Games[_gameId].pState[_pIndex] = PlayerState.hasSplit;

        takePlayersBet(
            _gameId, _pIndex
        );

        PlayersHand[_player][_gameId].pop();
        PlayerSplit[_player][_gameId] = PlayersHand[_player][_gameId];

        emit splitHand(
            _gameId,
            _player,
            Games[_gameId].players.length - 1,
            PlayersHand[_player][_gameId],
            PlayerSplit[_player][_gameId]
        );
    }

    function purchaseInsurance(
        bytes16 _gameId,
        address _player,
        uint8 _pIndex
    )
        external
        onlyWorker
        onlyOnGoingGame(_gameId)
        onlyNonBusted(_gameId, _pIndex)
    {
        require (
            PlayersHand[_player][_gameId].length == 2 &&
            PlayersInsurance[_player][_gameId] == false
        );

        require (
            DealersVisible[_gameId].length == 1 &&
            getHandsPower(DealersVisible[_gameId]) == 11
        );

        PlayersInsurance[_player][_gameId] = true;

        uint8 playersCount = Games[_gameId].playersCount;
        uint8 tokenIndex = Games[_gameId].tokens[_pIndex];
        address player = Games[_gameId].players[_pIndex];
        uint256 betAmount = Games[_gameId].bets[_pIndex];

        _addPoints(
            player,
            betAmount / 2,
            treasury.getTokenAddress(tokenIndex),
            playersCount,
            0
        );

        treasury.tokenInboundTransfer(
            tokenIndex, player, betAmount / 2
        );

        emit InsurancePurchased(
            _gameId, player, _pIndex
        );
    }

    function doubleDown(
        bytes16 _gameId,
        address _player,
        bytes32 _localhashA,
        uint8 _pIndex
    )
        external
        onlyWorker
        onlyOnGoingGame(_gameId)
        onlyNonBusted(_gameId, _pIndex)
        ifPlayerInGame(_gameId, _player, _pIndex)
    {
        require (
            PlayersHand[_player][_gameId].length == 2
        );

        // treasury.consumeHash(_localhashA);

        uint8 tokenIndex = Games[_gameId].tokens[_pIndex];
        address player = Games[_gameId].players[_pIndex];
        uint256 betAmount = Games[_gameId].bets[_pIndex];
        uint8 playersCount = Games[_gameId].playersCount;

        _addPoints(
            player,
            betAmount,
            treasury.getTokenAddress(tokenIndex),
            playersCount,
            0
        );

        treasury.tokenInboundTransfer(
            tokenIndex,
            player,
            betAmount
        );

        setBetAmount(
            _gameId,
            _pIndex,
            uint128(betAmount * 2)
        );

        postDoubleDownActions(
            _gameId,
            _player,
            _localhashA,
            _pIndex
        );
    }

    function setBetAmount(
        bytes16 _gameId,
        uint8 _pIndex,
        uint128 newBetAmount
    )
        internal
    {
        Games[_gameId].bets[_pIndex] = newBetAmount;
    }

    function postDoubleDownActions(
        bytes16 _gameId,
        address _player,
        bytes32 _localhashA,
        uint8 _pIndex
    )
        internal
    {
        drawPlayersCard(
           _gameId, _pIndex, _localhashA
        );

        uint256 playersPower = getHandsPower(
            getHand(_gameId, _player, _pIndex)
        );

        emit DoubleDown(
            playersPower
        );

        if (playersPower > 21) {
            Games[_gameId].pState[_pIndex] = PlayerState.isBusted;
            emit Busted(true);
        } else {
            NonBustedPlayers[_gameId].push(_pIndex);
            Games[_gameId].pState[_pIndex] = PlayerState.isSettled;
            emit Busted(false);
        }
    }

    function checkDeck(
        bytes16 _gameId
    )
        external
        view
        returns (uint8[] memory _deck)
    {
        return Games[_gameId].deck;
    }

    function getGameId(
        uint256 _serverID,
        uint256 _landID,
        uint256 _tableID,
        address[] memory _players,
        uint256 _nonce
    )
        public
        pure
        returns (bytes16 gameId)
    {
        gameId = bytes16(
            keccak256(
                abi.encodePacked(_serverID, _landID, _tableID, _players, _nonce)
            )
        );
    }

    /*
    function checkPlayerInGame(
        bytes16 _gameId,
        address _player
    )
        external
        view
        returns (bool)
    {
        return inGame[_player][_gameId] == inGameState.notJoined ? false : true;
    }

    function checkMyHand(
        bytes16 _gameId
    )
        external
        view
        returns (uint8[] memory)
    {
        return checkPlayersHand(_gameId, msg.sender);
    }

    function checkMySplit(
        bytes16 _gameId
    )
        external
        view
        returns (uint8[] memory)
    {
        return checkPlayerSplit(_gameId, msg.sender);
    }

    function checkDealersHand(
        bytes16 _gameId
    )
        public
        view
        returns (uint8[] memory)
    {
        return DealersVisible[_gameId];
    }

    function checkPlayersHand(
        bytes16 _gameId,
        address _player
    )
        public
        view
        returns (uint8[] memory)
    {
        return PlayersHand[_player][_gameId];
    }

    function checkPlayerSplit(
        bytes16 _gameId,
        address _player
    )
        public
        view
        returns (uint8[] memory)
    {
        return PlayerSplit[_player][_gameId];
    }*/

    function getHand(
        bytes16 _gameId,
        address _player,
        uint8 _playerIndex
    )
        public
        view
        returns (uint8[] memory playersHand)
    {
        playersHand = hasSplit(_gameId, _playerIndex)
            ? PlayerSplit[_player][_gameId]
            : PlayersHand[_player][_gameId];
    }

    function hasSplit(
        bytes16 _gameId,
        uint8 _pIndex
    )
        public
        view
        returns (bool)
    {
        return Games[_gameId].pState[_pIndex] == PlayerState.isSplit;
    }

    function updatePointer(
        address _newPointerAddress
    )
        external
        onlyCEO
    {
        pointerContract = PointerInstance(_newPointerAddress);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"},{"internalType":"uint8","name":"_maxPlayers","type":"uint8"},{"internalType":"address","name":"_pointerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"tokenIndex","type":"uint8"},{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"betAmount","type":"uint256"}],"name":"BetPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"","type":"bool"}],"name":"Busted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newCEO","type":"address"}],"name":"CEOSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes16","name":"gameId","type":"bytes16"},{"indexed":false,"internalType":"uint8","name":"cardsIndex","type":"uint8"},{"indexed":false,"internalType":"string","name":"cardSuit","type":"string"},{"indexed":false,"internalType":"string","name":"cardVal","type":"string"}],"name":"DealersCardDrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes16","name":"gameId","type":"bytes16"},{"indexed":false,"internalType":"uint8","name":"cardsIndex","type":"uint8"},{"indexed":false,"internalType":"string","name":"cardSuit","type":"string"},{"indexed":false,"internalType":"string","name":"cardVal","type":"string"}],"name":"DealersCardRevealed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"powerAfter","type":"uint256"}],"name":"DoubleDown","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes16","name":"gameId","type":"bytes16"}],"name":"FinishedGame","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"serverId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"landId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tableId","type":"uint256"}],"name":"FinishedGameDetails","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes16","name":"gameId","type":"bytes16"},{"indexed":false,"internalType":"uint128[]","name":"bets","type":"uint128[]"},{"indexed":false,"internalType":"uint8[]","name":"tokens","type":"uint8[]"},{"indexed":false,"internalType":"uint256","name":"serverId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"landId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"tableId","type":"uint256"}],"name":"GameInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes16","name":"gameId","type":"bytes16"}],"name":"GameInitializing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InsurancePayout","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes16","name":"gameId","type":"bytes16"},{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint8","name":"playerIndex","type":"uint8"}],"name":"InsurancePurchased","type":"event"},{"anonymous":false,"inputs":[],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes16","name":"gameId","type":"bytes16"},{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint8","name":"playerIndex","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"cardsIndex","type":"uint8"},{"indexed":false,"internalType":"string","name":"cardSuit","type":"string"},{"indexed":false,"internalType":"string","name":"cardVal","type":"string"}],"name":"PlayerCardDrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PlayersPayout","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newWorker","type":"address"}],"name":"WorkerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"existingWorker","type":"address"}],"name":"WorkerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes16","name":"gameId","type":"bytes16"},{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"newIndex","type":"uint256"},{"indexed":false,"internalType":"uint8[]","name":"hand","type":"uint8[]"},{"indexed":false,"internalType":"uint8[]","name":"split","type":"uint8[]"}],"name":"splitHand","type":"event"},{"inputs":[{"internalType":"bytes16","name":"","type":"bytes16"}],"name":"DealersHidden","outputs":[{"internalType":"bytes32","name":"hashChild","type":"bytes32"},{"internalType":"bytes32","name":"hashParent","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"","type":"bytes16"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"DealersVisible","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"","type":"bytes16"}],"name":"Games","outputs":[{"internalType":"uint8","name":"playersCount","type":"uint8"},{"internalType":"enum dgBlackJack.GameState","name":"state","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"","type":"bytes16"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"NonBustedPlayers","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes16","name":"","type":"bytes16"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"PlayerSplit","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes16","name":"","type":"bytes16"}],"name":"PlayersInsurance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newWorker","type":"address"}],"name":"addWorker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_newWorkers","type":"address[]"}],"name":"addWorkerBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8[]","name":"_cards","type":"uint8[]"}],"name":"canSplitCards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"ceoAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"}],"name":"checkDeck","outputs":[{"internalType":"uint8[]","name":"_deck","type":"uint8[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"bytes32","name":"_localhashA","type":"bytes32"},{"internalType":"bytes32","name":"_localhashB","type":"bytes32"}],"name":"dealersMove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"address","name":"_player","type":"address"},{"internalType":"bytes32","name":"_localhashA","type":"bytes32"},{"internalType":"uint8","name":"_pIndex","type":"uint8"}],"name":"doubleDown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_card","type":"uint8"}],"name":"getCardsDetails","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint8","name":"_card","type":"uint8"}],"name":"getCardsPower","outputs":[{"internalType":"uint8","name":"power","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint8","name":"_card","type":"uint8"}],"name":"getCardsRawData","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_serverID","type":"uint256"},{"internalType":"uint256","name":"_landID","type":"uint256"},{"internalType":"uint256","name":"_tableID","type":"uint256"},{"internalType":"address[]","name":"_players","type":"address[]"},{"internalType":"uint256","name":"_nonce","type":"uint256"}],"name":"getGameId","outputs":[{"internalType":"bytes16","name":"gameId","type":"bytes16"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"address","name":"_player","type":"address"},{"internalType":"uint8","name":"_playerIndex","type":"uint8"}],"name":"getHand","outputs":[{"internalType":"uint8[]","name":"playersHand","type":"uint8[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8[]","name":"_cards","type":"uint8[]"}],"name":"getHandsPower","outputs":[{"internalType":"uint8","name":"powerMax","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"}],"name":"getNotBustedPlayers","outputs":[{"internalType":"uint8[]","name":"","type":"uint8[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"uint8","name":"_pIndex","type":"uint8"}],"name":"hasSplit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"address","name":"_player","type":"address"},{"internalType":"uint8","name":"_pIndex","type":"uint8"},{"internalType":"bytes32","name":"_localhashA","type":"bytes32"}],"name":"hitMove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes16","name":"","type":"bytes16"}],"name":"inGame","outputs":[{"internalType":"enum dgBlackJack.inGameState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"address[]","name":"_players","type":"address[]"},{"internalType":"uint128[]","name":"_bets","type":"uint128[]"},{"internalType":"uint8[]","name":"_tokens","type":"uint8[]"},{"internalType":"uint256","name":"_serverId","type":"uint256"},{"internalType":"uint256","name":"_landId","type":"uint256"},{"internalType":"uint256","name":"_tableId","type":"uint256"}],"name":"initializeGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8[]","name":"_cards","type":"uint8[]"}],"name":"isBlackJack","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWorker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"uint256","name":"_serverId","type":"uint256"},{"internalType":"uint256","name":"_landId","type":"uint256"},{"internalType":"uint256","name":"_tableId","type":"uint256"},{"internalType":"uint128[]","name":"_payoutAmounts","type":"uint128[]"},{"internalType":"uint128[]","name":"_refundAmounts","type":"uint128[]"},{"internalType":"uint128[]","name":"_wearableBonus","type":"uint128[]"}],"name":"manualPayout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pointerContract","outputs":[{"internalType":"contract PointerInstance","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"address","name":"_player","type":"address"},{"internalType":"uint8","name":"_pIndex","type":"uint8"}],"name":"purchaseInsurance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_existingWorker","type":"address"}],"name":"removeWorker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_workerArray","type":"address[]"}],"name":"removeWorkerBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newCEO","type":"address"}],"name":"setCEO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"address","name":"_player","type":"address"},{"internalType":"uint8","name":"_pIndex","type":"uint8"}],"name":"splitCards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_gameId","type":"bytes16"},{"internalType":"address","name":"_player","type":"address"},{"internalType":"uint8","name":"_pIndex","type":"uint8"}],"name":"stayMove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"contract TreasuryInstance","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPointerAddress","type":"address"}],"name":"updatePointer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_hashChild","type":"bytes32"},{"internalType":"bytes32","name":"_hashParent","type":"bytes32"}],"name":"verifyHiddenCard","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"}]

60806040526000805460ff60a01b191690553480156200001e57600080fd5b5060405162005cbe38038062005cbe833981810160405260608110156200004457600080fd5b508051602080830151604093840151600080546001600160a01b031916339081178255808252600180865291879020805460ff19169092179091558551818152955194959294919390927ff97cbb4246b709036319093e5ff31674b9f6759076d153e1bea1f60392170fc0929081900390910190a1604080516001600160a01b038316815290517fb10d2a24a8c3686841e966f0c2c64c385cfaecb50a09b16aa3579bfcf3989dcd9181900360200190a150600a8260ff16106200010757600080fd5b600a805460ff909316600160a01b0260ff60a01b196001600160a01b039586166001600160a01b03199586161716179055600b8054919093169116179055615b6980620001556000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806382c0e5221161013b578063c54f0c52116100b8578063e4c279b71161007c578063e4c279b714610cc4578063e6adfe3714610ce4578063e6fae6be14610d52578063efc5e73d14610df3578063f9bf6de314610ef157610248565b8063c54f0c5214610a8d578063c783feb714610b04578063d4652cf414610c34578063d4c5754314610c5b578063dac29c5114610c9157610248565b8063aa8d7c26116100ff578063aa8d7c2614610871578063b92742ff146108a1578063c1e14249146109cc578063c3170007146109f9578063c4f987a514610a6757610248565b806382c0e522146107a557806383cf376d146107e45780638456cb59146108075780639ac6c3ca1461080f578063aa1566451461084b57610248565b806350bfba99116101c957806361d027b31161018d57806361d027b3146106b0578063659ae43f146106b8578063697c6415146106fb578063776c2b8414610728578063806ad57e1461077f57610248565b806350bfba99146105655780635184c0661461056d578063574a47e3146105b25780635c975abb146106695780635f7b92571461067157610248565b8063433010c011610210578063433010c0146103195780634359cb0f146103ec578063457457af1461042b5780634c354436146104705780634d41ddaf146104b057610248565b80630a0f81681461024d578063252949491461027157806327d7874c146102c35780633025d9e2146102eb5780633f4ba83a14610311575b600080fd5b610255610f30565b604080516001600160a01b039092168252519081900360200190f35b6102986004803603602081101561028757600080fd5b50356001600160801b031916610f3f565b604051808360ff1681526020018260028111156102b157fe5b81526020019250505060405180910390f35b6102e9600480360360208110156102d957600080fd5b50356001600160a01b0316610f62565b005b6102e96004803603602081101561030157600080fd5b50356001600160a01b0316611066565b6102e96110d5565b6103cf600480360360a081101561032f57600080fd5b81359160208101359160408201359190810190608081016060820135600160201b81111561035c57600080fd5b82018360208201111561036e57600080fd5b803590602001918460208302840111600160201b8311171561038f57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050913592506111a0915050565b604080516001600160801b03199092168252519081900360200190f35b6102e96004803603606081101561040257600080fd5b5080356001600160801b0319169060208101356001600160a01b0316906040013560ff1661121a565b6102e96004803603608081101561044157600080fd5b506001600160801b0319813516906001600160a01b036020820135169060ff604082013516906060013561154c565b6104976004803603602081101561048657600080fd5b50356001600160801b03191661191a565b6040805192835260208301919091528051918290030190f35b610551600480360360208110156104c657600080fd5b810190602081018135600160201b8111156104e057600080fd5b8201836020820111156104f257600080fd5b803590602001918460208302840111600160201b8311171561051357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611933945050505050565b604080519115158252519081900360200190f35b610255611957565b6102e96004803603608081101561058357600080fd5b5080356001600160801b0319169060208101356001600160a01b0316906040810135906060013560ff16611966565b610653600480360360208110156105c857600080fd5b810190602081018135600160201b8111156105e257600080fd5b8201836020820111156105f457600080fd5b803590602001918460208302840111600160201b8311171561061557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611da3945050505050565b6040805160ff9092168252519081900360200190f35b610551611e3a565b6102e96004803603606081101561068757600080fd5b5080356001600160801b0319169060208101356001600160a01b0316906040013560ff16611e4a565b610255612310565b6106d8600480360360208110156106ce57600080fd5b503560ff1661231f565b604051808360ff1681526020018260ff1681526020019250505060405180910390f35b6106536004803603604081101561071157600080fd5b506001600160801b03198135169060200135612331565b61075e6004803603604081101561073e57600080fd5b5080356001600160a01b031690602001356001600160801b031916612374565b6040518082600281111561076e57fe5b815260200191505060405180910390f35b6102e96004803603602081101561079557600080fd5b50356001600160a01b0316612394565b6102e9600480360360608110156107bb57600080fd5b5080356001600160801b0319169060208101356001600160a01b0316906040013560ff166123ed565b610551600480360360408110156107fa57600080fd5b5080359060200135612a26565b6102e9612a60565b6106536004803603606081101561082557600080fd5b506001600160a01b03813516906001600160801b03196020820135169060400135612b4f565b6105516004803603602081101561086157600080fd5b50356001600160a01b0316612b9f565b6105516004803603604081101561088757600080fd5b5080356001600160801b031916906020013560ff16612bb4565b6102e9600480360360e08110156108b757600080fd5b6001600160801b03198235169190810190604081016020820135600160201b8111156108e257600080fd5b8201836020820111156108f457600080fd5b803590602001918460208302840111600160201b8311171561091557600080fd5b919390929091602081019035600160201b81111561093257600080fd5b82018360208201111561094457600080fd5b803590602001918460208302840111600160201b8311171561096557600080fd5b919390929091602081019035600160201b81111561098257600080fd5b82018360208201111561099457600080fd5b803590602001918460208302840111600160201b831117156109b557600080fd5b919350915080359060208101359060400135612c16565b610653600480360360408110156109e257600080fd5b506001600160801b03198135169060200135613136565b6102e960048036036020811015610a0f57600080fd5b810190602081018135600160201b811115610a2957600080fd5b820183602082011115610a3b57600080fd5b803590602001918460208302840111600160201b83111715610a5c57600080fd5b509092509050613152565b6102e960048036036020811015610a7d57600080fd5b50356001600160a01b03166131e1565b610ab460048036036020811015610aa357600080fd5b50356001600160801b031916613237565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610af0578181015183820152602001610ad8565b505050509050019250505060405180910390f35b6102e9600480360360e0811015610b1a57600080fd5b6001600160801b03198235169160208101359160408201359160608101359181019060a081016080820135600160201b811115610b5657600080fd5b820183602082011115610b6857600080fd5b803590602001918460208302840111600160201b83111715610b8957600080fd5b919390929091602081019035600160201b811115610ba657600080fd5b820183602082011115610bb857600080fd5b803590602001918460208302840111600160201b83111715610bd957600080fd5b919390929091602081019035600160201b811115610bf657600080fd5b820183602082011115610c0857600080fd5b803590602001918460208302840111600160201b83111715610c2957600080fd5b5090925090506132c2565b610ab460048036036020811015610c4a57600080fd5b50356001600160801b031916613448565b61055160048036036040811015610c7157600080fd5b5080356001600160a01b031690602001356001600160801b0319166134b9565b6102e960048036036060811015610ca757600080fd5b506001600160801b031981351690602081013590604001356134d9565b61065360048036036020811015610cda57600080fd5b503560ff1661397c565b6102e960048036036020811015610cfa57600080fd5b810190602081018135600160201b811115610d1457600080fd5b820183602082011115610d2657600080fd5b803590602001918460208302840111600160201b83111715610d4757600080fd5b5090925090506139ac565b61055160048036036020811015610d6857600080fd5b810190602081018135600160201b811115610d8257600080fd5b820183602082011115610d9457600080fd5b803590602001918460208302840111600160201b83111715610db557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613a36945050505050565b610e1360048036036020811015610e0957600080fd5b503560ff16613a6e565b604051808060200180602001838103835285818151815260200191508051906020019080838360005b83811015610e54578181015183820152602001610e3c565b50505050905090810190601f168015610e815780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015610eb4578181015183820152602001610e9c565b50505050905090810190601f168015610ee15780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b610ab460048036036060811015610f0757600080fd5b5080356001600160801b0319169060208101356001600160a01b0316906040013560ff16613c8a565b6000546001600160a01b031681565b6002602052600090815260409020600481015460069091015460ff918216911682565b806001600160a01b038116610fbe576040805162461bcd60e51b815260206004820152601e60248201527f416363657373436f6e74726f6c3a20696e76616c696420616464726573730000604482015290519081900360640190fd5b6000546001600160a01b0316331461100b576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b03848116919091179182905560408051929091168252517ff97cbb4246b709036319093e5ff31674b9f6759076d153e1bea1f60392170fc0916020908290030190a15050565b6000546001600160a01b031633146110b3576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611122576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b600054600160a01b900460ff1661116a5760405162461bcd60e51b8152600401808060200182810382526023815260200180615b116023913960400191505060405180910390fd5b6000805460ff60a01b191681556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d169339190a1565b6000858585858560405160200180868152602001858152602001848152602001838051906020019060200280838360005b838110156111e95781810151838201526020016111d1565b50505050919091019283525050604080518083038152602092830190915280519101209a9950505050505050505050565b3360009081526001602081905260409091205460ff1615151461126e5760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b8260016001600160801b0319821660009081526002602081905260409091206006015460ff169081111561129e57fe5b146112a857600080fd5b838260006001600160801b031983166000908152600260205260409020600501805460ff84169081106112d757fe5b90600052602060002090602091828204019190069054906101000a900460ff16600581111561130257fe5b1480611363575060016001600160801b031983166000908152600260205260409020600501805460ff841690811061133657fe5b90600052602060002090602091828204019190069054906101000a900460ff16600581111561136157fe5b145b806113c3575060026001600160801b031983166000908152600260205260409020600501805460ff841690811061139657fe5b90600052602060002090602091828204019190069054906101000a900460ff1660058111156113c157fe5b145b6113cc57600080fd5b6001600160801b03198616600090815260026020526040902080548791879187916001600160a01b0384169160ff841690811061140557fe5b6000918252602090912001546001600160a01b0316148015611462575060016001600160a01b03831660009081526009602090815260408083206001600160801b03198816845290915290205460ff16600281111561146057fe5b145b61146b57600080fd5b600560008a6001600160801b0319166001600160801b03191681526020019081526020016000208790806001815401808255809150506001900390600052602060002090602091828204019190069091909190916101000a81548160ff021916908360ff1602179055506003600260008b6001600160801b0319166001600160801b03191681526020019081526020016000206005018860ff168154811061150f57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561153c57fe5b0217905550505050505050505050565b3360009081526001602081905260409091205460ff161515146115a05760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b8360016001600160801b0319821660009081526002602081905260409091206006015460ff16908111156115d057fe5b146115da57600080fd5b848360006001600160801b031983166000908152600260205260409020600501805460ff841690811061160957fe5b90600052602060002090602091828204019190069054906101000a900460ff16600581111561163457fe5b1480611695575060016001600160801b031983166000908152600260205260409020600501805460ff841690811061166857fe5b90600052602060002090602091828204019190069054906101000a900460ff16600581111561169357fe5b145b806116f5575060026001600160801b031983166000908152600260205260409020600501805460ff84169081106116c857fe5b90600052602060002090602091828204019190069054906101000a900460ff1660058111156116f357fe5b145b6116fe57600080fd5b6001600160801b03198716600090815260026020526040902080548891889188916001600160a01b0384169160ff841690811061173757fe5b6000918252602090912001546001600160a01b0316148015611794575060016001600160a01b03831660009081526009602090815260408083206001600160801b03198816845290915290205460ff16600281111561179257fe5b145b61179d57600080fd5b6117a88a8989613d70565b60006117bd6117b88c8c8c613c8a565b611da3565b60ff169050601581111561182d576001600160801b03198b16600090815260026020526040902060050180546004919060ff8c169081106117fa57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561182757fe5b02179055505b806015141561190d57600560008c6001600160801b0319166001600160801b03191681526020019081526020016000208990806001815401808255809150506001900390600052602060002090602091828204019190069091909190916101000a81548160ff021916908360ff1602179055506003600260008d6001600160801b0319166001600160801b03191681526020019081526020016000206005018a60ff16815481106118da57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561190757fe5b02179055505b5050505050505050505050565b6003602052600090815260409020805460019091015482565b600061193e82611da3565b60ff166015148015611951575081516002145b92915050565b600b546001600160a01b031681565b3360009081526001602081905260409091205460ff161515146119ba5760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b8360016001600160801b0319821660009081526002602081905260409091206006015460ff16908111156119ea57fe5b146119f457600080fd5b848260006001600160801b031983166000908152600260205260409020600501805460ff8416908110611a2357fe5b90600052602060002090602091828204019190069054906101000a900460ff166005811115611a4e57fe5b14611a5857600080fd5b6001600160801b03198716600090815260026020526040902080548891889187916001600160a01b0384169160ff8416908110611a9157fe5b6000918252602090912001546001600160a01b0316148015611aee575060016001600160a01b03831660009081526009602090815260408083206001600160801b03198816845290915290205460ff166002811115611aec57fe5b145b611af757600080fd5b6001600160a01b03891660009081526006602090815260408083206001600160801b03198e168452909152902054600214611b3157600080fd5b6001600160801b03198a166000908152600260208190526040822001805460ff8a16908110611b5c57fe5b6000918252602080832081830401546001600160801b03198f168452600290915260408320805460ff601f9094166101000a90920483169450918b16908110611ba157fe5b60009182526020808320909101546001600160801b03198f16835260029091526040822060010180546001600160a01b0390921693509060ff8c16908110611be557fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b03166001600160801b031690506000600260008f6001600160801b0319166001600160801b031916815260200190815260200160002060040160009054906101000a900460ff169050611ced8383600a60009054906101000a90046001600160a01b03166001600160a01b0316635ad3f918886040518263ffffffff1660e01b8152600401808260ff16815260200191505060206040518083038186803b158015611cb657600080fd5b505afa158015611cca573d6000803e3d6000fd5b505050506040513d6020811015611ce057600080fd5b505160ff85166000613fc3565b600a54604080516341d4c74f60e01b815260ff871660048201526001600160a01b03868116602483015260448201869052915191909216916341d4c74f9160648083019260209291908290030181600087803b158015611d4c57600080fd5b505af1158015611d60573d6000803e3d6000fd5b505050506040513d6020811015611d7657600080fd5b50611d8790508e8c60028502614062565b611d938e8e8e8e6140ce565b5050505050505050505050505050565b60008080805b84518160ff161015611df557611dd4858260ff1681518110611dc757fe5b602002602001015161397c565b938401939150600b60ff83161415611ded576001830192505b600101611da9565b5060158360ff161115611e335760005b8260ff168160ff161015611e3157600a8403935060158460ff1611611e2957611e31565b600101611e05565b505b5050919050565b600054600160a01b900460ff1681565b3360009081526001602081905260409091205460ff16151514611e9e5760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b8260016001600160801b0319821660009081526002602081905260409091206006015460ff1690811115611ece57fe5b14611ed857600080fd5b838260006001600160801b031983166000908152600260205260409020600501805460ff8416908110611f0757fe5b90600052602060002090602091828204019190069054906101000a900460ff166005811115611f3257fe5b14611f3c57600080fd5b6001600160a01b03851660009081526006602090815260408083206001600160801b03198a1684529091529020546002148015611fa757506001600160a01b03851660009081526008602090815260408083206001600160801b03198a16845290915290205460ff16155b611fb057600080fd5b6001600160801b03198616600090815260046020526040902054600114801561206557506001600160801b03198616600090815260046020908152604091829020805483518184028101840190945280845261205e939283018282801561205457602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116120255790505b5050505050611da3565b60ff16600b145b61206e57600080fd5b6001600160a01b03851660009081526008602090815260408083206001600160801b03198a1684528252808320805460ff19166001179055600291829052822060048101549101805460ff928316939288169081106120c957fe5b6000918252602080832081830401546001600160801b03198c168452600290915260408320805460ff601f9094166101000a9092048316945091891690811061210e57fe5b60009182526020808320909101546001600160801b03198c16835260029091526040822060010180546001600160a01b0390921693509060ff8a1690811061215257fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b03166001600160801b0316905061221d826002838161219457fe5b600a5460408051630b5a7f2360e31b815260ff8a166004820152905193909204926001600160a01b0390911691635ad3f918916024808301926020929190829003018186803b1580156121e657600080fd5b505afa1580156121fa573d6000803e3d6000fd5b505050506040513d602081101561221057600080fd5b505160ff88166000613fc3565b600a546001600160a01b03166341d4c74f8484600285046040518463ffffffff1660e01b8152600401808460ff168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561228457600080fd5b505af1158015612298573d6000803e3d6000fd5b505050506040513d60208110156122ae57600080fd5b5050604080516001600160801b03198c1681526001600160a01b038416602082015260ff8a168183015290517fdb6e35eacf9090f40a5453fd7c372403ecea66a053067bc14a03ba91cc06e1a69181900360600190a150505050505050505050565b600a546001600160a01b031681565b600d60ff919091168181049291900690565b6004602052816000526040600020818154811061234d57600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b600960209081526000928352604080842090915290825290205460ff1681565b6000546001600160a01b031633146123e1576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b6123ea8161429a565b50565b3360009081526001602081905260409091205460ff161515146124415760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b8260016001600160801b0319821660009081526002602081905260409091206006015460ff169081111561247157fe5b1461247b57600080fd5b838260006001600160801b031983166000908152600260205260409020600501805460ff84169081106124aa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1660058111156124d557fe5b146124df57600080fd5b6001600160801b03198616600090815260026020526040902080548791879187916001600160a01b0384169160ff841690811061251857fe5b6000918252602090912001546001600160a01b0316148015612575575060016001600160a01b03831660009081526009602090815260408083206001600160801b03198816845290915290205460ff16600281111561257357fe5b145b61257e57600080fd5b6001600160a01b03881660009081526007602090815260408083206001600160801b03198d16845290915290205415801561264f57506001600160a01b03881660009081526006602090815260408083206001600160801b03198d168452825291829020805483518184028101840190945280845261264f939283018282801561264557602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116126165790505b5050505050613a36565b61265857600080fd5b6001600160801b03198916600081815260026020908152604082208054600180820183558285529284200180546001600160a01b0319166001600160a01b038e1617905592909152018054819060ff8a169081106126b257fe5b600091825260208083206002808404909101548554600180820188559686528386208382040180546001600160801b036010938a16840261010090810a828102199093169a90981690930290960a90920416909302949094179091556001600160801b03198c16825282905260409020018054819060ff8a1690811061273457fe5b60009182526020808320818304015484546001808201875595855282852083820401805460ff601f93841661010090810a82810219909316978516810a90950481169091029590951790556001600160801b03198f168086526002808552604087206005018054808a01825581895286892096810490960180549690941690940a9081029086021990941693909317905592528154908a169081106127d557fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561280257fe5b021790555061281189886143ab565b6001600160a01b03881660009081526006602090815260408083206001600160801b03198d168452909152902080548061284757fe5b60008281526020808220600019909301818104909301805460ff601f86166101000a0219169055919092556001600160a01b038a168083526006825260408084206001600160801b03198e1680865290845281852092855260078452818520908552909252912081546128ba9290615759565b506001600160801b031989166000818152600260209081526040808320546001600160a01b038d16808552600684528285208686528452828520818652600785528386208787528552948390208351968752938601526000190190840181905260a06060850181815284549186018290527f93675dd8ad58ef405624d8b6842ec6095972328ad8eba5238dfbe10b8119af0a958f958f959093909290608083019060c0840190869080156129ab57602002820191906000526020600020906000905b825461010083900a900460ff1681526020600192830181810494850194909303909202910180841161297c5790505b50508381038252848181548152602001915080548015612a0857602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116129d95790505b505097505050505050505060405180910390a1505050505050505050565b60408051602080820184905282518083038201815291830190925280519101206000908314612a56576000612a59565b60015b9392505050565b3360009081526001602081905260409091205460ff16151514612ab45760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b600054600160a01b900460ff1615612b13576040805162461bcd60e51b815260206004820152601f60248201527f416363657373436f6e74726f6c3a2063757272656e746c792070617573656400604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b1781556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e7529190a1565b60076020528260005260406000206020528160005260406000208181548110612b7757600080fd5b906000526020600020906020918282040191900692509250509054906101000a900460ff1681565b60016020526000908152604090205460ff1681565b600060026001600160801b031984166000908152600260205260409020600501805460ff8516908110612be357fe5b90600052602060002090602091828204019190069054906101000a900460ff166005811115612c0e57fe5b149392505050565b600054600160a01b900460ff1615612c75576040805162461bcd60e51b815260206004820152601f60248201527f416363657373436f6e74726f6c3a2063757272656e746c792070617573656400604482015290519081900360640190fd5b3360009081526001602081905260409091205460ff16151514612cc95760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b600a54600160a01b900460ff168811801590612ce457508584145b8015612cef57508388145b612cf857600080fd5b6001600160801b03198a16600090815260026020819052604082206006015460ff1690811115612d2457fe5b1480612d5a57506001600160801b03198a1660009081526002602081905260409091206006015460ff1681811115612d5857fe5b145b612d6357600080fd5b604080516001600160801b03198c16815290517f5c79138ada278a9e3a8aa175a6ad8833ece98eca3658c5fe3b62edcafad3e5479181900360200190a16000612dab8b6145f3565b9050612db56157b7565b6040518060e001604052808c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d9182918501908490808284376000920191909152505050908252506040805160208a810282810182019093528a82529283019290918b918b91829185019084908082843760009201919091525050509082525083546040805160208381028201810190925282815292810192918691830182828015612ecf57602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411612ea05790505b505050918352505060ff8c1660208201526040018b67ffffffffffffffff81118015612efa57600080fd5b50604051908082528060200260200182016040528015612f24578160200160208202803683370190505b50815260016020918201526001600160801b03198e16600090815260028252604090208251805193945084939192612f6192849290910190615801565b506020828101518051612f7a9260018501920190615856565b5060408201518051612f96916002840191602090910190615909565b5060608201518051612fb2916003840191602090910190615909565b50608082015160048201805460ff191660ff90921691909117905560a08201518051612fe891600584019160209091019061599d565b5060c082015160068201805460ff1916600183600281111561300657fe5b021790555090505060005b60ff81168b1115613038576130268d8261465f565b6130308d826143ab565b600101613011565b6001600160801b03198d16600090815260056020526040812061305a91615a0c565b5060005b60ff81168b111561307b576130738d82614753565b60010161305e565b6000905083858e6001600160801b0319167f8743b25d76999ba54481a9a665809ce87ada651caa268c665968e1418d3919928d8d8d8d8d6040518080602001806020018481526020018381038352888882818152602001925060200280828437600083820152601f01601f19169091018481038352868152602090810191508790870280828437600083820152604051601f909101601f1916909201829003995090975050505050505050a450505050505050505050505050565b6005602052816000526040600020818154811061234d57600080fd5b6000546001600160a01b0316331461319f576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b60005b60ff81168211156131dc576131d483838360ff168181106131bf57fe5b905060200201356001600160a01b031661429a565b6001016131a2565b505050565b6000546001600160a01b0316331461322e576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b6123ea81614858565b6001600160801b031981166000908152600560209081526040918290208054835181840281018401909452808452606093928301828280156132b657602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116132875790505b50505050509050919050565b8960016001600160801b0319821660009081526002602081905260409091206006015460ff16908111156132f257fe5b146132fc57600080fd5b600054600160a01b900460ff161561335b576040805162461bcd60e51b815260206004820152601f60248201527f416363657373436f6e74726f6c3a2063757272656e746c792070617573656400604482015290519081900360640190fd5b3360009081526001602081905260409091205460ff161515146133af5760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b6133be8b88888888888861496a565b604080516001600160801b03198d16815290517f8a06fcdc0d1be3eae3b1e12e7a91fab33f69e210d923e12bdcaf65436a1659a89181900360200190a1604080518b8152602081018b90528082018a905290517f9fe5558c57ecbdbb93265cb9523f472cb1ee19a51cdfbba09676f58b78ef8a369181900360600190a15050505050505050505050565b6001600160801b031981166000908152600260209081526040918290206003018054835181840281018401909452808452606093928301828280156132b6576000918252602091829020805460ff168452908202830192909160019101808411613287575094979650505050505050565b600860209081526000928352604080842090915290825290205460ff1681565b3360009081526001602081905260409091205460ff1615151461352d5760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b8260016001600160801b0319821660009081526002602081905260409091206006015460ff169081111561355d57fe5b1461356757600080fd5b6001600160801b0319841660009081526002602090815260409182902080548351818402810184019094528084528793606093909291908301828280156135d757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116135b9575b5050505050905060005b8151811015613657576001600160801b0319831660009081526002602052604090206005018054600391908390811061361657fe5b90600052602060002090602091828204019190069054906101000a900460ff16600581111561364157fe5b60ff16101561364f57600080fd5b6001016135e1565b506001600160801b031986166000908152600360205260409020600101541561367f57600080fd5b6001600160801b03198616600090815260036020526040902060018101859055546136aa9085612a26565b15156001146136b857600080fd5b60606136c387613237565b805190915015613829576001600160801b031987166000908152600460209081526040918290208054835181840281018401909452808452613757939283018282801561374d57602002820191906000526020600020906000905b825461010083900a900460ff1681526020600192830181810494850194909303909202910180841161371e5790505b5050505050611933565b1561376b576137668782614ac9565b613829565b6001600160801b03198716600090815260046020908152604080832080548251818502810185019093528083526137d793830182828015612054576000918252602091829020805460ff1684529082028301929091600191018084116120255790505050505050611da3565b60ff16905060005b60108211613818576137f18989614deb565b90506060806137ff83613a6e565b9150915061380f8b848484614eef565b935050506137df565b5060006138268984846150c5565b50505b6001600160801b0319871660009081526002602090815260409182902080548351818402810184019094528084526060939283018282801561389457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613876575b5050505050905060005b8151811015613914576002600960008484815181106138b957fe5b6020908102919091018101516001600160a01b0316825281810192909252604090810160009081206001600160801b03198e1682529092529020805460ff1916600183600281111561390757fe5b021790555060010161389e565b506001600160801b03198816600081815260026020818152604092839020600601805460ff1916909217909155815192835290517f8a06fcdc0d1be3eae3b1e12e7a91fab33f69e210d923e12bdcaf65436a1659a89281900390910190a15050505050505050565b60006c0581018202830384048505050560991b80600d60ff85160660ff16600d81106139a457fe5b1a9392505050565b6000546001600160a01b031633146139f9576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b60005b60ff81168211156131dc57613a2e83838360ff16818110613a1957fe5b905060200201356001600160a01b0316614858565b6001016139fc565b6000613a4882600181518110611dc757fe5b60ff16613a5b83600081518110611dc757fe5b60ff161480156119515750505160021490565b606080613a79615a31565b506040805160c081018252600160808201818152604360f81b60a0840152825282518084018452818152601160fa1b6020828101919091528084019190915283518085018552828152600960fb1b81830152838501528351808501909452908352605360f81b908301526060810191909152613af3615a58565b50604080516101e08101825260016101a08201818152604160f81b6101c0840152825282518084018452818152601960f91b6020828101919091528084019190915283518085018552828152603360f81b818301528385015283518085018552828152600d60fa1b81830152606084015283518085018552828152603560f81b81830152608084015283518085018552828152601b60f91b8183015260a084015283518085018552828152603760f81b8183015260c084015283518085018552828152600760fb1b8183015260e084015283518085018552828152603960f81b8183015261010084015283518085018552828152601560fa1b8183015261012084015283518085018552828152602560f91b8183015261014084015283518085018552828152605160f81b818301526101608401528351808501909452908352604b60f81b90830152610180810191909152600080613c518761231f565b91509150838260ff1660048110613c6457fe5b6020020151838260ff16600d8110613c7857fe5b60200201519550955050505050915091565b6060613c968483612bb4565b613ccc576001600160a01b03831660009081526006602090815260408083206001600160801b0319881684529091529020613cfa565b6001600160a01b03831660009081526007602090815260408083206001600160801b03198816845290915290205b805480602002602001604051908101604052809291908181526020018280548015613d6257602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411613d335790505b505050505090509392505050565b6001600160801b031983166000908152600260205260408120805460ff8516908110613d9857fe5b60009182526020822001546001600160a01b03169150613db88584614deb565b9050606080613dc683613a6e565b915091506000613dd68888612bb4565b613e0c576001600160a01b03851660009081526006602090815260408083206001600160801b03198c1684529091529020613e3a565b6001600160a01b03851660009081526007602090815260408083206001600160801b03198c16845290915290205b9050808490806001815401808255809150506001900390600052602060002090602091828204019190069091909190916101000a81548160ff021916908360ff1602179055507f9ba676ec758fab38fbc86eabb1315d0ba9ef270cbddd5e17ef84ae4e6ddf67fb88868987878760405180876001600160801b0319168152602001866001600160a01b031681526020018560ff1681526020018460ff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015613f19578181015183820152602001613f01565b50505050905090810190601f168015613f465780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015613f79578181015183820152602001613f61565b50505050905090810190601f168015613fa65780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a15050505050505050565b600b5460408051630680429560e01b81526001600160a01b03888116600483015260248201889052868116604483015260648201869052608482018590529151919092169163068042959160a48083019260609291908290030181600087803b15801561402f57600080fd5b505af1158015614043573d6000803e3d6000fd5b505050506040513d606081101561405957600080fd5b50505050505050565b6001600160801b031983166000908152600260205260409020600101805482919060ff851690811061409057fe5b90600052602060002090600291828204019190066010026101000a8154816001600160801b0302191690836001600160801b03160217905550505050565b6140d9848284613d70565b60006140e96117b8868685613c8a565b60ff1690507fba94a75104505ced25374f387d8a0bbc1e86fabb868da58dfa47769098c49ec1816040518082815260200191505060405180910390a160158111156141c8576001600160801b03198516600090815260026020526040902060050180546004919060ff851690811061415d57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561418a57fe5b0217905550604080516001815290517fe096251939cfd59087f1f0ecb1190348aefec0a88f2b6b90bb1e41deb40e50dd9181900360200190a1614293565b6001600160801b031985166000818152600560208181526040808420805460018101825590855282852083820401805460ff808b16601f9094166101000a848102910219909116179055948452600290915290912001805460039290811061422c57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561425957fe5b0217905550604080516000815290517fe096251939cfd59087f1f0ecb1190348aefec0a88f2b6b90bb1e41deb40e50dd9181900360200190a15b5050505050565b806001600160a01b0381166142f6576040805162461bcd60e51b815260206004820152601e60248201527f416363657373436f6e74726f6c3a20696e76616c696420616464726573730000604482015290519081900360640190fd5b6001600160a01b03821660009081526001602052604090205460ff161561434e5760405162461bcd60e51b8152600401808060200182810382526023815260200180615aab6023913960400191505060405180910390fd5b6001600160a01b038216600081815260016020818152604092839020805460ff1916909217909155815192835290517fb10d2a24a8c3686841e966f0c2c64c385cfaecb50a09b16aa3579bfcf3989dcd9281900390910190a15050565b6001600160801b031982166000908152600260208190526040822001805460ff84169081106143d657fe5b6000918252602080832081830401546001600160801b031987168452600290915260408320805460ff601f9094166101000a9092048316945091851690811061441b57fe5b60009182526020808320909101546001600160801b03198716835260029091526040822060010180546001600160a01b0390921693509060ff861690811061445f57fe5b6000918252602091829020600282040154600a54604080516371da23e960e01b815260ff89166004820152905160019094166010026101000a9092046001600160801b0316945084936001600160a01b03909116926371da23e9926024808201939291829003018186803b1580156144d657600080fd5b505afa1580156144ea573d6000803e3d6000fd5b505050506040513d602081101561450057600080fd5b50516001600160801b0316101561451657600080fd5b600a54604080516341d4c74f60e01b815260ff861660048201526001600160a01b03858116602483015260448201859052915191909216916341d4c74f9160648083019260209291908290030181600087803b15801561457557600080fd5b505af1158015614589573d6000803e3d6000fd5b505050506040513d602081101561459f57600080fd5b50506040805160ff851681526001600160a01b038416602082015280820183905290517f65c4542a0147599e0783d3e59208f3bfffb745ae7d147bbe76da70b5676276719181900360600190a15050505050565b6001600160801b031981166000908152600260205260408120600301905b60348160ff16101561465957815460018181018455600084815260209081902090830401805460ff808616601f9095166101000a948502940219169290921790915501614611565b50919050565b6001600160801b031982166000908152600260209081526040918290208054835181840281018401909452808452606093928301828280156146ca57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116146ac575b505050505090506146f183828460ff16815181106146e457fe5b60200260200101516153af565b6001600160801b031983166000908152600260205260408120600501805460ff851690811061471c57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561474957fe5b0217905550505050565b6001600160801b031982166000908152600260209081526040918290208054835181840281018401909452808452606093928301828280156147be57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116147a0575b505050505090506147ee6147e984838560ff16815181106147db57fe5b602002602001015185613c8a565b611933565b156131dc576001600160801b031983166000818152600560208181526040808420805460018101825590855282852083820401805460ff808b16601f9094166101000a84810291021990911617905594845260029091529091208101805491929091811061471c57fe5b806001600160a01b0381166148b4576040805162461bcd60e51b815260206004820152601e60248201527f416363657373436f6e74726f6c3a20696e76616c696420616464726573730000604482015290519081900360640190fd5b6001600160a01b03821660009081526001602081905260409091205460ff161515146149115760405162461bcd60e51b8152600401808060200182810382526022815260200180615a896022913960400191505060405180910390fd5b6001600160a01b038216600081815260016020908152604091829020805460ff19169055815192835290517f6cfb0504498d3a8155a2a3dd5f41940ad5ab571197ac70f6d6948d189f6a0d279281900390910190a15050565b6001600160801b0319871660009081526002602081905260408220600601805460ff191690911790555b60ff8116861115614abf576001600160801b031988166000908152600260208190526040909120018054614a6f919060ff84169081106149d057fe5b6000918252602080832081830401546001600160801b03198d16845260029091526040909220805460ff601f9093166101000a90930482169290918516908110614a1657fe5b6000918252602090912001546001600160a01b0316878760ff8616818110614a3a57fe5b905060200201356001600160801b03168a8a8660ff16818110614a5957fe5b905060200201356001600160801b031601615475565b614ab7888287878560ff16818110614a8357fe5b905060200201356001600160801b031686868660ff16818110614aa257fe5b905060200201356001600160801b0316615506565b600101614994565b5050505050505050565b60005b81518110156131dc576001600160801b0319831660009081526002602052604081208351849084908110614afc57fe5b602002602001015160ff1681548110614b1157fe5b6000918252602090912001546001600160a01b0316905060056001600160801b031985166000908152600260205260409020600501805484908110614b5257fe5b90600052602060002090602091828204019190069054906101000a900460ff166005811115614b7d57fe5b1415614cb3576001600160801b0319841660009081526002602052604081208451600190910190859085908110614bb057fe5b602002602001015160ff1681548110614bc557fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b03169050614c6560026000876001600160801b0319166001600160801b0319168152602001908152602001600020600201858581518110614c2957fe5b602002602001015160ff1681548110614c3e57fe5b90600052602060002090602091828204019190069054906101000a900460ff168383615475565b604080516001600160a01b03841681526001600160801b038316602082015281517fc3e855922420cdafb260e047f68ac02de87868df7bd1f28c27b9d9a4de43d1a8929181900390910190a1505b6001600160a01b03811660009081526008602090815260408083206001600160801b03198816845290915290205460ff16151560011415614de2576001600160801b0319841660009081526002602052604081208451600190910190859085908110614d1b57fe5b602002602001015160ff1681548110614d3057fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b03169050614d9460026000876001600160801b0319166001600160801b0319168152602001908152602001600020600201858581518110614c2957fe5b604080516001600160a01b03841681526001600160801b038316602082015281517fbf2a3d4d8ec2feaa45dfd5779abcf977ed3565830ebb07bf7db66074d3182528929181900390910190a1505b50600101614acc565b6001600160801b03198216600090815260026020526040812060030180548290614e1690859061571d565b90506000828281548110614e2657fe5b90600052602060002090602091828204019190069054906101000a900460ff16905082600184805490500381548110614e5b57fe5b90600052602060002090602091828204019190069054906101000a900460ff16838381548110614e8757fe5b90600052602060002090602091828204019190066101000a81548160ff021916908360ff16021790555082805480614ebb57fe5b6000828152602090819020600019909201908104909101805460ff601f84166101000a021916905590559250505092915050565b6001600160801b031984166000818152600460209081526040808320805460018101825590845282842083820401805460ff808b16601f9094166101000a8481029102199091161790558151948552848301526080908401818152865191850191909152855192937f04a7c204b12e00b9aa84dc954cfe36f5d20da8bf730adc1aeee91f4573d878f59389938993899389939092606084019160a08501918701908083838e5b83811015614fad578181015183820152602001614f95565b50505050905090810190601f168015614fda5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561500d578181015183820152602001614ff5565b50505050905090810190601f16801561503a5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a16001600160801b0319851660009081526004602090815260409182902080548351818402810184019094528084526150b99392830182828015612054576000918252602091829020805460ff1684529082028301929091600191018084116120255790505050505050611da3565b60ff1695945050505050565b60005b82518110156153a95760008382815181106150df57fe5b6020908102919091018101516001600160801b03198716600090815260029092526040822080549193509060ff841690811061511757fe5b60009182526020822001546001600160a01b0316915061513b6117b8888486613c8a565b60ff169050600060056001600160801b031989166000908152600260205260409020600501805460ff871690811061516f57fe5b90600052602060002090602091828204019190069054906101000a900460ff16600581111561519a57fe5b1415615213576001600160801b03198816600090815260026020526040902060010180546064919060ff87169081106151cf57fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b031660fa026001600160801b03168161520b57fe5b0490506152e5565b85821115615286576001600160801b03198816600090815260026020526040902060010180546064919060ff871690811061524a57fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b031660c8026001600160801b03168161520b57fe5b858214156152e5576001600160801b031988166000908152600260205260409020600101805460ff86169081106152b957fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b031690505b6001600160801b03811615615399576001600160801b03198816600090815260026020819052604090912001805461534c919060ff871690811061532557fe5b90600052602060002090602091828204019190069054906101000a900460ff168483615475565b604080516001600160a01b03851681526001600160801b038316602082015281517fc3e855922420cdafb260e047f68ac02de87868df7bd1f28c27b9d9a4de43d1a8929181900390910190a15b5050600190920191506150c89050565b50505050565b6001600160a01b03811660009081526009602090815260408083206001600160801b03198616845290915281205460ff1660028111156153eb57fe5b1480615432575060026001600160a01b03821660009081526009602090815260408083206001600160801b03198716845290915290205460ff16600281111561543057fe5b145b61543b57600080fd5b6001600160a01b031660009081526009602090815260408083206001600160801b031994909416835292905220805460ff19166001179055565b600a5460408051631894bcc960e11b815260ff861660048201526001600160a01b0385811660248301526001600160801b03851660448301529151919092169163312979929160648083019260209291908290030181600087803b1580156154dc57600080fd5b505af11580156154f0573d6000803e3d6000fd5b505050506040513d602081101561429357600080fd5b6001600160801b03198416600090815260026020526040902060010180546001600160801b038416919060ff861690811061553d57fe5b6000918252602090912060028204015460019091166010026101000a90046001600160801b0316101561556f57600080fd5b6001600160801b03198416600090815260026020526040902080546153a9919060ff861690811061559c57fe5b60009182526020808320909101546001600160801b0319881683526002909152604090912060010180546001600160a01b039092169185919060ff88169081106155e257fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b0316036001600160801b0316600a60009054906101000a90046001600160a01b03166001600160a01b0316635ad3f918600260008a6001600160801b0319166001600160801b03191681526020019081526020016000206002018860ff168154811061567157fe5b90600052602060002090602091828204019190069054906101000a900460ff166040518263ffffffff1660e01b8152600401808260ff16815260200191505060206040518083038186803b1580156156c857600080fd5b505afa1580156156dc573d6000803e3d6000fd5b505050506040513d60208110156156f257600080fd5b50516001600160801b031988166000908152600260205260409020546001600160801b038616613fc3565b6040805160208082018590528183018490528251808303840181526060909201909252805191012060009082908161575157fe5b069392505050565b82805482825590600052602060002090601f016020900481019282156157a757600052602060002091601f016020900482015b828111156157a757825482559160010191906001019061578c565b506157b3929150615a73565b5090565b6040518060e0016040528060608152602001606081526020016060815260200160608152602001600060ff16815260200160608152602001600060028111156157fc57fe5b905290565b8280548282559060005260206000209081019282156157a7579160200282015b828111156157a757825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190615821565b828054828255906000526020600020906001016002900481019282156157a75791602002820160005b838211156158c957835183826101000a8154816001600160801b0302191690836001600160801b031602179055509260200192601001602081600f0104928301926001030261587f565b80156158fc5782816101000a8154906001600160801b030219169055601001602081600f010492830192600103026158c9565b50506157b3929150615a73565b82805482825590600052602060002090601f016020900481019282156157a75791602002820160005b8382111561597057835183826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302615932565b80156158fc5782816101000a81549060ff0219169055600101602081600001049283019260010302615970565b82805482825590600052602060002090601f016020900481019282156157a75791602002820160005b8382111561597057835183826101000a81548160ff021916908360058111156159eb57fe5b021790555092602001926001016020816000010492830192600103026159c6565b50805460008255601f0160209004906000526020600020908101906123ea9190615a73565b60405180608001604052806004905b6060815260200190600190039081615a405790505090565b604080516101a0810190915260608152600c60208201615a40565b5b808211156157b35760008155600101615a7456fe416363657373436f6e74726f6c3a20776f726b6572206e6f74206465746563746564416363657373436f6e74726f6c3a20776f726b657220616c7265616479206578697374416363657373436f6e74726f6c3a2043454f206163636573732064656e696564416363657373436f6e74726f6c3a20776f726b6572206163636573732064656e696564416363657373436f6e74726f6c3a2063757272656e6c7479206e6f7420706175736564a26469706673582212205b09149b3098d99e8c5d47f971c133fd1583688222509bbaaede19e9c8abc5b264736f6c63430007050033000000000000000000000000bf79ce2fbd819e5abc2327563d02a200255b7cb3000000000000000000000000000000000000000000000000000000000000000400000000000000000000000011e46db40d4438d1c64f68993ca43b03ac1b6a6b

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102485760003560e01c806382c0e5221161013b578063c54f0c52116100b8578063e4c279b71161007c578063e4c279b714610cc4578063e6adfe3714610ce4578063e6fae6be14610d52578063efc5e73d14610df3578063f9bf6de314610ef157610248565b8063c54f0c5214610a8d578063c783feb714610b04578063d4652cf414610c34578063d4c5754314610c5b578063dac29c5114610c9157610248565b8063aa8d7c26116100ff578063aa8d7c2614610871578063b92742ff146108a1578063c1e14249146109cc578063c3170007146109f9578063c4f987a514610a6757610248565b806382c0e522146107a557806383cf376d146107e45780638456cb59146108075780639ac6c3ca1461080f578063aa1566451461084b57610248565b806350bfba99116101c957806361d027b31161018d57806361d027b3146106b0578063659ae43f146106b8578063697c6415146106fb578063776c2b8414610728578063806ad57e1461077f57610248565b806350bfba99146105655780635184c0661461056d578063574a47e3146105b25780635c975abb146106695780635f7b92571461067157610248565b8063433010c011610210578063433010c0146103195780634359cb0f146103ec578063457457af1461042b5780634c354436146104705780634d41ddaf146104b057610248565b80630a0f81681461024d578063252949491461027157806327d7874c146102c35780633025d9e2146102eb5780633f4ba83a14610311575b600080fd5b610255610f30565b604080516001600160a01b039092168252519081900360200190f35b6102986004803603602081101561028757600080fd5b50356001600160801b031916610f3f565b604051808360ff1681526020018260028111156102b157fe5b81526020019250505060405180910390f35b6102e9600480360360208110156102d957600080fd5b50356001600160a01b0316610f62565b005b6102e96004803603602081101561030157600080fd5b50356001600160a01b0316611066565b6102e96110d5565b6103cf600480360360a081101561032f57600080fd5b81359160208101359160408201359190810190608081016060820135600160201b81111561035c57600080fd5b82018360208201111561036e57600080fd5b803590602001918460208302840111600160201b8311171561038f57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050913592506111a0915050565b604080516001600160801b03199092168252519081900360200190f35b6102e96004803603606081101561040257600080fd5b5080356001600160801b0319169060208101356001600160a01b0316906040013560ff1661121a565b6102e96004803603608081101561044157600080fd5b506001600160801b0319813516906001600160a01b036020820135169060ff604082013516906060013561154c565b6104976004803603602081101561048657600080fd5b50356001600160801b03191661191a565b6040805192835260208301919091528051918290030190f35b610551600480360360208110156104c657600080fd5b810190602081018135600160201b8111156104e057600080fd5b8201836020820111156104f257600080fd5b803590602001918460208302840111600160201b8311171561051357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611933945050505050565b604080519115158252519081900360200190f35b610255611957565b6102e96004803603608081101561058357600080fd5b5080356001600160801b0319169060208101356001600160a01b0316906040810135906060013560ff16611966565b610653600480360360208110156105c857600080fd5b810190602081018135600160201b8111156105e257600080fd5b8201836020820111156105f457600080fd5b803590602001918460208302840111600160201b8311171561061557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611da3945050505050565b6040805160ff9092168252519081900360200190f35b610551611e3a565b6102e96004803603606081101561068757600080fd5b5080356001600160801b0319169060208101356001600160a01b0316906040013560ff16611e4a565b610255612310565b6106d8600480360360208110156106ce57600080fd5b503560ff1661231f565b604051808360ff1681526020018260ff1681526020019250505060405180910390f35b6106536004803603604081101561071157600080fd5b506001600160801b03198135169060200135612331565b61075e6004803603604081101561073e57600080fd5b5080356001600160a01b031690602001356001600160801b031916612374565b6040518082600281111561076e57fe5b815260200191505060405180910390f35b6102e96004803603602081101561079557600080fd5b50356001600160a01b0316612394565b6102e9600480360360608110156107bb57600080fd5b5080356001600160801b0319169060208101356001600160a01b0316906040013560ff166123ed565b610551600480360360408110156107fa57600080fd5b5080359060200135612a26565b6102e9612a60565b6106536004803603606081101561082557600080fd5b506001600160a01b03813516906001600160801b03196020820135169060400135612b4f565b6105516004803603602081101561086157600080fd5b50356001600160a01b0316612b9f565b6105516004803603604081101561088757600080fd5b5080356001600160801b031916906020013560ff16612bb4565b6102e9600480360360e08110156108b757600080fd5b6001600160801b03198235169190810190604081016020820135600160201b8111156108e257600080fd5b8201836020820111156108f457600080fd5b803590602001918460208302840111600160201b8311171561091557600080fd5b919390929091602081019035600160201b81111561093257600080fd5b82018360208201111561094457600080fd5b803590602001918460208302840111600160201b8311171561096557600080fd5b919390929091602081019035600160201b81111561098257600080fd5b82018360208201111561099457600080fd5b803590602001918460208302840111600160201b831117156109b557600080fd5b919350915080359060208101359060400135612c16565b610653600480360360408110156109e257600080fd5b506001600160801b03198135169060200135613136565b6102e960048036036020811015610a0f57600080fd5b810190602081018135600160201b811115610a2957600080fd5b820183602082011115610a3b57600080fd5b803590602001918460208302840111600160201b83111715610a5c57600080fd5b509092509050613152565b6102e960048036036020811015610a7d57600080fd5b50356001600160a01b03166131e1565b610ab460048036036020811015610aa357600080fd5b50356001600160801b031916613237565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610af0578181015183820152602001610ad8565b505050509050019250505060405180910390f35b6102e9600480360360e0811015610b1a57600080fd5b6001600160801b03198235169160208101359160408201359160608101359181019060a081016080820135600160201b811115610b5657600080fd5b820183602082011115610b6857600080fd5b803590602001918460208302840111600160201b83111715610b8957600080fd5b919390929091602081019035600160201b811115610ba657600080fd5b820183602082011115610bb857600080fd5b803590602001918460208302840111600160201b83111715610bd957600080fd5b919390929091602081019035600160201b811115610bf657600080fd5b820183602082011115610c0857600080fd5b803590602001918460208302840111600160201b83111715610c2957600080fd5b5090925090506132c2565b610ab460048036036020811015610c4a57600080fd5b50356001600160801b031916613448565b61055160048036036040811015610c7157600080fd5b5080356001600160a01b031690602001356001600160801b0319166134b9565b6102e960048036036060811015610ca757600080fd5b506001600160801b031981351690602081013590604001356134d9565b61065360048036036020811015610cda57600080fd5b503560ff1661397c565b6102e960048036036020811015610cfa57600080fd5b810190602081018135600160201b811115610d1457600080fd5b820183602082011115610d2657600080fd5b803590602001918460208302840111600160201b83111715610d4757600080fd5b5090925090506139ac565b61055160048036036020811015610d6857600080fd5b810190602081018135600160201b811115610d8257600080fd5b820183602082011115610d9457600080fd5b803590602001918460208302840111600160201b83111715610db557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613a36945050505050565b610e1360048036036020811015610e0957600080fd5b503560ff16613a6e565b604051808060200180602001838103835285818151815260200191508051906020019080838360005b83811015610e54578181015183820152602001610e3c565b50505050905090810190601f168015610e815780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015610eb4578181015183820152602001610e9c565b50505050905090810190601f168015610ee15780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b610ab460048036036060811015610f0757600080fd5b5080356001600160801b0319169060208101356001600160a01b0316906040013560ff16613c8a565b6000546001600160a01b031681565b6002602052600090815260409020600481015460069091015460ff918216911682565b806001600160a01b038116610fbe576040805162461bcd60e51b815260206004820152601e60248201527f416363657373436f6e74726f6c3a20696e76616c696420616464726573730000604482015290519081900360640190fd5b6000546001600160a01b0316331461100b576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b03848116919091179182905560408051929091168252517ff97cbb4246b709036319093e5ff31674b9f6759076d153e1bea1f60392170fc0916020908290030190a15050565b6000546001600160a01b031633146110b3576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611122576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b600054600160a01b900460ff1661116a5760405162461bcd60e51b8152600401808060200182810382526023815260200180615b116023913960400191505060405180910390fd5b6000805460ff60a01b191681556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d169339190a1565b6000858585858560405160200180868152602001858152602001848152602001838051906020019060200280838360005b838110156111e95781810151838201526020016111d1565b50505050919091019283525050604080518083038152602092830190915280519101209a9950505050505050505050565b3360009081526001602081905260409091205460ff1615151461126e5760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b8260016001600160801b0319821660009081526002602081905260409091206006015460ff169081111561129e57fe5b146112a857600080fd5b838260006001600160801b031983166000908152600260205260409020600501805460ff84169081106112d757fe5b90600052602060002090602091828204019190069054906101000a900460ff16600581111561130257fe5b1480611363575060016001600160801b031983166000908152600260205260409020600501805460ff841690811061133657fe5b90600052602060002090602091828204019190069054906101000a900460ff16600581111561136157fe5b145b806113c3575060026001600160801b031983166000908152600260205260409020600501805460ff841690811061139657fe5b90600052602060002090602091828204019190069054906101000a900460ff1660058111156113c157fe5b145b6113cc57600080fd5b6001600160801b03198616600090815260026020526040902080548791879187916001600160a01b0384169160ff841690811061140557fe5b6000918252602090912001546001600160a01b0316148015611462575060016001600160a01b03831660009081526009602090815260408083206001600160801b03198816845290915290205460ff16600281111561146057fe5b145b61146b57600080fd5b600560008a6001600160801b0319166001600160801b03191681526020019081526020016000208790806001815401808255809150506001900390600052602060002090602091828204019190069091909190916101000a81548160ff021916908360ff1602179055506003600260008b6001600160801b0319166001600160801b03191681526020019081526020016000206005018860ff168154811061150f57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561153c57fe5b0217905550505050505050505050565b3360009081526001602081905260409091205460ff161515146115a05760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b8360016001600160801b0319821660009081526002602081905260409091206006015460ff16908111156115d057fe5b146115da57600080fd5b848360006001600160801b031983166000908152600260205260409020600501805460ff841690811061160957fe5b90600052602060002090602091828204019190069054906101000a900460ff16600581111561163457fe5b1480611695575060016001600160801b031983166000908152600260205260409020600501805460ff841690811061166857fe5b90600052602060002090602091828204019190069054906101000a900460ff16600581111561169357fe5b145b806116f5575060026001600160801b031983166000908152600260205260409020600501805460ff84169081106116c857fe5b90600052602060002090602091828204019190069054906101000a900460ff1660058111156116f357fe5b145b6116fe57600080fd5b6001600160801b03198716600090815260026020526040902080548891889188916001600160a01b0384169160ff841690811061173757fe5b6000918252602090912001546001600160a01b0316148015611794575060016001600160a01b03831660009081526009602090815260408083206001600160801b03198816845290915290205460ff16600281111561179257fe5b145b61179d57600080fd5b6117a88a8989613d70565b60006117bd6117b88c8c8c613c8a565b611da3565b60ff169050601581111561182d576001600160801b03198b16600090815260026020526040902060050180546004919060ff8c169081106117fa57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561182757fe5b02179055505b806015141561190d57600560008c6001600160801b0319166001600160801b03191681526020019081526020016000208990806001815401808255809150506001900390600052602060002090602091828204019190069091909190916101000a81548160ff021916908360ff1602179055506003600260008d6001600160801b0319166001600160801b03191681526020019081526020016000206005018a60ff16815481106118da57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561190757fe5b02179055505b5050505050505050505050565b6003602052600090815260409020805460019091015482565b600061193e82611da3565b60ff166015148015611951575081516002145b92915050565b600b546001600160a01b031681565b3360009081526001602081905260409091205460ff161515146119ba5760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b8360016001600160801b0319821660009081526002602081905260409091206006015460ff16908111156119ea57fe5b146119f457600080fd5b848260006001600160801b031983166000908152600260205260409020600501805460ff8416908110611a2357fe5b90600052602060002090602091828204019190069054906101000a900460ff166005811115611a4e57fe5b14611a5857600080fd5b6001600160801b03198716600090815260026020526040902080548891889187916001600160a01b0384169160ff8416908110611a9157fe5b6000918252602090912001546001600160a01b0316148015611aee575060016001600160a01b03831660009081526009602090815260408083206001600160801b03198816845290915290205460ff166002811115611aec57fe5b145b611af757600080fd5b6001600160a01b03891660009081526006602090815260408083206001600160801b03198e168452909152902054600214611b3157600080fd5b6001600160801b03198a166000908152600260208190526040822001805460ff8a16908110611b5c57fe5b6000918252602080832081830401546001600160801b03198f168452600290915260408320805460ff601f9094166101000a90920483169450918b16908110611ba157fe5b60009182526020808320909101546001600160801b03198f16835260029091526040822060010180546001600160a01b0390921693509060ff8c16908110611be557fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b03166001600160801b031690506000600260008f6001600160801b0319166001600160801b031916815260200190815260200160002060040160009054906101000a900460ff169050611ced8383600a60009054906101000a90046001600160a01b03166001600160a01b0316635ad3f918886040518263ffffffff1660e01b8152600401808260ff16815260200191505060206040518083038186803b158015611cb657600080fd5b505afa158015611cca573d6000803e3d6000fd5b505050506040513d6020811015611ce057600080fd5b505160ff85166000613fc3565b600a54604080516341d4c74f60e01b815260ff871660048201526001600160a01b03868116602483015260448201869052915191909216916341d4c74f9160648083019260209291908290030181600087803b158015611d4c57600080fd5b505af1158015611d60573d6000803e3d6000fd5b505050506040513d6020811015611d7657600080fd5b50611d8790508e8c60028502614062565b611d938e8e8e8e6140ce565b5050505050505050505050505050565b60008080805b84518160ff161015611df557611dd4858260ff1681518110611dc757fe5b602002602001015161397c565b938401939150600b60ff83161415611ded576001830192505b600101611da9565b5060158360ff161115611e335760005b8260ff168160ff161015611e3157600a8403935060158460ff1611611e2957611e31565b600101611e05565b505b5050919050565b600054600160a01b900460ff1681565b3360009081526001602081905260409091205460ff16151514611e9e5760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b8260016001600160801b0319821660009081526002602081905260409091206006015460ff1690811115611ece57fe5b14611ed857600080fd5b838260006001600160801b031983166000908152600260205260409020600501805460ff8416908110611f0757fe5b90600052602060002090602091828204019190069054906101000a900460ff166005811115611f3257fe5b14611f3c57600080fd5b6001600160a01b03851660009081526006602090815260408083206001600160801b03198a1684529091529020546002148015611fa757506001600160a01b03851660009081526008602090815260408083206001600160801b03198a16845290915290205460ff16155b611fb057600080fd5b6001600160801b03198616600090815260046020526040902054600114801561206557506001600160801b03198616600090815260046020908152604091829020805483518184028101840190945280845261205e939283018282801561205457602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116120255790505b5050505050611da3565b60ff16600b145b61206e57600080fd5b6001600160a01b03851660009081526008602090815260408083206001600160801b03198a1684528252808320805460ff19166001179055600291829052822060048101549101805460ff928316939288169081106120c957fe5b6000918252602080832081830401546001600160801b03198c168452600290915260408320805460ff601f9094166101000a9092048316945091891690811061210e57fe5b60009182526020808320909101546001600160801b03198c16835260029091526040822060010180546001600160a01b0390921693509060ff8a1690811061215257fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b03166001600160801b0316905061221d826002838161219457fe5b600a5460408051630b5a7f2360e31b815260ff8a166004820152905193909204926001600160a01b0390911691635ad3f918916024808301926020929190829003018186803b1580156121e657600080fd5b505afa1580156121fa573d6000803e3d6000fd5b505050506040513d602081101561221057600080fd5b505160ff88166000613fc3565b600a546001600160a01b03166341d4c74f8484600285046040518463ffffffff1660e01b8152600401808460ff168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561228457600080fd5b505af1158015612298573d6000803e3d6000fd5b505050506040513d60208110156122ae57600080fd5b5050604080516001600160801b03198c1681526001600160a01b038416602082015260ff8a168183015290517fdb6e35eacf9090f40a5453fd7c372403ecea66a053067bc14a03ba91cc06e1a69181900360600190a150505050505050505050565b600a546001600160a01b031681565b600d60ff919091168181049291900690565b6004602052816000526040600020818154811061234d57600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b600960209081526000928352604080842090915290825290205460ff1681565b6000546001600160a01b031633146123e1576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b6123ea8161429a565b50565b3360009081526001602081905260409091205460ff161515146124415760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b8260016001600160801b0319821660009081526002602081905260409091206006015460ff169081111561247157fe5b1461247b57600080fd5b838260006001600160801b031983166000908152600260205260409020600501805460ff84169081106124aa57fe5b90600052602060002090602091828204019190069054906101000a900460ff1660058111156124d557fe5b146124df57600080fd5b6001600160801b03198616600090815260026020526040902080548791879187916001600160a01b0384169160ff841690811061251857fe5b6000918252602090912001546001600160a01b0316148015612575575060016001600160a01b03831660009081526009602090815260408083206001600160801b03198816845290915290205460ff16600281111561257357fe5b145b61257e57600080fd5b6001600160a01b03881660009081526007602090815260408083206001600160801b03198d16845290915290205415801561264f57506001600160a01b03881660009081526006602090815260408083206001600160801b03198d168452825291829020805483518184028101840190945280845261264f939283018282801561264557602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116126165790505b5050505050613a36565b61265857600080fd5b6001600160801b03198916600081815260026020908152604082208054600180820183558285529284200180546001600160a01b0319166001600160a01b038e1617905592909152018054819060ff8a169081106126b257fe5b600091825260208083206002808404909101548554600180820188559686528386208382040180546001600160801b036010938a16840261010090810a828102199093169a90981690930290960a90920416909302949094179091556001600160801b03198c16825282905260409020018054819060ff8a1690811061273457fe5b60009182526020808320818304015484546001808201875595855282852083820401805460ff601f93841661010090810a82810219909316978516810a90950481169091029590951790556001600160801b03198f168086526002808552604087206005018054808a01825581895286892096810490960180549690941690940a9081029086021990941693909317905592528154908a169081106127d557fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561280257fe5b021790555061281189886143ab565b6001600160a01b03881660009081526006602090815260408083206001600160801b03198d168452909152902080548061284757fe5b60008281526020808220600019909301818104909301805460ff601f86166101000a0219169055919092556001600160a01b038a168083526006825260408084206001600160801b03198e1680865290845281852092855260078452818520908552909252912081546128ba9290615759565b506001600160801b031989166000818152600260209081526040808320546001600160a01b038d16808552600684528285208686528452828520818652600785528386208787528552948390208351968752938601526000190190840181905260a06060850181815284549186018290527f93675dd8ad58ef405624d8b6842ec6095972328ad8eba5238dfbe10b8119af0a958f958f959093909290608083019060c0840190869080156129ab57602002820191906000526020600020906000905b825461010083900a900460ff1681526020600192830181810494850194909303909202910180841161297c5790505b50508381038252848181548152602001915080548015612a0857602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116129d95790505b505097505050505050505060405180910390a1505050505050505050565b60408051602080820184905282518083038201815291830190925280519101206000908314612a56576000612a59565b60015b9392505050565b3360009081526001602081905260409091205460ff16151514612ab45760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b600054600160a01b900460ff1615612b13576040805162461bcd60e51b815260206004820152601f60248201527f416363657373436f6e74726f6c3a2063757272656e746c792070617573656400604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b1781556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e7529190a1565b60076020528260005260406000206020528160005260406000208181548110612b7757600080fd5b906000526020600020906020918282040191900692509250509054906101000a900460ff1681565b60016020526000908152604090205460ff1681565b600060026001600160801b031984166000908152600260205260409020600501805460ff8516908110612be357fe5b90600052602060002090602091828204019190069054906101000a900460ff166005811115612c0e57fe5b149392505050565b600054600160a01b900460ff1615612c75576040805162461bcd60e51b815260206004820152601f60248201527f416363657373436f6e74726f6c3a2063757272656e746c792070617573656400604482015290519081900360640190fd5b3360009081526001602081905260409091205460ff16151514612cc95760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b600a54600160a01b900460ff168811801590612ce457508584145b8015612cef57508388145b612cf857600080fd5b6001600160801b03198a16600090815260026020819052604082206006015460ff1690811115612d2457fe5b1480612d5a57506001600160801b03198a1660009081526002602081905260409091206006015460ff1681811115612d5857fe5b145b612d6357600080fd5b604080516001600160801b03198c16815290517f5c79138ada278a9e3a8aa175a6ad8833ece98eca3658c5fe3b62edcafad3e5479181900360200190a16000612dab8b6145f3565b9050612db56157b7565b6040518060e001604052808c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d9182918501908490808284376000920191909152505050908252506040805160208a810282810182019093528a82529283019290918b918b91829185019084908082843760009201919091525050509082525083546040805160208381028201810190925282815292810192918691830182828015612ecf57602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411612ea05790505b505050918352505060ff8c1660208201526040018b67ffffffffffffffff81118015612efa57600080fd5b50604051908082528060200260200182016040528015612f24578160200160208202803683370190505b50815260016020918201526001600160801b03198e16600090815260028252604090208251805193945084939192612f6192849290910190615801565b506020828101518051612f7a9260018501920190615856565b5060408201518051612f96916002840191602090910190615909565b5060608201518051612fb2916003840191602090910190615909565b50608082015160048201805460ff191660ff90921691909117905560a08201518051612fe891600584019160209091019061599d565b5060c082015160068201805460ff1916600183600281111561300657fe5b021790555090505060005b60ff81168b1115613038576130268d8261465f565b6130308d826143ab565b600101613011565b6001600160801b03198d16600090815260056020526040812061305a91615a0c565b5060005b60ff81168b111561307b576130738d82614753565b60010161305e565b6000905083858e6001600160801b0319167f8743b25d76999ba54481a9a665809ce87ada651caa268c665968e1418d3919928d8d8d8d8d6040518080602001806020018481526020018381038352888882818152602001925060200280828437600083820152601f01601f19169091018481038352868152602090810191508790870280828437600083820152604051601f909101601f1916909201829003995090975050505050505050a450505050505050505050505050565b6005602052816000526040600020818154811061234d57600080fd5b6000546001600160a01b0316331461319f576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b60005b60ff81168211156131dc576131d483838360ff168181106131bf57fe5b905060200201356001600160a01b031661429a565b6001016131a2565b505050565b6000546001600160a01b0316331461322e576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b6123ea81614858565b6001600160801b031981166000908152600560209081526040918290208054835181840281018401909452808452606093928301828280156132b657602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116132875790505b50505050509050919050565b8960016001600160801b0319821660009081526002602081905260409091206006015460ff16908111156132f257fe5b146132fc57600080fd5b600054600160a01b900460ff161561335b576040805162461bcd60e51b815260206004820152601f60248201527f416363657373436f6e74726f6c3a2063757272656e746c792070617573656400604482015290519081900360640190fd5b3360009081526001602081905260409091205460ff161515146133af5760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b6133be8b88888888888861496a565b604080516001600160801b03198d16815290517f8a06fcdc0d1be3eae3b1e12e7a91fab33f69e210d923e12bdcaf65436a1659a89181900360200190a1604080518b8152602081018b90528082018a905290517f9fe5558c57ecbdbb93265cb9523f472cb1ee19a51cdfbba09676f58b78ef8a369181900360600190a15050505050505050505050565b6001600160801b031981166000908152600260209081526040918290206003018054835181840281018401909452808452606093928301828280156132b6576000918252602091829020805460ff168452908202830192909160019101808411613287575094979650505050505050565b600860209081526000928352604080842090915290825290205460ff1681565b3360009081526001602081905260409091205460ff1615151461352d5760405162461bcd60e51b8152600401808060200182810382526023815260200180615aee6023913960400191505060405180910390fd5b8260016001600160801b0319821660009081526002602081905260409091206006015460ff169081111561355d57fe5b1461356757600080fd5b6001600160801b0319841660009081526002602090815260409182902080548351818402810184019094528084528793606093909291908301828280156135d757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116135b9575b5050505050905060005b8151811015613657576001600160801b0319831660009081526002602052604090206005018054600391908390811061361657fe5b90600052602060002090602091828204019190069054906101000a900460ff16600581111561364157fe5b60ff16101561364f57600080fd5b6001016135e1565b506001600160801b031986166000908152600360205260409020600101541561367f57600080fd5b6001600160801b03198616600090815260036020526040902060018101859055546136aa9085612a26565b15156001146136b857600080fd5b60606136c387613237565b805190915015613829576001600160801b031987166000908152600460209081526040918290208054835181840281018401909452808452613757939283018282801561374d57602002820191906000526020600020906000905b825461010083900a900460ff1681526020600192830181810494850194909303909202910180841161371e5790505b5050505050611933565b1561376b576137668782614ac9565b613829565b6001600160801b03198716600090815260046020908152604080832080548251818502810185019093528083526137d793830182828015612054576000918252602091829020805460ff1684529082028301929091600191018084116120255790505050505050611da3565b60ff16905060005b60108211613818576137f18989614deb565b90506060806137ff83613a6e565b9150915061380f8b848484614eef565b935050506137df565b5060006138268984846150c5565b50505b6001600160801b0319871660009081526002602090815260409182902080548351818402810184019094528084526060939283018282801561389457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613876575b5050505050905060005b8151811015613914576002600960008484815181106138b957fe5b6020908102919091018101516001600160a01b0316825281810192909252604090810160009081206001600160801b03198e1682529092529020805460ff1916600183600281111561390757fe5b021790555060010161389e565b506001600160801b03198816600081815260026020818152604092839020600601805460ff1916909217909155815192835290517f8a06fcdc0d1be3eae3b1e12e7a91fab33f69e210d923e12bdcaf65436a1659a89281900390910190a15050505050505050565b60006c0581018202830384048505050560991b80600d60ff85160660ff16600d81106139a457fe5b1a9392505050565b6000546001600160a01b031633146139f9576040805162461bcd60e51b81526020600482018190526024820152600080516020615ace833981519152604482015290519081900360640190fd5b60005b60ff81168211156131dc57613a2e83838360ff16818110613a1957fe5b905060200201356001600160a01b0316614858565b6001016139fc565b6000613a4882600181518110611dc757fe5b60ff16613a5b83600081518110611dc757fe5b60ff161480156119515750505160021490565b606080613a79615a31565b506040805160c081018252600160808201818152604360f81b60a0840152825282518084018452818152601160fa1b6020828101919091528084019190915283518085018552828152600960fb1b81830152838501528351808501909452908352605360f81b908301526060810191909152613af3615a58565b50604080516101e08101825260016101a08201818152604160f81b6101c0840152825282518084018452818152601960f91b6020828101919091528084019190915283518085018552828152603360f81b818301528385015283518085018552828152600d60fa1b81830152606084015283518085018552828152603560f81b81830152608084015283518085018552828152601b60f91b8183015260a084015283518085018552828152603760f81b8183015260c084015283518085018552828152600760fb1b8183015260e084015283518085018552828152603960f81b8183015261010084015283518085018552828152601560fa1b8183015261012084015283518085018552828152602560f91b8183015261014084015283518085018552828152605160f81b818301526101608401528351808501909452908352604b60f81b90830152610180810191909152600080613c518761231f565b91509150838260ff1660048110613c6457fe5b6020020151838260ff16600d8110613c7857fe5b60200201519550955050505050915091565b6060613c968483612bb4565b613ccc576001600160a01b03831660009081526006602090815260408083206001600160801b0319881684529091529020613cfa565b6001600160a01b03831660009081526007602090815260408083206001600160801b03198816845290915290205b805480602002602001604051908101604052809291908181526020018280548015613d6257602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411613d335790505b505050505090509392505050565b6001600160801b031983166000908152600260205260408120805460ff8516908110613d9857fe5b60009182526020822001546001600160a01b03169150613db88584614deb565b9050606080613dc683613a6e565b915091506000613dd68888612bb4565b613e0c576001600160a01b03851660009081526006602090815260408083206001600160801b03198c1684529091529020613e3a565b6001600160a01b03851660009081526007602090815260408083206001600160801b03198c16845290915290205b9050808490806001815401808255809150506001900390600052602060002090602091828204019190069091909190916101000a81548160ff021916908360ff1602179055507f9ba676ec758fab38fbc86eabb1315d0ba9ef270cbddd5e17ef84ae4e6ddf67fb88868987878760405180876001600160801b0319168152602001866001600160a01b031681526020018560ff1681526020018460ff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015613f19578181015183820152602001613f01565b50505050905090810190601f168015613f465780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015613f79578181015183820152602001613f61565b50505050905090810190601f168015613fa65780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a15050505050505050565b600b5460408051630680429560e01b81526001600160a01b03888116600483015260248201889052868116604483015260648201869052608482018590529151919092169163068042959160a48083019260609291908290030181600087803b15801561402f57600080fd5b505af1158015614043573d6000803e3d6000fd5b505050506040513d606081101561405957600080fd5b50505050505050565b6001600160801b031983166000908152600260205260409020600101805482919060ff851690811061409057fe5b90600052602060002090600291828204019190066010026101000a8154816001600160801b0302191690836001600160801b03160217905550505050565b6140d9848284613d70565b60006140e96117b8868685613c8a565b60ff1690507fba94a75104505ced25374f387d8a0bbc1e86fabb868da58dfa47769098c49ec1816040518082815260200191505060405180910390a160158111156141c8576001600160801b03198516600090815260026020526040902060050180546004919060ff851690811061415d57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561418a57fe5b0217905550604080516001815290517fe096251939cfd59087f1f0ecb1190348aefec0a88f2b6b90bb1e41deb40e50dd9181900360200190a1614293565b6001600160801b031985166000818152600560208181526040808420805460018101825590855282852083820401805460ff808b16601f9094166101000a848102910219909116179055948452600290915290912001805460039290811061422c57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561425957fe5b0217905550604080516000815290517fe096251939cfd59087f1f0ecb1190348aefec0a88f2b6b90bb1e41deb40e50dd9181900360200190a15b5050505050565b806001600160a01b0381166142f6576040805162461bcd60e51b815260206004820152601e60248201527f416363657373436f6e74726f6c3a20696e76616c696420616464726573730000604482015290519081900360640190fd5b6001600160a01b03821660009081526001602052604090205460ff161561434e5760405162461bcd60e51b8152600401808060200182810382526023815260200180615aab6023913960400191505060405180910390fd5b6001600160a01b038216600081815260016020818152604092839020805460ff1916909217909155815192835290517fb10d2a24a8c3686841e966f0c2c64c385cfaecb50a09b16aa3579bfcf3989dcd9281900390910190a15050565b6001600160801b031982166000908152600260208190526040822001805460ff84169081106143d657fe5b6000918252602080832081830401546001600160801b031987168452600290915260408320805460ff601f9094166101000a9092048316945091851690811061441b57fe5b60009182526020808320909101546001600160801b03198716835260029091526040822060010180546001600160a01b0390921693509060ff861690811061445f57fe5b6000918252602091829020600282040154600a54604080516371da23e960e01b815260ff89166004820152905160019094166010026101000a9092046001600160801b0316945084936001600160a01b03909116926371da23e9926024808201939291829003018186803b1580156144d657600080fd5b505afa1580156144ea573d6000803e3d6000fd5b505050506040513d602081101561450057600080fd5b50516001600160801b0316101561451657600080fd5b600a54604080516341d4c74f60e01b815260ff861660048201526001600160a01b03858116602483015260448201859052915191909216916341d4c74f9160648083019260209291908290030181600087803b15801561457557600080fd5b505af1158015614589573d6000803e3d6000fd5b505050506040513d602081101561459f57600080fd5b50506040805160ff851681526001600160a01b038416602082015280820183905290517f65c4542a0147599e0783d3e59208f3bfffb745ae7d147bbe76da70b5676276719181900360600190a15050505050565b6001600160801b031981166000908152600260205260408120600301905b60348160ff16101561465957815460018181018455600084815260209081902090830401805460ff808616601f9095166101000a948502940219169290921790915501614611565b50919050565b6001600160801b031982166000908152600260209081526040918290208054835181840281018401909452808452606093928301828280156146ca57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116146ac575b505050505090506146f183828460ff16815181106146e457fe5b60200260200101516153af565b6001600160801b031983166000908152600260205260408120600501805460ff851690811061471c57fe5b90600052602060002090602091828204019190066101000a81548160ff0219169083600581111561474957fe5b0217905550505050565b6001600160801b031982166000908152600260209081526040918290208054835181840281018401909452808452606093928301828280156147be57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116147a0575b505050505090506147ee6147e984838560ff16815181106147db57fe5b602002602001015185613c8a565b611933565b156131dc576001600160801b031983166000818152600560208181526040808420805460018101825590855282852083820401805460ff808b16601f9094166101000a84810291021990911617905594845260029091529091208101805491929091811061471c57fe5b806001600160a01b0381166148b4576040805162461bcd60e51b815260206004820152601e60248201527f416363657373436f6e74726f6c3a20696e76616c696420616464726573730000604482015290519081900360640190fd5b6001600160a01b03821660009081526001602081905260409091205460ff161515146149115760405162461bcd60e51b8152600401808060200182810382526022815260200180615a896022913960400191505060405180910390fd5b6001600160a01b038216600081815260016020908152604091829020805460ff19169055815192835290517f6cfb0504498d3a8155a2a3dd5f41940ad5ab571197ac70f6d6948d189f6a0d279281900390910190a15050565b6001600160801b0319871660009081526002602081905260408220600601805460ff191690911790555b60ff8116861115614abf576001600160801b031988166000908152600260208190526040909120018054614a6f919060ff84169081106149d057fe5b6000918252602080832081830401546001600160801b03198d16845260029091526040909220805460ff601f9093166101000a90930482169290918516908110614a1657fe5b6000918252602090912001546001600160a01b0316878760ff8616818110614a3a57fe5b905060200201356001600160801b03168a8a8660ff16818110614a5957fe5b905060200201356001600160801b031601615475565b614ab7888287878560ff16818110614a8357fe5b905060200201356001600160801b031686868660ff16818110614aa257fe5b905060200201356001600160801b0316615506565b600101614994565b5050505050505050565b60005b81518110156131dc576001600160801b0319831660009081526002602052604081208351849084908110614afc57fe5b602002602001015160ff1681548110614b1157fe5b6000918252602090912001546001600160a01b0316905060056001600160801b031985166000908152600260205260409020600501805484908110614b5257fe5b90600052602060002090602091828204019190069054906101000a900460ff166005811115614b7d57fe5b1415614cb3576001600160801b0319841660009081526002602052604081208451600190910190859085908110614bb057fe5b602002602001015160ff1681548110614bc557fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b03169050614c6560026000876001600160801b0319166001600160801b0319168152602001908152602001600020600201858581518110614c2957fe5b602002602001015160ff1681548110614c3e57fe5b90600052602060002090602091828204019190069054906101000a900460ff168383615475565b604080516001600160a01b03841681526001600160801b038316602082015281517fc3e855922420cdafb260e047f68ac02de87868df7bd1f28c27b9d9a4de43d1a8929181900390910190a1505b6001600160a01b03811660009081526008602090815260408083206001600160801b03198816845290915290205460ff16151560011415614de2576001600160801b0319841660009081526002602052604081208451600190910190859085908110614d1b57fe5b602002602001015160ff1681548110614d3057fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b03169050614d9460026000876001600160801b0319166001600160801b0319168152602001908152602001600020600201858581518110614c2957fe5b604080516001600160a01b03841681526001600160801b038316602082015281517fbf2a3d4d8ec2feaa45dfd5779abcf977ed3565830ebb07bf7db66074d3182528929181900390910190a1505b50600101614acc565b6001600160801b03198216600090815260026020526040812060030180548290614e1690859061571d565b90506000828281548110614e2657fe5b90600052602060002090602091828204019190069054906101000a900460ff16905082600184805490500381548110614e5b57fe5b90600052602060002090602091828204019190069054906101000a900460ff16838381548110614e8757fe5b90600052602060002090602091828204019190066101000a81548160ff021916908360ff16021790555082805480614ebb57fe5b6000828152602090819020600019909201908104909101805460ff601f84166101000a021916905590559250505092915050565b6001600160801b031984166000818152600460209081526040808320805460018101825590845282842083820401805460ff808b16601f9094166101000a8481029102199091161790558151948552848301526080908401818152865191850191909152855192937f04a7c204b12e00b9aa84dc954cfe36f5d20da8bf730adc1aeee91f4573d878f59389938993899389939092606084019160a08501918701908083838e5b83811015614fad578181015183820152602001614f95565b50505050905090810190601f168015614fda5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561500d578181015183820152602001614ff5565b50505050905090810190601f16801561503a5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a16001600160801b0319851660009081526004602090815260409182902080548351818402810184019094528084526150b99392830182828015612054576000918252602091829020805460ff1684529082028301929091600191018084116120255790505050505050611da3565b60ff1695945050505050565b60005b82518110156153a95760008382815181106150df57fe5b6020908102919091018101516001600160801b03198716600090815260029092526040822080549193509060ff841690811061511757fe5b60009182526020822001546001600160a01b0316915061513b6117b8888486613c8a565b60ff169050600060056001600160801b031989166000908152600260205260409020600501805460ff871690811061516f57fe5b90600052602060002090602091828204019190069054906101000a900460ff16600581111561519a57fe5b1415615213576001600160801b03198816600090815260026020526040902060010180546064919060ff87169081106151cf57fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b031660fa026001600160801b03168161520b57fe5b0490506152e5565b85821115615286576001600160801b03198816600090815260026020526040902060010180546064919060ff871690811061524a57fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b031660c8026001600160801b03168161520b57fe5b858214156152e5576001600160801b031988166000908152600260205260409020600101805460ff86169081106152b957fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b031690505b6001600160801b03811615615399576001600160801b03198816600090815260026020819052604090912001805461534c919060ff871690811061532557fe5b90600052602060002090602091828204019190069054906101000a900460ff168483615475565b604080516001600160a01b03851681526001600160801b038316602082015281517fc3e855922420cdafb260e047f68ac02de87868df7bd1f28c27b9d9a4de43d1a8929181900390910190a15b5050600190920191506150c89050565b50505050565b6001600160a01b03811660009081526009602090815260408083206001600160801b03198616845290915281205460ff1660028111156153eb57fe5b1480615432575060026001600160a01b03821660009081526009602090815260408083206001600160801b03198716845290915290205460ff16600281111561543057fe5b145b61543b57600080fd5b6001600160a01b031660009081526009602090815260408083206001600160801b031994909416835292905220805460ff19166001179055565b600a5460408051631894bcc960e11b815260ff861660048201526001600160a01b0385811660248301526001600160801b03851660448301529151919092169163312979929160648083019260209291908290030181600087803b1580156154dc57600080fd5b505af11580156154f0573d6000803e3d6000fd5b505050506040513d602081101561429357600080fd5b6001600160801b03198416600090815260026020526040902060010180546001600160801b038416919060ff861690811061553d57fe5b6000918252602090912060028204015460019091166010026101000a90046001600160801b0316101561556f57600080fd5b6001600160801b03198416600090815260026020526040902080546153a9919060ff861690811061559c57fe5b60009182526020808320909101546001600160801b0319881683526002909152604090912060010180546001600160a01b039092169185919060ff88169081106155e257fe5b90600052602060002090600291828204019190066010029054906101000a90046001600160801b0316036001600160801b0316600a60009054906101000a90046001600160a01b03166001600160a01b0316635ad3f918600260008a6001600160801b0319166001600160801b03191681526020019081526020016000206002018860ff168154811061567157fe5b90600052602060002090602091828204019190069054906101000a900460ff166040518263ffffffff1660e01b8152600401808260ff16815260200191505060206040518083038186803b1580156156c857600080fd5b505afa1580156156dc573d6000803e3d6000fd5b505050506040513d60208110156156f257600080fd5b50516001600160801b031988166000908152600260205260409020546001600160801b038616613fc3565b6040805160208082018590528183018490528251808303840181526060909201909252805191012060009082908161575157fe5b069392505050565b82805482825590600052602060002090601f016020900481019282156157a757600052602060002091601f016020900482015b828111156157a757825482559160010191906001019061578c565b506157b3929150615a73565b5090565b6040518060e0016040528060608152602001606081526020016060815260200160608152602001600060ff16815260200160608152602001600060028111156157fc57fe5b905290565b8280548282559060005260206000209081019282156157a7579160200282015b828111156157a757825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190615821565b828054828255906000526020600020906001016002900481019282156157a75791602002820160005b838211156158c957835183826101000a8154816001600160801b0302191690836001600160801b031602179055509260200192601001602081600f0104928301926001030261587f565b80156158fc5782816101000a8154906001600160801b030219169055601001602081600f010492830192600103026158c9565b50506157b3929150615a73565b82805482825590600052602060002090601f016020900481019282156157a75791602002820160005b8382111561597057835183826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302615932565b80156158fc5782816101000a81549060ff0219169055600101602081600001049283019260010302615970565b82805482825590600052602060002090601f016020900481019282156157a75791602002820160005b8382111561597057835183826101000a81548160ff021916908360058111156159eb57fe5b021790555092602001926001016020816000010492830192600103026159c6565b50805460008255601f0160209004906000526020600020908101906123ea9190615a73565b60405180608001604052806004905b6060815260200190600190039081615a405790505090565b604080516101a0810190915260608152600c60208201615a40565b5b808211156157b35760008155600101615a7456fe416363657373436f6e74726f6c3a20776f726b6572206e6f74206465746563746564416363657373436f6e74726f6c3a20776f726b657220616c7265616479206578697374416363657373436f6e74726f6c3a2043454f206163636573732064656e696564416363657373436f6e74726f6c3a20776f726b6572206163636573732064656e696564416363657373436f6e74726f6c3a2063757272656e6c7479206e6f7420706175736564a26469706673582212205b09149b3098d99e8c5d47f971c133fd1583688222509bbaaede19e9c8abc5b264736f6c63430007050033

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

000000000000000000000000bf79ce2fbd819e5abc2327563d02a200255b7cb3000000000000000000000000000000000000000000000000000000000000000400000000000000000000000011e46db40d4438d1c64f68993ca43b03ac1b6a6b

-----Decoded View---------------
Arg [0] : _treasuryAddress (address): 0xBF79cE2fbd819e5aBC2327563D02a200255B7Cb3
Arg [1] : _maxPlayers (uint8): 4
Arg [2] : _pointerAddress (address): 0x11e46DB40d4438D1c64f68993CA43b03Ac1B6A6B

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000bf79ce2fbd819e5abc2327563d02a200255b7cb3
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [2] : 00000000000000000000000011e46db40d4438d1c64f68993ca43b03ac1b6a6b


Deployed Bytecode Sourcemap

7964:29174:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;963:25;;;:::i;:::-;;;;-1:-1:-1;;;;;963:25:0;;;;;;;;;;;;;;8541:37;;;;;;;;;;;;;;;;-1:-1:-1;8541:37:0;-1:-1:-1;;;;;;8541:37:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2409:221;;;;;;;;;;;;;;;;-1:-1:-1;2409:221:0;-1:-1:-1;;;;;2409:221:0;;:::i;:::-;;36956:179;;;;;;;;;;;;;;;;-1:-1:-1;36956:179:0;-1:-1:-1;;;;;36956:179:0;;:::i;4403:138::-;;;:::i;34707:405::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34707:405:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34707:405:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34707:405:0;;-1:-1:-1;;34707:405:0;;;-1:-1:-1;34707:405:0;;-1:-1:-1;;34707:405:0:i;:::-;;;;-1:-1:-1;;;;;;34707:405:0;;;;;;;;;;;;;;22762:400;;;;;;;;;;;;;;;;-1:-1:-1;22762:400:0;;-1:-1:-1;;;;;;22762:400:0;;;;;;-1:-1:-1;;;;;22762:400:0;;;;;;;;:::i;21916:838::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;21916:838:0;;;;-1:-1:-1;;;;;21916:838:0;;;;;;;;;;;;;;;;;:::i;8585:51::-;;;;;;;;;;;;;;;;-1:-1:-1;8585:51:0;-1:-1:-1;;;;;;8585:51:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7254:196;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7254:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7254:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7254:196:0;;-1:-1:-1;7254:196:0;;-1:-1:-1;;;;;7254:196:0:i;:::-;;;;;;;;;;;;;;;;;;11968:38;;;:::i;32321:1234::-;;;;;;;;;;;;;;;;-1:-1:-1;32321:1234:0;;-1:-1:-1;;;;;;32321:1234:0;;;;;;-1:-1:-1;;;;;32321:1234:0;;;;;;;;;;;;;:::i;6595:651::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6595:651:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6595:651:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6595:651:0;;-1:-1:-1;6595:651:0;;-1:-1:-1;;;;;6595:651:0:i;:::-;;;;;;;;;;;;;;;;;;;997:26;;;:::i;31131:1182::-;;;;;;;;;;;;;;;;-1:-1:-1;31131:1182:0;;-1:-1:-1;;;;;;31131:1182:0;;;;;;-1:-1:-1;;;;;31131:1182:0;;;;;;;;:::i;10286:32::-;;;:::i;5381:171::-;;;;;;;;;;;;;;;;-1:-1:-1;5381:171:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8643:49;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;8643:49:0;;;;;;;;:::i;8971:65::-;;;;;;;;;;;;;;;;-1:-1:-1;8971:65:0;;-1:-1:-1;;;;;8971:65:0;;;;;-1:-1:-1;;;;;;8971:65:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;2638:160;;;;;;;;;;;;;;;;-1:-1:-1;2638:160:0;-1:-1:-1;;;;;2638:160:0;;:::i;29985:1138::-;;;;;;;;;;;;;;;;-1:-1:-1;29985:1138:0;;-1:-1:-1;;;;;;29985:1138:0;;;;;;-1:-1:-1;;;;;29985:1138:0;;;;;;;;:::i;7687:270::-;;;;;;;;;;;;;;;;-1:-1:-1;7687:270:0;;;;;;;:::i;4256:139::-;;;:::i;8823:66::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8823:66:0;;;;-1:-1:-1;;;;;;8823:66:0;;;;;;;;;;:::i;1032:41::-;;;;;;;;;;;;;;;;-1:-1:-1;1032:41:0;-1:-1:-1;;;;;1032:41:0;;:::i;36735:213::-;;;;;;;;;;;;;;;;-1:-1:-1;36735:213:0;;-1:-1:-1;;;;;;36735:213:0;;;;;;;;:::i;15997:2711::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15997:2711:0;;;;;;;;;;;;;;;-1:-1:-1;;;15997:2711:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15997:2711:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15997:2711:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15997:2711:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15997:2711:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15997:2711:0;;;;;;;;;;;;-1:-1:-1;15997:2711:0;-1:-1:-1;15997:2711:0;;;;;;;;;;;;:::i;8699:51::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;8699:51:0;;;;;;;;:::i;2806:245::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2806:245:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2806:245:0;;;;;;;;;;-1:-1:-1;2806:245:0;;-1:-1:-1;2806:245:0;-1:-1:-1;2806:245:0;:::i;3420:176::-;;;;;;;;;;;;;;;;-1:-1:-1;3420:176:0;-1:-1:-1;;;;;3420:176:0;;:::i;29543:182::-;;;;;;;;;;;;;;;;-1:-1:-1;29543:182:0;-1:-1:-1;;;;;;29543:182:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18716:862;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18716:862:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18716:862:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18716:862:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18716:862:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18716:862:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18716:862:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18716:862:0;;;;;;;;;;-1:-1:-1;18716:862:0;;-1:-1:-1;18716:862:0;-1:-1:-1;18716:862:0;:::i;34525:174::-;;;;;;;;;;;;;;;;-1:-1:-1;34525:174:0;-1:-1:-1;;;;;;34525:174:0;;:::i;8896:68::-;;;;;;;;;;;;;;;;-1:-1:-1;8896:68:0;;-1:-1:-1;;;;;8896:68:0;;;;;-1:-1:-1;;;;;;8896:68:0;;:::i;23905:2661::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;23905:2661:0;;;;;;;;;;;;;:::i;6328:259::-;;;;;;;;;;;;;;;;-1:-1:-1;6328:259:0;;;;:::i;3604:254::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3604:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3604:254:0;;;;;;;;;;-1:-1:-1;3604:254:0;;-1:-1:-1;3604:254:0;-1:-1:-1;3604:254:0;:::i;7458:221::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7458:221:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7458:221:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7458:221:0;;-1:-1:-1;7458:221:0;;-1:-1:-1;;;;;7458:221:0:i;5560:409::-;;;;;;;;;;;;;;;;-1:-1:-1;5560:409:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5560:409:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36387:340;;;;;;;;;;;;;;;;-1:-1:-1;36387:340:0;;-1:-1:-1;;;;;;36387:340:0;;;;;;-1:-1:-1;;;;;36387:340:0;;;;;;;;:::i;963:25::-;;;-1:-1:-1;;;;;963:25:0;;:::o;8541:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2409:221::-;2500:7;-1:-1:-1;;;;;1990:31:0;;1968:111;;;;;-1:-1:-1;;;1968:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1636:10:::1;::::0;-1:-1:-1;;;;;1636:10:0::1;1622;:24;1600:106;;;::::0;;-1:-1:-1;;;1600:106:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;1600:106:0;;;;;;;;;;;;;::::1;;2542:10:::2;:20:::0;;-1:-1:-1;;;;;;2542:20:0::2;-1:-1:-1::0;;;;;2542:20:0;;::::2;::::0;;;::::2;::::0;;;;2580:42:::2;::::0;;2601:10;;;::::2;2580:42:::0;;;::::2;::::0;::::2;::::0;;;;;;::::2;2409:221:::0;;:::o;36956:179::-;1636:10;;-1:-1:-1;;;;;1636:10:0;1622;:24;1600:106;;;;;-1:-1:-1;;;1600:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1600:106:0;;;;;;;;;;;;;;;37074:15:::1;:53:::0;;-1:-1:-1;;;;;;37074:53:0::1;-1:-1:-1::0;;;;;37074:53:0;;;::::1;::::0;;;::::1;::::0;;36956:179::o;4403:138::-;1636:10;;-1:-1:-1;;;;;1636:10:0;1622;:24;1600:106;;;;;-1:-1:-1;;;1600:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1600:106:0;;;;;;;;;;;;;;;2312:6:::1;::::0;-1:-1:-1;;;2312:6:0;::::1;;;2290:91;;;;-1:-1:-1::0;;;2290:91:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4502:5:::2;4493:14:::0;;-1:-1:-1;;;;4493:14:0::2;::::0;;4523:10:::2;::::0;::::2;::::0;4502:5;4523:10:::2;4403:138::o:0;34707:405::-;34923:14;35031:9;35042:7;35051:8;35061;35071:6;35014:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;35014:64:0;;;;;;;-1:-1:-1;;35014:64:0;;;;;;;;;;;;;;;34986:107;;;;;;34707:405;-1:-1:-1;;;;;;;;;;34707:405:0:o;22762:400::-;1798:10;1789:20;;;;:8;:20;;;;;;;;;;;:28;;;1767:113;;;;-1:-1:-1;;;1767:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22926:7;9144:21:::1;-1:-1:-1::0;;;;;;9120:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;;;:20:::1;;::::0;::::1;;::::0;:45;::::1;;;;;;;9098:78;;;::::0;::::1;;22965:7:::0;22974;9584:21:::2;-1:-1:-1::0;;;;;;9550:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;;;;;:126;;;-1:-1:-1::0;9656:20:0::2;-1:-1:-1::0;;;;;;9622:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;;;;;9550:126;:196;;;-1:-1:-1::0;9727:19:0::2;-1:-1:-1::0;;;;;;9693:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:53;;;;;;;;;9550:196;9528:229;;;::::0;::::2;;-1:-1:-1::0;;;;;;9310:14:0;::::3;;::::0;;;:5:::3;:14;::::0;;;;:31;;23007:7;;23016;;23025;;-1:-1:-1;;;;;9310:42:0;::::3;::::0;:31:::3;::::0;::::3;::::0;;::::3;;;;;;::::0;;;::::3;::::0;;;::::3;::::0;-1:-1:-1;;;;;9310:31:0::3;:42;:106:::0;::::3;;;-1:-1:-1::0;9397:19:0::3;-1:-1:-1::0;;;;;9369:15:0;::::3;;::::0;;;:6:::3;:15;::::0;;;;;;;-1:-1:-1;;;;;;9369:24:0;::::3;::::0;;;;;;;;::::3;;:47;::::0;::::3;;;;;;;9310:106;9288:139;;;::::0;::::3;;23050:16:::4;:25;23067:7;-1:-1:-1::0;;;;;23050:25:0::4;;-1:-1:-1::0;;;;;23050:25:0::4;;;;;;;;;;;;;23081:7;23050:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23133:21;23100:5;:14;23106:7;-1:-1:-1::0;;;;;23100:14:0::4;;-1:-1:-1::0;;;;;23100:14:0::4;;;;;;;;;;;;;:21;;23122:7;23100:30;;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;;;;;;;;;;;;;;;;;;;;9768:1:::3;;;9187::::2;;1891::::1;22762:400:::0;;;:::o;21916:838::-;1798:10;1789:20;;;;:8;:20;;;;;;;;;;;:28;;;1767:113;;;;-1:-1:-1;;;1767:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22109:7;9144:21:::1;-1:-1:-1::0;;;;;;9120:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;;;:20:::1;;::::0;::::1;;::::0;:45;::::1;;;;;;;9098:78;;;::::0;::::1;;22148:7:::0;22157;9584:21:::2;-1:-1:-1::0;;;;;;9550:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;;;;;:126;;;-1:-1:-1::0;9656:20:0::2;-1:-1:-1::0;;;;;;9622:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;;;;;9550:126;:196;;;-1:-1:-1::0;9727:19:0::2;-1:-1:-1::0;;;;;;9693:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:53;;;;;;;;;9550:196;9528:229;;;::::0;::::2;;-1:-1:-1::0;;;;;;9310:14:0;::::3;;::::0;;;:5:::3;:14;::::0;;;;:31;;22190:7;;22199;;22208;;-1:-1:-1;;;;;9310:42:0;::::3;::::0;:31:::3;::::0;::::3;::::0;;::::3;;;;;;::::0;;;::::3;::::0;;;::::3;::::0;-1:-1:-1;;;;;9310:31:0::3;:42;:106:::0;::::3;;;-1:-1:-1::0;9397:19:0::3;-1:-1:-1::0;;;;;9369:15:0;::::3;;::::0;;;:6:::3;:15;::::0;;;;;;;-1:-1:-1;;;;;;9369:24:0;::::3;::::0;;;;;;;;::::3;;:47;::::0;::::3;;;;;;;9310:106;9288:139;;;::::0;::::3;;22282:69:::4;22311:7;22320;22329:11;22282:15;:69::i;:::-;22364:20;22387:73;22415:34;22423:7;22432;22441;22415;:34::i;:::-;22387:13;:73::i;:::-;22364:96;;;;22492:2;22477:12;:17;22473:103;;;-1:-1:-1::0;;;;;;22511:14:0;::::4;;::::0;;;:5:::4;:14;::::0;;;;:21:::4;;:30:::0;;22544:20:::4;::::0;22511:21;:30:::4;::::0;::::4;::::0;;::::4;;;;;;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;;;;;;;22473:103;22592:12;22608:2;22592:18;22588:159;;;22627:16;:25;22644:7;-1:-1:-1::0;;;;;22627:25:0::4;;-1:-1:-1::0;;;;;22627:25:0::4;;;;;;;;;;;;;22658:7;22627:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22714:21;22681:5;:14;22687:7;-1:-1:-1::0;;;;;22681:14:0::4;;-1:-1:-1::0;;;;;22681:14:0::4;;;;;;;;;;;;;:21;;22703:7;22681:30;;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;;;;;;;;;;;;;;;;;;;;22588:159;9438:1;9768::::3;;;9187::::2;;1891::::1;21916:838:::0;;;;:::o;8585:51::-;;;;;;;;;;;;;;;;;;;:::o;7254:196::-;7364:4;7393:21;7407:6;7393:13;:21::i;:::-;:27;;7418:2;7393:27;:49;;;;;7424:6;:13;7441:1;7424:18;7393:49;7386:56;7254:196;-1:-1:-1;;7254:196:0:o;11968:38::-;;;-1:-1:-1;;;;;11968:38:0;;:::o;32321:1234::-;1798:10;1789:20;;;;:8;:20;;;;;;;;;;;:28;;;1767:113;;;;-1:-1:-1;;;1767:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32517:7;9144:21:::1;-1:-1:-1::0;;;;;;9120:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;;;:20:::1;;::::0;::::1;;::::0;:45;::::1;;;;;;;9098:78;;;::::0;::::1;;32549:7:::0;32558;9907:21:::2;-1:-1:-1::0;;;;;;9873:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;;;;;9851:88;;;::::0;::::2;;-1:-1:-1::0;;;;;;9310:14:0;::::3;;::::0;;;:5:::3;:14;::::0;;;;:31;;32591:7;;32600;;32609;;-1:-1:-1;;;;;9310:42:0;::::3;::::0;:31:::3;::::0;::::3;::::0;;::::3;;;;;;::::0;;;::::3;::::0;;;::::3;::::0;-1:-1:-1;;;;;9310:31:0::3;:42;:106:::0;::::3;;;-1:-1:-1::0;9397:19:0::3;-1:-1:-1::0;;;;;9369:15:0;::::3;;::::0;;;:6:::3;:15;::::0;;;;;;;-1:-1:-1;;;;;;9369:24:0;::::3;::::0;;;;;;;;::::3;;:47;::::0;::::3;;;;;;;9310:106;9288:139;;;::::0;::::3;;-1:-1:-1::0;;;;;32657:20:0;::::4;;::::0;;;:11:::4;:20;::::0;;;;;;;-1:-1:-1;;;;;;32657:29:0;::::4;::::0;;;;;;;:36;32697:1:::4;32657:41;32634:75;;;::::0;::::4;;-1:-1:-1::0;;;;;;32790:14:0;::::4;32771:16;32790:14:::0;;;:5:::4;:14;::::0;;;;;;:21:::4;:30:::0;;::::4;::::0;::::4;::::0;;::::4;;;;;;::::0;;;::::4;::::0;;;;;::::4;;::::0;-1:-1:-1;;;;;;32848:14:0;::::4;::::0;;:5:::4;:14:::0;;;;;;:31;;32790:30:::4;::::0;;;;::::4;;::::0;;::::4;::::0;::::4;::::0;-1:-1:-1;32848:14:0;:31;::::4;::::0;;::::4;;;;;;::::0;;;::::4;::::0;;;;;::::4;::::0;-1:-1:-1;;;;;;32910:14:0;::::4;::::0;;:5:::4;:14:::0;;;;;;32848:31;32910:19:::4;:28:::0;;-1:-1:-1;;;;;32848:31:0;;::::4;::::0;-1:-1:-1;32910:19:0;:28:::4;::::0;::::4;::::0;;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;32910:28:0::4;-1:-1:-1::0;;;;;32890:48:0::4;;;32949:18;32970:5;:14;32976:7;-1:-1:-1::0;;;;;32970:14:0::4;;-1:-1:-1::0;;;;;32970:14:0::4;;;;;;;;;;;;;:27;;;;;;;;;;;;32949:48;;33010:160;33035:6;33056:9;33080:8;;;;;;;;;-1:-1:-1::0;;;;;33080:8:0::4;-1:-1:-1::0;;;;;33080:24:0::4;;33105:10;33080:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;-1:-1:-1::0;33080:36:0;33010:160:::4;::::0;::::4;33158:1;33010:10;:160::i;:::-;33183:8;::::0;:110:::4;::::0;;-1:-1:-1;;;33183:110:0;;::::4;::::0;::::4;;::::0;::::4;::::0;-1:-1:-1;;;;;33183:110:0;;::::4;::::0;;;;;;;;;;;;:8;;;::::4;::::0;:29:::4;::::0;:110;;;;;::::4;::::0;;;;;;;;:8:::4;::::0;:110;::::4;;::::0;::::4;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;-1:-1:-1::0;33306:104:0::4;::::0;-1:-1:-1;33333:7:0;33355;33397:1:::4;33385:13:::0;::::4;33306:12;:104::i;:::-;33423:124;33459:7;33481;33503:11;33529:7;33423:21;:124::i;:::-;9438:1;;;;9950::::3;;;9187::::2;;1891::::1;32321:1234:::0;;;;:::o;6595:651::-;6705:14;;;;6782:208;6804:6;:13;6800:1;:17;;;6782:208;;;6847:24;6861:6;6868:1;6861:9;;;;;;;;;;;;;;;;6847:13;:24::i;:::-;6886:17;;;;6839:32;-1:-1:-1;6931:2:0;6922:11;;;;6918:61;;;6962:1;6954:9;;;;6918:61;6819:3;;6782:208;;;;7015:2;7004:8;:13;;;7000:213;;;7039:7;7034:168;7056:4;7052:8;;:1;:8;;;7034:168;;;7098:2;7086:14;;;;7135:2;7123:8;:14;;;7119:68;;7162:5;;7119:68;7062:3;;7034:168;;;;7000:213;7223:15;;6595:651;;;:::o;997:26::-;;;-1:-1:-1;;;997:26:0;;;;;:::o;31131:1182::-;1798:10;1789:20;;;;:8;:20;;;;;;;;;;;:28;;;1767:113;;;;-1:-1:-1;;;1767:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31304:7;9144:21:::1;-1:-1:-1::0;;;;;;9120:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;;;:20:::1;;::::0;::::1;;::::0;:45;::::1;;;;;;;9098:78;;;::::0;::::1;;31336:7:::0;31345;9907:21:::2;-1:-1:-1::0;;;;;;9873:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;;;;;9851:88;;;::::0;::::2;;-1:-1:-1::0;;;;;31393:20:0;::::3;;::::0;;;:11:::3;:20;::::0;;;;;;;-1:-1:-1;;;;;;31393:29:0;::::3;::::0;;;;;;;:36;31433:1:::3;31393:41;:101:::0;::::3;;;-1:-1:-1::0;;;;;;31451:25:0;::::3;;::::0;;;:16:::3;:25;::::0;;;;;;;-1:-1:-1;;;;;;31451:34:0;::::3;::::0;;;;;;;;::::3;;:43;31393:101;31370:135;;;::::0;::::3;;-1:-1:-1::0;;;;;;31541:23:0;::::3;;::::0;;;:14:::3;:23;::::0;;;;:30;31575:1:::3;31541:35;:96:::0;::::3;;;-1:-1:-1::0;;;;;;;31607:23:0;::::3;;::::0;;;:14:::3;:23;::::0;;;;;;;;31593:38;;;;;;::::3;::::0;;;;;;;;;;::::3;::::0;;;::::3;31607:23:::0;31593:38;;::::3;;;;;;;;;;;;;;;;;;::::0;;::::3;::::0;;::::3;::::0;::::3;;;::::0;;::::3;;::::0;;::::3;::::0;;::::3;::::0;;::::3;::::0;;;::::3;::::0;;::::3;::::0;::::3;::::0;;::::3;;;;;;;;;;;:13;:38::i;:::-;:44;;31635:2;31593:44;31541:96;31518:130;;;::::0;::::3;;-1:-1:-1::0;;;;;31661:25:0;::::3;;::::0;;;:16:::3;:25;::::0;;;;;;;-1:-1:-1;;;;;;31661:34:0;::::3;::::0;;;;;;;:41;;-1:-1:-1;;31661:41:0::3;31698:4;31661:41;::::0;;31736:5:::3;:14:::0;;;;;;:27:::3;::::0;::::3;::::0;31793:21;::::3;:30:::0;;31661:41:::3;31736:27:::0;;::::3;::::0;31661:25;31793:30;::::3;::::0;;::::3;;;;;;::::0;;;::::3;::::0;;;;;::::3;;::::0;-1:-1:-1;;;;;;31851:14:0;::::3;::::0;;:5:::3;:14:::0;;;;;;:31;;31793:30:::3;::::0;;;;::::3;;::::0;;::::3;::::0;::::3;::::0;-1:-1:-1;31851:14:0;:31;::::3;::::0;;::::3;;;;;;::::0;;;::::3;::::0;;;;;::::3;::::0;-1:-1:-1;;;;;;31913:14:0;::::3;::::0;;:5:::3;:14:::0;;;;;;31851:31;31913:19:::3;:28:::0;;-1:-1:-1;;;;;31851:31:0;;::::3;::::0;-1:-1:-1;31913:19:0;:28:::3;::::0;::::3;::::0;;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;31913:28:0::3;-1:-1:-1::0;;;;;31893:48:0::3;;;31954:164;31979:6;32012:1;32000:9;:13;;;;;32028:8;::::0;:36:::3;::::0;;-1:-1:-1;;;32028:36:0;;::::3;::::0;::::3;;::::0;::::3;::::0;;;32000:13;;;::::3;::::0;-1:-1:-1;;;;;32028:8:0;;::::3;::::0;:24:::3;::::0;:36;;;;;::::3;::::0;;;;;;;;:8;:36;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;32028:36:0;31954:164:::3;::::0;::::3;32106:1;31954:10;:164::i;:::-;32131:8;::::0;-1:-1:-1;;;;;32131:8:0::3;:29;32175:10:::0;32187:6;32207:1:::3;32195:9:::0;:13:::3;32131:88;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;32131:88:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;;32237:68:0::3;::::0;;-1:-1:-1;;;;;;32237:68:0;::::3;::::0;;-1:-1:-1;;;;;32237:68:0;::::3;32131:88;32237:68:::0;::::3;::::0;::::3;::::0;::::3;::::0;;;;;;::::3;::::0;;;;;;;::::3;9950:1;;;;9187::::2;;1891::::1;31131:1182:::0;;;:::o;10286:32::-;;;-1:-1:-1;;;;;10286:32:0;;:::o;5381:171::-;5529:2;5521:10;;;;;;;;;5533;;;;5381:171::o;8643:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8971:65::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2638:160::-;1636:10;;-1:-1:-1;;;;;1636:10:0;1622;:24;1600:106;;;;;-1:-1:-1;;;1600:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1600:106:0;;;;;;;;;;;;;;;2744:46:::1;2769:10;2744;:46::i;:::-;2638:160:::0;:::o;29985:1138::-;1798:10;1789:20;;;;:8;:20;;;;;;;;;;;:28;;;1767:113;;;;-1:-1:-1;;;1767:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30151:7;9144:21:::1;-1:-1:-1::0;;;;;;9120:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;;;:20:::1;;::::0;::::1;;::::0;:45;::::1;;;;;;;9098:78;;;::::0;::::1;;30183:7:::0;30192;9907:21:::2;-1:-1:-1::0;;;;;;9873:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:30:::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;;;;;9851:88;;;::::0;::::2;;-1:-1:-1::0;;;;;;9310:14:0;::::3;;::::0;;;:5:::3;:14;::::0;;;;:31;;30225:7;;30234;;30243;;-1:-1:-1;;;;;9310:42:0;::::3;::::0;:31:::3;::::0;::::3;::::0;;::::3;;;;;;::::0;;;::::3;::::0;;;::::3;::::0;-1:-1:-1;;;;;9310:31:0::3;:42;:106:::0;::::3;;;-1:-1:-1::0;9397:19:0::3;-1:-1:-1::0;;;;;9369:15:0;::::3;;::::0;;;:6:::3;:15;::::0;;;;;;;-1:-1:-1;;;;;;9369:24:0;::::3;::::0;;;;;;;;::::3;;:47;::::0;::::3;;;;;;;9310:106;9288:139;;;::::0;::::3;;-1:-1:-1::0;;;;;30290:20:0;::::4;;::::0;;;:11:::4;:20;::::0;;;;;;;-1:-1:-1;;;;;;30290:29:0;::::4;::::0;;;;;;;:36;:41;:102;::::4;;;-1:-1:-1::0;;;;;;30362:20:0;::::4;;::::0;;;:11:::4;:20;::::0;;;;;;;-1:-1:-1;;;;;;30362:29:0;::::4;::::0;;;;;;;;30348:44;;;;;;::::4;::::0;;;;;;;;;;::::4;::::0;;;::::4;30362:29:::0;30348:44;;::::4;;;;;;;;;;;;;;;;;;::::0;;::::4;::::0;;::::4;::::0;::::4;;;::::0;;::::4;;::::0;;::::4;::::0;;::::4;::::0;;::::4;::::0;;;::::4;::::0;;::::4;::::0;::::4;::::0;;::::4;;;;;;;;;;;:13;:44::i;:::-;30268:135;;;::::0;::::4;;-1:-1:-1::0;;;;;;30416:14:0;::::4;;::::0;;;:5:::4;:14;::::0;;;;;;:36;;::::4;::::0;;::::4;::::0;;;;;;;;::::4;::::0;;-1:-1:-1;;;;;;30416:36:0::4;-1:-1:-1::0;;;;;30416:36:0;::::4;;::::0;;30463:14;;;;:19:::4;30488:28:::0;;30463:19;;30488:28:::4;::::0;::::4;::::0;;::::4;;;;;;::::0;;;::::4;::::0;;;::::4;::::0;;::::4;::::0;;::::4;::::0;30463:54;;30488:28;30463:54;;::::4;::::0;;;;;;;;;;::::4;;::::0;;-1:-1:-1;;;;;30488:28:0::4;30463:54:::0;;;;::::4;30488:28;30463:54:::0;;::::4;::::0;;::::4;;::::0;;::::4;30488:28:::0;;;;;;::::4;::::0;;::::4;::::0;;::::4;;30463:54:::0;;::::4;::::0;;;::::4;::::0;;;-1:-1:-1;;;;;;30528:14:0;::::4;::::0;;;;;;;;:21:::4;30555:30:::0;;30528:21;;30555:30:::4;::::0;::::4;::::0;;::::4;;;;;;::::0;;;::::4;::::0;;;;;::::4;;::::0;30528:58;;::::4;::::0;;::::4;::::0;;;;;;;;;;::::4;;::::0;;30555:30:::4;::::0;30528:58;;;30555:30:::4;30528:58:::0;;::::4;::::0;;::::4;;::::0;;::::4;30555:30:::0;;;;::::4;::::0;;::::4;::::0;::::4;30528:58:::0;;::::4;::::0;;;::::4;::::0;;-1:-1:-1;;;;;;30597:14:0;::::4;::::0;;;:5:::4;:14:::0;;;;;;:21:::4;;:47:::0;;;;::::4;::::0;;;;;;;;;;::::4;::::0;;::::4;::::0;;;;;;;;::::4;::::0;;::::4;::::0;;::::4;;::::0;;::::4;::::0;;;::::4;::::0;;30655:14;;:30;;;;::::4;::::0;;::::4;;;;;;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;;;;;;;30721:56;30750:7;30759;30721:14;:56::i;:::-;-1:-1:-1::0;;;;;30790:20:0;::::4;;::::0;;;:11:::4;:20;::::0;;;;;;;-1:-1:-1;;;;;;30790:29:0;::::4;::::0;;;;;;;:35;;;::::4;;;;;::::0;;;::::4;::::0;;;-1:-1:-1;;30790:35:0;;;;;::::4;::::0;;::::4;::::0;;::::4;::::0;;;::::4;;;;;::::0;;;;;;-1:-1:-1;;;;;30868:20:0;::::4;::::0;;;:11:::4;:20:::0;;;;;;-1:-1:-1;;;;;;30868:29:0;::::4;::::0;;;;;;;;;30836:20;;;:11:::4;:20:::0;;;;;:29;;;;;;;;:61;;::::4;::::0;30868:29;30836:61:::4;:::i;:::-;-1:-1:-1::0;;;;;;;30983:14:0;::::4;;::::0;;;:5:::4;:14;::::0;;;;;;;:29;-1:-1:-1;;;;;31031:20:0;::::4;::::0;;;:11:::4;:20:::0;;;;;:29;;;;;;;;31075:20;;;:11:::4;:20:::0;;;;;:29;;;;;;;;;30915:200;;;;;;;::::4;::::0;-1:-1:-1;;30983:33:0;30915:200;;;;;;;;;;;;;;;;;;;;;::::4;::::0;30939:7;;30961;;31031:29;;31075;;30915:200;;;;;;;;;31031:29;;30915:200;::::4;;;;;;;;;;;;;;;;;;::::0;;::::4;::::0;;::::4;::::0;::::4;;;::::0;;::::4;;::::0;;::::4;::::0;;::::4;::::0;;::::4;::::0;;;::::4;::::0;;::::4;::::0;::::4;::::0;;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::4;::::0;;::::4;::::0;::::4;;;::::0;;::::4;;::::0;;::::4;::::0;;::::4;::::0;;::::4;::::0;;;::::4;::::0;;::::4;::::0;::::4;::::0;;::::4;;;;;;;;;;;;;;;;;;;;;;;;9950:1:::3;;;9187::::2;;1891::::1;29985:1138:::0;;;:::o;7687:270::-;7880:29;;;;;;;;;;;;;;;;;;;;;;;;;7856:64;;;;;7827:4;;7856:78;;:93;;7944:5;7856:93;;;7937:4;7856:93;7849:100;7687:270;-1:-1:-1;;;7687:270:0:o;4256:139::-;1798:10;1789:20;;;;:8;:20;;;;;;;;;;;:28;;;1767:113;;;;-1:-1:-1;;;1767:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2166:6:::1;::::0;-1:-1:-1;;;2166:6:0;::::1;;;2165:7;2143:88;;;::::0;;-1:-1:-1;;;2143:88:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;4350:6:::2;:13:::0;;-1:-1:-1;;;;4350:13:0::2;-1:-1:-1::0;;;4350:13:0::2;::::0;;4379:8:::2;::::0;::::2;::::0;4350:6;4379:8:::2;4256:139::o:0;8823:66::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1032:41::-;;;;;;;;;;;;;;;:::o;36735:213::-;36858:4;36921:19;-1:-1:-1;;;;;;36887:14:0;;;;;;:5;:14;;;;;:21;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:53;;;;;;;;;;36735:213;-1:-1:-1;;;36735:213:0:o;15997:2711::-;2166:6;;-1:-1:-1;;;2166:6:0;;;;2165:7;2143:88;;;;;-1:-1:-1;;;2143:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1798:10:::1;1789:20;::::0;;;:8:::1;:20;::::0;;;;;;;;::::1;;:28;;;1767:113;;;;-1:-1:-1::0;;;1767:113:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16426:10:::2;::::0;-1:-1:-1;;;16426:10:0;::::2;;;16407:29:::0;::::2;::::0;::::2;::::0;:76:::2;;-1:-1:-1::0;16453:30:0;;::::2;16407:76;:126;;;;-1:-1:-1::0;16500:33:0;;::::2;16407:126;16385:159;;;::::0;::::2;;-1:-1:-1::0;;;;;;16878:14:0;::::2;16902:17;16878:14:::0;;;:5:::2;:14;::::0;;;;;;:20:::2;;::::0;::::2;;::::0;:41;::::2;;;;;;;:101;;;-1:-1:-1::0;;;;;;;16936:14:0;::::2;;::::0;;;16960:19:::2;16936:14;::::0;;;;;;;:20:::2;;::::0;::::2;;:43:::0;;::::2;;;;;;;16878:101;16856:134;;;::::0;::::2;;17048:25;::::0;;-1:-1:-1;;;;;;17048:25:0;::::2;::::0;;;;::::2;::::0;;;;::::2;::::0;;::::2;17086:21;17110:44;17136:7;17110:11;:44::i;:::-;17086:68;;17167:17;;:::i;:::-;17187:222;;;;;;;;17206:8;;17187:222;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;;;17187:222:0;;;-1:-1:-1;17187:222:0::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;::::2;::::0;;;17229:5;;;;;;17187:222;::::2;::::0;17229:5;;17187:222;17229:5;17187:222;::::2;;::::0;::::2;::::0;;;;-1:-1:-1;;;17187:222:0;;;-1:-1:-1;17187:222:0::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;::::2;::::0;;;17249:7;;;;;;17187:222;::::2;::::0;17249:7;;17187:222;17249:7;17187:222;::::2;;::::0;::::2;::::0;;;;-1:-1:-1;;;17187:222:0;;;-1:-1:-1;17187:222:0;;::::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;::::2;::::0;;17271:5;;17187:222;::::2;17271:5:::0;17187:222;;::::2;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;::::2;::::0;::::2;;;::::0;;::::2;;::::0;;::::2;::::0;;::::2;::::0;;::::2;::::0;;;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;;;;;;-1:-1:-1::0;;;17187:222:0;;;-1:-1:-1;;17187:222:0::2;::::0;::::2;;::::0;::::2;::::0;;;17297:8;17328:34:::2;::::0;::::2;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;17328:34:0::2;-1:-1:-1::0;17187:222:0;;17377:21:::2;17187:222;::::0;;::::2;::::0;-1:-1:-1;;;;;;17422:14:0;::::2;-1:-1:-1::0;17422:14:0;;;:5:::2;:14:::0;;;;;:22;;;;;;-1:-1:-1;17422:22:0;;:14;;:22:::2;::::0;:14;;:22;;::::2;::::0;::::2;:::i;:::-;-1:-1:-1::0;17422:22:0::2;::::0;;::::2;::::0;;;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;:::i;:::-;-1:-1:-1::0;17422:22:0::2;::::0;::::2;::::0;;;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;:::i;:::-;-1:-1:-1::0;17422:22:0::2;::::0;::::2;::::0;;;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;:::i;:::-;-1:-1:-1::0;17422:22:0::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;-1:-1:-1;;17422:22:0::2;;::::0;;::::2;::::0;;;::::2;::::0;;::::2;::::0;::::2;::::0;;;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;:::i;:::-;-1:-1:-1::0;17422:22:0::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;-1:-1:-1;;17422:22:0::2;::::0;;::::2;::::0;::::2;;;;;;;;;;;;;;17457:12;17554:326;17571:24;::::0;::::2;::::0;-1:-1:-1;17554:326:0::2;;;17624:65;17659:7;17668:6;17624:16;:65::i;:::-;17706:63;17739:7;17748:6;17706:14;:63::i;:::-;17597:8;;17554:326;;;-1:-1:-1::0;;;;;;18018:25:0;::::2;;::::0;;;:16:::2;:25;::::0;;;;18011:32:::2;::::0;::::2;:::i;:::-;-1:-1:-1::0;18113:1:0::2;18099:246;18116:24;::::0;::::2;::::0;-1:-1:-1;18099:246:0::2;;;18267:66;18303:7;18312:6;18267:17;:66::i;:::-;18142:8;;18099:246;;;18357:13;;;18681:8;18659:7;18571;-1:-1:-1::0;;;;;18541:159:0::2;;;18593:5;;18613:7;;18635:9;18541:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;::::2;;-1:-1:-1::0;;18541:159:0::2;::::0;;::::2;::::0;;::::2;::::0;;;;;::::2;::::0;;::::2;::::0;-1:-1:-1;18541:159:0;;;::::2;::::0;;;::::2;;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;-1:-1:-1::0;;18541:159:0::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;18541:159:0;;-1:-1:-1;;;;;;;;18541:159:0::2;1891:1;;;15997:2711:::0;;;;;;;;;;:::o;8699:51::-;;;;;;;;;;;;;;;;;;;;2806:245;1636:10;;-1:-1:-1;;;;;1636:10:0;1622;:24;1600:106;;;;;-1:-1:-1;;;1600:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1600:106:0;;;;;;;;;;;;;;;2933:11:::1;2928:116;2950:26;::::0;::::1;::::0;-1:-1:-1;2928:116:0::1;;;3002:30;3013:11;;3025:5;3013:18;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;3013:18:0::1;3002:10;:30::i;:::-;2978:7;;2928:116;;;;2806:245:::0;;:::o;3420:176::-;1636:10;;-1:-1:-1;;;;;1636:10:0;1622;:24;1600:106;;;;;-1:-1:-1;;;1600:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1600:106:0;;;;;;;;;;;;;;;3534:54:::1;3562:15;3534:13;:54::i;29543:182::-:0;-1:-1:-1;;;;;;29692:25:0;;;;;;:16;:25;;;;;;;;;29685:32;;;;;;;;;;;;;;;;;29653:14;;29685:32;;;29692:25;29685:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29543:182;;;:::o;18716:862::-;19027:7;9144:21;-1:-1:-1;;;;;;9120:14:0;;;;;;:5;:14;;;;;;;;:20;;;;;;:45;;;;;;;;9098:78;;;;;;2166:6:::1;::::0;-1:-1:-1;;;2166:6:0;::::1;;;2165:7;2143:88;;;::::0;;-1:-1:-1;;;2143:88:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;1798:10:::2;1789:20;::::0;;;:8:::2;:20;::::0;;;;;;;;::::2;;:28;;;1767:113;;;;-1:-1:-1::0;;;1767:113:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19235:127:::3;19257:7;19279:14;;19308;;19337;;19235:7;:127::i;:::-;19380:73;::::0;;-1:-1:-1;;;;;;19380:73:0;::::3;::::0;;;;::::3;::::0;;;;::::3;::::0;;::::3;19471:99;::::0;;;;;::::3;::::0;::::3;::::0;;;;;;;;;;;::::3;::::0;;;;;;;::::3;18716:862:::0;;;;;;;;;;;:::o;34525:174::-;-1:-1:-1;;;;;;34672:14:0;;;;;;:5;:14;;;;;;;;;:19;;34665:26;;;;;;;;;;;;;;;;;34627:20;;34665:26;;;34672:19;34665:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34665:26:0;;34525:174;-1:-1:-1;;;;;;;34525:174:0:o;8896:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23905:2661::-;1798:10;1789:20;;;;:8;:20;;;;;;;;;;;:28;;;1767:113;;;;-1:-1:-1;;;1767:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24172:7;9144:21:::1;-1:-1:-1::0;;;;;;9120:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;;;:20:::1;;::::0;::::1;;::::0;:45;::::1;;;;;;;9098:78;;;::::0;::::1;;-1:-1:-1::0;;;;;;10049:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;;;;;10021:50;;;;;;::::2;::::0;;;;;;;;;;24207:7;;10021:25:::2;::::0;:50;;10049:14;10021:50;;::::2;10049:14:::0;10021:50;;::::2;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;10021:50:0::2;::::0;;;;;::::2;::::0;::::2;;::::0;;::::2;;;;;;;;;;;10087:9;10082:177;10106:8;:15;10102:1;:19;10082:177;;;-1:-1:-1::0;;;;;;10175:14:0;::::2;;::::0;;;:5:::2;:14;::::0;;;;:21:::2;;:24:::0;;10210:21:::2;::::0;10175;10197:1;;10175:24;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10169:31;;;;;;;;:63;;;;10143:104;;;::::0;::::2;;10123:3;;10082:177;;;-1:-1:-1::0;;;;;;;24254:22:0;::::3;;::::0;;;:13:::3;:22;::::0;;;;:33:::3;;::::0;:40;24232:73:::3;;;::::0;::::3;;-1:-1:-1::0;;;;;;24318:22:0;::::3;;::::0;;;:13:::3;:22;::::0;;;;:33:::3;::::0;::::3;:47:::0;;;24435:32;24400:134:::3;::::0;24354:11;24400:16:::3;:134::i;:::-;:142;;24538:4;24400:142;24378:175;;;::::0;::::3;;24779:27;24809:28;24829:7;24809:19;:28::i;:::-;24903:19:::0;;24779:58;;-1:-1:-1;24903:23:0;24899:1231:::3;;-1:-1:-1::0;;;;;;25029:23:0;::::3;;::::0;;;:14:::3;:23;::::0;;;;;;;;25017:36;;;;;;::::3;::::0;;;;;;;;;;::::3;::::0;;;::::3;25029:23:::0;25017:36;;::::3;;;;;;;;;;;;;;;;;;::::0;;::::3;::::0;;::::3;::::0;::::3;;;::::0;;::::3;;::::0;;::::3;::::0;;::::3;::::0;;::::3;::::0;;;::::3;::::0;;::::3;::::0;::::3;::::0;;::::3;;;;;;;;;;;:11;:36::i;:::-;25013:1106;;;25076:46;25100:7;25109:12;25076:23;:46::i;:::-;25013:1106;;;-1:-1:-1::0;;;;;;25275:23:0;::::3;25216:20;25275:23:::0;;;:14:::3;:23;::::0;;;;;;;25239:78;;;;;;::::3;::::0;;;;;;;;;;::::3;::::0;;::::3;25275:23:::0;25239:78;;::::3;;;;::::0;;;::::3;::::0;;;;;;::::3;;::::0;;;;::::3;::::0;::::3;::::0;;;;;::::3;::::0;;::::3;;;;;;;;;;:13;:78::i;:::-;25216:101;;;;25338:11;25429:505;25452:2;25436:12;:18;25429:505;;25489:30;25498:7;25507:11;25489:8;:30::i;:::-;25481:38;;25571:24;25622:23:::0;25671:22:::3;25687:5;25671:15;:22::i;:::-;25544:149;;;;25733:179;25777:7;25811:5;25843:10;25880:9;25733:17;:179::i;:::-;25718:194;;25429:505;;;;;-1:-1:-1::0;25954:12:0::3;26041:62;26067:7:::0;26076:12;26090;26041:25:::3;:62::i;:::-;25013:1106;;;-1:-1:-1::0;;;;;;26218:14:0;::::3;;::::0;;;:5:::3;:14;::::0;;;;;;;;26190:50;;;;;;::::3;::::0;;;;;;;;;;:25:::3;::::0;:50;;::::3;26218:14:::0;26190:50;;::::3;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;26190:50:0::3;::::0;;;;;::::3;::::0;::::3;;::::0;;::::3;;;;;;;;;;;26256:9;26251:125;26275:8;:15;26271:1;:19;26251:125;;;26343:21;26312:6;:19;26319:8;26328:1;26319:11;;;;;;;;;::::0;;::::3;::::0;;;;;;;-1:-1:-1;;;;;26312:19:0::3;::::0;;;;::::3;::::0;;;;;;;;-1:-1:-1;26312:19:0;;;-1:-1:-1;;;;;;26312:28:0;::::3;::::0;;;;;;;:52;;-1:-1:-1;;26312:52:0::3;::::0;;::::3;::::0;::::3;;;;;;;;::::0;;-1:-1:-1;26292:3:0::3;;26251:125;;;-1:-1:-1::0;;;;;;;26425:14:0;::::3;;::::0;;;26448:19:::3;26425:14;::::0;;;;;;;;:20:::3;;:42:::0;;-1:-1:-1;;26425:42:0::3;::::0;;::::3;::::0;;;26485:73;;;;;;;::::3;::::0;;;;;;;;::::3;10269:1;;9187::::2;;1891::::1;23905:2661:::0;;;:::o;6328:259::-;6428:11;-1:-1:-1;;;6457:75:0;6575:2;6567:10;;;;6556:22;;;;;;;;;;;6328:259;-1:-1:-1;;;6328:259:0:o;3604:254::-;1636:10;;-1:-1:-1;;;;;1636:10:0;1622;:24;1600:106;;;;;-1:-1:-1;;;1600:106:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1600:106:0;;;;;;;;;;;;;;;3735:11:::1;3730:121;3752:27;::::0;::::1;::::0;-1:-1:-1;3730:121:0::1;;;3805:34;3819:12;;3832:5;3819:19;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;3819:19:0::1;3805:13;:34::i;:::-;3781:7;;3730:121;;7458:221:::0;7568:4;7625:24;7639:6;7646:1;7639:9;;;;;;;7625:24;7597:52;;:24;7611:6;7618:1;7611:9;;;;;;;7597:24;:52;;;:74;;;;-1:-1:-1;;7653:13:0;7670:1;7653:18;;7458:221::o;5560:409::-;5662:13;5677;5708:22;;:::i;:::-;-1:-1:-1;5708:45:0;;;;;;;;;;;;;;;-1:-1:-1;;;5708:45:0;;;;;;;;;;;;;;;;-1:-1:-1;;;5708:45:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5708:45:0;;;;-1:-1:-1;;;5708:45:0;;;;;;;;;;;;-1:-1:-1;;;5708:45:0;;;;-1:-1:-1;;;5708:45:0;;;;5764:22;;:::i;:::-;-1:-1:-1;5764:90:0;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;-1:-1:-1;;;5764:90:0;;;;;;;;;;;;-1:-1:-1;;;5764:90:0;;;;-1:-1:-1;;;5764:90:0;;;;-1:-1:-1;;5895:22:0;5911:5;5895:15;:22::i;:::-;5867:50;;;;5936:5;5942;5936:12;;;;;;;;;;;;;5950:4;5955;5950:10;;;;;;;;;;;;;5928:33;;;;;;;;5560:409;;;:::o;36387:340::-;36540:26;36598:31;36607:7;36616:12;36598:8;:31::i;:::-;:121;;-1:-1:-1;;;;;36690:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;;;;;36690:29:0;;;;;;;;;36598:121;;;-1:-1:-1;;;;;36645:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;;;;;36645:29:0;;;;;;;;;36598:121;36584:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36387:340;;;;;:::o;15230:759::-;-1:-1:-1;;;;;;15393:14:0;;15375:15;15393:14;;;:5;:14;;;;;:31;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15393:31:0;;-1:-1:-1;15451:30:0;15460:7;15469:11;15451:8;:30::i;:::-;15437:44;;15509:24;15548:23;15585:22;15601:5;15585:15;:22::i;:::-;15494:113;;;;15620:27;15650:26;15659:7;15668;15650:8;:26::i;:::-;:116;;-1:-1:-1;;;;;15737:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;;;;;15737:29:0;;;;;;;;;15650:116;;;-1:-1:-1;;;;;15692:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;;;;;15692:29:0;;;;;;;;;15650:116;15620:146;;15779:11;15796:5;15779:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15820:161;15850:7;15872;15894;15916:5;15936:10;15961:9;15820:161;;;;-1:-1:-1;;;;;15820:161:0;;;;;;;-1:-1:-1;;;;;15820:161:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15820:161:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15230:759;;;;;;;;:::o;12646:364::-;12846:15;;:156;;;-1:-1:-1;;;12846:156:0;;-1:-1:-1;;;;;12846:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:15;;;;;:25;;:156;;;;;;;;;;;;;;:15;;:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;12646:364:0:o;33563:195::-;-1:-1:-1;;;;;;33707:14:0;;;;;;:5;:14;;;;;:19;;:28;;33738:12;;33707:19;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;;-1:-1:-1;;;;;33707:43:0;;;;;-1:-1:-1;;;;;33707:43:0;;;;;;33563:195;;;:::o;33766:751::-;33944:69;33973:7;33982;33991:11;33944:15;:69::i;:::-;34026:20;34049:73;34077:34;34085:7;34094;34103;34077;:34::i;34049:73::-;34026:96;;;;34140:48;34165:12;34140:48;;;;;;;;;;;;;;;;;;34220:2;34205:12;:17;34201:309;;;-1:-1:-1;;;;;;34239:14:0;;;;;;:5;:14;;;;;:21;;:30;;34272:20;;34239:21;:30;;;;;;;;;;;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34312:12:0;;;34319:4;34312:12;;;;;;;;;;;;;34201:309;;;-1:-1:-1;;;;;;34357:25:0;;;;;;:16;:25;;;;;;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34411:14;;;:5;:14;;;;;;:21;:30;;34444:21;;34357:39;34411:30;;;;;;;;;;;;;;;;;;;;;;:54;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34485:13:0;;;34492:5;34485:13;;;;;;;;;;;;;34201:309;33766:751;;;;;:::o;3059:353::-;3157:10;-1:-1:-1;;;;;1990:31:0;;1968:111;;;;;-1:-1:-1;;;1968:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3207:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;;::::1;;:29;3185:114;;;;-1:-1:-1::0;;;3185:114:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;3312:20:0;::::1;;::::0;;;3335:4:::1;3312:20;::::0;;;;;;;;:27;;-1:-1:-1;;3312:27:0::1;::::0;;::::1;::::0;;;3357:47;;;;;;;::::1;::::0;;;;;;;;::::1;3059:353:::0;;:::o;13354:581::-;-1:-1:-1;;;;;;13492:14:0;;13473:16;13492:14;;;:5;:14;;;;;;;:21;:35;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13555:14:0;;;;:5;:14;;;;;;:36;;13492:35;;;;;;;;;;;;;-1:-1:-1;13555:14:0;:36;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13622:14:0;;;;:5;:14;;;;;;13555:36;13622:19;:33;;-1:-1:-1;;;;;13555:36:0;;;;-1:-1:-1;13622:19:0;:33;;;;;;;;;;;;;;;;;;;;;;;;13690:8;;:34;;;-1:-1:-1;;;13690:34:0;;;;;;;;;;;13622:33;;;;;;;;;;;-1:-1:-1;;;;;13622:33:0;;-1:-1:-1;13622:33:0;;-1:-1:-1;;;;;13690:8:0;;;;:22;;:34;;;;;13622:33;13690:34;;;;;;:8;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13690:34:0;-1:-1:-1;;;;;13690:47:0;;;13668:80;;;;;;13761:8;;:84;;;-1:-1:-1;;;13761:84:0;;;;;;;;;-1:-1:-1;;;;;13761:84:0;;;;;;;;;;;;;;;:8;;;;;:29;;:84;;;;;;;;;;;;;;:8;;:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13863:64:0;;;;;;;;-1:-1:-1;;;;;13863:64:0;;13761:84;13863:64;;;;;;;;;;;;;;;;;;;;13354:581;;;;;:::o;21239:245::-;-1:-1:-1;;;;;;21376:14:0;;21329:21;21376:14;;;:5;:14;;;;;:19;;;21406:71;21428:2;21424:1;:6;;;21406:71;;;21452:13;;;;;;;;-1:-1:-1;21452:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21432:3;21406:71;;;;21239:245;;;:::o;13943:317::-;-1:-1:-1;;;;;;14087:14:0;;;;;;:5;:14;;;;;;;;;14059:50;;;;;;;;;;;;;;;;;:25;;:50;;;14087:14;14059:50;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14059:50:0;;;;;;;;;;;;;;;;;;;;;;;14122:63;14148:7;14157:8;14166:7;14157:17;;;;;;;;;;;;;;;;14122:11;:63::i;:::-;-1:-1:-1;;;;;;14198:14:0;;14231:21;14198:14;;;:5;:14;;;;;:21;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;;;;;;;;;;;;;;;;;;;;13943:317;;;:::o;14268:463::-;-1:-1:-1;;;;;;14418:14:0;;;;;;:5;:14;;;;;;;;;14390:50;;;;;;;;;;;;;;;;;:25;;:50;;;14418:14;14390:50;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14390:50:0;;;;;;;;;;;;;;;;;;;;;;;14471:103;14505:54;14513:7;14522:8;14531:12;14522:22;;;;;;;;;;;;;;;;14546:12;14505:7;:54::i;:::-;14471:11;:103::i;:::-;14453:271;;;-1:-1:-1;;;;;;14591:25:0;;;;;;:16;:25;;;;;;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14650:14;;;:5;:14;;;;;;:21;;:35;;14591:16;;14650:21;;:35;;;;;3866:382;3972:15;-1:-1:-1;;;;;1990:31:0;;1968:111;;;;;-1:-1:-1;;;1968:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4027:25:0;::::1;;::::0;;;:8:::1;:25;::::0;;;;;;;;::::1;;:33;;;4005:117;;;;-1:-1:-1::0;;;4005:117:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;4135:25:0;::::1;4163:5;4135:25:::0;;;:8:::1;:25;::::0;;;;;;;;:33;;-1:-1:-1;;4135:33:0::1;::::0;;4186:54;;;;;;;::::1;::::0;;;;;;;;::::1;3866:382:::0;;:::o;19586:685::-;-1:-1:-1;;;;;;19802:14:0;;;;;;19825:19;19802:14;;;;;;;:20;;:42;;-1:-1:-1;;19802:42:0;;;;;;19855:409;19873:25;;;;-1:-1:-1;19855:409:0;;;-1:-1:-1;;;;;;19951:14:0;;;;;;:5;:14;;;;;;;;:21;:24;;19920:170;;19951:21;:24;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19994:14:0;;;;:5;:14;;;;;;;:25;;19951:24;;;;;;;;;;;;;19994:14;;:25;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19994:25:0;20058:14;;:17;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20058:17:0;20038:14;;20053:1;20038:17;;;;;;;;;;;;;;;-1:-1:-1;;;;;20038:17:0;:37;19920:12;:170::i;:::-;20107:145;20138:7;20164:1;20184:14;;20199:1;20184:17;;;;;;;;;;;;;;;-1:-1:-1;;;;;20184:17:0;20220:14;;20235:1;20220:17;;;;;;;;;;;;;;;-1:-1:-1;;;;;20220:17:0;20107:12;:145::i;:::-;19900:3;;19855:409;;;;19586:685;;;;;;;:::o;27055:1279::-;27197:9;27192:1135;27216:12;:19;27212:1;:23;27192:1135;;;-1:-1:-1;;;;;;27276:14:0;;27259;27276;;;:5;:14;;;;;27299:15;;:12;;27312:1;;27299:15;;;;;;;;;;;;27276:39;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27276:39:0;;-1:-1:-1;27418:24:0;-1:-1:-1;;;;;;27390:14:0;;;;;;:5;:14;;;;;:21;;:24;;27412:1;;27390:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;;;;;;27386:435;;;-1:-1:-1;;;;;;27482:14:0;;27465;27482;;;:5;:14;;;;;27502:15;;27482:19;;;;;27502:12;;27515:1;;27502:15;;;;;;;;;;;;27482:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27482:36:0;27465:53;;27539:150;27574:5;:14;27580:7;-1:-1:-1;;;;;27574:14:0;;-1:-1:-1;;;;;27574:14:0;;;;;;;;;;;;;:21;;27596:12;27609:1;27596:15;;;;;;;;;;;;;;27574:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27635:6;27664;27539:12;:150::i;:::-;27715:90;;;-1:-1:-1;;;;;27715:90:0;;;;-1:-1:-1;;;;;27715:90:0;;;;;;;;;;;;;;;;;;;27386:435;;-1:-1:-1;;;;;27894:24:0;;;;;;:16;:24;;;;;;;;-1:-1:-1;;;;;;27894:33:0;;;;;;;;;;;;:41;;:33;:41;27890:426;;;-1:-1:-1;;;;;;27975:14:0;;27958;27975;;;:5;:14;;;;;27995:15;;27975:19;;;;;27995:12;;28008:1;;27995:15;;;;;;;;;;;;27975:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27975:36:0;27958:53;;28032:150;28067:5;:14;28073:7;-1:-1:-1;;;;;28067:14:0;;-1:-1:-1;;;;;28067:14:0;;;;;;;;;;;;;:21;;28089:12;28102:1;28089:15;;;;;;;28032:150;28208:92;;;-1:-1:-1;;;;;28208:92:0;;;;-1:-1:-1;;;;;28208:92:0;;;;;;;;;;;;;;;;;;;27890:426;;-1:-1:-1;27237:3:0;;27192:1135;;21492:416;-1:-1:-1;;;;;;21656:14:0;;21609:5;21656:14;;;:5;:14;;;;;:19;;21748:12;;21609:5;;21702:69;;21735:11;;21702:18;:69::i;:::-;21686:85;;21782:10;21795:5;21801;21795:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21782:25;;21833:5;21854:1;21839:5;:12;;;;:16;21833:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21818:5;21824;21818:12;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;21867:5;:11;;;;;;;;;;;;;;;;-1:-1:-1;;21867:11:0;;;;;;;;;;;;;;;;;;;;;;;;21896:4;-1:-1:-1;;;21492:416:0;;;;:::o;26574:473::-;-1:-1:-1;;;;;;26786:23:0;;26761:7;26786:23;;;:14;:23;;;;;;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26839:118;;;;;;;;;;;;;;;;;;;;;;;;;;;26761:7;;26839:118;;26801:7;;26815:5;;26912:10;;26937:9;;26839:118;;;;;;;;;;;;;;;;26761:7;26839:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26839:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27005:23:0;;;;;;:14;:23;;;;;;;;;26977:62;;;;;;;;;;;;;;;;;;;;;;27005:23;26977:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:13;:62::i;:::-;26970:69;;;26574:473;-1:-1:-1;;;;;26574:473:0:o;28342:1193::-;28518:9;28513:1015;28537:12;:19;28533:1;:23;28513:1015;;;28580:8;28591:12;28604:1;28591:15;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28655:14:0;;28638;28655;;;:5;:14;;;;;;:26;;28591:15;;-1:-1:-1;28655:14:0;:26;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28655:26:0;;-1:-1:-1;28719:43:0;28733:28;28741:7;28655:26;28758:2;28733:7;:28::i;28719:43::-;28696:66;;;-1:-1:-1;28777:14:0;28841:24;-1:-1:-1;;;;;;28812:14:0;;;;;;:5;:14;;;;;:21;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:53;;;;;;;;;28808:391;;;-1:-1:-1;;;;;;28895:14:0;;;;;;:5;:14;;;;;:19;;:23;;28927:3;;28895:19;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28895:23:0;28921:3;28895:29;-1:-1:-1;;;;;28895:35:0;;;;;;;28886:44;;28808:391;;;28984:13;28969:12;:28;28965:234;;;-1:-1:-1;;;;;;29027:14:0;;;;;;:5;:14;;;;;:19;;:23;;29059:3;;29027:19;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29027:23:0;29053:3;29027:29;-1:-1:-1;;;;;29027:35:0;;;;;28965:234;29117:13;29101:12;:29;29097:102;;;-1:-1:-1;;;;;;29160:14:0;;;;;;:5;:14;;;;;:19;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29160:23:0;29151:32;;29097:102;-1:-1:-1;;;;;29219:10:0;;;29215:302;;-1:-1:-1;;;;;;29285:14:0;;;;;;:5;:14;;;;;;;;:21;:25;;29250:137;;29285:21;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29333:6;29362;29250:12;:137::i;:::-;29411:90;;;-1:-1:-1;;;;;29411:90:0;;;;-1:-1:-1;;;;;29411:90:0;;;;;;;;;;;;;;;;;;;29215:302;-1:-1:-1;;28558:3:0;;;;;-1:-1:-1;28513:1015:0;;-1:-1:-1;28513:1015:0;;;28342:1193;;;:::o;13018:328::-;-1:-1:-1;;;;;13153:15:0;;13181:21;13153:15;;;:6;:15;;;;;;;;-1:-1:-1;;;;;;13153:24:0;;;;;;;;;;;;:49;;;;;;;;;:115;;;-1:-1:-1;13247:21:0;-1:-1:-1;;;;;13219:15:0;;;;;;:6;:15;;;;;;;;-1:-1:-1;;;;;;13219:24:0;;;;;;;;;;;;:49;;;;;;;;;13153:115;13131:148;;;;;;-1:-1:-1;;;;;13292:15:0;;;;;:6;:15;;;;;;;;-1:-1:-1;;;;;;13292:24:0;;;;;;;;;;:46;;-1:-1:-1;;13292:46:0;13319:19;13292:46;;;13018:328::o;29733:244::-;29875:8;;:94;;;-1:-1:-1;;;29875:94:0;;;;;;;;;-1:-1:-1;;;;;29875:94:0;;;;;;;-1:-1:-1;;;;;29942:16:0;;29875:94;;;;;;:8;;;;;:30;;:94;;;;;;;;;;;;;;:8;;:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20708:523;-1:-1:-1;;;;;;20894:14:0;;;;;;:5;:14;;;;;:19;;:28;;-1:-1:-1;;;;;20894:45:0;;;:19;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20894:28:0;:45;;20886:54;;;;;;-1:-1:-1;;;;;;20978:14:0;;;;;;:5;:14;;;;;:31;;20953:270;;20978:14;:31;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21024:14:0;;;;:5;:14;;;;;;;20978:31;21024:19;:28;;-1:-1:-1;;;;;20978:31:0;;;;21055:13;;21024:19;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21024:28:0;:44;-1:-1:-1;;;;;20953:270:0;21083:8;;;;;;;;;-1:-1:-1;;;;;21083:8:0;-1:-1:-1;;;;;21083:24:0;;21108:5;:14;21114:7;-1:-1:-1;;;;;21108:14:0;;-1:-1:-1;;;;;21108:14:0;;;;;;;;;;;;;:21;;21130:7;21108:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21083:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21083:56:0;-1:-1:-1;;;;;;21154:14:0;;;;;;:5;21083:56;21154:14;;;;:29;-1:-1:-1;;;;;20953:270:0;;:10;:270::i;5977:343::-;6199:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6171:120;;;;;6117:7;;6305;;;6149:163;;;;;;5977:343;-1:-1:-1;;;5977:343:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

ipfs://5b09149b3098d99e8c5d47f971c133fd1583688222509bbaaede19e9c8abc5b2

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

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.