ETH Price: $3,967.48 (-0.73%)

Contract

0x7c9921966A9822F218A483BD82d3186A5a6B3F3D
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
End Stake213130592024-12-02 6:32:356 days ago1733121155IN
0x7c992196...A5a6B3F3D
0 ETH0.0014713511.59174492
End Stake213030902024-11-30 21:10:598 days ago1733001059IN
0x7c992196...A5a6B3F3D
0 ETH0.0019233913.62032283
End Stake212579392024-11-24 13:35:5914 days ago1732455359IN
0x7c992196...A5a6B3F3D
0 ETH0.0018545113.13256252
End Stake212178652024-11-18 23:23:1120 days ago1731972191IN
0x7c992196...A5a6B3F3D
0 ETH0.0017577612.44740559
End Stake211949052024-11-15 18:32:4723 days ago1731695567IN
0x7c992196...A5a6B3F3D
0 ETH0.0029620520.97551645
End Stake211889412024-11-14 22:33:2324 days ago1731623603IN
0x7c992196...A5a6B3F3D
0 ETH0.0034738824.6
Begin Stake211100442024-11-03 22:16:4735 days ago1730672207IN
0x7c992196...A5a6B3F3D
0 ETH0.00088055.43352209
End Stake211100382024-11-03 22:15:3535 days ago1730672135IN
0x7c992196...A5a6B3F3D
0 ETH0.00079425.62410304
Begin Stake210818632024-10-30 23:53:4739 days ago1730332427IN
0x7c992196...A5a6B3F3D
0 ETH0.001426448.80245188
End Stake210797762024-10-30 16:55:1139 days ago1730307311IN
0x7c992196...A5a6B3F3D
0 ETH0.0034609624.5084896
End Stake210744832024-10-29 23:08:4740 days ago1730243327IN
0x7c992196...A5a6B3F3D
0 ETH0.001322579.36566492
End Stake210515432024-10-26 18:19:3543 days ago1729966775IN
0x7c992196...A5a6B3F3D
0 ETH0.001054597.46797721
End Stake210268702024-10-23 7:43:4746 days ago1729669427IN
0x7c992196...A5a6B3F3D
0 ETH0.001286379.1093429
End Stake210166072024-10-21 21:20:5948 days ago1729545659IN
0x7c992196...A5a6B3F3D
0 ETH0.001453110.28998465
Begin Stake209891292024-10-18 1:21:1151 days ago1729214471IN
0x7c992196...A5a6B3F3D
0 ETH0.0021331313.16334954
End Stake209329262024-10-10 4:49:5959 days ago1728535799IN
0x7c992196...A5a6B3F3D
0 ETH0.001484910.51522955
End Stake209329232024-10-10 4:49:2359 days ago1728535763IN
0x7c992196...A5a6B3F3D
0 ETH0.0014271110.10594183
End Stake208368412024-09-26 19:19:4773 days ago1727378387IN
0x7c992196...A5a6B3F3D
0 ETH0.0031390622.2289758
Begin Stake208256792024-09-25 5:57:1174 days ago1727243831IN
0x7c992196...A5a6B3F3D
0 ETH0.0021109113.04199703
End Stake207837072024-09-19 9:20:5980 days ago1726737659IN
0x7c992196...A5a6B3F3D
0 ETH0.0019051713.49127677
Begin Stake207776042024-09-18 12:54:1181 days ago1726664051IN
0x7c992196...A5a6B3F3D
0 ETH0.001257727.7607284
Begin Stake207553862024-09-15 10:21:5984 days ago1726395719IN
0x7c992196...A5a6B3F3D
0 ETH0.000638143.93789774
End Stake207553822024-09-15 10:21:1184 days ago1726395671IN
0x7c992196...A5a6B3F3D
0 ETH0.000568344.02467944
End Stake206459862024-08-31 3:52:2399 days ago1725076343IN
0x7c992196...A5a6B3F3D
0 ETH0.000082073.03166743
End Stake206459862024-08-31 3:52:2399 days ago1725076343IN
0x7c992196...A5a6B3F3D
0 ETH0.000079850.56545846
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LuffyStaking

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2023-04-02
*/

// File: contracts\Declaration.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.12;

interface IERC20 {

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
	
	function balanceOf(address account) external view returns (uint256);
}

abstract contract Declaration {

    uint40 constant ONE_DAY = 60 * 60 * 24;
    uint40 constant ONE_YEAR = ONE_DAY * 365;

    IERC20 public immutable LUFFY;

    constructor(
        address _immutableLuffy
    ) {
        LUFFY = IERC20(_immutableLuffy);
    }

}

// File: contracts\ContextSimple.sol


// Based on OpenZeppelin Contracts v4.4.0 (utils/Context.sol)
// With _msgData() removed

pragma solidity ^0.8.12;

/**
 * @dev Provides the msg.sender in the current execution context.
 */
abstract contract ContextSimple {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

// File: contracts\OwnableSafe.sol


// Based on OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)
// With renounceOwnership() removed

pragma solidity ^0.8.12;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract OwnableSafe is ContextSimple {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: contracts\ConfigurablePools.sol



pragma solidity ^0.8.12;



/**
 * @title ConfigurablePools
 * @author Aaron Hanson <[email protected]>
 */
abstract contract ConfigurablePools is OwnableSafe, Declaration {

    struct PoolInfo {
        uint40 lockDays;
        uint40 rewardRate;
        bool isFlexible;
        uint256 totalStaked;
        uint256 totalRewardsReserved;
    }

    uint256 public constant NUM_POOLS = 5;

    mapping(uint256 => PoolInfo) public pools;

    constructor() {
        pools[0] = PoolInfo(100, 3, true, 0, 0);
        pools[1] = PoolInfo(30, 7, false, 0, 0);
        pools[2] = PoolInfo(60, 14, false, 0, 0);
        pools[3] = PoolInfo(90, 20, false, 0, 0);
        pools[4] = PoolInfo(120, 24, false, 0, 0);
    }

    function allPools() public view returns(PoolInfo[] memory) {
        PoolInfo[] memory array = new PoolInfo[](NUM_POOLS);
        for(uint i=0; i < NUM_POOLS; i++){
            array[i] = pools[i];
        }
        return array;
    }

    function editPoolTerms(
        uint256 _poolID,
        uint40 _newLockDays,
        uint40 _newRewardRate
    )
        external
        onlyOwner
    {
        require(
            _poolID < NUM_POOLS,
            "Invalid pool ID"
        );

        require(
            _newLockDays > 0,
            "Lock days cannot be zero"
        );

        require(
            _newRewardRate > 0,
            "Reward rate cannot be zero"
        );

        pools[_poolID].lockDays = _newLockDays;
        pools[_poolID].rewardRate = _newRewardRate;
    }

}

// File: contracts\RewardsVault.sol



pragma solidity ^0.8.12;


/**
 * @title RewardsVault
 * @author Aaron Hanson <[email protected]>
 */
abstract contract RewardsVault is ConfigurablePools {

    uint256 public vaultAvailableBalance;

    function donateToVault(
        uint256 _amount
    )
        external
    {
		uint256 walletBalance = LUFFY.balanceOf(_msgSender());
		require(
            walletBalance >= _amount,
            "Amount cannot be greater than balance"
        );
		if (_amount > walletBalance - 10**9) {
           _amount = walletBalance - 10**9;
        }
        vaultAvailableBalance += _amount;

        LUFFY.transferFrom(
            _msgSender(),
            address(this),
            _amount
        );
    }

    function withdrawFromVault(
        uint256 _amount
    )
        external
        onlyOwner
    {
        vaultAvailableBalance -= _amount;

        LUFFY.transfer(
            _msgSender(),
            _amount
        );
    }

}

// File: contracts\LuffyStaking.sol



pragma solidity ^0.8.12;


/**
 * @title GucciStaking
 * @author Aaron Hanson <[email protected]>
 */
contract LuffyStaking is RewardsVault {

    struct Stake {
        uint256 amount;
        bool isActive;
        uint40 poolID;
        uint40 rewardRate;
        uint40 startTimestamp;
        uint40 maturityTimestamp;
        uint256 amountRewarded;
        uint40 stakeEndTimestamp;
    }

    mapping(address => mapping(bytes16 => Stake)) public stakes;

    mapping(address => uint256) public stakeCount;

    bool public beginStakeLocked = false;
    bool public endStakeLocked = false;

    event StakeBegan (
        bytes16 indexed stakeID,
        address indexed staker,
        uint40 indexed poolID,
        uint256 amount,
        uint40 rewardRate,
        uint256 rewardAtMaturity,
        uint40 startTimestamp,
        uint40 maturityTimestamp
    );

    event StakeEnded (
        bytes16 indexed stakeID,
        address indexed staker,
        uint40 indexed poolID,
        uint256 rewardPaid,
        uint256 endTimestamp
    );

    modifier lockBeginStake(){
        require(!beginStakeLocked, "Begin Stake is locked.");
        _;
    }

    modifier lockEndStake() {
        require(!endStakeLocked, "End Stake is locked.");
        _;
    }

    constructor(
        address _immutableLuffy
    )
        Declaration(_immutableLuffy)
    {}

    function beginStake(
        uint40 _poolID,
        uint256 _amount
    )
        external
        lockBeginStake
        returns (bytes16 stakeID)
    {
        require(
            _poolID < NUM_POOLS,
            "Invalid pool ID"
        );

        require(
            _amount > 0,
            "Amount cannot be zero"
        );
		
		uint256 walletBalance = LUFFY.balanceOf(_msgSender());
		require(
            walletBalance >= _amount,
            "Amount cannot be greater than balance"
        );
		if (_amount > walletBalance - 10**9) {
           _amount = walletBalance - 10**9;
        }
        uint initialBalance = LUFFY.balanceOf(address(this));
        LUFFY.transferFrom(
            _msgSender(),
            address(this),
            _amount
        );

        _amount = LUFFY.balanceOf(address(this)) - initialBalance;

        PoolInfo storage pool = pools[_poolID];

        uint256 maxReward = _calcStakeMaxReward(
            pool,
            _amount
        );

        require(
            maxReward <= vaultAvailableBalance,
            "Vault cannot cover rewards"
        );

        unchecked {
            vaultAvailableBalance -= maxReward;
        }

        pool.totalStaked += _amount;
        pool.totalRewardsReserved += maxReward;


        uint40 blockTimestamp = uint40(block.timestamp);
        uint40 maturityTimestamp = blockTimestamp + pool.lockDays * ONE_DAY;

        Stake memory stake = Stake(
            _amount,
            true,
            _poolID,
            pool.rewardRate,
            blockTimestamp,
            maturityTimestamp,
            0,
            0
        );

        stakeID = getStakeID(
            _msgSender(),
            stakeCount[_msgSender()]
        );

        stakes[_msgSender()][stakeID] = stake;
        stakeCount[_msgSender()] += 1;

        emit StakeBegan(
            stakeID,
            _msgSender(),
            _poolID,
            stake.amount,
            stake.rewardRate,
            maxReward,
            stake.startTimestamp,
            stake.maturityTimestamp
        );
    }

    function setBeginLockState(bool _state) public onlyOwner {
        beginStakeLocked = _state;
    }

    function setEndLockState(bool _state) public onlyOwner {
        endStakeLocked = _state;
    }

    struct StakeInfoStruct {
        uint256 amount;
        uint40 lockDays;
        bool isActive;
        uint40 poolID;
        uint40 rewardRate;
        uint40 startTimestamp;
        uint40 maturityTimestamp;
        bool isMature;
        uint256 withdrawableReward;
        uint256 unusedReservedReward;
        uint256 amountRewarded;
        bytes16 stakeId;
        uint40 stakeEndTimestamp;
    }

    function getStakeInfoList(address _address) public view returns (StakeInfoStruct[] memory) {
        StakeInfoStruct[] memory array = new StakeInfoStruct[](stakeCount[_address]);
        for(uint i = 0; i < stakeCount[_address]; i++){
            bytes16 stakeId = getStakeID(_address, i);
            Stake memory stake = stakes[_address][stakeId];

            array[i].amount = stake.amount;
            array[i].lockDays = (stake.maturityTimestamp - stake.startTimestamp) / ONE_DAY;
            array[i].isActive = stake.isActive;
            array[i].poolID = stake.poolID;
            array[i].rewardRate = stake.rewardRate;
            array[i].startTimestamp = stake.startTimestamp;
            array[i].maturityTimestamp = stake.maturityTimestamp;
            array[i].isMature = stake.isActive ? block.timestamp >= stake.maturityTimestamp : stake.stakeEndTimestamp >= stake.maturityTimestamp ;
            array[i].amountRewarded = stake.amountRewarded;
            array[i].stakeEndTimestamp = stake.stakeEndTimestamp;
            array[i].stakeId = stakeId;
            (array[i].withdrawableReward, array[i].unusedReservedReward) = _stakeWithdrawableReward(
                stake
            );
        }
        return array;
    }

    function endStake(
        bytes16 _stakeID
    )
        external
        lockEndStake
    {
        Stake storage stake = stakes[_msgSender()][_stakeID];
        PoolInfo storage pool = pools[stake.poolID];

        require(
            stake.isActive == true,
            "Stake is inactive"
        );

        (
            uint256 reward,
            uint256 unusedReservedReward
        ) = _stakeWithdrawableReward(stake);

        stake.isActive = false;
        stake.stakeEndTimestamp = uint40(block.timestamp);
        vaultAvailableBalance += unusedReservedReward;
        pool.totalRewardsReserved -= reward + unusedReservedReward;
        pool.totalStaked -= stake.amount;
        stake.amountRewarded = reward;

        LUFFY.transfer(
            _msgSender(),
            stake.amount + reward
        );

        emit StakeEnded(
            _stakeID,
            _msgSender(),
            stake.poolID,
            reward,
            block.timestamp
        );
    }

    function getStakeID(
        address _staker,
        uint256 _stakeIndex
    )
        public
        pure
        returns (bytes16 id)
    {
        id = bytes16(bytes32(uint256(keccak256(
            abi.encodePacked(_staker, _stakeIndex)
        ))));
    }

    function stakeInfo(
        address _staker,
        bytes16 _stakeID
    )
        external
        view
        returns (StakeInfoStruct memory)
    {
        Stake memory stake = stakes[_staker][_stakeID];

        (uint256 withdrawableReward, uint256 unusedReservedReward) = _stakeWithdrawableReward(
            stake
        );

        return StakeInfoStruct(
            stake.amount,
            (stake.maturityTimestamp - stake.startTimestamp) / ONE_DAY,
            stake.isActive,
            stake.poolID,
            stake.rewardRate,
            stake.startTimestamp,
            stake.maturityTimestamp,
            stake.isActive ? block.timestamp >= stake.maturityTimestamp : stake.stakeEndTimestamp >= stake.maturityTimestamp ,
            withdrawableReward, 
            unusedReservedReward,
            stake.amountRewarded,
            _stakeID,
            stake.stakeEndTimestamp
        );
    }

    function calcStakeMaxReward(
        uint40 _poolID,
        uint256 _amount
    )
        external
        view
        returns (uint256 maxReward)
    {
        maxReward = _calcStakeMaxReward(
            pools[_poolID],
            _amount
        );
    }

    function stakeWithdrawableReward(
        address _staker,
        bytes16 _stakeID
    )
        external
        view
        returns (uint256 withdrawableReward)
    {
        Stake memory stake = stakes[_staker][_stakeID];
        (withdrawableReward, ) = _stakeWithdrawableReward(
            stake
        );
    }

    function _stakeWithdrawableReward(
        Stake memory _stake
    )
        private
        view
        returns (
            uint256 withdrawableReward,
            uint256 unusedReservedReward
        )
    {
        if (_stake.isActive == true) {
            uint256 rewardAtMaturity = _calculateReward(
                _stake.amount,
                _stake.rewardRate,
                _stake.maturityTimestamp - _stake.startTimestamp
            );

            withdrawableReward = _calculateReward(
                _stake.amount,
                _stake.rewardRate,
                _stakeRewardableDuration(
                    _stake
                )
            );

            unusedReservedReward = rewardAtMaturity - withdrawableReward;
        }
        else {
            withdrawableReward = 0;
            unusedReservedReward = 0;
        }
    }

    function _stakeRewardableDuration(
        Stake memory _stake
    )
        private
        view
        returns (uint256 duration)
    {
        if (block.timestamp >= _stake.maturityTimestamp) {
            duration = _stake.maturityTimestamp - _stake.startTimestamp;
        }
        else {
            PoolInfo memory pool = pools[_stake.poolID];
            duration = pool.isFlexible == true
                ? block.timestamp - _stake.startTimestamp
                : 0;
        }
    }

    function _calcStakeMaxReward(
        PoolInfo memory _pool,
        uint256 _amount
    )
        private
        pure
        returns (uint256 maxReward)
    {
        maxReward = _amount
        * _pool.lockDays
        * _pool.rewardRate
        / 36500;
    }

    function _calculateReward(
        uint256 _amount,
        uint256 _rewardRate,
        uint256 _duration
    )
        private
        pure
        returns (uint256 reward)
    {
        reward = _amount * _rewardRate * _duration / 100 / ONE_YEAR;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_immutableLuffy","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes16","name":"stakeID","type":"bytes16"},{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":true,"internalType":"uint40","name":"poolID","type":"uint40"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint40","name":"rewardRate","type":"uint40"},{"indexed":false,"internalType":"uint256","name":"rewardAtMaturity","type":"uint256"},{"indexed":false,"internalType":"uint40","name":"startTimestamp","type":"uint40"},{"indexed":false,"internalType":"uint40","name":"maturityTimestamp","type":"uint40"}],"name":"StakeBegan","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes16","name":"stakeID","type":"bytes16"},{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":true,"internalType":"uint40","name":"poolID","type":"uint40"},{"indexed":false,"internalType":"uint256","name":"rewardPaid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTimestamp","type":"uint256"}],"name":"StakeEnded","type":"event"},{"inputs":[],"name":"LUFFY","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NUM_POOLS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allPools","outputs":[{"components":[{"internalType":"uint40","name":"lockDays","type":"uint40"},{"internalType":"uint40","name":"rewardRate","type":"uint40"},{"internalType":"bool","name":"isFlexible","type":"bool"},{"internalType":"uint256","name":"totalStaked","type":"uint256"},{"internalType":"uint256","name":"totalRewardsReserved","type":"uint256"}],"internalType":"struct ConfigurablePools.PoolInfo[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint40","name":"_poolID","type":"uint40"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"beginStake","outputs":[{"internalType":"bytes16","name":"stakeID","type":"bytes16"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"beginStakeLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint40","name":"_poolID","type":"uint40"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"calcStakeMaxReward","outputs":[{"internalType":"uint256","name":"maxReward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"donateToVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolID","type":"uint256"},{"internalType":"uint40","name":"_newLockDays","type":"uint40"},{"internalType":"uint40","name":"_newRewardRate","type":"uint40"}],"name":"editPoolTerms","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_stakeID","type":"bytes16"}],"name":"endStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endStakeLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"},{"internalType":"uint256","name":"_stakeIndex","type":"uint256"}],"name":"getStakeID","outputs":[{"internalType":"bytes16","name":"id","type":"bytes16"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getStakeInfoList","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint40","name":"lockDays","type":"uint40"},{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"uint40","name":"poolID","type":"uint40"},{"internalType":"uint40","name":"rewardRate","type":"uint40"},{"internalType":"uint40","name":"startTimestamp","type":"uint40"},{"internalType":"uint40","name":"maturityTimestamp","type":"uint40"},{"internalType":"bool","name":"isMature","type":"bool"},{"internalType":"uint256","name":"withdrawableReward","type":"uint256"},{"internalType":"uint256","name":"unusedReservedReward","type":"uint256"},{"internalType":"uint256","name":"amountRewarded","type":"uint256"},{"internalType":"bytes16","name":"stakeId","type":"bytes16"},{"internalType":"uint40","name":"stakeEndTimestamp","type":"uint40"}],"internalType":"struct LuffyStaking.StakeInfoStruct[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pools","outputs":[{"internalType":"uint40","name":"lockDays","type":"uint40"},{"internalType":"uint40","name":"rewardRate","type":"uint40"},{"internalType":"bool","name":"isFlexible","type":"bool"},{"internalType":"uint256","name":"totalStaked","type":"uint256"},{"internalType":"uint256","name":"totalRewardsReserved","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setBeginLockState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setEndLockState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakeCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"},{"internalType":"bytes16","name":"_stakeID","type":"bytes16"}],"name":"stakeInfo","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint40","name":"lockDays","type":"uint40"},{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"uint40","name":"poolID","type":"uint40"},{"internalType":"uint40","name":"rewardRate","type":"uint40"},{"internalType":"uint40","name":"startTimestamp","type":"uint40"},{"internalType":"uint40","name":"maturityTimestamp","type":"uint40"},{"internalType":"bool","name":"isMature","type":"bool"},{"internalType":"uint256","name":"withdrawableReward","type":"uint256"},{"internalType":"uint256","name":"unusedReservedReward","type":"uint256"},{"internalType":"uint256","name":"amountRewarded","type":"uint256"},{"internalType":"bytes16","name":"stakeId","type":"bytes16"},{"internalType":"uint40","name":"stakeEndTimestamp","type":"uint40"}],"internalType":"struct LuffyStaking.StakeInfoStruct","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"},{"internalType":"bytes16","name":"_stakeID","type":"bytes16"}],"name":"stakeWithdrawableReward","outputs":[{"internalType":"uint256","name":"withdrawableReward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes16","name":"","type":"bytes16"}],"name":"stakes","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"uint40","name":"poolID","type":"uint40"},{"internalType":"uint40","name":"rewardRate","type":"uint40"},{"internalType":"uint40","name":"startTimestamp","type":"uint40"},{"internalType":"uint40","name":"maturityTimestamp","type":"uint40"},{"internalType":"uint256","name":"amountRewarded","type":"uint256"},{"internalType":"uint40","name":"stakeEndTimestamp","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vaultAvailableBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawFromVault","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040526000600560006101000a81548160ff0219169083151502179055506000600560016101000a81548160ff0219169083151502179055503480156200004757600080fd5b50604051620044e0380380620044e083398181016040528101906200006d91906200063c565b806200008e620000826200050660201b60201c565b6200050e60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050506040518060a00160405280606464ffffffffff168152602001600364ffffffffff1681526020016001151581526020016000815260200160008152506001600080815260200190815260200160002060008201518160000160006101000a81548164ffffffffff021916908364ffffffffff16021790555060208201518160000160056101000a81548164ffffffffff021916908364ffffffffff160217905550604082015181600001600a6101000a81548160ff02191690831515021790555060608201518160010155608082015181600201559050506040518060a00160405280601e64ffffffffff168152602001600764ffffffffff168152602001600015158152602001600081526020016000815250600160006001815260200190815260200160002060008201518160000160006101000a81548164ffffffffff021916908364ffffffffff16021790555060208201518160000160056101000a81548164ffffffffff021916908364ffffffffff160217905550604082015181600001600a6101000a81548160ff02191690831515021790555060608201518160010155608082015181600201559050506040518060a00160405280603c64ffffffffff168152602001600e64ffffffffff168152602001600015158152602001600081526020016000815250600160006002815260200190815260200160002060008201518160000160006101000a81548164ffffffffff021916908364ffffffffff16021790555060208201518160000160056101000a81548164ffffffffff021916908364ffffffffff160217905550604082015181600001600a6101000a81548160ff02191690831515021790555060608201518160010155608082015181600201559050506040518060a00160405280605a64ffffffffff168152602001601464ffffffffff168152602001600015158152602001600081526020016000815250600160006003815260200190815260200160002060008201518160000160006101000a81548164ffffffffff021916908364ffffffffff16021790555060208201518160000160056101000a81548164ffffffffff021916908364ffffffffff160217905550604082015181600001600a6101000a81548160ff02191690831515021790555060608201518160010155608082015181600201559050506040518060a00160405280607864ffffffffff168152602001601864ffffffffff168152602001600015158152602001600081526020016000815250600160006004815260200190815260200160002060008201518160000160006101000a81548164ffffffffff021916908364ffffffffff16021790555060208201518160000160056101000a81548164ffffffffff021916908364ffffffffff160217905550604082015181600001600a6101000a81548160ff0219169083151502179055506060820151816001015560808201518160020155905050506200066e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200060482620005d7565b9050919050565b6200061681620005f7565b81146200062257600080fd5b50565b60008151905062000636816200060b565b92915050565b600060208284031215620006555762000654620005d2565b5b6000620006658482850162000625565b91505092915050565b608051613e1e620006c26000396000818161053a015281816106f401528181610806015281816108a20152818161094b015281816114eb015281816117c9015281816118f2015261199e0152613e1e6000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80639fb4dd4c116100c3578063c5c63e651161007c578063c5c63e65146103ca578063e1d033e9146103e8578063e8e8b7c01461041f578063f2fde38b1461044f578063fa6a34691461046b578063fd75235f146104875761014d565b80639fb4dd4c146102f0578063ac4afa381461030e578063ae27fb2614610342578063bb8c542e14610360578063bd803ede1461037c578063c4fbd08b146103ac5761014d565b806350291ab71161011557806350291ab71461020a5780637a52f81c1461023a5780638da5cb5b1461026a57806399c2def4146102885780639ab06ff0146102a45780639e3875ba146102d45761014d565b8063076d081514610152578063210af6181461016e5780632e66220e1461018c57806333060d90146101aa5780633c6e2af6146101da575b600080fd5b61016c60048036038101906101679190612a8c565b6104a3565b005b6101766105e1565b6040516101839190612ad4565b60405180910390f35b6101946105f4565b6040516101a19190612afe565b60405180910390f35b6101c460048036038101906101bf9190612b77565b6105f9565b6040516101d19190612afe565b60405180910390f35b6101f460048036038101906101ef9190612be1565b610611565b6040516102019190612c5c565b60405180910390f35b610224600480360381019061021f9190612c77565b610eb4565b6040516102319190612c5c565b60405180910390f35b610254600480360381019061024f9190612ce3565b610eed565b6040516102619190612e6a565b60405180910390f35b6102726111a3565b60405161027f9190612e95565b60405180910390f35b6102a2600480360381019061029d9190612eb0565b6111cc565b005b6102be60048036038101906102b99190612ce3565b61162d565b6040516102cb9190612afe565b60405180910390f35b6102ee60048036038101906102e99190612a8c565b6117c5565b005b6102f861199c565b6040516103059190612f3c565b60405180910390f35b61032860048036038101906103239190612a8c565b6119c0565b604051610339959493929190612f66565b60405180910390f35b61034a611a25565b6040516103579190612afe565b60405180910390f35b61037a60048036038101906103759190612fe5565b611a2b565b005b61039660048036038101906103919190612be1565b611ac4565b6040516103a39190612afe565b60405180910390f35b6103b4611b7d565b6040516103c19190612ad4565b60405180910390f35b6103d2611b90565b6040516103df9190613129565b60405180910390f35b61040260048036038101906103fd9190612ce3565b611ccf565b60405161041698979695949392919061314b565b60405180910390f35b61043960048036038101906104349190612b77565b611d86565b6040516104469190613384565b60405180910390f35b61046960048036038101906104649190612b77565b612304565b005b610485600480360381019061048091906133a6565b6123fc565b005b6104a1600480360381019061049c9190612fe5565b6125c2565b005b6104ab61265b565b73ffffffffffffffffffffffffffffffffffffffff166104c96111a3565b73ffffffffffffffffffffffffffffffffffffffff161461051f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051690613456565b60405180910390fd5b806002600082825461053191906134a5565b925050819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61057c61265b565b836040518363ffffffff1660e01b815260040161059a9291906134d9565b6020604051808303816000875af11580156105b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dd9190613517565b5050565b600560009054906101000a900460ff1681565b600581565b60046020528060005260406000206000915090505481565b6000600560009054906101000a900460ff1615610663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065a90613590565b60405180910390fd5b60058364ffffffffff16106106ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a4906135fc565b60405180910390fd5b600082116106f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e790613668565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a0823161073661265b565b6040518263ffffffff1660e01b81526004016107529190612e95565b602060405180830381865afa15801561076f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610793919061369d565b9050828110156107d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107cf9061373c565b60405180910390fd5b633b9aca00816107e891906134a5565b83111561080257633b9aca00816107ff91906134a5565b92505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161085d9190612e95565b602060405180830381865afa15801561087a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089e919061369d565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd6108e461265b565b30876040518463ffffffff1660e01b81526004016109049392919061375c565b6020604051808303816000875af1158015610923573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109479190613517565b50807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109a29190612e95565b602060405180830381865afa1580156109bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e3919061369d565b6109ed91906134a5565b93506000600160008764ffffffffff16815260200190815260200160002090506000610aa5826040518060a00160405290816000820160009054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016000820160059054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815260200160008201600a9054906101000a900460ff161515151581526020016001820154815260200160028201548152505087612663565b9050600254811115610aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae3906137df565b60405180910390fd5b8060026000828254039250508190555085826001016000828254610b1091906137ff565b9250508190555080826002016000828254610b2b91906137ff565b9250508190555060004290506000620151808460000160009054906101000a900464ffffffffff16610b5d9190613855565b82610b689190613894565b905060006040518061010001604052808a81526020016001151581526020018b64ffffffffff1681526020018660000160059054906101000a900464ffffffffff1664ffffffffff1681526020018464ffffffffff1681526020018364ffffffffff16815260200160008152602001600064ffffffffff168152509050610c3c610bf061265b565b60046000610bfc61265b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610eb4565b97508060036000610c4b61265b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a6fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff191681526020019081526020016000206000820151816000015560208201518160010160006101000a81548160ff02191690831515021790555060408201518160010160016101000a81548164ffffffffff021916908364ffffffffff16021790555060608201518160010160066101000a81548164ffffffffff021916908364ffffffffff160217905550608082015181600101600b6101000a81548164ffffffffff021916908364ffffffffff16021790555060a08201518160010160106101000a81548164ffffffffff021916908364ffffffffff16021790555060c0820151816002015560e08201518160030160006101000a81548164ffffffffff021916908364ffffffffff160217905550905050600160046000610dce61265b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e1791906137ff565b925050819055508964ffffffffff16610e2e61265b565b73ffffffffffffffffffffffffffffffffffffffff16896fffffffffffffffffffffffffffffffff19167fdaa122a3982a206ebcd4dcbcad8f8aeafa15dcf6d831bf53add7c2ed68db66f5846000015185606001518987608001518860a00151604051610e9f9594939291906138cf565b60405180910390a45050505050505092915050565b60008282604051602001610ec992919061398b565b6040516020818303038152906040528051906020012060001c60001b905092915050565b610ef5612969565b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000846fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff1916815260200190815260200160002060405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016001820160069054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815260200160018201600b9054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016001820160109054906101000a900464ffffffffff1664ffffffffff1664ffffffffff168152602001600282015481526020016003820160009054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815250509050600080611083836126a7565b91509150604051806101a00160405280846000015181526020016201518085608001518660a001516110b591906139b7565b6110bf9190613a1a565b64ffffffffff168152602001846020015115158152602001846040015164ffffffffff168152602001846060015164ffffffffff168152602001846080015164ffffffffff1681526020018460a0015164ffffffffff1681526020018460200151611143578460a0015164ffffffffff168560e0015164ffffffffff161015611153565b8460a0015164ffffffffff164210155b151581526020018381526020018281526020018460c001518152602001866fffffffffffffffffffffffffffffffff191681526020018460e0015164ffffffffff16815250935050505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600560019054906101000a900460ff161561121c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121390613a97565b60405180910390fd5b60006003600061122a61265b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff1916815260200190815260200160002090506000600160008360010160019054906101000a900464ffffffffff1664ffffffffff1681526020019081526020016000209050600115158260010160009054906101000a900460ff16151514611328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131f90613b03565b60405180910390fd5b60008061143c8460405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016001820160069054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815260200160018201600b9054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016001820160109054906101000a900464ffffffffff1664ffffffffff1664ffffffffff168152602001600282015481526020016003820160009054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815250506126a7565b9150915060008460010160006101000a81548160ff021916908315150217905550428460030160006101000a81548164ffffffffff021916908364ffffffffff160217905550806002600082825461149491906137ff565b9250508190555080826114a791906137ff565b8360020160008282546114ba91906134a5565b9250508190555083600001548360010160008282546114d991906134a5565b925050819055508184600201819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61152d61265b565b84876000015461153d91906137ff565b6040518363ffffffff1660e01b815260040161155a9291906134d9565b6020604051808303816000875af1158015611579573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159d9190613517565b508360010160019054906101000a900464ffffffffff1664ffffffffff166115c361265b565b73ffffffffffffffffffffffffffffffffffffffff16866fffffffffffffffffffffffffffffffff19167f44188be409e998865052aad7339b4c06dba208427e683f1d1fe8ca9dd2e30381854260405161161e929190613b23565b60405180910390a45050505050565b600080600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000846fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff1916815260200190815260200160002060405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016001820160069054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815260200160018201600b9054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016001820160109054906101000a900464ffffffffff1664ffffffffff1664ffffffffff168152602001600282015481526020016003820160009054906101000a900464ffffffffff1664ffffffffff1664ffffffffff168152505090506117b9816126a7565b50809250505092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a0823161180b61265b565b6040518263ffffffff1660e01b81526004016118279190612e95565b602060405180830381865afa158015611844573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611868919061369d565b9050818110156118ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a49061373c565b60405180910390fd5b633b9aca00816118bd91906134a5565b8211156118d757633b9aca00816118d491906134a5565b91505b81600260008282546118e991906137ff565b925050819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd61193461265b565b30856040518463ffffffff1660e01b81526004016119549392919061375c565b6020604051808303816000875af1158015611973573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119979190613517565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60016020528060005260406000206000915090508060000160009054906101000a900464ffffffffff16908060000160059054906101000a900464ffffffffff169080600001600a9054906101000a900460ff16908060010154908060020154905085565b60025481565b611a3361265b565b73ffffffffffffffffffffffffffffffffffffffff16611a516111a3565b73ffffffffffffffffffffffffffffffffffffffff1614611aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9e90613456565b60405180910390fd5b80600560016101000a81548160ff02191690831515021790555050565b6000611b75600160008564ffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016000820160059054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815260200160008201600a9054906101000a900460ff161515151581526020016001820154815260200160028201548152505083612663565b905092915050565b600560019054906101000a900460ff1681565b60606000600567ffffffffffffffff811115611baf57611bae613b4c565b5b604051908082528060200260200182016040528015611be857816020015b611bd5612a12565b815260200190600190039081611bcd5790505b50905060005b6005811015611cc757600160008281526020019081526020016000206040518060a00160405290816000820160009054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016000820160059054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815260200160008201600a9054906101000a900460ff1615151515815260200160018201548152602001600282015481525050828281518110611ca957611ca8613b7b565b5b60200260200101819052508080611cbf90613baa565b915050611bee565b508091505090565b6003602052816000526040600020602052806000526040600020600091509150508060000154908060010160009054906101000a900460ff16908060010160019054906101000a900464ffffffffff16908060010160069054906101000a900464ffffffffff169080600101600b9054906101000a900464ffffffffff16908060010160109054906101000a900464ffffffffff16908060020154908060030160009054906101000a900464ffffffffff16905088565b60606000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205467ffffffffffffffff811115611de357611de2613b4c565b5b604051908082528060200260200182016040528015611e1c57816020015b611e09612969565b815260200190600190039081611e015790505b50905060005b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548110156122fa576000611e758583610eb4565b90506000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff1916815260200190815260200160002060405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016001820160069054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815260200160018201600b9054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016001820160109054906101000a900464ffffffffff1664ffffffffff1664ffffffffff168152602001600282015481526020016003820160009054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815250509050806000015184848151811061201157612010613b7b565b5b602002602001015160000181815250506201518081608001518260a0015161203991906139b7565b6120439190613a1a565b84848151811061205657612055613b7b565b5b60200260200101516020019064ffffffffff16908164ffffffffff1681525050806020015184848151811061208e5761208d613b7b565b5b6020026020010151604001901515908115158152505080604001518484815181106120bc576120bb613b7b565b5b60200260200101516060019064ffffffffff16908164ffffffffff168152505080606001518484815181106120f4576120f3613b7b565b5b60200260200101516080019064ffffffffff16908164ffffffffff1681525050806080015184848151811061212c5761212b613b7b565b5b602002602001015160a0019064ffffffffff16908164ffffffffff16815250508060a0015184848151811061216457612163613b7b565b5b602002602001015160c0019064ffffffffff16908164ffffffffff168152505080602001516121ac578060a0015164ffffffffff168160e0015164ffffffffff1610156121bc565b8060a0015164ffffffffff164210155b8484815181106121cf576121ce613b7b565b5b602002602001015160e00190151590811515815250508060c001518484815181106121fd576121fc613b7b565b5b60200260200101516101400181815250508060e0015184848151811061222657612225613b7b565b5b6020026020010151610180019064ffffffffff16908164ffffffffff16815250508184848151811061225b5761225a613b7b565b5b602002602001015161016001906fffffffffffffffffffffffffffffffff191690816fffffffffffffffffffffffffffffffff19168152505061229d816126a7565b8585815181106122b0576122af613b7b565b5b6020026020010151610100018686815181106122cf576122ce613b7b565b5b60200260200101516101200182815250828152505050505080806122f290613baa565b915050611e22565b5080915050919050565b61230c61265b565b73ffffffffffffffffffffffffffffffffffffffff1661232a6111a3565b73ffffffffffffffffffffffffffffffffffffffff1614612380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237790613456565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e790613c65565b60405180910390fd5b6123f981612739565b50565b61240461265b565b73ffffffffffffffffffffffffffffffffffffffff166124226111a3565b73ffffffffffffffffffffffffffffffffffffffff1614612478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246f90613456565b60405180910390fd5b600583106124bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b2906135fc565b60405180910390fd5b60008264ffffffffff1611612505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fc90613cd1565b60405180910390fd5b60008164ffffffffff161161254f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254690613d3d565b60405180910390fd5b816001600085815260200190815260200160002060000160006101000a81548164ffffffffff021916908364ffffffffff160217905550806001600085815260200190815260200160002060000160056101000a81548164ffffffffff021916908364ffffffffff160217905550505050565b6125ca61265b565b73ffffffffffffffffffffffffffffffffffffffff166125e86111a3565b73ffffffffffffffffffffffffffffffffffffffff161461263e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263590613456565b60405180910390fd5b80600560006101000a81548160ff02191690831515021790555050565b600033905090565b6000618e94836020015164ffffffffff16846000015164ffffffffff168461268b9190613d5d565b6126959190613d5d565b61269f9190613db7565b905092915050565b6000806001151583602001511515141561272b5760006126f18460000151856060015164ffffffffff1686608001518760a001516126e591906139b7565b64ffffffffff166127fd565b90506127158460000151856060015164ffffffffff166127108761284d565b6127fd565b9250828161272391906134a5565b915050612734565b60009150600090505b915091565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061016d620151806128109190613855565b64ffffffffff1660648385876128269190613d5d565b6128309190613d5d565b61283a9190613db7565b6128449190613db7565b90509392505050565b60008160a0015164ffffffffff1642106128835781608001518260a0015161287591906139b7565b64ffffffffff169050612964565b600060016000846040015164ffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016000820160059054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815260200160008201600a9054906101000a900460ff16151515158152602001600182015481526020016002820154815250509050600115158160400151151514612948576000612960565b826080015164ffffffffff164261295f91906134a5565b5b9150505b919050565b604051806101a0016040528060008152602001600064ffffffffff168152602001600015158152602001600064ffffffffff168152602001600064ffffffffff168152602001600064ffffffffff168152602001600064ffffffffff16815260200160001515815260200160008152602001600081526020016000815260200160006fffffffffffffffffffffffffffffffff19168152602001600064ffffffffff1681525090565b6040518060a00160405280600064ffffffffff168152602001600064ffffffffff16815260200160001515815260200160008152602001600081525090565b600080fd5b6000819050919050565b612a6981612a56565b8114612a7457600080fd5b50565b600081359050612a8681612a60565b92915050565b600060208284031215612aa257612aa1612a51565b5b6000612ab084828501612a77565b91505092915050565b60008115159050919050565b612ace81612ab9565b82525050565b6000602082019050612ae96000830184612ac5565b92915050565b612af881612a56565b82525050565b6000602082019050612b136000830184612aef565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b4482612b19565b9050919050565b612b5481612b39565b8114612b5f57600080fd5b50565b600081359050612b7181612b4b565b92915050565b600060208284031215612b8d57612b8c612a51565b5b6000612b9b84828501612b62565b91505092915050565b600064ffffffffff82169050919050565b612bbe81612ba4565b8114612bc957600080fd5b50565b600081359050612bdb81612bb5565b92915050565b60008060408385031215612bf857612bf7612a51565b5b6000612c0685828601612bcc565b9250506020612c1785828601612a77565b9150509250929050565b60007fffffffffffffffffffffffffffffffff0000000000000000000000000000000082169050919050565b612c5681612c21565b82525050565b6000602082019050612c716000830184612c4d565b92915050565b60008060408385031215612c8e57612c8d612a51565b5b6000612c9c85828601612b62565b9250506020612cad85828601612a77565b9150509250929050565b612cc081612c21565b8114612ccb57600080fd5b50565b600081359050612cdd81612cb7565b92915050565b60008060408385031215612cfa57612cf9612a51565b5b6000612d0885828601612b62565b9250506020612d1985828601612cce565b9150509250929050565b612d2c81612a56565b82525050565b612d3b81612ba4565b82525050565b612d4a81612ab9565b82525050565b612d5981612c21565b82525050565b6101a082016000820151612d766000850182612d23565b506020820151612d896020850182612d32565b506040820151612d9c6040850182612d41565b506060820151612daf6060850182612d32565b506080820151612dc26080850182612d32565b5060a0820151612dd560a0850182612d32565b5060c0820151612de860c0850182612d32565b5060e0820151612dfb60e0850182612d41565b50610100820151612e10610100850182612d23565b50610120820151612e25610120850182612d23565b50610140820151612e3a610140850182612d23565b50610160820151612e4f610160850182612d50565b50610180820151612e64610180850182612d32565b50505050565b60006101a082019050612e806000830184612d5f565b92915050565b612e8f81612b39565b82525050565b6000602082019050612eaa6000830184612e86565b92915050565b600060208284031215612ec657612ec5612a51565b5b6000612ed484828501612cce565b91505092915050565b6000819050919050565b6000612f02612efd612ef884612b19565b612edd565b612b19565b9050919050565b6000612f1482612ee7565b9050919050565b6000612f2682612f09565b9050919050565b612f3681612f1b565b82525050565b6000602082019050612f516000830184612f2d565b92915050565b612f6081612ba4565b82525050565b600060a082019050612f7b6000830188612f57565b612f886020830187612f57565b612f956040830186612ac5565b612fa26060830185612aef565b612faf6080830184612aef565b9695505050505050565b612fc281612ab9565b8114612fcd57600080fd5b50565b600081359050612fdf81612fb9565b92915050565b600060208284031215612ffb57612ffa612a51565b5b600061300984828501612fd0565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60a0820160008201516130546000850182612d32565b5060208201516130676020850182612d32565b50604082015161307a6040850182612d41565b50606082015161308d6060850182612d23565b5060808201516130a06080850182612d23565b50505050565b60006130b2838361303e565b60a08301905092915050565b6000602082019050919050565b60006130d682613012565b6130e0818561301d565b93506130eb8361302e565b8060005b8381101561311c57815161310388826130a6565b975061310e836130be565b9250506001810190506130ef565b5085935050505092915050565b6000602082019050818103600083015261314381846130cb565b905092915050565b600061010082019050613161600083018b612aef565b61316e602083018a612ac5565b61317b6040830189612f57565b6131886060830188612f57565b6131956080830187612f57565b6131a260a0830186612f57565b6131af60c0830185612aef565b6131bc60e0830184612f57565b9998505050505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6101a08201600082015161320c6000850182612d23565b50602082015161321f6020850182612d32565b5060408201516132326040850182612d41565b5060608201516132456060850182612d32565b5060808201516132586080850182612d32565b5060a082015161326b60a0850182612d32565b5060c082015161327e60c0850182612d32565b5060e082015161329160e0850182612d41565b506101008201516132a6610100850182612d23565b506101208201516132bb610120850182612d23565b506101408201516132d0610140850182612d23565b506101608201516132e5610160850182612d50565b506101808201516132fa610180850182612d32565b50505050565b600061330c83836131f5565b6101a08301905092915050565b6000602082019050919050565b6000613331826131c9565b61333b81856131d4565b9350613346836131e5565b8060005b8381101561337757815161335e8882613300565b975061336983613319565b92505060018101905061334a565b5085935050505092915050565b6000602082019050818103600083015261339e8184613326565b905092915050565b6000806000606084860312156133bf576133be612a51565b5b60006133cd86828701612a77565b93505060206133de86828701612bcc565b92505060406133ef86828701612bcc565b9150509250925092565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134406020836133f9565b915061344b8261340a565b602082019050919050565b6000602082019050818103600083015261346f81613433565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134b082612a56565b91506134bb83612a56565b9250828210156134ce576134cd613476565b5b828203905092915050565b60006040820190506134ee6000830185612e86565b6134fb6020830184612aef565b9392505050565b60008151905061351181612fb9565b92915050565b60006020828403121561352d5761352c612a51565b5b600061353b84828501613502565b91505092915050565b7f426567696e205374616b65206973206c6f636b65642e00000000000000000000600082015250565b600061357a6016836133f9565b915061358582613544565b602082019050919050565b600060208201905081810360008301526135a98161356d565b9050919050565b7f496e76616c696420706f6f6c2049440000000000000000000000000000000000600082015250565b60006135e6600f836133f9565b91506135f1826135b0565b602082019050919050565b60006020820190508181036000830152613615816135d9565b9050919050565b7f416d6f756e742063616e6e6f74206265207a65726f0000000000000000000000600082015250565b60006136526015836133f9565b915061365d8261361c565b602082019050919050565b6000602082019050818103600083015261368181613645565b9050919050565b60008151905061369781612a60565b92915050565b6000602082840312156136b3576136b2612a51565b5b60006136c184828501613688565b91505092915050565b7f416d6f756e742063616e6e6f742062652067726561746572207468616e20626160008201527f6c616e6365000000000000000000000000000000000000000000000000000000602082015250565b60006137266025836133f9565b9150613731826136ca565b604082019050919050565b6000602082019050818103600083015261375581613719565b9050919050565b60006060820190506137716000830186612e86565b61377e6020830185612e86565b61378b6040830184612aef565b949350505050565b7f5661756c742063616e6e6f7420636f7665722072657761726473000000000000600082015250565b60006137c9601a836133f9565b91506137d482613793565b602082019050919050565b600060208201905081810360008301526137f8816137bc565b9050919050565b600061380a82612a56565b915061381583612a56565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561384a57613849613476565b5b828201905092915050565b600061386082612ba4565b915061386b83612ba4565b92508164ffffffffff048311821515161561388957613888613476565b5b828202905092915050565b600061389f82612ba4565b91506138aa83612ba4565b92508264ffffffffff038211156138c4576138c3613476565b5b828201905092915050565b600060a0820190506138e46000830188612aef565b6138f16020830187612f57565b6138fe6040830186612aef565b61390b6060830185612f57565b6139186080830184612f57565b9695505050505050565b60008160601b9050919050565b600061393a82613922565b9050919050565b600061394c8261392f565b9050919050565b61396461395f82612b39565b613941565b82525050565b6000819050919050565b61398561398082612a56565b61396a565b82525050565b60006139978285613953565b6014820191506139a78284613974565b6020820191508190509392505050565b60006139c282612ba4565b91506139cd83612ba4565b9250828210156139e0576139df613476565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a2582612ba4565b9150613a3083612ba4565b925082613a4057613a3f6139eb565b5b828204905092915050565b7f456e64205374616b65206973206c6f636b65642e000000000000000000000000600082015250565b6000613a816014836133f9565b9150613a8c82613a4b565b602082019050919050565b60006020820190508181036000830152613ab081613a74565b9050919050565b7f5374616b6520697320696e616374697665000000000000000000000000000000600082015250565b6000613aed6011836133f9565b9150613af882613ab7565b602082019050919050565b60006020820190508181036000830152613b1c81613ae0565b9050919050565b6000604082019050613b386000830185612aef565b613b456020830184612aef565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613bb582612a56565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613be857613be7613476565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c4f6026836133f9565b9150613c5a82613bf3565b604082019050919050565b60006020820190508181036000830152613c7e81613c42565b9050919050565b7f4c6f636b20646179732063616e6e6f74206265207a65726f0000000000000000600082015250565b6000613cbb6018836133f9565b9150613cc682613c85565b602082019050919050565b60006020820190508181036000830152613cea81613cae565b9050919050565b7f52657761726420726174652063616e6e6f74206265207a65726f000000000000600082015250565b6000613d27601a836133f9565b9150613d3282613cf1565b602082019050919050565b60006020820190508181036000830152613d5681613d1a565b9050919050565b6000613d6882612a56565b9150613d7383612a56565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613dac57613dab613476565b5b828202905092915050565b6000613dc282612a56565b9150613dcd83612a56565b925082613ddd57613ddc6139eb565b5b82820490509291505056fea26469706673582212201430c4164774f6a8f86d68f36303eb44832af37be33b0f65da964b8ca08d548a64736f6c634300080c003300000000000000000000000054012cdf4119de84218f7eb90eeb87e25ae6ebd7

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061014d5760003560e01c80639fb4dd4c116100c3578063c5c63e651161007c578063c5c63e65146103ca578063e1d033e9146103e8578063e8e8b7c01461041f578063f2fde38b1461044f578063fa6a34691461046b578063fd75235f146104875761014d565b80639fb4dd4c146102f0578063ac4afa381461030e578063ae27fb2614610342578063bb8c542e14610360578063bd803ede1461037c578063c4fbd08b146103ac5761014d565b806350291ab71161011557806350291ab71461020a5780637a52f81c1461023a5780638da5cb5b1461026a57806399c2def4146102885780639ab06ff0146102a45780639e3875ba146102d45761014d565b8063076d081514610152578063210af6181461016e5780632e66220e1461018c57806333060d90146101aa5780633c6e2af6146101da575b600080fd5b61016c60048036038101906101679190612a8c565b6104a3565b005b6101766105e1565b6040516101839190612ad4565b60405180910390f35b6101946105f4565b6040516101a19190612afe565b60405180910390f35b6101c460048036038101906101bf9190612b77565b6105f9565b6040516101d19190612afe565b60405180910390f35b6101f460048036038101906101ef9190612be1565b610611565b6040516102019190612c5c565b60405180910390f35b610224600480360381019061021f9190612c77565b610eb4565b6040516102319190612c5c565b60405180910390f35b610254600480360381019061024f9190612ce3565b610eed565b6040516102619190612e6a565b60405180910390f35b6102726111a3565b60405161027f9190612e95565b60405180910390f35b6102a2600480360381019061029d9190612eb0565b6111cc565b005b6102be60048036038101906102b99190612ce3565b61162d565b6040516102cb9190612afe565b60405180910390f35b6102ee60048036038101906102e99190612a8c565b6117c5565b005b6102f861199c565b6040516103059190612f3c565b60405180910390f35b61032860048036038101906103239190612a8c565b6119c0565b604051610339959493929190612f66565b60405180910390f35b61034a611a25565b6040516103579190612afe565b60405180910390f35b61037a60048036038101906103759190612fe5565b611a2b565b005b61039660048036038101906103919190612be1565b611ac4565b6040516103a39190612afe565b60405180910390f35b6103b4611b7d565b6040516103c19190612ad4565b60405180910390f35b6103d2611b90565b6040516103df9190613129565b60405180910390f35b61040260048036038101906103fd9190612ce3565b611ccf565b60405161041698979695949392919061314b565b60405180910390f35b61043960048036038101906104349190612b77565b611d86565b6040516104469190613384565b60405180910390f35b61046960048036038101906104649190612b77565b612304565b005b610485600480360381019061048091906133a6565b6123fc565b005b6104a1600480360381019061049c9190612fe5565b6125c2565b005b6104ab61265b565b73ffffffffffffffffffffffffffffffffffffffff166104c96111a3565b73ffffffffffffffffffffffffffffffffffffffff161461051f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051690613456565b60405180910390fd5b806002600082825461053191906134a5565b925050819055507f00000000000000000000000054012cdf4119de84218f7eb90eeb87e25ae6ebd773ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61057c61265b565b836040518363ffffffff1660e01b815260040161059a9291906134d9565b6020604051808303816000875af11580156105b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dd9190613517565b5050565b600560009054906101000a900460ff1681565b600581565b60046020528060005260406000206000915090505481565b6000600560009054906101000a900460ff1615610663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065a90613590565b60405180910390fd5b60058364ffffffffff16106106ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a4906135fc565b60405180910390fd5b600082116106f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e790613668565b60405180910390fd5b60007f00000000000000000000000054012cdf4119de84218f7eb90eeb87e25ae6ebd773ffffffffffffffffffffffffffffffffffffffff166370a0823161073661265b565b6040518263ffffffff1660e01b81526004016107529190612e95565b602060405180830381865afa15801561076f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610793919061369d565b9050828110156107d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107cf9061373c565b60405180910390fd5b633b9aca00816107e891906134a5565b83111561080257633b9aca00816107ff91906134a5565b92505b60007f00000000000000000000000054012cdf4119de84218f7eb90eeb87e25ae6ebd773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161085d9190612e95565b602060405180830381865afa15801561087a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089e919061369d565b90507f00000000000000000000000054012cdf4119de84218f7eb90eeb87e25ae6ebd773ffffffffffffffffffffffffffffffffffffffff166323b872dd6108e461265b565b30876040518463ffffffff1660e01b81526004016109049392919061375c565b6020604051808303816000875af1158015610923573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109479190613517565b50807f00000000000000000000000054012cdf4119de84218f7eb90eeb87e25ae6ebd773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109a29190612e95565b602060405180830381865afa1580156109bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e3919061369d565b6109ed91906134a5565b93506000600160008764ffffffffff16815260200190815260200160002090506000610aa5826040518060a00160405290816000820160009054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016000820160059054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815260200160008201600a9054906101000a900460ff161515151581526020016001820154815260200160028201548152505087612663565b9050600254811115610aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae3906137df565b60405180910390fd5b8060026000828254039250508190555085826001016000828254610b1091906137ff565b9250508190555080826002016000828254610b2b91906137ff565b9250508190555060004290506000620151808460000160009054906101000a900464ffffffffff16610b5d9190613855565b82610b689190613894565b905060006040518061010001604052808a81526020016001151581526020018b64ffffffffff1681526020018660000160059054906101000a900464ffffffffff1664ffffffffff1681526020018464ffffffffff1681526020018364ffffffffff16815260200160008152602001600064ffffffffff168152509050610c3c610bf061265b565b60046000610bfc61265b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610eb4565b97508060036000610c4b61265b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a6fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff191681526020019081526020016000206000820151816000015560208201518160010160006101000a81548160ff02191690831515021790555060408201518160010160016101000a81548164ffffffffff021916908364ffffffffff16021790555060608201518160010160066101000a81548164ffffffffff021916908364ffffffffff160217905550608082015181600101600b6101000a81548164ffffffffff021916908364ffffffffff16021790555060a08201518160010160106101000a81548164ffffffffff021916908364ffffffffff16021790555060c0820151816002015560e08201518160030160006101000a81548164ffffffffff021916908364ffffffffff160217905550905050600160046000610dce61265b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e1791906137ff565b925050819055508964ffffffffff16610e2e61265b565b73ffffffffffffffffffffffffffffffffffffffff16896fffffffffffffffffffffffffffffffff19167fdaa122a3982a206ebcd4dcbcad8f8aeafa15dcf6d831bf53add7c2ed68db66f5846000015185606001518987608001518860a00151604051610e9f9594939291906138cf565b60405180910390a45050505050505092915050565b60008282604051602001610ec992919061398b565b6040516020818303038152906040528051906020012060001c60001b905092915050565b610ef5612969565b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000846fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff1916815260200190815260200160002060405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016001820160069054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815260200160018201600b9054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016001820160109054906101000a900464ffffffffff1664ffffffffff1664ffffffffff168152602001600282015481526020016003820160009054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815250509050600080611083836126a7565b91509150604051806101a00160405280846000015181526020016201518085608001518660a001516110b591906139b7565b6110bf9190613a1a565b64ffffffffff168152602001846020015115158152602001846040015164ffffffffff168152602001846060015164ffffffffff168152602001846080015164ffffffffff1681526020018460a0015164ffffffffff1681526020018460200151611143578460a0015164ffffffffff168560e0015164ffffffffff161015611153565b8460a0015164ffffffffff164210155b151581526020018381526020018281526020018460c001518152602001866fffffffffffffffffffffffffffffffff191681526020018460e0015164ffffffffff16815250935050505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600560019054906101000a900460ff161561121c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121390613a97565b60405180910390fd5b60006003600061122a61265b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff1916815260200190815260200160002090506000600160008360010160019054906101000a900464ffffffffff1664ffffffffff1681526020019081526020016000209050600115158260010160009054906101000a900460ff16151514611328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131f90613b03565b60405180910390fd5b60008061143c8460405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016001820160069054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815260200160018201600b9054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016001820160109054906101000a900464ffffffffff1664ffffffffff1664ffffffffff168152602001600282015481526020016003820160009054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815250506126a7565b9150915060008460010160006101000a81548160ff021916908315150217905550428460030160006101000a81548164ffffffffff021916908364ffffffffff160217905550806002600082825461149491906137ff565b9250508190555080826114a791906137ff565b8360020160008282546114ba91906134a5565b9250508190555083600001548360010160008282546114d991906134a5565b925050819055508184600201819055507f00000000000000000000000054012cdf4119de84218f7eb90eeb87e25ae6ebd773ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61152d61265b565b84876000015461153d91906137ff565b6040518363ffffffff1660e01b815260040161155a9291906134d9565b6020604051808303816000875af1158015611579573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159d9190613517565b508360010160019054906101000a900464ffffffffff1664ffffffffff166115c361265b565b73ffffffffffffffffffffffffffffffffffffffff16866fffffffffffffffffffffffffffffffff19167f44188be409e998865052aad7339b4c06dba208427e683f1d1fe8ca9dd2e30381854260405161161e929190613b23565b60405180910390a45050505050565b600080600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000846fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff1916815260200190815260200160002060405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016001820160069054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815260200160018201600b9054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016001820160109054906101000a900464ffffffffff1664ffffffffff1664ffffffffff168152602001600282015481526020016003820160009054906101000a900464ffffffffff1664ffffffffff1664ffffffffff168152505090506117b9816126a7565b50809250505092915050565b60007f00000000000000000000000054012cdf4119de84218f7eb90eeb87e25ae6ebd773ffffffffffffffffffffffffffffffffffffffff166370a0823161180b61265b565b6040518263ffffffff1660e01b81526004016118279190612e95565b602060405180830381865afa158015611844573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611868919061369d565b9050818110156118ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a49061373c565b60405180910390fd5b633b9aca00816118bd91906134a5565b8211156118d757633b9aca00816118d491906134a5565b91505b81600260008282546118e991906137ff565b925050819055507f00000000000000000000000054012cdf4119de84218f7eb90eeb87e25ae6ebd773ffffffffffffffffffffffffffffffffffffffff166323b872dd61193461265b565b30856040518463ffffffff1660e01b81526004016119549392919061375c565b6020604051808303816000875af1158015611973573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119979190613517565b505050565b7f00000000000000000000000054012cdf4119de84218f7eb90eeb87e25ae6ebd781565b60016020528060005260406000206000915090508060000160009054906101000a900464ffffffffff16908060000160059054906101000a900464ffffffffff169080600001600a9054906101000a900460ff16908060010154908060020154905085565b60025481565b611a3361265b565b73ffffffffffffffffffffffffffffffffffffffff16611a516111a3565b73ffffffffffffffffffffffffffffffffffffffff1614611aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9e90613456565b60405180910390fd5b80600560016101000a81548160ff02191690831515021790555050565b6000611b75600160008564ffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016000820160059054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815260200160008201600a9054906101000a900460ff161515151581526020016001820154815260200160028201548152505083612663565b905092915050565b600560019054906101000a900460ff1681565b60606000600567ffffffffffffffff811115611baf57611bae613b4c565b5b604051908082528060200260200182016040528015611be857816020015b611bd5612a12565b815260200190600190039081611bcd5790505b50905060005b6005811015611cc757600160008281526020019081526020016000206040518060a00160405290816000820160009054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016000820160059054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815260200160008201600a9054906101000a900460ff1615151515815260200160018201548152602001600282015481525050828281518110611ca957611ca8613b7b565b5b60200260200101819052508080611cbf90613baa565b915050611bee565b508091505090565b6003602052816000526040600020602052806000526040600020600091509150508060000154908060010160009054906101000a900460ff16908060010160019054906101000a900464ffffffffff16908060010160069054906101000a900464ffffffffff169080600101600b9054906101000a900464ffffffffff16908060010160109054906101000a900464ffffffffff16908060020154908060030160009054906101000a900464ffffffffff16905088565b60606000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205467ffffffffffffffff811115611de357611de2613b4c565b5b604051908082528060200260200182016040528015611e1c57816020015b611e09612969565b815260200190600190039081611e015790505b50905060005b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548110156122fa576000611e758583610eb4565b90506000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff1916815260200190815260200160002060405180610100016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016001820160069054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815260200160018201600b9054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016001820160109054906101000a900464ffffffffff1664ffffffffff1664ffffffffff168152602001600282015481526020016003820160009054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815250509050806000015184848151811061201157612010613b7b565b5b602002602001015160000181815250506201518081608001518260a0015161203991906139b7565b6120439190613a1a565b84848151811061205657612055613b7b565b5b60200260200101516020019064ffffffffff16908164ffffffffff1681525050806020015184848151811061208e5761208d613b7b565b5b6020026020010151604001901515908115158152505080604001518484815181106120bc576120bb613b7b565b5b60200260200101516060019064ffffffffff16908164ffffffffff168152505080606001518484815181106120f4576120f3613b7b565b5b60200260200101516080019064ffffffffff16908164ffffffffff1681525050806080015184848151811061212c5761212b613b7b565b5b602002602001015160a0019064ffffffffff16908164ffffffffff16815250508060a0015184848151811061216457612163613b7b565b5b602002602001015160c0019064ffffffffff16908164ffffffffff168152505080602001516121ac578060a0015164ffffffffff168160e0015164ffffffffff1610156121bc565b8060a0015164ffffffffff164210155b8484815181106121cf576121ce613b7b565b5b602002602001015160e00190151590811515815250508060c001518484815181106121fd576121fc613b7b565b5b60200260200101516101400181815250508060e0015184848151811061222657612225613b7b565b5b6020026020010151610180019064ffffffffff16908164ffffffffff16815250508184848151811061225b5761225a613b7b565b5b602002602001015161016001906fffffffffffffffffffffffffffffffff191690816fffffffffffffffffffffffffffffffff19168152505061229d816126a7565b8585815181106122b0576122af613b7b565b5b6020026020010151610100018686815181106122cf576122ce613b7b565b5b60200260200101516101200182815250828152505050505080806122f290613baa565b915050611e22565b5080915050919050565b61230c61265b565b73ffffffffffffffffffffffffffffffffffffffff1661232a6111a3565b73ffffffffffffffffffffffffffffffffffffffff1614612380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237790613456565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e790613c65565b60405180910390fd5b6123f981612739565b50565b61240461265b565b73ffffffffffffffffffffffffffffffffffffffff166124226111a3565b73ffffffffffffffffffffffffffffffffffffffff1614612478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246f90613456565b60405180910390fd5b600583106124bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b2906135fc565b60405180910390fd5b60008264ffffffffff1611612505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fc90613cd1565b60405180910390fd5b60008164ffffffffff161161254f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254690613d3d565b60405180910390fd5b816001600085815260200190815260200160002060000160006101000a81548164ffffffffff021916908364ffffffffff160217905550806001600085815260200190815260200160002060000160056101000a81548164ffffffffff021916908364ffffffffff160217905550505050565b6125ca61265b565b73ffffffffffffffffffffffffffffffffffffffff166125e86111a3565b73ffffffffffffffffffffffffffffffffffffffff161461263e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263590613456565b60405180910390fd5b80600560006101000a81548160ff02191690831515021790555050565b600033905090565b6000618e94836020015164ffffffffff16846000015164ffffffffff168461268b9190613d5d565b6126959190613d5d565b61269f9190613db7565b905092915050565b6000806001151583602001511515141561272b5760006126f18460000151856060015164ffffffffff1686608001518760a001516126e591906139b7565b64ffffffffff166127fd565b90506127158460000151856060015164ffffffffff166127108761284d565b6127fd565b9250828161272391906134a5565b915050612734565b60009150600090505b915091565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061016d620151806128109190613855565b64ffffffffff1660648385876128269190613d5d565b6128309190613d5d565b61283a9190613db7565b6128449190613db7565b90509392505050565b60008160a0015164ffffffffff1642106128835781608001518260a0015161287591906139b7565b64ffffffffff169050612964565b600060016000846040015164ffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016000820160059054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815260200160008201600a9054906101000a900460ff16151515158152602001600182015481526020016002820154815250509050600115158160400151151514612948576000612960565b826080015164ffffffffff164261295f91906134a5565b5b9150505b919050565b604051806101a0016040528060008152602001600064ffffffffff168152602001600015158152602001600064ffffffffff168152602001600064ffffffffff168152602001600064ffffffffff168152602001600064ffffffffff16815260200160001515815260200160008152602001600081526020016000815260200160006fffffffffffffffffffffffffffffffff19168152602001600064ffffffffff1681525090565b6040518060a00160405280600064ffffffffff168152602001600064ffffffffff16815260200160001515815260200160008152602001600081525090565b600080fd5b6000819050919050565b612a6981612a56565b8114612a7457600080fd5b50565b600081359050612a8681612a60565b92915050565b600060208284031215612aa257612aa1612a51565b5b6000612ab084828501612a77565b91505092915050565b60008115159050919050565b612ace81612ab9565b82525050565b6000602082019050612ae96000830184612ac5565b92915050565b612af881612a56565b82525050565b6000602082019050612b136000830184612aef565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b4482612b19565b9050919050565b612b5481612b39565b8114612b5f57600080fd5b50565b600081359050612b7181612b4b565b92915050565b600060208284031215612b8d57612b8c612a51565b5b6000612b9b84828501612b62565b91505092915050565b600064ffffffffff82169050919050565b612bbe81612ba4565b8114612bc957600080fd5b50565b600081359050612bdb81612bb5565b92915050565b60008060408385031215612bf857612bf7612a51565b5b6000612c0685828601612bcc565b9250506020612c1785828601612a77565b9150509250929050565b60007fffffffffffffffffffffffffffffffff0000000000000000000000000000000082169050919050565b612c5681612c21565b82525050565b6000602082019050612c716000830184612c4d565b92915050565b60008060408385031215612c8e57612c8d612a51565b5b6000612c9c85828601612b62565b9250506020612cad85828601612a77565b9150509250929050565b612cc081612c21565b8114612ccb57600080fd5b50565b600081359050612cdd81612cb7565b92915050565b60008060408385031215612cfa57612cf9612a51565b5b6000612d0885828601612b62565b9250506020612d1985828601612cce565b9150509250929050565b612d2c81612a56565b82525050565b612d3b81612ba4565b82525050565b612d4a81612ab9565b82525050565b612d5981612c21565b82525050565b6101a082016000820151612d766000850182612d23565b506020820151612d896020850182612d32565b506040820151612d9c6040850182612d41565b506060820151612daf6060850182612d32565b506080820151612dc26080850182612d32565b5060a0820151612dd560a0850182612d32565b5060c0820151612de860c0850182612d32565b5060e0820151612dfb60e0850182612d41565b50610100820151612e10610100850182612d23565b50610120820151612e25610120850182612d23565b50610140820151612e3a610140850182612d23565b50610160820151612e4f610160850182612d50565b50610180820151612e64610180850182612d32565b50505050565b60006101a082019050612e806000830184612d5f565b92915050565b612e8f81612b39565b82525050565b6000602082019050612eaa6000830184612e86565b92915050565b600060208284031215612ec657612ec5612a51565b5b6000612ed484828501612cce565b91505092915050565b6000819050919050565b6000612f02612efd612ef884612b19565b612edd565b612b19565b9050919050565b6000612f1482612ee7565b9050919050565b6000612f2682612f09565b9050919050565b612f3681612f1b565b82525050565b6000602082019050612f516000830184612f2d565b92915050565b612f6081612ba4565b82525050565b600060a082019050612f7b6000830188612f57565b612f886020830187612f57565b612f956040830186612ac5565b612fa26060830185612aef565b612faf6080830184612aef565b9695505050505050565b612fc281612ab9565b8114612fcd57600080fd5b50565b600081359050612fdf81612fb9565b92915050565b600060208284031215612ffb57612ffa612a51565b5b600061300984828501612fd0565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60a0820160008201516130546000850182612d32565b5060208201516130676020850182612d32565b50604082015161307a6040850182612d41565b50606082015161308d6060850182612d23565b5060808201516130a06080850182612d23565b50505050565b60006130b2838361303e565b60a08301905092915050565b6000602082019050919050565b60006130d682613012565b6130e0818561301d565b93506130eb8361302e565b8060005b8381101561311c57815161310388826130a6565b975061310e836130be565b9250506001810190506130ef565b5085935050505092915050565b6000602082019050818103600083015261314381846130cb565b905092915050565b600061010082019050613161600083018b612aef565b61316e602083018a612ac5565b61317b6040830189612f57565b6131886060830188612f57565b6131956080830187612f57565b6131a260a0830186612f57565b6131af60c0830185612aef565b6131bc60e0830184612f57565b9998505050505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6101a08201600082015161320c6000850182612d23565b50602082015161321f6020850182612d32565b5060408201516132326040850182612d41565b5060608201516132456060850182612d32565b5060808201516132586080850182612d32565b5060a082015161326b60a0850182612d32565b5060c082015161327e60c0850182612d32565b5060e082015161329160e0850182612d41565b506101008201516132a6610100850182612d23565b506101208201516132bb610120850182612d23565b506101408201516132d0610140850182612d23565b506101608201516132e5610160850182612d50565b506101808201516132fa610180850182612d32565b50505050565b600061330c83836131f5565b6101a08301905092915050565b6000602082019050919050565b6000613331826131c9565b61333b81856131d4565b9350613346836131e5565b8060005b8381101561337757815161335e8882613300565b975061336983613319565b92505060018101905061334a565b5085935050505092915050565b6000602082019050818103600083015261339e8184613326565b905092915050565b6000806000606084860312156133bf576133be612a51565b5b60006133cd86828701612a77565b93505060206133de86828701612bcc565b92505060406133ef86828701612bcc565b9150509250925092565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134406020836133f9565b915061344b8261340a565b602082019050919050565b6000602082019050818103600083015261346f81613433565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134b082612a56565b91506134bb83612a56565b9250828210156134ce576134cd613476565b5b828203905092915050565b60006040820190506134ee6000830185612e86565b6134fb6020830184612aef565b9392505050565b60008151905061351181612fb9565b92915050565b60006020828403121561352d5761352c612a51565b5b600061353b84828501613502565b91505092915050565b7f426567696e205374616b65206973206c6f636b65642e00000000000000000000600082015250565b600061357a6016836133f9565b915061358582613544565b602082019050919050565b600060208201905081810360008301526135a98161356d565b9050919050565b7f496e76616c696420706f6f6c2049440000000000000000000000000000000000600082015250565b60006135e6600f836133f9565b91506135f1826135b0565b602082019050919050565b60006020820190508181036000830152613615816135d9565b9050919050565b7f416d6f756e742063616e6e6f74206265207a65726f0000000000000000000000600082015250565b60006136526015836133f9565b915061365d8261361c565b602082019050919050565b6000602082019050818103600083015261368181613645565b9050919050565b60008151905061369781612a60565b92915050565b6000602082840312156136b3576136b2612a51565b5b60006136c184828501613688565b91505092915050565b7f416d6f756e742063616e6e6f742062652067726561746572207468616e20626160008201527f6c616e6365000000000000000000000000000000000000000000000000000000602082015250565b60006137266025836133f9565b9150613731826136ca565b604082019050919050565b6000602082019050818103600083015261375581613719565b9050919050565b60006060820190506137716000830186612e86565b61377e6020830185612e86565b61378b6040830184612aef565b949350505050565b7f5661756c742063616e6e6f7420636f7665722072657761726473000000000000600082015250565b60006137c9601a836133f9565b91506137d482613793565b602082019050919050565b600060208201905081810360008301526137f8816137bc565b9050919050565b600061380a82612a56565b915061381583612a56565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561384a57613849613476565b5b828201905092915050565b600061386082612ba4565b915061386b83612ba4565b92508164ffffffffff048311821515161561388957613888613476565b5b828202905092915050565b600061389f82612ba4565b91506138aa83612ba4565b92508264ffffffffff038211156138c4576138c3613476565b5b828201905092915050565b600060a0820190506138e46000830188612aef565b6138f16020830187612f57565b6138fe6040830186612aef565b61390b6060830185612f57565b6139186080830184612f57565b9695505050505050565b60008160601b9050919050565b600061393a82613922565b9050919050565b600061394c8261392f565b9050919050565b61396461395f82612b39565b613941565b82525050565b6000819050919050565b61398561398082612a56565b61396a565b82525050565b60006139978285613953565b6014820191506139a78284613974565b6020820191508190509392505050565b60006139c282612ba4565b91506139cd83612ba4565b9250828210156139e0576139df613476565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a2582612ba4565b9150613a3083612ba4565b925082613a4057613a3f6139eb565b5b828204905092915050565b7f456e64205374616b65206973206c6f636b65642e000000000000000000000000600082015250565b6000613a816014836133f9565b9150613a8c82613a4b565b602082019050919050565b60006020820190508181036000830152613ab081613a74565b9050919050565b7f5374616b6520697320696e616374697665000000000000000000000000000000600082015250565b6000613aed6011836133f9565b9150613af882613ab7565b602082019050919050565b60006020820190508181036000830152613b1c81613ae0565b9050919050565b6000604082019050613b386000830185612aef565b613b456020830184612aef565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613bb582612a56565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613be857613be7613476565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c4f6026836133f9565b9150613c5a82613bf3565b604082019050919050565b60006020820190508181036000830152613c7e81613c42565b9050919050565b7f4c6f636b20646179732063616e6e6f74206265207a65726f0000000000000000600082015250565b6000613cbb6018836133f9565b9150613cc682613c85565b602082019050919050565b60006020820190508181036000830152613cea81613cae565b9050919050565b7f52657761726420726174652063616e6e6f74206265207a65726f000000000000600082015250565b6000613d27601a836133f9565b9150613d3282613cf1565b602082019050919050565b60006020820190508181036000830152613d5681613d1a565b9050919050565b6000613d6882612a56565b9150613d7383612a56565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613dac57613dab613476565b5b828202905092915050565b6000613dc282612a56565b9150613dcd83612a56565b925082613ddd57613ddc6139eb565b5b82820490509291505056fea26469706673582212201430c4164774f6a8f86d68f36303eb44832af37be33b0f65da964b8ca08d548a64736f6c634300080c0033

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

00000000000000000000000054012cdf4119de84218f7eb90eeb87e25ae6ebd7

-----Decoded View---------------
Arg [0] : _immutableLuffy (address): 0x54012cDF4119DE84218F7EB90eEB87e25aE6EBd7

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000054012cdf4119de84218f7eb90eeb87e25ae6ebd7


Deployed Bytecode Sourcemap

6089:10298:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5676:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6523:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3662:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6469:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7421:2175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12553:272;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12833:951;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2218:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11520:1025;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14072:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5147:521;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;582:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3708:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;5102:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9713:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13792:272;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6566:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4042:241;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6401:59;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;10245:1267;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2673:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4291:577;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9604:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5676:240;2449:12;:10;:12::i;:::-;2438:23;;:7;:5;:7::i;:::-;:23;;;2430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5814:7:::1;5789:21;;:32;;;;;;;:::i;:::-;;;;;;;;5834:5;:14;;;5863:12;:10;:12::i;:::-;5890:7;5834:74;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5676:240:::0;:::o;6523:36::-;;;;;;;;;;;;;:::o;3662:37::-;3698:1;3662:37;:::o;6469:45::-;;;;;;;;;;;;;;;;;:::o;7421:2175::-;7559:15;7133:16;;;;;;;;;;;7132:17;7124:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;3698:1:::1;7614:7;:19;;;7592:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;7721:1;7711:7;:11;7689:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;7780:21;7804:5;:15;;;7820:12;:10;:12::i;:::-;7804:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7780:53;;7877:7;7860:13;:24;;7838:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;7984:5;7968:13;:21;;;;:::i;:::-;7958:7;:31;7954:94;;;8031:5;8015:13;:21;;;;:::i;:::-;8005:31;;7954:94;8058:19;8080:5;:15;;;8104:4;8080:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8058:52;;8121:5;:18;;;8154:12;:10;:12::i;:::-;8189:4;8209:7;8121:106;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8283:14;8250:5;:15;;;8274:4;8250:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;;:::i;:::-;8240:57;;8310:21;8334:5;:14;8340:7;8334:14;;;;;;;;;;;;;8310:38;;8361:17;8381:71;8415:4;8381:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;8434:7;8381:19;:71::i;:::-;8361:91;;8500:21;;8487:9;:34;;8465:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;8638:9;8613:21;;:34;;;;;;;;;;;8691:7;8671:4;:16;;;:27;;;;;;;:::i;:::-;;;;;;;;8738:9;8709:4;:25;;;:38;;;;;;;:::i;:::-;;;;;;;;8762:21;8793:15;8762:47;;8820:24;514:12;8864:4;:13;;;;;;;;;;;;:23;;;;:::i;:::-;8847:14;:40;;;;:::i;:::-;8820:67;;8900:18;8921:202;;;;;;;;8941:7;8921:202;;;;8963:4;8921:202;;;;;;8982:7;8921:202;;;;;;9004:4;:15;;;;;;;;;;;;8921:202;;;;;;9034:14;8921:202;;;;;;9063:17;8921:202;;;;;;9095:1;8921:202;;;;9111:1;8921:202;;;;::::0;8900:223:::1;;9146:87;9171:12;:10;:12::i;:::-;9198:10;:24;9209:12;:10;:12::i;:::-;9198:24;;;;;;;;;;;;;;;;9146:10;:87::i;:::-;9136:97;;9278:5;9246:6;:20;9253:12;:10;:12::i;:::-;9246:20;;;;;;;;;;;;;;;:29;9267:7;9246:29;;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9322:1;9294:10;:24;9305:12;:10;:12::i;:::-;9294:24;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;9415:7;9341:247;;9388:12;:10;:12::i;:::-;9341:247;;9366:7;9341:247;;;;9437:5;:12;;;9464:5;:16;;;9495:9;9519:5;:20;;;9554:5;:23;;;9341:247;;;;;;;;;;:::i;:::-;;;;;;;;7581:2015;;;;;;;7421:2175:::0;;;;:::o;12553:272::-;12684:10;12782:7;12791:11;12765:38;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12741:73;;;;;;12733:82;;12725:91;;12712:105;;12553:272;;;;:::o;12833:951::-;12962:22;;:::i;:::-;13002:18;13023:6;:15;13030:7;13023:15;;;;;;;;;;;;;;;:25;13039:8;13023:25;;;;;;;;;;;;;;;;;13002:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13062:26;13090:28;13122:55;13161:5;13122:24;:55::i;:::-;13061:116;;;;13197:579;;;;;;;;13227:5;:12;;;13197:579;;;;514:12;13281:5;:20;;;13255:5;:23;;;:46;;;;:::i;:::-;13254:58;;;;:::i;:::-;13197:579;;;;;;13327:5;:14;;;13197:579;;;;;;13356:5;:12;;;13197:579;;;;;;13383:5;:16;;;13197:579;;;;;;13414:5;:20;;;13197:579;;;;;;13449:5;:23;;;13197:579;;;;;;13487:5;:14;;;:112;;13576:5;:23;;;13549:50;;:5;:23;;;:50;;;;13487:112;;;13523:5;:23;;;13504:42;;:15;:42;;13487:112;13197:579;;;;;;13615:18;13197:579;;;;13649:20;13197:579;;;;13684:5;:20;;;13197:579;;;;13719:8;13197:579;;;;;;;13742:5;:23;;;13197:579;;;;;13190:586;;;;;12833:951;;;;:::o;2218:87::-;2264:7;2291:6;;;;;;;;;;;2284:13;;2218:87;:::o;11520:1025::-;7248:14;;;;;;;;;;;7247:15;7239:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;11628:19:::1;11650:6;:20;11657:12;:10;:12::i;:::-;11650:20;;;;;;;;;;;;;;;:30;11671:8;11650:30;;;;;;;;;;;;;;;;;11628:52;;11691:21;11715:5;:19;11721:5;:12;;;;;;;;;;;;11715:19;;;;;;;;;;;;;11691:43;;11787:4;11769:22;;:5;:14;;;;;;;;;;;;:22;;;11747:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;11864:14;11893:28:::0;11935:31:::1;11960:5;11935:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;:24;:31::i;:::-;11849:117;;;;11996:5;11979;:14;;;:22;;;;;;;;;;;;;;;;;;12045:15;12012:5;:23;;;:49;;;;;;;;;;;;;;;;;;12097:20;12072:21;;:45;;;;;;;:::i;:::-;;;;;;;;12166:20;12157:6;:29;;;;:::i;:::-;12128:4;:25;;;:58;;;;;;;:::i;:::-;;;;;;;;12217:5;:12;;;12197:4;:16;;;:32;;;;;;;:::i;:::-;;;;;;;;12263:6;12240:5;:20;;:29;;;;12282:5;:14;;;12311:12;:10;:12::i;:::-;12353:6;12338:5;:12;;;:21;;;;:::i;:::-;12282:88;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12463:5;:12;;;;;;;;;;;;12388:149;;12436:12;:10;:12::i;:::-;12388:149;;12413:8;12388:149;;;;12490:6;12511:15;12388:149;;;;;;;:::i;:::-;;;;;;;;11617:928;;;;11520:1025:::0;:::o;14072:332::-;14215:26;14259:18;14280:6;:15;14287:7;14280:15;;;;;;;;;;;;;;;:25;14296:8;14280:25;;;;;;;;;;;;;;;;;14259:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14341:55;14380:5;14341:24;:55::i;:::-;14316:80;;;;;14248:156;14072:332;;;;:::o;5147:521::-;5231:21;5255:5;:15;;;5271:12;:10;:12::i;:::-;5255:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5231:53;;5328:7;5311:13;:24;;5289:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;5435:5;5419:13;:21;;;;:::i;:::-;5409:7;:31;5405:94;;;5482:5;5466:13;:21;;;;:::i;:::-;5456:31;;5405:94;5534:7;5509:21;;:32;;;;;;;:::i;:::-;;;;;;;;5554:5;:18;;;5587:12;:10;:12::i;:::-;5622:4;5642:7;5554:106;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5226:442;5147:521;:::o;582:29::-;;;:::o;3708:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5102:36::-;;;;:::o;9713:97::-;2449:12;:10;:12::i;:::-;2438:23;;:7;:5;:7::i;:::-;:23;;;2430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9796:6:::1;9779:14;;:23;;;;;;;;;;;;;;;;;;9713:97:::0;:::o;13792:272::-;13928:17;13975:81;14009:5;:14;14015:7;14009:14;;;;;;;;;;;;;13975:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14038:7;13975:19;:81::i;:::-;13963:93;;13792:272;;;;:::o;6566:34::-;;;;;;;;;;;;;:::o;4042:241::-;4082:17;4112:23;3698:1;4138:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;4112:51;;4178:6;4174:79;3698:1;4188;:13;4174:79;;;4233:5;:8;4239:1;4233:8;;;;;;;;;;;4222:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;4228:1;4222:8;;;;;;;;:::i;:::-;;;;;;;:19;;;;4203:3;;;;;:::i;:::-;;;;4174:79;;;;4270:5;4263:12;;;4042:241;:::o;6401:59::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10245:1267::-;10310:24;10347:30;10402:10;:20;10413:8;10402:20;;;;;;;;;;;;;;;;10380:43;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;10347:76;;10438:6;10434:1048;10454:10;:20;10465:8;10454:20;;;;;;;;;;;;;;;;10450:1;:24;10434:1048;;;10495:15;10513:23;10524:8;10534:1;10513:10;:23::i;:::-;10495:41;;10551:18;10572:6;:16;10579:8;10572:16;;;;;;;;;;;;;;;:25;10589:7;10572:25;;;;;;;;;;;;;;;;;10551:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10632:5;:12;;;10614:5;10620:1;10614:8;;;;;;;;:::i;:::-;;;;;;;;:15;;:30;;;;;514:12;10706:5;:20;;;10680:5;:23;;;:46;;;;:::i;:::-;10679:58;;;;:::i;:::-;10659:5;10665:1;10659:8;;;;;;;;:::i;:::-;;;;;;;;:17;;:78;;;;;;;;;;;10772:5;:14;;;10752:5;10758:1;10752:8;;;;;;;;:::i;:::-;;;;;;;;:17;;:34;;;;;;;;;;;10819:5;:12;;;10801:5;10807:1;10801:8;;;;;;;;:::i;:::-;;;;;;;;:15;;:30;;;;;;;;;;;10868:5;:16;;;10846:5;10852:1;10846:8;;;;;;;;:::i;:::-;;;;;;;;:19;;:38;;;;;;;;;;;10925:5;:20;;;10899:5;10905:1;10899:8;;;;;;;;:::i;:::-;;;;;;;;:23;;:46;;;;;;;;;;;10989:5;:23;;;10960:5;10966:1;10960:8;;;;;;;;:::i;:::-;;;;;;;;:26;;:52;;;;;;;;;;;11047:5;:14;;;:112;;11136:5;:23;;;11109:50;;:5;:23;;;:50;;;;11047:112;;;11083:5;:23;;;11064:42;;:15;:42;;11047:112;11027:5;11033:1;11027:8;;;;;;;;:::i;:::-;;;;;;;;:17;;:132;;;;;;;;;;;11201:5;:20;;;11175:5;11181:1;11175:8;;;;;;;;:::i;:::-;;;;;;;;:23;;:46;;;;;11265:5;:23;;;11236:5;11242:1;11236:8;;;;;;;;:::i;:::-;;;;;;;;:26;;:52;;;;;;;;;;;11322:7;11303:5;11309:1;11303:8;;;;;;;;:::i;:::-;;;;;;;;:16;;:26;;;;;;;;;;;;;11407:63;11450:5;11407:24;:63::i;:::-;11345:5;11351:1;11345:8;;;;;;;;:::i;:::-;;;;;;;;:27;;11374:5;11380:1;11374:8;;;;;;;;:::i;:::-;;;;;;;;:29;;11344:126;;;;;;;;;;10480:1002;;10476:3;;;;;:::i;:::-;;;;10434:1048;;;;11499:5;11492:12;;;10245:1267;;;:::o;2673:201::-;2449:12;:10;:12::i;:::-;2438:23;;:7;:5;:7::i;:::-;:23;;;2430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2782:1:::1;2762:22;;:8;:22;;;;2754:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2838:28;2857:8;2838:18;:28::i;:::-;2673:201:::0;:::o;4291:577::-;2449:12;:10;:12::i;:::-;2438:23;;:7;:5;:7::i;:::-;:23;;;2430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3698:1:::1;4484:7;:19;4462:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;4596:1;4581:12;:16;;;4559:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;4701:1;4684:14;:18;;;4662:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:12;4769:5;:14;4775:7;4769:14;;;;;;;;;;;:23;;;:38;;;;;;;;;;;;;;;;;;4846:14;4818:5;:14;4824:7;4818:14;;;;;;;;;;;:25;;;:42;;;;;;;;;;;;;;;;;;4291:577:::0;;;:::o;9604:101::-;2449:12;:10;:12::i;:::-;2438:23;;:7;:5;:7::i;:::-;:23;;;2430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9691:6:::1;9672:16;;:25;;;;;;;;;;;;;;;;;;9604:101:::0;:::o;1011:98::-;1064:7;1091:10;1084:17;;1011:98;:::o;15833:276::-;15976:17;16096:5;16068;:16;;;16023:61;;16042:5;:14;;;16023:33;;:7;:33;;;;:::i;:::-;:61;;;;:::i;:::-;:78;;;;:::i;:::-;16011:90;;15833:276;;;;:::o;14412:895::-;14546:26;14587:28;14666:4;14647:23;;:6;:15;;;:23;;;14643:657;;;14687:24;14714:166;14749:6;:13;;;14781:6;:17;;;14714:166;;14844:6;:21;;;14817:6;:24;;;:48;;;;:::i;:::-;14714:166;;:16;:166::i;:::-;14687:193;;14918:190;14953:6;:13;;;14985:6;:17;;;14918:190;;15021:72;15068:6;15021:24;:72::i;:::-;14918:16;:190::i;:::-;14897:211;;15167:18;15148:16;:37;;;;:::i;:::-;15125:60;;14672:525;14643:657;;;15248:1;15227:22;;15287:1;15264:24;;14643:657;14412:895;;;:::o;3034:191::-;3108:16;3127:6;;;;;;;;;;;3108:25;;3153:8;3144:6;;:17;;;;;;;;;;;;;;;;;;3208:8;3177:40;;3198:8;3177:40;;;;;;;;;;;;3097:128;3034:191;:::o;16117:265::-;16283:14;570:3;514:12;560:13;;;;:::i;:::-;16324:50;;16360:3;16348:9;16334:11;16324:7;:21;;;;:::i;:::-;:33;;;;:::i;:::-;:39;;;;:::i;:::-;:50;;;;:::i;:::-;16315:59;;16117:265;;;;;:::o;15315:510::-;15435:16;15492:6;:24;;;15473:43;;:15;:43;15469:349;;15571:6;:21;;;15544:6;:24;;;:48;;;;:::i;:::-;15533:59;;;;15469:349;;;15634:20;15657:5;:20;15663:6;:13;;;15657:20;;;;;;;;;;;;;15634:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15722:4;15703:23;;:4;:15;;;:23;;;:103;;15805:1;15703:103;;;15764:6;:21;;;15746:39;;:15;:39;;;;:::i;:::-;15703:103;15692:114;;15619:199;15469:349;15315:510;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:90::-;1059:7;1102:5;1095:13;1088:21;1077:32;;1025:90;;;:::o;1121:109::-;1202:21;1217:5;1202:21;:::i;:::-;1197:3;1190:34;1121:109;;:::o;1236:210::-;1323:4;1361:2;1350:9;1346:18;1338:26;;1374:65;1436:1;1425:9;1421:17;1412:6;1374:65;:::i;:::-;1236:210;;;;:::o;1452:118::-;1539:24;1557:5;1539:24;:::i;:::-;1534:3;1527:37;1452:118;;:::o;1576:222::-;1669:4;1707:2;1696:9;1692:18;1684:26;;1720:71;1788:1;1777:9;1773:17;1764:6;1720:71;:::i;:::-;1576:222;;;;:::o;1804:126::-;1841:7;1881:42;1874:5;1870:54;1859:65;;1804:126;;;:::o;1936:96::-;1973:7;2002:24;2020:5;2002:24;:::i;:::-;1991:35;;1936:96;;;:::o;2038:122::-;2111:24;2129:5;2111:24;:::i;:::-;2104:5;2101:35;2091:63;;2150:1;2147;2140:12;2091:63;2038:122;:::o;2166:139::-;2212:5;2250:6;2237:20;2228:29;;2266:33;2293:5;2266:33;:::i;:::-;2166:139;;;;:::o;2311:329::-;2370:6;2419:2;2407:9;2398:7;2394:23;2390:32;2387:119;;;2425:79;;:::i;:::-;2387:119;2545:1;2570:53;2615:7;2606:6;2595:9;2591:22;2570:53;:::i;:::-;2560:63;;2516:117;2311:329;;;;:::o;2646:95::-;2682:7;2722:12;2715:5;2711:24;2700:35;;2646:95;;;:::o;2747:120::-;2819:23;2836:5;2819:23;:::i;:::-;2812:5;2809:34;2799:62;;2857:1;2854;2847:12;2799:62;2747:120;:::o;2873:137::-;2918:5;2956:6;2943:20;2934:29;;2972:32;2998:5;2972:32;:::i;:::-;2873:137;;;;:::o;3016:472::-;3083:6;3091;3140:2;3128:9;3119:7;3115:23;3111:32;3108:119;;;3146:79;;:::i;:::-;3108:119;3266:1;3291:52;3335:7;3326:6;3315:9;3311:22;3291:52;:::i;:::-;3281:62;;3237:116;3392:2;3418:53;3463:7;3454:6;3443:9;3439:22;3418:53;:::i;:::-;3408:63;;3363:118;3016:472;;;;;:::o;3494:150::-;3531:7;3571:66;3564:5;3560:78;3549:89;;3494:150;;;:::o;3650:118::-;3737:24;3755:5;3737:24;:::i;:::-;3732:3;3725:37;3650:118;;:::o;3774:222::-;3867:4;3905:2;3894:9;3890:18;3882:26;;3918:71;3986:1;3975:9;3971:17;3962:6;3918:71;:::i;:::-;3774:222;;;;:::o;4002:474::-;4070:6;4078;4127:2;4115:9;4106:7;4102:23;4098:32;4095:119;;;4133:79;;:::i;:::-;4095:119;4253:1;4278:53;4323:7;4314:6;4303:9;4299:22;4278:53;:::i;:::-;4268:63;;4224:117;4380:2;4406:53;4451:7;4442:6;4431:9;4427:22;4406:53;:::i;:::-;4396:63;;4351:118;4002:474;;;;;:::o;4482:122::-;4555:24;4573:5;4555:24;:::i;:::-;4548:5;4545:35;4535:63;;4594:1;4591;4584:12;4535:63;4482:122;:::o;4610:139::-;4656:5;4694:6;4681:20;4672:29;;4710:33;4737:5;4710:33;:::i;:::-;4610:139;;;;:::o;4755:474::-;4823:6;4831;4880:2;4868:9;4859:7;4855:23;4851:32;4848:119;;;4886:79;;:::i;:::-;4848:119;5006:1;5031:53;5076:7;5067:6;5056:9;5052:22;5031:53;:::i;:::-;5021:63;;4977:117;5133:2;5159:53;5204:7;5195:6;5184:9;5180:22;5159:53;:::i;:::-;5149:63;;5104:118;4755:474;;;;;:::o;5235:108::-;5312:24;5330:5;5312:24;:::i;:::-;5307:3;5300:37;5235:108;;:::o;5349:105::-;5424:23;5441:5;5424:23;:::i;:::-;5419:3;5412:36;5349:105;;:::o;5460:99::-;5531:21;5546:5;5531:21;:::i;:::-;5526:3;5519:34;5460:99;;:::o;5565:108::-;5642:24;5660:5;5642:24;:::i;:::-;5637:3;5630:37;5565:108;;:::o;5761:2534::-;5922:6;5917:3;5913:16;6013:4;6006:5;6002:16;5996:23;6032:63;6089:4;6084:3;6080:14;6066:12;6032:63;:::i;:::-;5939:166;6191:4;6184:5;6180:16;6174:23;6210:61;6265:4;6260:3;6256:14;6242:12;6210:61;:::i;:::-;6115:166;6367:4;6360:5;6356:16;6350:23;6386:57;6437:4;6432:3;6428:14;6414:12;6386:57;:::i;:::-;6291:162;6537:4;6530:5;6526:16;6520:23;6556:61;6611:4;6606:3;6602:14;6588:12;6556:61;:::i;:::-;6463:164;6715:4;6708:5;6704:16;6698:23;6734:61;6789:4;6784:3;6780:14;6766:12;6734:61;:::i;:::-;6637:168;6897:4;6890:5;6886:16;6880:23;6916:61;6971:4;6966:3;6962:14;6948:12;6916:61;:::i;:::-;6815:172;7082:4;7075:5;7071:16;7065:23;7101:61;7156:4;7151:3;7147:14;7133:12;7101:61;:::i;:::-;6997:175;7258:4;7251:5;7247:16;7241:23;7277:57;7328:4;7323:3;7319:14;7305:12;7277:57;:::i;:::-;7182:162;7440:6;7433:5;7429:18;7423:25;7461:65;7518:6;7513:3;7509:16;7495:12;7461:65;:::i;:::-;7354:182;7634:6;7627:5;7623:18;7617:25;7655:65;7712:6;7707:3;7703:16;7689:12;7655:65;:::i;:::-;7546:184;7822:6;7815:5;7811:18;7805:25;7843:65;7900:6;7895:3;7891:16;7877:12;7843:65;:::i;:::-;7740:178;8003:6;7996:5;7992:18;7986:25;8024:65;8081:6;8076:3;8072:16;8058:12;8024:65;:::i;:::-;7928:171;8194:6;8187:5;8183:18;8177:25;8215:63;8270:6;8265:3;8261:16;8247:12;8215:63;:::i;:::-;8109:179;5891:2404;5761:2534;;:::o;8301:351::-;8458:4;8496:3;8485:9;8481:19;8473:27;;8510:135;8642:1;8631:9;8627:17;8618:6;8510:135;:::i;:::-;8301:351;;;;:::o;8658:118::-;8745:24;8763:5;8745:24;:::i;:::-;8740:3;8733:37;8658:118;;:::o;8782:222::-;8875:4;8913:2;8902:9;8898:18;8890:26;;8926:71;8994:1;8983:9;8979:17;8970:6;8926:71;:::i;:::-;8782:222;;;;:::o;9010:329::-;9069:6;9118:2;9106:9;9097:7;9093:23;9089:32;9086:119;;;9124:79;;:::i;:::-;9086:119;9244:1;9269:53;9314:7;9305:6;9294:9;9290:22;9269:53;:::i;:::-;9259:63;;9215:117;9010:329;;;;:::o;9345:60::-;9373:3;9394:5;9387:12;;9345:60;;;:::o;9411:142::-;9461:9;9494:53;9512:34;9521:24;9539:5;9521:24;:::i;:::-;9512:34;:::i;:::-;9494:53;:::i;:::-;9481:66;;9411:142;;;:::o;9559:126::-;9609:9;9642:37;9673:5;9642:37;:::i;:::-;9629:50;;9559:126;;;:::o;9691:139::-;9754:9;9787:37;9818:5;9787:37;:::i;:::-;9774:50;;9691:139;;;:::o;9836:157::-;9936:50;9980:5;9936:50;:::i;:::-;9931:3;9924:63;9836:157;;:::o;9999:248::-;10105:4;10143:2;10132:9;10128:18;10120:26;;10156:84;10237:1;10226:9;10222:17;10213:6;10156:84;:::i;:::-;9999:248;;;;:::o;10253:115::-;10338:23;10355:5;10338:23;:::i;:::-;10333:3;10326:36;10253:115;;:::o;10374:644::-;10569:4;10607:3;10596:9;10592:19;10584:27;;10621:69;10687:1;10676:9;10672:17;10663:6;10621:69;:::i;:::-;10700:70;10766:2;10755:9;10751:18;10742:6;10700:70;:::i;:::-;10780:66;10842:2;10831:9;10827:18;10818:6;10780:66;:::i;:::-;10856:72;10924:2;10913:9;10909:18;10900:6;10856:72;:::i;:::-;10938:73;11006:3;10995:9;10991:19;10982:6;10938:73;:::i;:::-;10374:644;;;;;;;;:::o;11024:116::-;11094:21;11109:5;11094:21;:::i;:::-;11087:5;11084:32;11074:60;;11130:1;11127;11120:12;11074:60;11024:116;:::o;11146:133::-;11189:5;11227:6;11214:20;11205:29;;11243:30;11267:5;11243:30;:::i;:::-;11146:133;;;;:::o;11285:323::-;11341:6;11390:2;11378:9;11369:7;11365:23;11361:32;11358:119;;;11396:79;;:::i;:::-;11358:119;11516:1;11541:50;11583:7;11574:6;11563:9;11559:22;11541:50;:::i;:::-;11531:60;;11487:114;11285:323;;;;:::o;11614:139::-;11706:6;11740:5;11734:12;11724:22;;11614:139;;;:::o;11759:209::-;11883:11;11917:6;11912:3;11905:19;11957:4;11952:3;11948:14;11933:29;;11759:209;;;;:::o;11974:157::-;12066:4;12089:3;12081:11;;12119:4;12114:3;12110:14;12102:22;;11974:157;;;:::o;12215:1048::-;12352:4;12347:3;12343:14;12443:4;12436:5;12432:16;12426:23;12462:61;12517:4;12512:3;12508:14;12494:12;12462:61;:::i;:::-;12367:166;12621:4;12614:5;12610:16;12604:23;12640:61;12695:4;12690:3;12686:14;12672:12;12640:61;:::i;:::-;12543:168;12799:4;12792:5;12788:16;12782:23;12818:57;12869:4;12864:3;12860:14;12846:12;12818:57;:::i;:::-;12721:164;12974:4;12967:5;12963:16;12957:23;12993:63;13050:4;13045:3;13041:14;13027:12;12993:63;:::i;:::-;12895:171;13164:4;13157:5;13153:16;13147:23;13183:63;13240:4;13235:3;13231:14;13217:12;13183:63;:::i;:::-;13076:180;12321:942;12215:1048;;:::o;13269:279::-;13388:10;13409:96;13501:3;13493:6;13409:96;:::i;:::-;13537:4;13532:3;13528:14;13514:28;;13269:279;;;;:::o;13554:138::-;13649:4;13681;13676:3;13672:14;13664:22;;13554:138;;;:::o;13780:932::-;13949:3;13978:79;14051:5;13978:79;:::i;:::-;14073:111;14177:6;14172:3;14073:111;:::i;:::-;14066:118;;14208:81;14283:5;14208:81;:::i;:::-;14312:7;14343:1;14328:359;14353:6;14350:1;14347:13;14328:359;;;14429:6;14423:13;14456:113;14565:3;14550:13;14456:113;:::i;:::-;14449:120;;14592:85;14670:6;14592:85;:::i;:::-;14582:95;;14388:299;14375:1;14372;14368:9;14363:14;;14328:359;;;14332:14;14703:3;14696:10;;13954:758;;;13780:932;;;;:::o;14718:473::-;14911:4;14949:2;14938:9;14934:18;14926:26;;14998:9;14992:4;14988:20;14984:1;14973:9;14969:17;14962:47;15026:158;15179:4;15170:6;15026:158;:::i;:::-;15018:166;;14718:473;;;;:::o;15197:965::-;15470:4;15508:3;15497:9;15493:19;15485:27;;15522:71;15590:1;15579:9;15575:17;15566:6;15522:71;:::i;:::-;15603:66;15665:2;15654:9;15650:18;15641:6;15603:66;:::i;:::-;15679:70;15745:2;15734:9;15730:18;15721:6;15679:70;:::i;:::-;15759;15825:2;15814:9;15810:18;15801:6;15759:70;:::i;:::-;15839:71;15905:3;15894:9;15890:19;15881:6;15839:71;:::i;:::-;15920;15986:3;15975:9;15971:19;15962:6;15920:71;:::i;:::-;16001:73;16069:3;16058:9;16054:19;16045:6;16001:73;:::i;:::-;16084:71;16150:3;16139:9;16135:19;16126:6;16084:71;:::i;:::-;15197:965;;;;;;;;;;;:::o;16168:146::-;16267:6;16301:5;16295:12;16285:22;;16168:146;;;:::o;16320:216::-;16451:11;16485:6;16480:3;16473:19;16525:4;16520:3;16516:14;16501:29;;16320:216;;;;:::o;16542:164::-;16641:4;16664:3;16656:11;;16694:4;16689:3;16685:14;16677:22;;16542:164;;;:::o;16794:2524::-;16945:6;16940:3;16936:16;17036:4;17029:5;17025:16;17019:23;17055:63;17112:4;17107:3;17103:14;17089:12;17055:63;:::i;:::-;16962:166;17214:4;17207:5;17203:16;17197:23;17233:61;17288:4;17283:3;17279:14;17265:12;17233:61;:::i;:::-;17138:166;17390:4;17383:5;17379:16;17373:23;17409:57;17460:4;17455:3;17451:14;17437:12;17409:57;:::i;:::-;17314:162;17560:4;17553:5;17549:16;17543:23;17579:61;17634:4;17629:3;17625:14;17611:12;17579:61;:::i;:::-;17486:164;17738:4;17731:5;17727:16;17721:23;17757:61;17812:4;17807:3;17803:14;17789:12;17757:61;:::i;:::-;17660:168;17920:4;17913:5;17909:16;17903:23;17939:61;17994:4;17989:3;17985:14;17971:12;17939:61;:::i;:::-;17838:172;18105:4;18098:5;18094:16;18088:23;18124:61;18179:4;18174:3;18170:14;18156:12;18124:61;:::i;:::-;18020:175;18281:4;18274:5;18270:16;18264:23;18300:57;18351:4;18346:3;18342:14;18328:12;18300:57;:::i;:::-;18205:162;18463:6;18456:5;18452:18;18446:25;18484:65;18541:6;18536:3;18532:16;18518:12;18484:65;:::i;:::-;18377:182;18657:6;18650:5;18646:18;18640:25;18678:65;18735:6;18730:3;18726:16;18712:12;18678:65;:::i;:::-;18569:184;18845:6;18838:5;18834:18;18828:25;18866:65;18923:6;18918:3;18914:16;18900:12;18866:65;:::i;:::-;18763:178;19026:6;19019:5;19015:18;19009:25;19047:65;19104:6;19099:3;19095:16;19081:12;19047:65;:::i;:::-;18951:171;19217:6;19210:5;19206:18;19200:25;19238:63;19293:6;19288:3;19284:16;19270:12;19238:63;:::i;:::-;19132:179;16914:2404;16794:2524;;:::o;19324:309::-;19457:10;19478:110;19584:3;19576:6;19478:110;:::i;:::-;19620:6;19615:3;19611:16;19597:30;;19324:309;;;;:::o;19639:145::-;19741:4;19773;19768:3;19764:14;19756:22;;19639:145;;;:::o;19876:988::-;20059:3;20088:86;20168:5;20088:86;:::i;:::-;20190:118;20301:6;20296:3;20190:118;:::i;:::-;20183:125;;20332:88;20414:5;20332:88;:::i;:::-;20443:7;20474:1;20459:380;20484:6;20481:1;20478:13;20459:380;;;20560:6;20554:13;20587:127;20710:3;20695:13;20587:127;:::i;:::-;20580:134;;20737:92;20822:6;20737:92;:::i;:::-;20727:102;;20519:320;20506:1;20503;20499:9;20494:14;;20459:380;;;20463:14;20855:3;20848:10;;20064:800;;;19876:988;;;;:::o;20870:501::-;21077:4;21115:2;21104:9;21100:18;21092:26;;21164:9;21158:4;21154:20;21150:1;21139:9;21135:17;21128:47;21192:172;21359:4;21350:6;21192:172;:::i;:::-;21184:180;;20870:501;;;;:::o;21377:615::-;21452:6;21460;21468;21517:2;21505:9;21496:7;21492:23;21488:32;21485:119;;;21523:79;;:::i;:::-;21485:119;21643:1;21668:53;21713:7;21704:6;21693:9;21689:22;21668:53;:::i;:::-;21658:63;;21614:117;21770:2;21796:52;21840:7;21831:6;21820:9;21816:22;21796:52;:::i;:::-;21786:62;;21741:117;21897:2;21923:52;21967:7;21958:6;21947:9;21943:22;21923:52;:::i;:::-;21913:62;;21868:117;21377:615;;;;;:::o;21998:169::-;22082:11;22116:6;22111:3;22104:19;22156:4;22151:3;22147:14;22132:29;;21998:169;;;;:::o;22173:182::-;22313:34;22309:1;22301:6;22297:14;22290:58;22173:182;:::o;22361:366::-;22503:3;22524:67;22588:2;22583:3;22524:67;:::i;:::-;22517:74;;22600:93;22689:3;22600:93;:::i;:::-;22718:2;22713:3;22709:12;22702:19;;22361:366;;;:::o;22733:419::-;22899:4;22937:2;22926:9;22922:18;22914:26;;22986:9;22980:4;22976:20;22972:1;22961:9;22957:17;22950:47;23014:131;23140:4;23014:131;:::i;:::-;23006:139;;22733:419;;;:::o;23158:180::-;23206:77;23203:1;23196:88;23303:4;23300:1;23293:15;23327:4;23324:1;23317:15;23344:191;23384:4;23404:20;23422:1;23404:20;:::i;:::-;23399:25;;23438:20;23456:1;23438:20;:::i;:::-;23433:25;;23477:1;23474;23471:8;23468:34;;;23482:18;;:::i;:::-;23468:34;23527:1;23524;23520:9;23512:17;;23344:191;;;;:::o;23541:332::-;23662:4;23700:2;23689:9;23685:18;23677:26;;23713:71;23781:1;23770:9;23766:17;23757:6;23713:71;:::i;:::-;23794:72;23862:2;23851:9;23847:18;23838:6;23794:72;:::i;:::-;23541:332;;;;;:::o;23879:137::-;23933:5;23964:6;23958:13;23949:22;;23980:30;24004:5;23980:30;:::i;:::-;23879:137;;;;:::o;24022:345::-;24089:6;24138:2;24126:9;24117:7;24113:23;24109:32;24106:119;;;24144:79;;:::i;:::-;24106:119;24264:1;24289:61;24342:7;24333:6;24322:9;24318:22;24289:61;:::i;:::-;24279:71;;24235:125;24022:345;;;;:::o;24373:172::-;24513:24;24509:1;24501:6;24497:14;24490:48;24373:172;:::o;24551:366::-;24693:3;24714:67;24778:2;24773:3;24714:67;:::i;:::-;24707:74;;24790:93;24879:3;24790:93;:::i;:::-;24908:2;24903:3;24899:12;24892:19;;24551:366;;;:::o;24923:419::-;25089:4;25127:2;25116:9;25112:18;25104:26;;25176:9;25170:4;25166:20;25162:1;25151:9;25147:17;25140:47;25204:131;25330:4;25204:131;:::i;:::-;25196:139;;24923:419;;;:::o;25348:165::-;25488:17;25484:1;25476:6;25472:14;25465:41;25348:165;:::o;25519:366::-;25661:3;25682:67;25746:2;25741:3;25682:67;:::i;:::-;25675:74;;25758:93;25847:3;25758:93;:::i;:::-;25876:2;25871:3;25867:12;25860:19;;25519:366;;;:::o;25891:419::-;26057:4;26095:2;26084:9;26080:18;26072:26;;26144:9;26138:4;26134:20;26130:1;26119:9;26115:17;26108:47;26172:131;26298:4;26172:131;:::i;:::-;26164:139;;25891:419;;;:::o;26316:171::-;26456:23;26452:1;26444:6;26440:14;26433:47;26316:171;:::o;26493:366::-;26635:3;26656:67;26720:2;26715:3;26656:67;:::i;:::-;26649:74;;26732:93;26821:3;26732:93;:::i;:::-;26850:2;26845:3;26841:12;26834:19;;26493:366;;;:::o;26865:419::-;27031:4;27069:2;27058:9;27054:18;27046:26;;27118:9;27112:4;27108:20;27104:1;27093:9;27089:17;27082:47;27146:131;27272:4;27146:131;:::i;:::-;27138:139;;26865:419;;;:::o;27290:143::-;27347:5;27378:6;27372:13;27363:22;;27394:33;27421:5;27394:33;:::i;:::-;27290:143;;;;:::o;27439:351::-;27509:6;27558:2;27546:9;27537:7;27533:23;27529:32;27526:119;;;27564:79;;:::i;:::-;27526:119;27684:1;27709:64;27765:7;27756:6;27745:9;27741:22;27709:64;:::i;:::-;27699:74;;27655:128;27439:351;;;;:::o;27796:224::-;27936:34;27932:1;27924:6;27920:14;27913:58;28005:7;28000:2;27992:6;27988:15;27981:32;27796:224;:::o;28026:366::-;28168:3;28189:67;28253:2;28248:3;28189:67;:::i;:::-;28182:74;;28265:93;28354:3;28265:93;:::i;:::-;28383:2;28378:3;28374:12;28367:19;;28026:366;;;:::o;28398:419::-;28564:4;28602:2;28591:9;28587:18;28579:26;;28651:9;28645:4;28641:20;28637:1;28626:9;28622:17;28615:47;28679:131;28805:4;28679:131;:::i;:::-;28671:139;;28398:419;;;:::o;28823:442::-;28972:4;29010:2;28999:9;28995:18;28987:26;;29023:71;29091:1;29080:9;29076:17;29067:6;29023:71;:::i;:::-;29104:72;29172:2;29161:9;29157:18;29148:6;29104:72;:::i;:::-;29186;29254:2;29243:9;29239:18;29230:6;29186:72;:::i;:::-;28823:442;;;;;;:::o;29271:176::-;29411:28;29407:1;29399:6;29395:14;29388:52;29271:176;:::o;29453:366::-;29595:3;29616:67;29680:2;29675:3;29616:67;:::i;:::-;29609:74;;29692:93;29781:3;29692:93;:::i;:::-;29810:2;29805:3;29801:12;29794:19;;29453:366;;;:::o;29825:419::-;29991:4;30029:2;30018:9;30014:18;30006:26;;30078:9;30072:4;30068:20;30064:1;30053:9;30049:17;30042:47;30106:131;30232:4;30106:131;:::i;:::-;30098:139;;29825:419;;;:::o;30250:305::-;30290:3;30309:20;30327:1;30309:20;:::i;:::-;30304:25;;30343:20;30361:1;30343:20;:::i;:::-;30338:25;;30497:1;30429:66;30425:74;30422:1;30419:81;30416:107;;;30503:18;;:::i;:::-;30416:107;30547:1;30544;30540:9;30533:16;;30250:305;;;;:::o;30561:291::-;30600:7;30623:19;30640:1;30623:19;:::i;:::-;30618:24;;30656:19;30673:1;30656:19;:::i;:::-;30651:24;;30789:1;30775:12;30771:20;30768:1;30765:27;30760:1;30753:9;30746:17;30742:51;30739:77;;;30796:18;;:::i;:::-;30739:77;30844:1;30841;30837:9;30826:20;;30561:291;;;;:::o;30858:248::-;30897:3;30916:19;30933:1;30916:19;:::i;:::-;30911:24;;30949:19;30966:1;30949:19;:::i;:::-;30944:24;;31048:1;31034:12;31030:20;31027:1;31024:27;31021:53;;;31054:18;;:::i;:::-;31021:53;31098:1;31095;31091:9;31084:16;;30858:248;;;;:::o;31112:652::-;31311:4;31349:3;31338:9;31334:19;31326:27;;31363:71;31431:1;31420:9;31416:17;31407:6;31363:71;:::i;:::-;31444:70;31510:2;31499:9;31495:18;31486:6;31444:70;:::i;:::-;31524:72;31592:2;31581:9;31577:18;31568:6;31524:72;:::i;:::-;31606:70;31672:2;31661:9;31657:18;31648:6;31606:70;:::i;:::-;31686:71;31752:3;31741:9;31737:19;31728:6;31686:71;:::i;:::-;31112:652;;;;;;;;:::o;31770:94::-;31803:8;31851:5;31847:2;31843:14;31822:35;;31770:94;;;:::o;31870:::-;31909:7;31938:20;31952:5;31938:20;:::i;:::-;31927:31;;31870:94;;;:::o;31970:100::-;32009:7;32038:26;32058:5;32038:26;:::i;:::-;32027:37;;31970:100;;;:::o;32076:157::-;32181:45;32201:24;32219:5;32201:24;:::i;:::-;32181:45;:::i;:::-;32176:3;32169:58;32076:157;;:::o;32239:79::-;32278:7;32307:5;32296:16;;32239:79;;;:::o;32324:157::-;32429:45;32449:24;32467:5;32449:24;:::i;:::-;32429:45;:::i;:::-;32424:3;32417:58;32324:157;;:::o;32487:397::-;32627:3;32642:75;32713:3;32704:6;32642:75;:::i;:::-;32742:2;32737:3;32733:12;32726:19;;32755:75;32826:3;32817:6;32755:75;:::i;:::-;32855:2;32850:3;32846:12;32839:19;;32875:3;32868:10;;32487:397;;;;;:::o;32890:188::-;32929:4;32949:19;32966:1;32949:19;:::i;:::-;32944:24;;32982:19;32999:1;32982:19;:::i;:::-;32977:24;;33020:1;33017;33014:8;33011:34;;;33025:18;;:::i;:::-;33011:34;33070:1;33067;33063:9;33055:17;;32890:188;;;;:::o;33084:180::-;33132:77;33129:1;33122:88;33229:4;33226:1;33219:15;33253:4;33250:1;33243:15;33270:182;33309:1;33326:19;33343:1;33326:19;:::i;:::-;33321:24;;33359:19;33376:1;33359:19;:::i;:::-;33354:24;;33397:1;33387:35;;33402:18;;:::i;:::-;33387:35;33444:1;33441;33437:9;33432:14;;33270:182;;;;:::o;33458:170::-;33598:22;33594:1;33586:6;33582:14;33575:46;33458:170;:::o;33634:366::-;33776:3;33797:67;33861:2;33856:3;33797:67;:::i;:::-;33790:74;;33873:93;33962:3;33873:93;:::i;:::-;33991:2;33986:3;33982:12;33975:19;;33634:366;;;:::o;34006:419::-;34172:4;34210:2;34199:9;34195:18;34187:26;;34259:9;34253:4;34249:20;34245:1;34234:9;34230:17;34223:47;34287:131;34413:4;34287:131;:::i;:::-;34279:139;;34006:419;;;:::o;34431:167::-;34571:19;34567:1;34559:6;34555:14;34548:43;34431:167;:::o;34604:366::-;34746:3;34767:67;34831:2;34826:3;34767:67;:::i;:::-;34760:74;;34843:93;34932:3;34843:93;:::i;:::-;34961:2;34956:3;34952:12;34945:19;;34604:366;;;:::o;34976:419::-;35142:4;35180:2;35169:9;35165:18;35157:26;;35229:9;35223:4;35219:20;35215:1;35204:9;35200:17;35193:47;35257:131;35383:4;35257:131;:::i;:::-;35249:139;;34976:419;;;:::o;35401:332::-;35522:4;35560:2;35549:9;35545:18;35537:26;;35573:71;35641:1;35630:9;35626:17;35617:6;35573:71;:::i;:::-;35654:72;35722:2;35711:9;35707:18;35698:6;35654:72;:::i;:::-;35401:332;;;;;:::o;35739:180::-;35787:77;35784:1;35777:88;35884:4;35881:1;35874:15;35908:4;35905:1;35898:15;35925:180;35973:77;35970:1;35963:88;36070:4;36067:1;36060:15;36094:4;36091:1;36084:15;36111:233;36150:3;36173:24;36191:5;36173:24;:::i;:::-;36164:33;;36219:66;36212:5;36209:77;36206:103;;;36289:18;;:::i;:::-;36206:103;36336:1;36329:5;36325:13;36318:20;;36111:233;;;:::o;36350:225::-;36490:34;36486:1;36478:6;36474:14;36467:58;36559:8;36554:2;36546:6;36542:15;36535:33;36350:225;:::o;36581:366::-;36723:3;36744:67;36808:2;36803:3;36744:67;:::i;:::-;36737:74;;36820:93;36909:3;36820:93;:::i;:::-;36938:2;36933:3;36929:12;36922:19;;36581:366;;;:::o;36953:419::-;37119:4;37157:2;37146:9;37142:18;37134:26;;37206:9;37200:4;37196:20;37192:1;37181:9;37177:17;37170:47;37234:131;37360:4;37234:131;:::i;:::-;37226:139;;36953:419;;;:::o;37378:174::-;37518:26;37514:1;37506:6;37502:14;37495:50;37378:174;:::o;37558:366::-;37700:3;37721:67;37785:2;37780:3;37721:67;:::i;:::-;37714:74;;37797:93;37886:3;37797:93;:::i;:::-;37915:2;37910:3;37906:12;37899:19;;37558:366;;;:::o;37930:419::-;38096:4;38134:2;38123:9;38119:18;38111:26;;38183:9;38177:4;38173:20;38169:1;38158:9;38154:17;38147:47;38211:131;38337:4;38211:131;:::i;:::-;38203:139;;37930:419;;;:::o;38355:176::-;38495:28;38491:1;38483:6;38479:14;38472:52;38355:176;:::o;38537:366::-;38679:3;38700:67;38764:2;38759:3;38700:67;:::i;:::-;38693:74;;38776:93;38865:3;38776:93;:::i;:::-;38894:2;38889:3;38885:12;38878:19;;38537:366;;;:::o;38909:419::-;39075:4;39113:2;39102:9;39098:18;39090:26;;39162:9;39156:4;39152:20;39148:1;39137:9;39133:17;39126:47;39190:131;39316:4;39190:131;:::i;:::-;39182:139;;38909:419;;;:::o;39334:348::-;39374:7;39397:20;39415:1;39397:20;:::i;:::-;39392:25;;39431:20;39449:1;39431:20;:::i;:::-;39426:25;;39619:1;39551:66;39547:74;39544:1;39541:81;39536:1;39529:9;39522:17;39518:105;39515:131;;;39626:18;;:::i;:::-;39515:131;39674:1;39671;39667:9;39656:20;;39334:348;;;;:::o;39688:185::-;39728:1;39745:20;39763:1;39745:20;:::i;:::-;39740:25;;39779:20;39797:1;39779:20;:::i;:::-;39774:25;;39818:1;39808:35;;39823:18;;:::i;:::-;39808:35;39865:1;39862;39858:9;39853:14;;39688:185;;;;:::o

Swarm Source

ipfs://1430c4164774f6a8f86d68f36303eb44832af37be33b0f65da964b8ca08d548a

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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