ETH Price: $3,481.65 (+0.76%)

Contract

0x2281F6997bc224618a162d18d7eb6379e8F6De88
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw BEP20190671712024-01-23 5:02:35336 days ago1705986155IN
0x2281F699...9e8F6De88
0 ETH0.000704048.71523751
Stake Tokens190290542024-01-17 20:43:35342 days ago1705524215IN
0x2281F699...9e8F6De88
0 ETH0.0108695334.59298432
Emergency Withdr...190288682024-01-17 20:05:59342 days ago1705521959IN
0x2281F699...9e8F6De88
0 ETH0.0091773136.20983976
Unstake Tokens190288642024-01-17 20:05:11342 days ago1705521911IN
0x2281F699...9e8F6De88
0 ETH0.0048968135.02927406
Stake Tokens190288522024-01-17 20:02:47342 days ago1705521767IN
0x2281F699...9e8F6De88
0 ETH0.0127751438.96143738
Add Pool190280002024-01-17 17:11:11342 days ago1705511471IN
0x2281F699...9e8F6De88
0 ETH0.0114022952.53351994
Add Pool190279982024-01-17 17:10:47342 days ago1705511447IN
0x2281F699...9e8F6De88
0 ETH0.0117425354.09811114
Add Pool190279872024-01-17 17:08:35342 days ago1705511315IN
0x2281F699...9e8F6De88
0 ETH0.0138036858.94979898

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TokenFarm

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-01-17
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.9;

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a), 'mul overflow');
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != -1 || a != MIN_INT256);

        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a),
            'sub overflow');
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a),
            'add overflow');
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256,
            'abs overflow');
        return a < 0 ? -a : a;
    }

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, 'SafeMath: addition overflow');

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, 'SafeMath: subtraction overflow');
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, 'SafeMath: multiplication overflow');

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, 'SafeMath: division by zero');
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0,
            'parameter 2 can not be 0');
        return a % b;
    }

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }
}

interface IBEP20 {

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address who) external view returns (uint256);

    function allowance(address owner, address spender)
    external
    view
    returns (uint256);

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

    function approve(address spender, uint256 value) external returns (bool);

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

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

contract Ownable {
    address private _owner;

    event OwnershipRenounced(address indexed previousOwner);
    event TransferOwnerShip(address indexed previousOwner);

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

    constructor() {
        _owner = msg.sender;
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(msg.sender == _owner, 'Not owner');
        _;
    }

    function renounceOwnership() public onlyOwner {
        emit OwnershipRenounced(_owner);
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public onlyOwner {
        emit TransferOwnerShip(newOwner);
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0),
            'Owner can not be 0');
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract TokenFarm is Ownable {

    using SafeMath for uint256;
    using SafeMathInt for int256;

    struct UserInfo {
        uint256 amount;     // How many tokens the user has provided.
        uint256 stakingTime; // The time at which the user staked tokens.
        uint256 rewardClaimed; // The amount of reward claimed by the user.
    }

    struct PoolInfo {
        address tokenAddress;
        address rewardTokenAddress;
        uint256 maxPoolSize; 
        uint256 currentPoolSize;
        uint256 maxContribution;
        uint256 minContribution;
        uint256 apy; // it is in 1000 times, so 1000 means 100%
        uint256 emergencyFees; // it is the fees in percentage, final fees is emergencyFees/1000
        uint256 minLockDays;
        uint256 totalRewardsClaimed; // total rewards claimed by the users
        bool poolType; // true for public staking, false for whitelist staking
        bool poolActive;
    }

    // Info of each pool.
    PoolInfo[] public poolInfo;
    uint256 [] public rewardTimes;
    bool lock_= false;

    uint256 public totalRewardsClaimed = 0;
    // Info of each user that stakes tokens.
    mapping (uint256 => mapping (address => UserInfo)) public userInfo;
    mapping (uint256 => mapping (address => bool)) public whitelistedAddress;
    mapping (uint256 => uint256) public rewardAmount;
    mapping (uint256 => uint256) public rewardCurrentPoolSize;

    event Deposit(address indexed user, uint256 indexed pid, uint256 amount);
    event Withdraw(address indexed user, uint256 indexed pid, uint256 amount);
    event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount);


    constructor () {
        
    }


    modifier lock {
        require(!lock_, "Process is locked");
        lock_ = true;
        _;
        lock_ = false;
    }

    function poolLength() public view returns (uint256) {
        return poolInfo.length;
    }

    function addPool (address _tokenAddress, address _rewardTokenAddress, uint256 _maxPoolSize, uint256 _maxContribution,uint256 _emergencyFee, uint256 _minContribution, uint256 _apy, uint256 _minLockDays, bool _poolType, bool _poolActive) public onlyOwner {
        poolInfo.push(PoolInfo({
            tokenAddress: _tokenAddress,
            rewardTokenAddress: _rewardTokenAddress,
            maxPoolSize: _maxPoolSize,
            currentPoolSize: 0,
            minContribution: _minContribution,
            maxContribution: _maxContribution,
            apy: _apy,
            emergencyFees: _emergencyFee,
            minLockDays: _minLockDays,
            poolType: _poolType,
            poolActive: _poolActive,
            totalRewardsClaimed: 0
        }));
    }

    function updateMaxPoolSize (uint256 _pid, uint256 _maxPoolSize) public onlyOwner{
        require (_pid < poolLength(), "Invalid pool ID");
        require (_maxPoolSize >= poolInfo[_pid].currentPoolSize, "Cannot reduce the max size below the current pool size");
        poolInfo[_pid].maxPoolSize = _maxPoolSize;
    }

    function updateMaxContribution (uint256 _pid, uint256 _maxContribution) public onlyOwner{
        require (_pid < poolLength(), "Invalid pool ID");
        poolInfo[_pid].maxContribution = _maxContribution;
    }

    function updateEmergencyFees (uint256 _pid, uint256 _emergencyFees) public onlyOwner {
        require (_pid < poolLength(), "Invalid pool ID");
        if (poolInfo[_pid].currentPoolSize > 0){
            require (_emergencyFees <= poolInfo[_pid].emergencyFees, "You can't increase the emergency fees when people started staking");
        }
        poolInfo[_pid].emergencyFees = _emergencyFees;
    }

    function updateRewardToken(address _rewardTokenAddress, uint256 _pid) public onlyOwner {
        require (_pid < poolLength(), "Invalid pool ID");
        poolInfo[_pid].rewardTokenAddress = _rewardTokenAddress;
    }

    function updateToken(address _tokenAddress, uint256 _pid) public onlyOwner {
        require (_pid < poolLength(), "Invalid pool ID");
        poolInfo[_pid].tokenAddress = _tokenAddress;
    }

    function updateMinLockDays (uint256 _pid, uint256 _lockDays) public onlyOwner {
        require (_pid < poolLength(), "Invalid pool ID");
        require (poolInfo[_pid].currentPoolSize == 0, "Cannot change lock time after people started staking");
        poolInfo[_pid].minLockDays = _lockDays;
    }

    function updateApy (uint256 _pid, uint256 _apy) public onlyOwner {
        require (_pid < poolLength(), "Invalid pool ID");
        poolInfo[_pid].apy = _apy;
    }

    function updatePoolType (uint256 _pid, bool _poolType) public onlyOwner {
        require (_pid < poolLength(), "Invalid pool ID");
        poolInfo[_pid].poolType = _poolType;
    }

    function updatePoolActive (uint256 _pid, bool _poolActive) public onlyOwner {
        require (_pid < poolLength(), "Invalid pool ID");
        poolInfo[_pid].poolActive = _poolActive;
    }

    function updateMinContribution (uint256 _pid, uint256 _minContribution) public onlyOwner {
        require (_pid < poolLength(), "Invalid pool ID");
        poolInfo[_pid].minContribution = _minContribution;
    }

    function addWhitelist (uint256 _pid, address [] memory _whitelistAddresses) public onlyOwner {
        require (_pid < poolLength(), "Invalid pool ID");
        uint256 length = _whitelistAddresses.length;
        require (length<= 200, "Can add only 200 wl at a time");
        for (uint256 i = 0; i < length; i++){
            address _whitelistAddress = _whitelistAddresses[i];
            whitelistedAddress[_pid][_whitelistAddress] = true;
        }
    }

    function addReward (uint256 _pid, uint256 _amount) public onlyOwner {
        rewardTimes.push(block.timestamp);
        rewardAmount[block.timestamp] = _amount;
        rewardCurrentPoolSize[block.timestamp] = poolInfo[_pid].currentPoolSize;
        address _rewardTokenAddress = poolInfo[_pid].rewardTokenAddress;
        IBEP20 rewardToken = IBEP20 (_rewardTokenAddress);
    }

    function emergencyLock (bool _lock) public onlyOwner {
        lock_ = _lock;
    }

    function stakeTokens (uint256 _pid, uint256 _amount) public lock {
        require (_pid < poolLength(), "Invalid pool ID");
        require (poolInfo[_pid].poolActive, "Pool is not active");
        require (_amount >= (userInfo[_pid][msg.sender].amount).add(poolInfo[_pid].minContribution), "Amount is less than min contribution");
        require (poolInfo[_pid].currentPoolSize.add(_amount) <= poolInfo[_pid].maxPoolSize, "Staking exceeds max pool size");
        require ((userInfo[_pid][msg.sender].amount).add(_amount) <= poolInfo[_pid].maxContribution , "Max Contribution exceeds");
        
        if (poolInfo[_pid].poolType == false){
            require (whitelistedAddress[_pid][msg.sender], "You are not whitelisted for this pool");
        }

        // Sending the claimable tokens to the user
        if (claimableRewards(_pid, msg.sender) > 0){
            claimRewards(_pid);
        }

        address _tokenAddress = poolInfo[_pid].tokenAddress;
        IBEP20 token = IBEP20 (_tokenAddress);
        bool success = token.transferFrom(msg.sender, address(this), _amount);
        require (success, "Transfer From failed. Please approve the token");

        poolInfo[_pid].currentPoolSize = (poolInfo[_pid].currentPoolSize).add(_amount);
        uint256 _stakingTime = block.timestamp; 
        _amount = _amount.add(userInfo[_pid][msg.sender].amount);
        uint256 _rewardClaimed = 0;
        userInfo[_pid][msg.sender] = UserInfo ({
            amount: _amount,
            stakingTime: _stakingTime,
            rewardClaimed: _rewardClaimed
        });
    }

    function claimableRewards (uint256 _pid, address _user) public view returns (uint256) {
        require (_pid < poolLength(), "Invalid pool ID");

        uint256 _stakingTime = userInfo[_pid][_user].stakingTime;
        uint256 lockDays = (block.timestamp - _stakingTime) / 1 days;
        if(lockDays < poolInfo[_pid].minLockDays) return 0;
        if (userInfo[_pid][_user].amount == 0) return 0;

        uint256 _claimableReward = 0;
        for (uint256 i = 0; i < rewardTimes.length; i++){
            uint256 _rewardTime = rewardTimes[i];
            uint256 _rewardAmount = rewardAmount[_rewardTime];
            uint256 _rewardCurrentPoolSize = rewardCurrentPoolSize[_rewardTime];
            if (_rewardTime > _stakingTime){
                uint256 _refundValue = ((userInfo[_pid][_user].amount * _rewardAmount) / (_rewardCurrentPoolSize));
                _claimableReward = _claimableReward.add(_refundValue);
            }
        }
        if (userInfo[_pid][_user].rewardClaimed >= _claimableReward) return 0;
        return _claimableReward - userInfo[_pid][_user].rewardClaimed;
    }

    function claimableNativeRewards (uint256 _pid, address _user) public view returns (uint256) {
        require (_pid < poolLength(), "Invalid pool ID");

        uint256 lockDays = (block.timestamp - userInfo[_pid][_user].stakingTime) / 1 days;
        uint256 _refundValue = ((userInfo[_pid][_user].amount *  poolInfo[_pid].apy * lockDays) / (1000 * 365));
        return _refundValue;
    }

    function unstakeTokens (uint256 _pid) public lock {
        require (_pid < poolLength(), "Invalid pool ID");
        require (userInfo[_pid][msg.sender].amount > 0 , "You don't have any staked tokens");
        require (userInfo[_pid][msg.sender].stakingTime > 0 , "You don't have any staked tokens");
        
        address _tokenAddress = poolInfo[_pid].tokenAddress;
        IBEP20 token = IBEP20 (_tokenAddress);
        address _rewardTokenAddress = poolInfo[_pid].rewardTokenAddress;
        IBEP20 rewardToken = IBEP20 (_rewardTokenAddress);
        uint256 _amount = userInfo[_pid][msg.sender].amount;

        uint256 _refundValue = claimableRewards(_pid, msg.sender);
        uint256 _nativeReward = claimableNativeRewards(_pid, msg.sender);
        userInfo[_pid][msg.sender].rewardClaimed += _refundValue;
        poolInfo[_pid].currentPoolSize = (poolInfo[_pid].currentPoolSize).sub(userInfo[_pid][msg.sender].amount);
        poolInfo[_pid].totalRewardsClaimed += _refundValue;
        userInfo[_pid][msg.sender].amount = 0;

        bool success1 = token.transfer(msg.sender, _amount);
        bool success2 = token.transfer(msg.sender, _nativeReward);
        bool success3 = rewardToken.transfer(msg.sender, _refundValue);
        require(success1 && success2 && success3, "Transfer failed");
    }

    function claimRewards (uint256 _pid) public lock {
        require (_pid < poolLength(), "Invalid pool ID");
        require (userInfo[_pid][msg.sender].amount > 0 , "You don't have any staked tokens");
        require (userInfo[_pid][msg.sender].stakingTime > 0 , "You don't have any staked tokens");

        address _rewardTokenAddress = poolInfo[_pid].rewardTokenAddress;
        IBEP20 rewardToken = IBEP20 (_rewardTokenAddress);
        uint256 _refundValue = claimableRewards(_pid, msg.sender);
        userInfo[_pid][msg.sender].rewardClaimed += _refundValue;
        poolInfo[_pid].totalRewardsClaimed += _refundValue;
        bool success = rewardToken.transfer(msg.sender, _refundValue);
        require(success, "Transfer failed");
    }

    // emergency withdraw function
    function emergencyWithdraw (uint256 _pid) public lock {
        require (_pid < poolLength(), "Invalid pool ID");
        require (userInfo[_pid][msg.sender].amount > 0 , "You don't have any staked tokens");
        require (userInfo[_pid][msg.sender].stakingTime > 0 , "You don't have any staked tokens");

        address _tokenAddress = poolInfo[_pid].tokenAddress;
        IBEP20 token = IBEP20 (_tokenAddress);
        uint256 _amount = userInfo[_pid][msg.sender].amount;
        userInfo[_pid][msg.sender].amount = 0;
        poolInfo[_pid].currentPoolSize = (poolInfo[_pid].currentPoolSize).sub(_amount);

        uint256 afterDeductAmount = _amount.sub((_amount * poolInfo[_pid].emergencyFees) / 1000);
        bool success = token.transfer(msg.sender, afterDeductAmount);
        require(success, "Transfer failed");
    }

    // this function is to withdraw BNB sent to this address by mistake
    function withdrawEth () external onlyOwner returns (bool) {
        uint256 balance = address(this).balance;
        (bool success, ) = payable(msg.sender).call{
            value: balance
        }("");
        return success;
    }

    // this function is to withdraw BEP20 tokens sent to this address by mistake
    function withdrawBEP20 (address _tokenAddress) external onlyOwner returns (bool) {
        IBEP20 token = IBEP20 (_tokenAddress);
        uint256 balance = token.balanceOf(address(this));
        bool success = token.transfer(msg.sender, balance);
        return success;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"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":"address","name":"previousOwner","type":"address"}],"name":"TransferOwnerShip","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_rewardTokenAddress","type":"address"},{"internalType":"uint256","name":"_maxPoolSize","type":"uint256"},{"internalType":"uint256","name":"_maxContribution","type":"uint256"},{"internalType":"uint256","name":"_emergencyFee","type":"uint256"},{"internalType":"uint256","name":"_minContribution","type":"uint256"},{"internalType":"uint256","name":"_apy","type":"uint256"},{"internalType":"uint256","name":"_minLockDays","type":"uint256"},{"internalType":"bool","name":"_poolType","type":"bool"},{"internalType":"bool","name":"_poolActive","type":"bool"}],"name":"addPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"addReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address[]","name":"_whitelistAddresses","type":"address[]"}],"name":"addWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"claimableNativeRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"claimableRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_lock","type":"bool"}],"name":"emergencyLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"uint256","name":"maxPoolSize","type":"uint256"},{"internalType":"uint256","name":"currentPoolSize","type":"uint256"},{"internalType":"uint256","name":"maxContribution","type":"uint256"},{"internalType":"uint256","name":"minContribution","type":"uint256"},{"internalType":"uint256","name":"apy","type":"uint256"},{"internalType":"uint256","name":"emergencyFees","type":"uint256"},{"internalType":"uint256","name":"minLockDays","type":"uint256"},{"internalType":"uint256","name":"totalRewardsClaimed","type":"uint256"},{"internalType":"bool","name":"poolType","type":"bool"},{"internalType":"bool","name":"poolActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardCurrentPoolSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stakeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalRewardsClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"unstakeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_apy","type":"uint256"}],"name":"updateApy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_emergencyFees","type":"uint256"}],"name":"updateEmergencyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_maxContribution","type":"uint256"}],"name":"updateMaxContribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_maxPoolSize","type":"uint256"}],"name":"updateMaxPoolSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_minContribution","type":"uint256"}],"name":"updateMinContribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_lockDays","type":"uint256"}],"name":"updateMinLockDays","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"bool","name":"_poolActive","type":"bool"}],"name":"updatePoolActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"bool","name":"_poolType","type":"bool"}],"name":"updatePoolType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardTokenAddress","type":"address"},{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updateRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updateToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"stakingTime","type":"uint256"},{"internalType":"uint256","name":"rewardClaimed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"whitelistedAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"withdrawBEP20","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60806040526000600360006101000a81548160ff021916908315150217905550600060045534801561003057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614e42806100806000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c806375c93bb91161011a578063a34b0f76116100ad578063bd095c9e1161007c578063bd095c9e146105b3578063e2771361146105e3578063e27f7271146105ff578063ea0edf781461061b578063f2fde38b14610637576101fb565b8063a34b0f761461052d578063a569e3671461054b578063a7a93ea914610567578063ba82c89714610597576101fb565b80638da5cb5b116100e95780638da5cb5b1461048f57806393f1a40b146104ad57806394cab519146104df578063a0ef91df1461050f576101fb565b806375c93bb91461041f57806376f263981461043b5780638aa1e44e146104575780638b20e52a14610473576101fb565b80633670cc1711610192578063556ada4711610161578063556ada47146103ad57806357fafbf2146103c9578063608e4dd0146103f9578063715018a614610415576101fb565b80633670cc171461033d5780633b7b618814610359578063459f40e3146103755780635312ea8e14610391576101fb565b80631526fe27116101ce5780631526fe271461029a5780632649a774146102d557806328eb423f146103055780632bce9e7b14610321576101fb565b8063047e408614610200578063081e3eda146102305780630962ef791461024e5780630f00f3bd1461026a575b600080fd5b61021a60048036038101906102159190613c63565b610653565b6040516102279190613cab565b60405180910390f35b6102386107f4565b6040516102459190613cdf565b60405180910390f35b61026860048036038101906102639190613d26565b610801565b005b610284600480360381019061027f9190613d53565b610bc8565b6040516102919190613cab565b60405180910390f35b6102b460048036038101906102af9190613d26565b610bf7565b6040516102cc9c9b9a99989796959493929190613da2565b60405180910390f35b6102ef60048036038101906102ea9190613d53565b610cc1565b6040516102fc9190613cdf565b60405180910390f35b61031f600480360381019061031a9190613e5c565b610e29565b005b61033b60048036038101906103369190613e9c565b610f2e565b005b61035760048036038101906103529190613f08565b61106d565b005b610373600480360381019061036e9190613e5c565b611185565b005b61038f600480360381019061038a9190613e5c565b61186f565b005b6103ab60048036038101906103a69190613d26565b6119dc565b005b6103c760048036038101906103c29190613e5c565b611e56565b005b6103e360048036038101906103de9190613d26565b611f5b565b6040516103f09190613cdf565b60405180910390f35b610413600480360381019061040e9190613d26565b611f73565b005b61041d612618565b005b61043960048036038101906104349190613e5c565b61274c565b005b61045560048036038101906104509190613f48565b6128ad565b005b610471600480360381019061046c9190614180565b612b1a565b005b61048d60048036038101906104889190613e5c565b612ce8565b005b610497612ded565b6040516104a491906141dc565b60405180910390f35b6104c760048036038101906104c29190613d53565b612e16565b6040516104d6939291906141f7565b60405180910390f35b6104f960048036038101906104f49190613d26565b612e4d565b6040516105069190613cdf565b60405180910390f35b610517612e65565b6040516105249190613cab565b60405180910390f35b610535612f6f565b6040516105429190613cdf565b60405180910390f35b6105656004803603810190610560919061422e565b612f75565b005b610581600480360381019061057c9190613d26565b613020565b60405161058e9190613cdf565b60405180910390f35b6105b160048036038101906105ac9190613e9c565b613044565b005b6105cd60048036038101906105c89190613d53565b613183565b6040516105da9190613cdf565b60405180910390f35b6105fd60048036038101906105f89190613f08565b6134bb565b005b61061960048036038101906106149190613e5c565b6135d3565b005b61063560048036038101906106309190613e5c565b61376f565b005b610651600480360381019061064c9190613c63565b6138dc565b005b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106db906142b8565b60405180910390fd5b600082905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161072491906141dc565b602060405180830381865afa158015610741573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076591906142ed565b905060008273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016107a492919061431a565b6020604051808303816000875af11580156107c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e79190614358565b9050809350505050919050565b6000600180549050905090565b600360009054906101000a900460ff1615610851576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610848906143d1565b60405180910390fd5b6001600360006101000a81548160ff0219169083151502179055506108746107f4565b81106108b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ac9061443d565b60405180910390fd5b60006005600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541161094b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610942906144a9565b60405180910390fd5b60006005600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154116109e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d8906144a9565b60405180910390fd5b6000600182815481106109f7576109f66144c9565b5b90600052602060002090600b020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008190506000610a3c8433613183565b9050806005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002016000828254610aa19190614527565b925050819055508060018581548110610abd57610abc6144c9565b5b90600052602060002090600b02016009016000828254610add9190614527565b9250508190555060008273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401610b2192919061431a565b6020604051808303816000875af1158015610b40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b649190614358565b905080610ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9d906145a7565b60405180910390fd5b505050506000600360006101000a81548160ff02191690831515021790555050565b60066020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60018181548110610c0757600080fd5b90600052602060002090600b02016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201549080600301549080600401549080600501549080600601549080600701549080600801549080600901549080600a0160009054906101000a900460ff169080600a0160019054906101000a900460ff1690508c565b6000610ccb6107f4565b8310610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d039061443d565b60405180910390fd5b6000620151806005600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015442610d7191906145c7565b610d7b919061462a565b90506000620591c88260018781548110610d9857610d976144c9565b5b90600052602060002090600b0201600601546005600089815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610e08919061465b565b610e12919061465b565b610e1c919061462a565b9050809250505092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eae906142b8565b60405180910390fd5b610ebf6107f4565b8210610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef79061443d565b60405180910390fd5b8060018381548110610f1557610f146144c9565b5b90600052602060002090600b0201600601819055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb3906142b8565b60405180910390fd5b610fc46107f4565b8110611005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffc9061443d565b60405180910390fd5b816001828154811061101a576110196144c9565b5b90600052602060002090600b020160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f2906142b8565b60405180910390fd5b6111036107f4565b8210611144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113b9061443d565b60405180910390fd5b8060018381548110611159576111586144c9565b5b90600052602060002090600b0201600a0160016101000a81548160ff0219169083151502179055505050565b600360009054906101000a900460ff16156111d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cc906143d1565b60405180910390fd5b6001600360006101000a81548160ff0219169083151502179055506111f86107f4565b8210611239576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112309061443d565b60405180910390fd5b6001828154811061124d5761124c6144c9565b5b90600052602060002090600b0201600a0160019054906101000a900460ff166112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a2906146e9565b60405180910390fd5b611336600183815481106112c2576112c16144c9565b5b90600052602060002090600b0201600501546005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546139b990919063ffffffff16565b811015611378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136f9061477b565b60405180910390fd5b6001828154811061138c5761138b6144c9565b5b90600052602060002090600b0201600201546113d682600185815481106113b6576113b56144c9565b5b90600052602060002090600b0201600301546139b990919063ffffffff16565b1115611417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140e906147e7565b60405180910390fd5b6001828154811061142b5761142a6144c9565b5b90600052602060002090600b0201600401546114a3826005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546139b990919063ffffffff16565b11156114e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114db90614853565b60405180910390fd5b60001515600183815481106114fc576114fb6144c9565b5b90600052602060002090600b0201600a0160009054906101000a900460ff161515036115c0576006600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166115bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b6906148e5565b60405180910390fd5b5b60006115cc8333613183565b11156115dc576115db82610801565b5b6000600183815481106115f2576115f16144c9565b5b90600052602060002090600b020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600081905060008173ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b815260040161166a93929190614905565b6020604051808303816000875af1158015611689573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ad9190614358565b9050806116ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e6906149ae565b60405180910390fd5b6117278460018781548110611707576117066144c9565b5b90600052602060002090600b0201600301546139b990919063ffffffff16565b6001868154811061173b5761173a6144c9565b5b90600052602060002090600b02016003018190555060004290506117bb6005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154866139b990919063ffffffff16565b945060006040518060600160405280878152602001838152602001828152506005600089815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015590505050505050506000600360006101000a81548160ff0219169083151502179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f4906142b8565b60405180910390fd5b6119056107f4565b8210611946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193d9061443d565b60405180910390fd5b60006001838154811061195c5761195b6144c9565b5b90600052602060002090600b020160030154146119ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a590614a40565b60405180910390fd5b80600183815481106119c3576119c26144c9565b5b90600052602060002090600b0201600801819055505050565b600360009054906101000a900460ff1615611a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a23906143d1565b60405180910390fd5b6001600360006101000a81548160ff021916908315150217905550611a4f6107f4565b8110611a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a879061443d565b60405180910390fd5b60006005600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411611b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1d906144a9565b60405180910390fd5b60006005600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015411611bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb3906144a9565b60405180910390fd5b600060018281548110611bd257611bd16144c9565b5b90600052602060002090600b020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600081905060006005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154905060006005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550611cf48160018681548110611cd457611cd36144c9565b5b90600052602060002090600b020160030154613a1790919063ffffffff16565b60018581548110611d0857611d076144c9565b5b90600052602060002090600b0201600301819055506000611d6f6103e860018781548110611d3957611d386144c9565b5b90600052602060002090600b02016007015484611d56919061465b565b611d60919061462a565b83613a1790919063ffffffff16565b905060008373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401611dae92919061431a565b6020604051808303816000875af1158015611dcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df19190614358565b905080611e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2a906145a7565b60405180910390fd5b50505050506000600360006101000a81548160ff02191690831515021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edb906142b8565b60405180910390fd5b611eec6107f4565b8210611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f249061443d565b60405180910390fd5b8060018381548110611f4257611f416144c9565b5b90600052602060002090600b0201600401819055505050565b60076020528060005260406000206000915090505481565b600360009054906101000a900460ff1615611fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fba906143d1565b60405180910390fd5b6001600360006101000a81548160ff021916908315150217905550611fe66107f4565b8110612027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201e9061443d565b60405180910390fd5b60006005600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154116120bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b4906144a9565b60405180910390fd5b60006005600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015411612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a906144a9565b60405180910390fd5b600060018281548110612169576121686144c9565b5b90600052602060002090600b020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008190506000600184815481106121b8576121b76144c9565b5b90600052602060002090600b020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600081905060006005600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154905060006122558733613183565b905060006122638833610cc1565b905081600560008a815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008282546122c89190614527565b9250508190555061235a600560008a815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460018a8154811061233a576123396144c9565b5b90600052602060002090600b020160030154613a1790919063ffffffff16565b6001898154811061236e5761236d6144c9565b5b90600052602060002090600b0201600301819055508160018981548110612398576123976144c9565b5b90600052602060002090600b020160090160008282546123b89190614527565b925050819055506000600560008a815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555060008673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33866040518363ffffffff1660e01b815260040161245592919061431a565b6020604051808303816000875af1158015612474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124989190614358565b905060008773ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b81526004016124d792919061431a565b6020604051808303816000875af11580156124f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251a9190614358565b905060008673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33876040518363ffffffff1660e01b815260040161255992919061431a565b6020604051808303816000875af1158015612578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259c9190614358565b90508280156125a85750815b80156125b15750805b6125f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e7906145a7565b60405180910390fd5b505050505050505050506000600360006101000a81548160ff02191690831515021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269d906142b8565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a260008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146127da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d1906142b8565b60405180910390fd5b60024290806001815401808255809150506001900390600052602060002001600090919091909150558060076000428152602001908152602001600020819055506001828154811061282f5761282e6144c9565b5b90600052602060002090600b020160030154600860004281526020019081526020016000208190555060006001838154811061286e5761286d6144c9565b5b90600052602060002090600b020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600081905050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461293b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612932906142b8565b60405180910390fd5b60016040518061018001604052808c73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020016000815260200189815260200187815260200186815260200188815260200185815260200160008152602001841515815260200183151581525090806001815401808255809150506001900390600052602060002090600b020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a0160006101000a81548160ff02191690831515021790555061016082015181600a0160016101000a81548160ff021916908315150217905550505050505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9f906142b8565b60405180910390fd5b612bb06107f4565b8210612bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be89061443d565b60405180910390fd5b60008151905060c8811115612c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3290614aac565b60405180910390fd5b60005b81811015612ce2576000838281518110612c5b57612c5a6144c9565b5b6020026020010151905060016006600087815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080612cda90614acc565b915050612c3e565b50505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6d906142b8565b60405180910390fd5b612d7e6107f4565b8210612dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db69061443d565b60405180910390fd5b8060018381548110612dd457612dd36144c9565b5b90600052602060002090600b0201600501819055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6005602052816000526040600020602052806000526040600020600091509150508060000154908060010154908060020154905083565b60086020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eed906142b8565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff1682604051612f2190614b45565b60006040518083038185875af1925050503d8060008114612f5e576040519150601f19603f3d011682016040523d82523d6000602084013e612f63565b606091505b50509050809250505090565b60045481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ffa906142b8565b60405180910390fd5b80600360006101000a81548160ff02191690831515021790555050565b6002818154811061303057600080fd5b906000526020600020016000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146130d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c9906142b8565b60405180910390fd5b6130da6107f4565b811061311b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131129061443d565b60405180910390fd5b81600182815481106131305761312f6144c9565b5b90600052602060002090600b020160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600061318d6107f4565b83106131ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c59061443d565b60405180910390fd5b60006005600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050600062015180824261323891906145c7565b613242919061462a565b905060018581548110613258576132576144c9565b5b90600052602060002090600b02016008015481101561327c576000925050506134b5565b60006005600087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154036132e2576000925050506134b5565b6000805b6002805490508110156133e957600060028281548110613309576133086144c9565b5b90600052602060002001549050600060076000838152602001908152602001600020549050600060086000848152602001908152602001600020549050868311156133d35760008183600560008e815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546133b0919061465b565b6133ba919061462a565b90506133cf81876139b990919063ffffffff16565b9550505b50505080806133e190614acc565b9150506132e6565b50806005600088815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201541061345057600093505050506134b5565b6005600087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154816134af91906145c7565b93505050505b92915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613549576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613540906142b8565b60405180910390fd5b6135516107f4565b8210613592576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135899061443d565b60405180910390fd5b80600183815481106135a7576135a66144c9565b5b90600052602060002090600b0201600a0160006101000a81548160ff0219169083151502179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613661576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613658906142b8565b60405180910390fd5b6136696107f4565b82106136aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136a19061443d565b60405180910390fd5b6000600183815481106136c0576136bf6144c9565b5b90600052602060002090600b020160030154111561374157600182815481106136ec576136eb6144c9565b5b90600052602060002090600b020160070154811115613740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161373790614bf2565b60405180910390fd5b5b8060018381548110613756576137556144c9565b5b90600052602060002090600b0201600701819055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146137fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f4906142b8565b60405180910390fd5b6138056107f4565b8210613846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383d9061443d565b60405180910390fd5b6001828154811061385a576138596144c9565b5b90600052602060002090600b0201600301548110156138ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138a590614c84565b60405180910390fd5b80600183815481106138c3576138c26144c9565b5b90600052602060002090600b0201600201819055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461396a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613961906142b8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167fb1eb34684306bcea7f9ed508931dc13b5993c8fdd00fe65c2e4680ae2610a70160405160405180910390a26139b681613a61565b50565b60008082846139c89190614527565b905083811015613a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a0490614cf0565b60405180910390fd5b8091505092915050565b6000613a5983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613b8d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ac790614d5c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000838311158290613bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bcc9190614dea565b60405180910390fd5b5060008385613be491906145c7565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c3082613c05565b9050919050565b613c4081613c25565b8114613c4b57600080fd5b50565b600081359050613c5d81613c37565b92915050565b600060208284031215613c7957613c78613bfb565b5b6000613c8784828501613c4e565b91505092915050565b60008115159050919050565b613ca581613c90565b82525050565b6000602082019050613cc06000830184613c9c565b92915050565b6000819050919050565b613cd981613cc6565b82525050565b6000602082019050613cf46000830184613cd0565b92915050565b613d0381613cc6565b8114613d0e57600080fd5b50565b600081359050613d2081613cfa565b92915050565b600060208284031215613d3c57613d3b613bfb565b5b6000613d4a84828501613d11565b91505092915050565b60008060408385031215613d6a57613d69613bfb565b5b6000613d7885828601613d11565b9250506020613d8985828601613c4e565b9150509250929050565b613d9c81613c25565b82525050565b600061018082019050613db8600083018f613d93565b613dc5602083018e613d93565b613dd2604083018d613cd0565b613ddf606083018c613cd0565b613dec608083018b613cd0565b613df960a083018a613cd0565b613e0660c0830189613cd0565b613e1360e0830188613cd0565b613e21610100830187613cd0565b613e2f610120830186613cd0565b613e3d610140830185613c9c565b613e4b610160830184613c9c565b9d9c50505050505050505050505050565b60008060408385031215613e7357613e72613bfb565b5b6000613e8185828601613d11565b9250506020613e9285828601613d11565b9150509250929050565b60008060408385031215613eb357613eb2613bfb565b5b6000613ec185828601613c4e565b9250506020613ed285828601613d11565b9150509250929050565b613ee581613c90565b8114613ef057600080fd5b50565b600081359050613f0281613edc565b92915050565b60008060408385031215613f1f57613f1e613bfb565b5b6000613f2d85828601613d11565b9250506020613f3e85828601613ef3565b9150509250929050565b6000806000806000806000806000806101408b8d031215613f6c57613f6b613bfb565b5b6000613f7a8d828e01613c4e565b9a50506020613f8b8d828e01613c4e565b9950506040613f9c8d828e01613d11565b9850506060613fad8d828e01613d11565b9750506080613fbe8d828e01613d11565b96505060a0613fcf8d828e01613d11565b95505060c0613fe08d828e01613d11565b94505060e0613ff18d828e01613d11565b9350506101006140038d828e01613ef3565b9250506101206140158d828e01613ef3565b9150509295989b9194979a5092959850565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6140758261402c565b810181811067ffffffffffffffff821117156140945761409361403d565b5b80604052505050565b60006140a7613bf1565b90506140b3828261406c565b919050565b600067ffffffffffffffff8211156140d3576140d261403d565b5b602082029050602081019050919050565b600080fd5b60006140fc6140f7846140b8565b61409d565b9050808382526020820190506020840283018581111561411f5761411e6140e4565b5b835b8181101561414857806141348882613c4e565b845260208401935050602081019050614121565b5050509392505050565b600082601f83011261416757614166614027565b5b81356141778482602086016140e9565b91505092915050565b6000806040838503121561419757614196613bfb565b5b60006141a585828601613d11565b925050602083013567ffffffffffffffff8111156141c6576141c5613c00565b5b6141d285828601614152565b9150509250929050565b60006020820190506141f16000830184613d93565b92915050565b600060608201905061420c6000830186613cd0565b6142196020830185613cd0565b6142266040830184613cd0565b949350505050565b60006020828403121561424457614243613bfb565b5b600061425284828501613ef3565b91505092915050565b600082825260208201905092915050565b7f4e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b60006142a260098361425b565b91506142ad8261426c565b602082019050919050565b600060208201905081810360008301526142d181614295565b9050919050565b6000815190506142e781613cfa565b92915050565b60006020828403121561430357614302613bfb565b5b6000614311848285016142d8565b91505092915050565b600060408201905061432f6000830185613d93565b61433c6020830184613cd0565b9392505050565b60008151905061435281613edc565b92915050565b60006020828403121561436e5761436d613bfb565b5b600061437c84828501614343565b91505092915050565b7f50726f63657373206973206c6f636b6564000000000000000000000000000000600082015250565b60006143bb60118361425b565b91506143c682614385565b602082019050919050565b600060208201905081810360008301526143ea816143ae565b9050919050565b7f496e76616c696420706f6f6c2049440000000000000000000000000000000000600082015250565b6000614427600f8361425b565b9150614432826143f1565b602082019050919050565b600060208201905081810360008301526144568161441a565b9050919050565b7f596f7520646f6e2774206861766520616e79207374616b656420746f6b656e73600082015250565b600061449360208361425b565b915061449e8261445d565b602082019050919050565b600060208201905081810360008301526144c281614486565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061453282613cc6565b915061453d83613cc6565b9250828201905080821115614555576145546144f8565b5b92915050565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b6000614591600f8361425b565b915061459c8261455b565b602082019050919050565b600060208201905081810360008301526145c081614584565b9050919050565b60006145d282613cc6565b91506145dd83613cc6565b92508282039050818111156145f5576145f46144f8565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061463582613cc6565b915061464083613cc6565b9250826146505761464f6145fb565b5b828204905092915050565b600061466682613cc6565b915061467183613cc6565b925082820261467f81613cc6565b91508282048414831517614696576146956144f8565b5b5092915050565b7f506f6f6c206973206e6f74206163746976650000000000000000000000000000600082015250565b60006146d360128361425b565b91506146de8261469d565b602082019050919050565b60006020820190508181036000830152614702816146c6565b9050919050565b7f416d6f756e74206973206c657373207468616e206d696e20636f6e747269627560008201527f74696f6e00000000000000000000000000000000000000000000000000000000602082015250565b600061476560248361425b565b915061477082614709565b604082019050919050565b6000602082019050818103600083015261479481614758565b9050919050565b7f5374616b696e672065786365656473206d617820706f6f6c2073697a65000000600082015250565b60006147d1601d8361425b565b91506147dc8261479b565b602082019050919050565b60006020820190508181036000830152614800816147c4565b9050919050565b7f4d617820436f6e747269627574696f6e20657863656564730000000000000000600082015250565b600061483d60188361425b565b915061484882614807565b602082019050919050565b6000602082019050818103600083015261486c81614830565b9050919050565b7f596f7520617265206e6f742077686974656c697374656420666f72207468697360008201527f20706f6f6c000000000000000000000000000000000000000000000000000000602082015250565b60006148cf60258361425b565b91506148da82614873565b604082019050919050565b600060208201905081810360008301526148fe816148c2565b9050919050565b600060608201905061491a6000830186613d93565b6149276020830185613d93565b6149346040830184613cd0565b949350505050565b7f5472616e736665722046726f6d206661696c65642e20506c656173652061707060008201527f726f76652074686520746f6b656e000000000000000000000000000000000000602082015250565b6000614998602e8361425b565b91506149a38261493c565b604082019050919050565b600060208201905081810360008301526149c78161498b565b9050919050565b7f43616e6e6f74206368616e6765206c6f636b2074696d6520616674657220706560008201527f6f706c652073746172746564207374616b696e67000000000000000000000000602082015250565b6000614a2a60348361425b565b9150614a35826149ce565b604082019050919050565b60006020820190508181036000830152614a5981614a1d565b9050919050565b7f43616e20616464206f6e6c792032303020776c20617420612074696d65000000600082015250565b6000614a96601d8361425b565b9150614aa182614a60565b602082019050919050565b60006020820190508181036000830152614ac581614a89565b9050919050565b6000614ad782613cc6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614b0957614b086144f8565b5b600182019050919050565b600081905092915050565b50565b6000614b2f600083614b14565b9150614b3a82614b1f565b600082019050919050565b6000614b5082614b22565b9150819050919050565b7f596f752063616e277420696e6372656173652074686520656d657267656e637960008201527f2066656573207768656e2070656f706c652073746172746564207374616b696e60208201527f6700000000000000000000000000000000000000000000000000000000000000604082015250565b6000614bdc60418361425b565b9150614be782614b5a565b606082019050919050565b60006020820190508181036000830152614c0b81614bcf565b9050919050565b7f43616e6e6f742072656475636520746865206d61782073697a652062656c6f7760008201527f207468652063757272656e7420706f6f6c2073697a6500000000000000000000602082015250565b6000614c6e60368361425b565b9150614c7982614c12565b604082019050919050565b60006020820190508181036000830152614c9d81614c61565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614cda601b8361425b565b9150614ce582614ca4565b602082019050919050565b60006020820190508181036000830152614d0981614ccd565b9050919050565b7f4f776e65722063616e206e6f7420626520300000000000000000000000000000600082015250565b6000614d4660128361425b565b9150614d5182614d10565b602082019050919050565b60006020820190508181036000830152614d7581614d39565b9050919050565b600081519050919050565b60005b83811015614da5578082015181840152602081019050614d8a565b60008484015250505050565b6000614dbc82614d7c565b614dc6818561425b565b9350614dd6818560208601614d87565b614ddf8161402c565b840191505092915050565b60006020820190508181036000830152614e048184614db1565b90509291505056fea2646970667358221220ce9cbeae91608c56d4a32acf5d86ed6190848b1d4d2350711476243ca98caf2864736f6c63430008120033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c806375c93bb91161011a578063a34b0f76116100ad578063bd095c9e1161007c578063bd095c9e146105b3578063e2771361146105e3578063e27f7271146105ff578063ea0edf781461061b578063f2fde38b14610637576101fb565b8063a34b0f761461052d578063a569e3671461054b578063a7a93ea914610567578063ba82c89714610597576101fb565b80638da5cb5b116100e95780638da5cb5b1461048f57806393f1a40b146104ad57806394cab519146104df578063a0ef91df1461050f576101fb565b806375c93bb91461041f57806376f263981461043b5780638aa1e44e146104575780638b20e52a14610473576101fb565b80633670cc1711610192578063556ada4711610161578063556ada47146103ad57806357fafbf2146103c9578063608e4dd0146103f9578063715018a614610415576101fb565b80633670cc171461033d5780633b7b618814610359578063459f40e3146103755780635312ea8e14610391576101fb565b80631526fe27116101ce5780631526fe271461029a5780632649a774146102d557806328eb423f146103055780632bce9e7b14610321576101fb565b8063047e408614610200578063081e3eda146102305780630962ef791461024e5780630f00f3bd1461026a575b600080fd5b61021a60048036038101906102159190613c63565b610653565b6040516102279190613cab565b60405180910390f35b6102386107f4565b6040516102459190613cdf565b60405180910390f35b61026860048036038101906102639190613d26565b610801565b005b610284600480360381019061027f9190613d53565b610bc8565b6040516102919190613cab565b60405180910390f35b6102b460048036038101906102af9190613d26565b610bf7565b6040516102cc9c9b9a99989796959493929190613da2565b60405180910390f35b6102ef60048036038101906102ea9190613d53565b610cc1565b6040516102fc9190613cdf565b60405180910390f35b61031f600480360381019061031a9190613e5c565b610e29565b005b61033b60048036038101906103369190613e9c565b610f2e565b005b61035760048036038101906103529190613f08565b61106d565b005b610373600480360381019061036e9190613e5c565b611185565b005b61038f600480360381019061038a9190613e5c565b61186f565b005b6103ab60048036038101906103a69190613d26565b6119dc565b005b6103c760048036038101906103c29190613e5c565b611e56565b005b6103e360048036038101906103de9190613d26565b611f5b565b6040516103f09190613cdf565b60405180910390f35b610413600480360381019061040e9190613d26565b611f73565b005b61041d612618565b005b61043960048036038101906104349190613e5c565b61274c565b005b61045560048036038101906104509190613f48565b6128ad565b005b610471600480360381019061046c9190614180565b612b1a565b005b61048d60048036038101906104889190613e5c565b612ce8565b005b610497612ded565b6040516104a491906141dc565b60405180910390f35b6104c760048036038101906104c29190613d53565b612e16565b6040516104d6939291906141f7565b60405180910390f35b6104f960048036038101906104f49190613d26565b612e4d565b6040516105069190613cdf565b60405180910390f35b610517612e65565b6040516105249190613cab565b60405180910390f35b610535612f6f565b6040516105429190613cdf565b60405180910390f35b6105656004803603810190610560919061422e565b612f75565b005b610581600480360381019061057c9190613d26565b613020565b60405161058e9190613cdf565b60405180910390f35b6105b160048036038101906105ac9190613e9c565b613044565b005b6105cd60048036038101906105c89190613d53565b613183565b6040516105da9190613cdf565b60405180910390f35b6105fd60048036038101906105f89190613f08565b6134bb565b005b61061960048036038101906106149190613e5c565b6135d3565b005b61063560048036038101906106309190613e5c565b61376f565b005b610651600480360381019061064c9190613c63565b6138dc565b005b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106db906142b8565b60405180910390fd5b600082905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161072491906141dc565b602060405180830381865afa158015610741573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076591906142ed565b905060008273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016107a492919061431a565b6020604051808303816000875af11580156107c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e79190614358565b9050809350505050919050565b6000600180549050905090565b600360009054906101000a900460ff1615610851576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610848906143d1565b60405180910390fd5b6001600360006101000a81548160ff0219169083151502179055506108746107f4565b81106108b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ac9061443d565b60405180910390fd5b60006005600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541161094b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610942906144a9565b60405180910390fd5b60006005600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154116109e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d8906144a9565b60405180910390fd5b6000600182815481106109f7576109f66144c9565b5b90600052602060002090600b020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008190506000610a3c8433613183565b9050806005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002016000828254610aa19190614527565b925050819055508060018581548110610abd57610abc6144c9565b5b90600052602060002090600b02016009016000828254610add9190614527565b9250508190555060008273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401610b2192919061431a565b6020604051808303816000875af1158015610b40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b649190614358565b905080610ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9d906145a7565b60405180910390fd5b505050506000600360006101000a81548160ff02191690831515021790555050565b60066020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60018181548110610c0757600080fd5b90600052602060002090600b02016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201549080600301549080600401549080600501549080600601549080600701549080600801549080600901549080600a0160009054906101000a900460ff169080600a0160019054906101000a900460ff1690508c565b6000610ccb6107f4565b8310610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d039061443d565b60405180910390fd5b6000620151806005600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015442610d7191906145c7565b610d7b919061462a565b90506000620591c88260018781548110610d9857610d976144c9565b5b90600052602060002090600b0201600601546005600089815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610e08919061465b565b610e12919061465b565b610e1c919061462a565b9050809250505092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eae906142b8565b60405180910390fd5b610ebf6107f4565b8210610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef79061443d565b60405180910390fd5b8060018381548110610f1557610f146144c9565b5b90600052602060002090600b0201600601819055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb3906142b8565b60405180910390fd5b610fc46107f4565b8110611005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffc9061443d565b60405180910390fd5b816001828154811061101a576110196144c9565b5b90600052602060002090600b020160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f2906142b8565b60405180910390fd5b6111036107f4565b8210611144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113b9061443d565b60405180910390fd5b8060018381548110611159576111586144c9565b5b90600052602060002090600b0201600a0160016101000a81548160ff0219169083151502179055505050565b600360009054906101000a900460ff16156111d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cc906143d1565b60405180910390fd5b6001600360006101000a81548160ff0219169083151502179055506111f86107f4565b8210611239576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112309061443d565b60405180910390fd5b6001828154811061124d5761124c6144c9565b5b90600052602060002090600b0201600a0160019054906101000a900460ff166112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a2906146e9565b60405180910390fd5b611336600183815481106112c2576112c16144c9565b5b90600052602060002090600b0201600501546005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546139b990919063ffffffff16565b811015611378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136f9061477b565b60405180910390fd5b6001828154811061138c5761138b6144c9565b5b90600052602060002090600b0201600201546113d682600185815481106113b6576113b56144c9565b5b90600052602060002090600b0201600301546139b990919063ffffffff16565b1115611417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140e906147e7565b60405180910390fd5b6001828154811061142b5761142a6144c9565b5b90600052602060002090600b0201600401546114a3826005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546139b990919063ffffffff16565b11156114e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114db90614853565b60405180910390fd5b60001515600183815481106114fc576114fb6144c9565b5b90600052602060002090600b0201600a0160009054906101000a900460ff161515036115c0576006600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166115bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b6906148e5565b60405180910390fd5b5b60006115cc8333613183565b11156115dc576115db82610801565b5b6000600183815481106115f2576115f16144c9565b5b90600052602060002090600b020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600081905060008173ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b815260040161166a93929190614905565b6020604051808303816000875af1158015611689573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ad9190614358565b9050806116ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e6906149ae565b60405180910390fd5b6117278460018781548110611707576117066144c9565b5b90600052602060002090600b0201600301546139b990919063ffffffff16565b6001868154811061173b5761173a6144c9565b5b90600052602060002090600b02016003018190555060004290506117bb6005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154866139b990919063ffffffff16565b945060006040518060600160405280878152602001838152602001828152506005600089815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015590505050505050506000600360006101000a81548160ff0219169083151502179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f4906142b8565b60405180910390fd5b6119056107f4565b8210611946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193d9061443d565b60405180910390fd5b60006001838154811061195c5761195b6144c9565b5b90600052602060002090600b020160030154146119ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a590614a40565b60405180910390fd5b80600183815481106119c3576119c26144c9565b5b90600052602060002090600b0201600801819055505050565b600360009054906101000a900460ff1615611a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a23906143d1565b60405180910390fd5b6001600360006101000a81548160ff021916908315150217905550611a4f6107f4565b8110611a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a879061443d565b60405180910390fd5b60006005600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411611b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1d906144a9565b60405180910390fd5b60006005600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015411611bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb3906144a9565b60405180910390fd5b600060018281548110611bd257611bd16144c9565b5b90600052602060002090600b020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600081905060006005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154905060006005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550611cf48160018681548110611cd457611cd36144c9565b5b90600052602060002090600b020160030154613a1790919063ffffffff16565b60018581548110611d0857611d076144c9565b5b90600052602060002090600b0201600301819055506000611d6f6103e860018781548110611d3957611d386144c9565b5b90600052602060002090600b02016007015484611d56919061465b565b611d60919061462a565b83613a1790919063ffffffff16565b905060008373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401611dae92919061431a565b6020604051808303816000875af1158015611dcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df19190614358565b905080611e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2a906145a7565b60405180910390fd5b50505050506000600360006101000a81548160ff02191690831515021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edb906142b8565b60405180910390fd5b611eec6107f4565b8210611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f249061443d565b60405180910390fd5b8060018381548110611f4257611f416144c9565b5b90600052602060002090600b0201600401819055505050565b60076020528060005260406000206000915090505481565b600360009054906101000a900460ff1615611fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fba906143d1565b60405180910390fd5b6001600360006101000a81548160ff021916908315150217905550611fe66107f4565b8110612027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201e9061443d565b60405180910390fd5b60006005600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154116120bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b4906144a9565b60405180910390fd5b60006005600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015411612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a906144a9565b60405180910390fd5b600060018281548110612169576121686144c9565b5b90600052602060002090600b020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008190506000600184815481106121b8576121b76144c9565b5b90600052602060002090600b020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600081905060006005600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154905060006122558733613183565b905060006122638833610cc1565b905081600560008a815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008282546122c89190614527565b9250508190555061235a600560008a815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460018a8154811061233a576123396144c9565b5b90600052602060002090600b020160030154613a1790919063ffffffff16565b6001898154811061236e5761236d6144c9565b5b90600052602060002090600b0201600301819055508160018981548110612398576123976144c9565b5b90600052602060002090600b020160090160008282546123b89190614527565b925050819055506000600560008a815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555060008673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33866040518363ffffffff1660e01b815260040161245592919061431a565b6020604051808303816000875af1158015612474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124989190614358565b905060008773ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b81526004016124d792919061431a565b6020604051808303816000875af11580156124f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251a9190614358565b905060008673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33876040518363ffffffff1660e01b815260040161255992919061431a565b6020604051808303816000875af1158015612578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259c9190614358565b90508280156125a85750815b80156125b15750805b6125f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e7906145a7565b60405180910390fd5b505050505050505050506000600360006101000a81548160ff02191690831515021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269d906142b8565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a260008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146127da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d1906142b8565b60405180910390fd5b60024290806001815401808255809150506001900390600052602060002001600090919091909150558060076000428152602001908152602001600020819055506001828154811061282f5761282e6144c9565b5b90600052602060002090600b020160030154600860004281526020019081526020016000208190555060006001838154811061286e5761286d6144c9565b5b90600052602060002090600b020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600081905050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461293b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612932906142b8565b60405180910390fd5b60016040518061018001604052808c73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020016000815260200189815260200187815260200186815260200188815260200185815260200160008152602001841515815260200183151581525090806001815401808255809150506001900390600052602060002090600b020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a0160006101000a81548160ff02191690831515021790555061016082015181600a0160016101000a81548160ff021916908315150217905550505050505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9f906142b8565b60405180910390fd5b612bb06107f4565b8210612bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be89061443d565b60405180910390fd5b60008151905060c8811115612c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3290614aac565b60405180910390fd5b60005b81811015612ce2576000838281518110612c5b57612c5a6144c9565b5b6020026020010151905060016006600087815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080612cda90614acc565b915050612c3e565b50505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6d906142b8565b60405180910390fd5b612d7e6107f4565b8210612dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db69061443d565b60405180910390fd5b8060018381548110612dd457612dd36144c9565b5b90600052602060002090600b0201600501819055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6005602052816000526040600020602052806000526040600020600091509150508060000154908060010154908060020154905083565b60086020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eed906142b8565b60405180910390fd5b600047905060003373ffffffffffffffffffffffffffffffffffffffff1682604051612f2190614b45565b60006040518083038185875af1925050503d8060008114612f5e576040519150601f19603f3d011682016040523d82523d6000602084013e612f63565b606091505b50509050809250505090565b60045481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ffa906142b8565b60405180910390fd5b80600360006101000a81548160ff02191690831515021790555050565b6002818154811061303057600080fd5b906000526020600020016000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146130d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c9906142b8565b60405180910390fd5b6130da6107f4565b811061311b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131129061443d565b60405180910390fd5b81600182815481106131305761312f6144c9565b5b90600052602060002090600b020160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600061318d6107f4565b83106131ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c59061443d565b60405180910390fd5b60006005600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050600062015180824261323891906145c7565b613242919061462a565b905060018581548110613258576132576144c9565b5b90600052602060002090600b02016008015481101561327c576000925050506134b5565b60006005600087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154036132e2576000925050506134b5565b6000805b6002805490508110156133e957600060028281548110613309576133086144c9565b5b90600052602060002001549050600060076000838152602001908152602001600020549050600060086000848152602001908152602001600020549050868311156133d35760008183600560008e815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546133b0919061465b565b6133ba919061462a565b90506133cf81876139b990919063ffffffff16565b9550505b50505080806133e190614acc565b9150506132e6565b50806005600088815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201541061345057600093505050506134b5565b6005600087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154816134af91906145c7565b93505050505b92915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613549576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613540906142b8565b60405180910390fd5b6135516107f4565b8210613592576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135899061443d565b60405180910390fd5b80600183815481106135a7576135a66144c9565b5b90600052602060002090600b0201600a0160006101000a81548160ff0219169083151502179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613661576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613658906142b8565b60405180910390fd5b6136696107f4565b82106136aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136a19061443d565b60405180910390fd5b6000600183815481106136c0576136bf6144c9565b5b90600052602060002090600b020160030154111561374157600182815481106136ec576136eb6144c9565b5b90600052602060002090600b020160070154811115613740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161373790614bf2565b60405180910390fd5b5b8060018381548110613756576137556144c9565b5b90600052602060002090600b0201600701819055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146137fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f4906142b8565b60405180910390fd5b6138056107f4565b8210613846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383d9061443d565b60405180910390fd5b6001828154811061385a576138596144c9565b5b90600052602060002090600b0201600301548110156138ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138a590614c84565b60405180910390fd5b80600183815481106138c3576138c26144c9565b5b90600052602060002090600b0201600201819055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461396a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613961906142b8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167fb1eb34684306bcea7f9ed508931dc13b5993c8fdd00fe65c2e4680ae2610a70160405160405180910390a26139b681613a61565b50565b60008082846139c89190614527565b905083811015613a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a0490614cf0565b60405180910390fd5b8091505092915050565b6000613a5983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613b8d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ac790614d5c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000838311158290613bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bcc9190614dea565b60405180910390fd5b5060008385613be491906145c7565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c3082613c05565b9050919050565b613c4081613c25565b8114613c4b57600080fd5b50565b600081359050613c5d81613c37565b92915050565b600060208284031215613c7957613c78613bfb565b5b6000613c8784828501613c4e565b91505092915050565b60008115159050919050565b613ca581613c90565b82525050565b6000602082019050613cc06000830184613c9c565b92915050565b6000819050919050565b613cd981613cc6565b82525050565b6000602082019050613cf46000830184613cd0565b92915050565b613d0381613cc6565b8114613d0e57600080fd5b50565b600081359050613d2081613cfa565b92915050565b600060208284031215613d3c57613d3b613bfb565b5b6000613d4a84828501613d11565b91505092915050565b60008060408385031215613d6a57613d69613bfb565b5b6000613d7885828601613d11565b9250506020613d8985828601613c4e565b9150509250929050565b613d9c81613c25565b82525050565b600061018082019050613db8600083018f613d93565b613dc5602083018e613d93565b613dd2604083018d613cd0565b613ddf606083018c613cd0565b613dec608083018b613cd0565b613df960a083018a613cd0565b613e0660c0830189613cd0565b613e1360e0830188613cd0565b613e21610100830187613cd0565b613e2f610120830186613cd0565b613e3d610140830185613c9c565b613e4b610160830184613c9c565b9d9c50505050505050505050505050565b60008060408385031215613e7357613e72613bfb565b5b6000613e8185828601613d11565b9250506020613e9285828601613d11565b9150509250929050565b60008060408385031215613eb357613eb2613bfb565b5b6000613ec185828601613c4e565b9250506020613ed285828601613d11565b9150509250929050565b613ee581613c90565b8114613ef057600080fd5b50565b600081359050613f0281613edc565b92915050565b60008060408385031215613f1f57613f1e613bfb565b5b6000613f2d85828601613d11565b9250506020613f3e85828601613ef3565b9150509250929050565b6000806000806000806000806000806101408b8d031215613f6c57613f6b613bfb565b5b6000613f7a8d828e01613c4e565b9a50506020613f8b8d828e01613c4e565b9950506040613f9c8d828e01613d11565b9850506060613fad8d828e01613d11565b9750506080613fbe8d828e01613d11565b96505060a0613fcf8d828e01613d11565b95505060c0613fe08d828e01613d11565b94505060e0613ff18d828e01613d11565b9350506101006140038d828e01613ef3565b9250506101206140158d828e01613ef3565b9150509295989b9194979a5092959850565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6140758261402c565b810181811067ffffffffffffffff821117156140945761409361403d565b5b80604052505050565b60006140a7613bf1565b90506140b3828261406c565b919050565b600067ffffffffffffffff8211156140d3576140d261403d565b5b602082029050602081019050919050565b600080fd5b60006140fc6140f7846140b8565b61409d565b9050808382526020820190506020840283018581111561411f5761411e6140e4565b5b835b8181101561414857806141348882613c4e565b845260208401935050602081019050614121565b5050509392505050565b600082601f83011261416757614166614027565b5b81356141778482602086016140e9565b91505092915050565b6000806040838503121561419757614196613bfb565b5b60006141a585828601613d11565b925050602083013567ffffffffffffffff8111156141c6576141c5613c00565b5b6141d285828601614152565b9150509250929050565b60006020820190506141f16000830184613d93565b92915050565b600060608201905061420c6000830186613cd0565b6142196020830185613cd0565b6142266040830184613cd0565b949350505050565b60006020828403121561424457614243613bfb565b5b600061425284828501613ef3565b91505092915050565b600082825260208201905092915050565b7f4e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b60006142a260098361425b565b91506142ad8261426c565b602082019050919050565b600060208201905081810360008301526142d181614295565b9050919050565b6000815190506142e781613cfa565b92915050565b60006020828403121561430357614302613bfb565b5b6000614311848285016142d8565b91505092915050565b600060408201905061432f6000830185613d93565b61433c6020830184613cd0565b9392505050565b60008151905061435281613edc565b92915050565b60006020828403121561436e5761436d613bfb565b5b600061437c84828501614343565b91505092915050565b7f50726f63657373206973206c6f636b6564000000000000000000000000000000600082015250565b60006143bb60118361425b565b91506143c682614385565b602082019050919050565b600060208201905081810360008301526143ea816143ae565b9050919050565b7f496e76616c696420706f6f6c2049440000000000000000000000000000000000600082015250565b6000614427600f8361425b565b9150614432826143f1565b602082019050919050565b600060208201905081810360008301526144568161441a565b9050919050565b7f596f7520646f6e2774206861766520616e79207374616b656420746f6b656e73600082015250565b600061449360208361425b565b915061449e8261445d565b602082019050919050565b600060208201905081810360008301526144c281614486565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061453282613cc6565b915061453d83613cc6565b9250828201905080821115614555576145546144f8565b5b92915050565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b6000614591600f8361425b565b915061459c8261455b565b602082019050919050565b600060208201905081810360008301526145c081614584565b9050919050565b60006145d282613cc6565b91506145dd83613cc6565b92508282039050818111156145f5576145f46144f8565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061463582613cc6565b915061464083613cc6565b9250826146505761464f6145fb565b5b828204905092915050565b600061466682613cc6565b915061467183613cc6565b925082820261467f81613cc6565b91508282048414831517614696576146956144f8565b5b5092915050565b7f506f6f6c206973206e6f74206163746976650000000000000000000000000000600082015250565b60006146d360128361425b565b91506146de8261469d565b602082019050919050565b60006020820190508181036000830152614702816146c6565b9050919050565b7f416d6f756e74206973206c657373207468616e206d696e20636f6e747269627560008201527f74696f6e00000000000000000000000000000000000000000000000000000000602082015250565b600061476560248361425b565b915061477082614709565b604082019050919050565b6000602082019050818103600083015261479481614758565b9050919050565b7f5374616b696e672065786365656473206d617820706f6f6c2073697a65000000600082015250565b60006147d1601d8361425b565b91506147dc8261479b565b602082019050919050565b60006020820190508181036000830152614800816147c4565b9050919050565b7f4d617820436f6e747269627574696f6e20657863656564730000000000000000600082015250565b600061483d60188361425b565b915061484882614807565b602082019050919050565b6000602082019050818103600083015261486c81614830565b9050919050565b7f596f7520617265206e6f742077686974656c697374656420666f72207468697360008201527f20706f6f6c000000000000000000000000000000000000000000000000000000602082015250565b60006148cf60258361425b565b91506148da82614873565b604082019050919050565b600060208201905081810360008301526148fe816148c2565b9050919050565b600060608201905061491a6000830186613d93565b6149276020830185613d93565b6149346040830184613cd0565b949350505050565b7f5472616e736665722046726f6d206661696c65642e20506c656173652061707060008201527f726f76652074686520746f6b656e000000000000000000000000000000000000602082015250565b6000614998602e8361425b565b91506149a38261493c565b604082019050919050565b600060208201905081810360008301526149c78161498b565b9050919050565b7f43616e6e6f74206368616e6765206c6f636b2074696d6520616674657220706560008201527f6f706c652073746172746564207374616b696e67000000000000000000000000602082015250565b6000614a2a60348361425b565b9150614a35826149ce565b604082019050919050565b60006020820190508181036000830152614a5981614a1d565b9050919050565b7f43616e20616464206f6e6c792032303020776c20617420612074696d65000000600082015250565b6000614a96601d8361425b565b9150614aa182614a60565b602082019050919050565b60006020820190508181036000830152614ac581614a89565b9050919050565b6000614ad782613cc6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614b0957614b086144f8565b5b600182019050919050565b600081905092915050565b50565b6000614b2f600083614b14565b9150614b3a82614b1f565b600082019050919050565b6000614b5082614b22565b9150819050919050565b7f596f752063616e277420696e6372656173652074686520656d657267656e637960008201527f2066656573207768656e2070656f706c652073746172746564207374616b696e60208201527f6700000000000000000000000000000000000000000000000000000000000000604082015250565b6000614bdc60418361425b565b9150614be782614b5a565b606082019050919050565b60006020820190508181036000830152614c0b81614bcf565b9050919050565b7f43616e6e6f742072656475636520746865206d61782073697a652062656c6f7760008201527f207468652063757272656e7420706f6f6c2073697a6500000000000000000000602082015250565b6000614c6e60368361425b565b9150614c7982614c12565b604082019050919050565b60006020820190508181036000830152614c9d81614c61565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614cda601b8361425b565b9150614ce582614ca4565b602082019050919050565b60006020820190508181036000830152614d0981614ccd565b9050919050565b7f4f776e65722063616e206e6f7420626520300000000000000000000000000000600082015250565b6000614d4660128361425b565b9150614d5182614d10565b602082019050919050565b60006020820190508181036000830152614d7581614d39565b9050919050565b600081519050919050565b60005b83811015614da5578082015181840152602081019050614d8a565b60008484015250505050565b6000614dbc82614d7c565b614dc6818561425b565b9350614dd6818560208601614d87565b614ddf8161402c565b840191505092915050565b60006020820190508181036000830152614e048184614db1565b90509291505056fea2646970667358221220ce9cbeae91608c56d4a32acf5d86ed6190848b1d4d2350711476243ca98caf2864736f6c63430008120033

Deployed Bytecode Sourcemap

5073:13115:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17903:282;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6962:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15843:761;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6331:72;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6072:26;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;14090:397;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9578:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9060:196;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9947:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11335:1617;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9264:306;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16648:845;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8192:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6410:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14495:1340;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4550:126;;;:::i;:::-;;10848:386;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7063:789;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10372:468;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10148:216;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4361:79;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6258:66;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;6465:57;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17574:239;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6167:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11242:85;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6105:29;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8832:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12960:1122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9754:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8415:409;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7860:324;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4684:152;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17903:282;17978:4;4502:6;;;;;;;;;;;4488:20;;:10;:20;;;4480:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;17995:12:::1;18018:13;17995:37;;18043:15;18061:5;:15;;;18085:4;18061:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18043:48;;18102:12;18117:5;:14;;;18132:10;18144:7;18117:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18102:50;;18170:7;18163:14;;;;;17903:282:::0;;;:::o;6962:93::-;7005:7;7032:8;:15;;;;7025:22;;6962:93;:::o;15843:761::-;6860:5;;;;;;;;;;;6859:6;6851:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;6906:4;6898:5;;:12;;;;;;;;;;;;;;;;;;15919::::1;:10;:12::i;:::-;15912:4;:19;15903:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;16007:1;15971:8;:14;15980:4;15971:14;;;;;;;;;;;:26;15986:10;15971:26;;;;;;;;;;;;;;;:33;;;:37;15962:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;16107:1;16066:8;:14;16075:4;16066:14;;;;;;;;;;;:26;16081:10;16066:26;;;;;;;;;;;;;;;:38;;;:42;16057:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;16159:27;16189:8;16198:4;16189:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:33;;;;;;;;;;;;16159:63;;16233:18;16262:19;16233:49;;16293:20;16316:34;16333:4;16339:10;16316:16;:34::i;:::-;16293:57;;16405:12;16361:8;:14;16370:4;16361:14;;;;;;;;;;;:26;16376:10;16361:26;;;;;;;;;;;;;;;:40;;;:56;;;;;;;:::i;:::-;;;;;;;;16466:12;16428:8;16437:4;16428:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:34;;;:50;;;;;;;:::i;:::-;;;;;;;;16489:12;16504:11;:20;;;16525:10;16537:12;16504:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16489:61;;16569:7;16561:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;15892:712;;;;6941:5:::0;6933;;:13;;;;;;;;;;;;;;;;;;15843:761;:::o;6331:72::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6072:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14090:397::-;14173:7;14209:12;:10;:12::i;:::-;14202:4;:19;14193:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;14254:16;14329:6;14292:8;:14;14301:4;14292:14;;;;;;;;;;;:21;14307:5;14292:21;;;;;;;;;;;;;;;:33;;;14274:15;:51;;;;:::i;:::-;14273:62;;;;:::i;:::-;14254:81;;14346:20;14437:10;14424:8;14403;14412:4;14403:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:18;;;14371:8;:14;14380:4;14371:14;;;;;;;;;;;:21;14386:5;14371:21;;;;;;;;;;;;;;;:28;;;:50;;;;:::i;:::-;:61;;;;:::i;:::-;14370:78;;;;:::i;:::-;14346:103;;14467:12;14460:19;;;;14090:397;;;;:::o;9578:168::-;4502:6;;;;;;;;;;4488:20;;:10;:20;;;4480:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;9670:12:::1;:10;:12::i;:::-;9663:4;:19;9654:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;9734:4;9713:8;9722:4;9713:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:18;;:25;;;;9578:168:::0;;:::o;9060:196::-;4502:6;;;;;;;;;;4488:20;;:10;:20;;;4480:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;9162:12:::1;:10;:12::i;:::-;9155:4;:19;9146:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;9235:13;9205:8;9214:4;9205:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:27;;;:43;;;;;;;;;;;;;;;;;;9060:196:::0;;:::o;9947:193::-;4502:6;;;;;;;;;;4488:20;;:10;:20;;;4480:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;10050:12:::1;:10;:12::i;:::-;10043:4;:19;10034:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;10121:11;10093:8;10102:4;10093:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:25;;;:39;;;;;;;;;;;;;;;;;;9947:193:::0;;:::o;11335:1617::-;6860:5;;;;;;;;;;;6859:6;6851:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;6906:4;6898:5;;:12;;;;;;;;;;;;;;;;;;11427::::1;:10;:12::i;:::-;11420:4;:19;11411:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;11479:8;11488:4;11479:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:25;;;;;;;;;;;;11470:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;11558:71;11598:8;11607:4;11598:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;;;11559:8;:14;11568:4;11559:14;;;;;;;;;;;:26;11574:10;11559:26;;;;;;;;;;;;;;;:33;;;11558:39;;:71;;;;:::i;:::-;11547:7;:82;;11538:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;11737:8;11746:4;11737:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:26;;;11690:43;11725:7;11690:8;11699:4;11690:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;;;:34;;:43;;;;:::i;:::-;:73;;11681:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;11869:8;11878:4;11869:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;;;11817:48;11857:7;11818:8;:14;11827:4;11818:14;;;;;;;;;;;:26;11833:10;11818:26;;;;;;;;;;;;;;;:33;;;11817:39;;:48;;;;:::i;:::-;:82;;11808:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;11981:5;11954:32;;:8;11963:4;11954:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:23;;;;;;;;;;;;:32;;::::0;11950:151:::1;;12011:18;:24;12030:4;12011:24;;;;;;;;;;;:36;12036:10;12011:36;;;;;;;;;;;;;;;;;;;;;;;;;12002:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;11950:151;12207:1;12170:34;12187:4;12193:10;12170:16;:34::i;:::-;:38;12166:88;;;12224:18;12237:4;12224:12;:18::i;:::-;12166:88;12266:21;12290:8;12299:4;12290:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:27;;;;;;;;;;;;12266:51;;12328:12;12351:13;12328:37;;12376:12;12391:5;:18;;;12410:10;12430:4;12437:7;12391:54;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12376:69;;12465:7;12456:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12569:45;12606:7;12570:8;12579:4;12570:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;;;12569:36;;:45;;;;:::i;:::-;12536:8;12545:4;12536:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;;:78;;;;12625:20;12648:15;12625:38;;12685:46;12697:8;:14;12706:4;12697:14;;;;;;;;;;;:26;12712:10;12697:26;;;;;;;;;;;;;;;:33;;;12685:7;:11;;:46;;;;:::i;:::-;12675:56;;12742:22;12808:136;;;;;;;;12841:7;12808:136;;;;12876:12;12808:136;;;;12918:14;12808:136;;::::0;12779:8:::1;:14;12788:4;12779:14;;;;;;;;;;;:26;12794:10;12779:26;;;;;;;;;;;;;;;:165;;;;;;;;;;;;;;;;;;;;;;;;;;;11400:1552;;;;;6941:5:::0;6933;;:13;;;;;;;;;;;;;;;;;;11335:1617;;:::o;9264:306::-;4502:6;;;;;;;;;;4488:20;;:10;:20;;;4480:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;9369:12:::1;:10;:12::i;:::-;9362:4;:19;9353:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;9455:1;9421:8;9430:4;9421:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;;;:35;9412:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;9553:9;9524:8;9533:4;9524:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:26;;:38;;;;9264:306:::0;;:::o;16648:845::-;6860:5;;;;;;;;;;;6859:6;6851:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;6906:4;6898:5;;:12;;;;;;;;;;;;;;;;;;16729::::1;:10;:12::i;:::-;16722:4;:19;16713:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;16817:1;16781:8;:14;16790:4;16781:14;;;;;;;;;;;:26;16796:10;16781:26;;;;;;;;;;;;;;;:33;;;:37;16772:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;16917:1;16876:8;:14;16885:4;16876:14;;;;;;;;;;;:26;16891:10;16876:26;;;;;;;;;;;;;;;:38;;;:42;16867:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;16969:21;16993:8;17002:4;16993:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:27;;;;;;;;;;;;16969:51;;17031:12;17054:13;17031:37;;17079:15;17097:8;:14;17106:4;17097:14;;;;;;;;;;;:26;17112:10;17097:26;;;;;;;;;;;;;;;:33;;;17079:51;;17177:1;17141:8;:14;17150:4;17141:14;;;;;;;;;;;:26;17156:10;17141:26;;;;;;;;;;;;;;;:33;;:37;;;;17222:45;17259:7;17223:8;17232:4;17223:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;;;17222:36;;:45;;;;:::i;:::-;17189:8;17198:4;17189:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;;:78;;;;17280:25;17308:60;17363:4;17331:8;17340:4;17331:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;;17321:7;:38;;;;:::i;:::-;17320:47;;;;:::i;:::-;17308:7;:11;;:60;;;;:::i;:::-;17280:88;;17379:12;17394:5;:14;;;17409:10;17421:17;17394:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17379:60;;17458:7;17450:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;16702:791;;;;;6941:5:::0;6933;;:13;;;;;;;;;;;;;;;;;;16648:845;:::o;8192:215::-;4502:6;;;;;;;;;;4488:20;;:10;:20;;;4480:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;8307:12:::1;:10;:12::i;:::-;8300:4;:19;8291:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;8383:16;8350:8;8359:4;8350:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;;:49;;;;8192:215:::0;;:::o;6410:48::-;;;;;;;;;;;;;;;;;:::o;14495:1340::-;6860:5;;;;;;;;;;;6859:6;6851:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;6906:4;6898:5;;:12;;;;;;;;;;;;;;;;;;14572::::1;:10;:12::i;:::-;14565:4;:19;14556:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;14660:1;14624:8;:14;14633:4;14624:14;;;;;;;;;;;:26;14639:10;14624:26;;;;;;;;;;;;;;;:33;;;:37;14615:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;14760:1;14719:8;:14;14728:4;14719:14;;;;;;;;;;;:26;14734:10;14719:26;;;;;;;;;;;;;;;:38;;;:42;14710:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;14820:21;14844:8;14853:4;14844:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:27;;;;;;;;;;;;14820:51;;14882:12;14905:13;14882:37;;14930:27;14960:8;14969:4;14960:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:33;;;;;;;;;;;;14930:63;;15004:18;15033:19;15004:49;;15064:15;15082:8;:14;15091:4;15082:14;;;;;;;;;;;:26;15097:10;15082:26;;;;;;;;;;;;;;;:33;;;15064:51;;15128:20;15151:34;15168:4;15174:10;15151:16;:34::i;:::-;15128:57;;15196:21;15220:40;15243:4;15249:10;15220:22;:40::i;:::-;15196:64;;15315:12;15271:8;:14;15280:4;15271:14;;;;;;;;;;;:26;15286:10;15271:26;;;;;;;;;;;;;;;:40;;;:56;;;;;;;:::i;:::-;;;;;;;;15371:71;15408:8;:14;15417:4;15408:14;;;;;;;;;;;:26;15423:10;15408:26;;;;;;;;;;;;;;;:33;;;15372:8;15381:4;15372:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;;;15371:36;;:71;;;;:::i;:::-;15338:8;15347:4;15338:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;;:104;;;;15491:12;15453:8;15462:4;15453:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:34;;;:50;;;;;;;:::i;:::-;;;;;;;;15550:1;15514:8;:14;15523:4;15514:14;;;;;;;;;;;:26;15529:10;15514:26;;;;;;;;;;;;;;;:33;;:37;;;;15564:13;15580:5;:14;;;15595:10;15607:7;15580:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15564:51;;15626:13;15642:5;:14;;;15657:10;15669:13;15642:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15626:57;;15694:13;15710:11;:20;;;15731:10;15743:12;15710:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15694:62;;15775:8;:20;;;;;15787:8;15775:20;:32;;;;;15799:8;15775:32;15767:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;14545:1290;;;;;;;;;;6941:5:::0;6933;;:13;;;;;;;;;;;;;;;;;;14495:1340;:::o;4550:126::-;4502:6;;;;;;;;;;4488:20;;:10;:20;;;4480:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;4631:6:::1;::::0;::::1;;;;;;;;4612:26;;;;;;;;;;;;4666:1;4649:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;4550:126::o:0;10848:386::-;4502:6;;;;;;;;;;4488:20;;:10;:20;;;4480:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;10927:11:::1;10944:15;10927:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11003:7;10971:12;:29;10984:15;10971:29;;;;;;;;;;;:39;;;;11062:8;11071:4;11062:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;;;11021:21;:38;11043:15;11021:38;;;;;;;;;;;:71;;;;11103:27;11133:8;11142:4;11133:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:33;;;;;;;;;;;;11103:63;;11177:18;11206:19;11177:49;;10916:318;;10848:386:::0;;:::o;7063:789::-;4502:6;;;;;;;;;;4488:20;;:10;:20;;;4480:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;7327:8:::1;7341:502;;;;;;;;7379:13;7341:502;;;;;;7427:19;7341:502;;;;;;7474:12;7341:502;;;;7518:1;7341:502;;;;7599:16;7341:502;;;;7551:16;7341:502;;;;7635:4;7341:502;;;;7669:13;7341:502;;;;7710:12;7341:502;;;;7830:1;7341:502;;;;7747:9;7341:502;;;;;;7783:11;7341:502;;;;::::0;7327:517:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7063:789:::0;;;;;;;;;;:::o;10372:468::-;4502:6;;;;;;;;;;4488:20;;:10;:20;;;4480:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;10492:12:::1;:10;:12::i;:::-;10485:4;:19;10476:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;10535:14;10552:19;:26;10535:43;;10607:3;10598:6;:12;;10589:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;10660:9;10655:178;10679:6;10675:1;:10;10655:178;;;10706:25;10734:19;10754:1;10734:22;;;;;;;;:::i;:::-;;;;;;;;10706:50;;10817:4;10771:18;:24;10790:4;10771:24;;;;;;;;;;;:43;10796:17;10771:43;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;10691:142;10687:3;;;;;:::i;:::-;;;;10655:178;;;;10465:375;10372:468:::0;;:::o;10148:216::-;4502:6;;;;;;;;;;4488:20;;:10;:20;;;4480:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;10264:12:::1;:10;:12::i;:::-;10257:4;:19;10248:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;10340:16;10307:8;10316:4;10307:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;;:49;;;;10148:216:::0;;:::o;4361:79::-;4399:7;4426:6;;;;;;;;;;;4419:13;;4361:79;:::o;6258:66::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6465:57::-;;;;;;;;;;;;;;;;;:::o;17574:239::-;17626:4;4502:6;;;;;;;;;;;4488:20;;:10;:20;;;4480:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;17643:15:::1;17661:21;17643:39;;17694:12;17720:10;17712:24;;17758:7;17712:68;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17693:87;;;17798:7;17791:14;;;;17574:239:::0;:::o;6167:38::-;;;;:::o;11242:85::-;4502:6;;;;;;;;;;4488:20;;:10;:20;;;4480:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;11314:5:::1;11306;;:13;;;;;;;;;;;;;;;;;;11242:85:::0;:::o;6105:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8832:220::-;4502:6;;;;;;;;;;4488:20;;:10;:20;;;4480:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;8946:12:::1;:10;:12::i;:::-;8939:4;:19;8930:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;9025:19;8989:8;8998:4;8989:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:33;;;:55;;;;;;;;;;;;;;;;;;8832:220:::0;;:::o;12960:1122::-;13037:7;13073:12;:10;:12::i;:::-;13066:4;:19;13057:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;13118:20;13141:8;:14;13150:4;13141:14;;;;;;;;;;;:21;13156:5;13141:21;;;;;;;;;;;;;;;:33;;;13118:56;;13185:16;13239:6;13223:12;13205:15;:30;;;;:::i;:::-;13204:41;;;;:::i;:::-;13185:60;;13270:8;13279:4;13270:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:26;;;13259:8;:37;13256:50;;;13305:1;13298:8;;;;;;13256:50;13353:1;13321:8;:14;13330:4;13321:14;;;;;;;;;;;:21;13336:5;13321:21;;;;;;;;;;;;;;;:28;;;:33;13317:47;;13363:1;13356:8;;;;;;13317:47;13377:24;13421:9;13416:507;13440:11;:18;;;;13436:1;:22;13416:507;;;13479:19;13501:11;13513:1;13501:14;;;;;;;;:::i;:::-;;;;;;;;;;13479:36;;13530:21;13554:12;:25;13567:11;13554:25;;;;;;;;;;;;13530:49;;13594:30;13627:21;:34;13649:11;13627:34;;;;;;;;;;;;13594:67;;13694:12;13680:11;:26;13676:236;;;13726:20;13800:22;13782:13;13751:8;:14;13760:4;13751:14;;;;;;;;;;;:21;13766:5;13751:21;;;;;;;;;;;;;;;:28;;;:44;;;;:::i;:::-;13750:73;;;;:::i;:::-;13726:98;;13862:34;13883:12;13862:16;:20;;:34;;;;:::i;:::-;13843:53;;13707:205;13676:236;13464:459;;;13460:3;;;;;:::i;:::-;;;;13416:507;;;;13976:16;13937:8;:14;13946:4;13937:14;;;;;;;;;;;:21;13952:5;13937:21;;;;;;;;;;;;;;;:35;;;:55;13933:69;;14001:1;13994:8;;;;;;;13933:69;14039:8;:14;14048:4;14039:14;;;;;;;;;;;:21;14054:5;14039:21;;;;;;;;;;;;;;;:35;;;14020:16;:54;;;;:::i;:::-;14013:61;;;;;12960:1122;;;;;:::o;9754:185::-;4502:6;;;;;;;;;;4488:20;;:10;:20;;;4480:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;9853:12:::1;:10;:12::i;:::-;9846:4;:19;9837:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;9922:9;9896:8;9905:4;9896:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:23;;;:35;;;;;;;;;;;;;;;;;;9754:185:::0;;:::o;8415:409::-;4502:6;;;;;;;;;;4488:20;;:10;:20;;;4480:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;8527:12:::1;:10;:12::i;:::-;8520:4;:19;8511:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;8607:1;8574:8;8583:4;8574:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;;;:34;8570:191;;;8651:8;8660:4;8651:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;;8633:14;:46;;8624:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;8570:191;8802:14;8771:8;8780:4;8771:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;:45;;;;8415:409:::0;;:::o;7860:324::-;4502:6;;;;;;;;;;4488:20;;:10;:20;;;4480:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;7967:12:::1;:10;:12::i;:::-;7960:4;:19;7951:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;8035:8;8044:4;8035:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;;;8019:12;:46;;8010:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;8164:12;8135:8;8144:4;8135:14;;;;;;;;:::i;:::-;;;;;;;;;;;;:26;;:41;;;;7860:324:::0;;:::o;4684:152::-;4502:6;;;;;;;;;;4488:20;;:10;:20;;;4480:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;4780:8:::1;4762:27;;;;;;;;;;;;4800:28;4819:8;4800:18;:28::i;:::-;4684:152:::0;:::o;1472:181::-;1530:7;1550:9;1566:1;1562;:5;;;;:::i;:::-;1550:17;;1591:1;1586;:6;;1578:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1644:1;1637:8;;;1472:181;;;;:::o;1661:136::-;1719:7;1746:43;1750:1;1753;1746:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1739:50;;1661:136;;;;:::o;4844:222::-;4938:1;4918:22;;:8;:22;;;4910:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5021:8;4992:38;;5013:6;;;;;;;;;;4992:38;;;;;;;;;;;;5050:8;5041:6;;:17;;;;;;;;;;;;;;;;;;4844:222;:::o;1805:226::-;1925:7;1958:1;1953;:6;;1961:12;1945:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1985:9;2001:1;1997;:5;;;;:::i;:::-;1985:17;;2022:1;2015:8;;;1805:226;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:90::-;1210:7;1253:5;1246:13;1239:21;1228:32;;1176:90;;;:::o;1272:109::-;1353:21;1368:5;1353:21;:::i;:::-;1348:3;1341:34;1272:109;;:::o;1387:210::-;1474:4;1512:2;1501:9;1497:18;1489:26;;1525:65;1587:1;1576:9;1572:17;1563:6;1525:65;:::i;:::-;1387:210;;;;:::o;1603:77::-;1640:7;1669:5;1658:16;;1603:77;;;:::o;1686:118::-;1773:24;1791:5;1773:24;:::i;:::-;1768:3;1761:37;1686:118;;:::o;1810:222::-;1903:4;1941:2;1930:9;1926:18;1918:26;;1954:71;2022:1;2011:9;2007:17;1998:6;1954:71;:::i;:::-;1810:222;;;;:::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:474::-;2714:6;2722;2771:2;2759:9;2750:7;2746:23;2742:32;2739:119;;;2777:79;;:::i;:::-;2739:119;2897:1;2922:53;2967:7;2958:6;2947:9;2943:22;2922:53;:::i;:::-;2912:63;;2868:117;3024:2;3050:53;3095:7;3086:6;3075:9;3071:22;3050:53;:::i;:::-;3040:63;;2995:118;2646:474;;;;;:::o;3126:118::-;3213:24;3231:5;3213:24;:::i;:::-;3208:3;3201:37;3126:118;;:::o;3250:1421::-;3641:4;3679:3;3668:9;3664:19;3656:27;;3693:71;3761:1;3750:9;3746:17;3737:6;3693:71;:::i;:::-;3774:72;3842:2;3831:9;3827:18;3818:6;3774:72;:::i;:::-;3856;3924:2;3913:9;3909:18;3900:6;3856:72;:::i;:::-;3938;4006:2;3995:9;3991:18;3982:6;3938:72;:::i;:::-;4020:73;4088:3;4077:9;4073:19;4064:6;4020:73;:::i;:::-;4103;4171:3;4160:9;4156:19;4147:6;4103:73;:::i;:::-;4186;4254:3;4243:9;4239:19;4230:6;4186:73;:::i;:::-;4269;4337:3;4326:9;4322:19;4313:6;4269:73;:::i;:::-;4352;4420:3;4409:9;4405:19;4396:6;4352:73;:::i;:::-;4435;4503:3;4492:9;4488:19;4479:6;4435:73;:::i;:::-;4518:68;4581:3;4570:9;4566:19;4556:7;4518:68;:::i;:::-;4596;4659:3;4648:9;4644:19;4634:7;4596:68;:::i;:::-;3250:1421;;;;;;;;;;;;;;;:::o;4677:474::-;4745:6;4753;4802:2;4790:9;4781:7;4777:23;4773:32;4770:119;;;4808:79;;:::i;:::-;4770:119;4928:1;4953:53;4998:7;4989:6;4978:9;4974:22;4953:53;:::i;:::-;4943:63;;4899:117;5055:2;5081:53;5126:7;5117:6;5106:9;5102:22;5081:53;:::i;:::-;5071:63;;5026:118;4677:474;;;;;:::o;5157:::-;5225:6;5233;5282:2;5270:9;5261:7;5257:23;5253:32;5250:119;;;5288:79;;:::i;:::-;5250:119;5408:1;5433:53;5478:7;5469:6;5458:9;5454:22;5433:53;:::i;:::-;5423:63;;5379:117;5535:2;5561:53;5606:7;5597:6;5586:9;5582:22;5561:53;:::i;:::-;5551:63;;5506:118;5157:474;;;;;:::o;5637:116::-;5707:21;5722:5;5707:21;:::i;:::-;5700:5;5697:32;5687:60;;5743:1;5740;5733:12;5687:60;5637:116;:::o;5759:133::-;5802:5;5840:6;5827:20;5818:29;;5856:30;5880:5;5856:30;:::i;:::-;5759:133;;;;:::o;5898:468::-;5963:6;5971;6020:2;6008:9;5999:7;5995:23;5991:32;5988:119;;;6026:79;;:::i;:::-;5988:119;6146:1;6171:53;6216:7;6207:6;6196:9;6192:22;6171:53;:::i;:::-;6161:63;;6117:117;6273:2;6299:50;6341:7;6332:6;6321:9;6317:22;6299:50;:::i;:::-;6289:60;;6244:115;5898:468;;;;;:::o;6372:1629::-;6506:6;6514;6522;6530;6538;6546;6554;6562;6570;6578;6627:3;6615:9;6606:7;6602:23;6598:33;6595:120;;;6634:79;;:::i;:::-;6595:120;6754:1;6779:53;6824:7;6815:6;6804:9;6800:22;6779:53;:::i;:::-;6769:63;;6725:117;6881:2;6907:53;6952:7;6943:6;6932:9;6928:22;6907:53;:::i;:::-;6897:63;;6852:118;7009:2;7035:53;7080:7;7071:6;7060:9;7056:22;7035:53;:::i;:::-;7025:63;;6980:118;7137:2;7163:53;7208:7;7199:6;7188:9;7184:22;7163:53;:::i;:::-;7153:63;;7108:118;7265:3;7292:53;7337:7;7328:6;7317:9;7313:22;7292:53;:::i;:::-;7282:63;;7236:119;7394:3;7421:53;7466:7;7457:6;7446:9;7442:22;7421:53;:::i;:::-;7411:63;;7365:119;7523:3;7550:53;7595:7;7586:6;7575:9;7571:22;7550:53;:::i;:::-;7540:63;;7494:119;7652:3;7679:53;7724:7;7715:6;7704:9;7700:22;7679:53;:::i;:::-;7669:63;;7623:119;7781:3;7808:50;7850:7;7841:6;7830:9;7826:22;7808:50;:::i;:::-;7798:60;;7752:116;7907:3;7934:50;7976:7;7967:6;7956:9;7952:22;7934:50;:::i;:::-;7924:60;;7878:116;6372:1629;;;;;;;;;;;;;:::o;8007:117::-;8116:1;8113;8106:12;8130:102;8171:6;8222:2;8218:7;8213:2;8206:5;8202:14;8198:28;8188:38;;8130:102;;;:::o;8238:180::-;8286:77;8283:1;8276:88;8383:4;8380:1;8373:15;8407:4;8404:1;8397:15;8424:281;8507:27;8529:4;8507:27;:::i;:::-;8499:6;8495:40;8637:6;8625:10;8622:22;8601:18;8589:10;8586:34;8583:62;8580:88;;;8648:18;;:::i;:::-;8580:88;8688:10;8684:2;8677:22;8467:238;8424:281;;:::o;8711:129::-;8745:6;8772:20;;:::i;:::-;8762:30;;8801:33;8829:4;8821:6;8801:33;:::i;:::-;8711:129;;;:::o;8846:311::-;8923:4;9013:18;9005:6;9002:30;8999:56;;;9035:18;;:::i;:::-;8999:56;9085:4;9077:6;9073:17;9065:25;;9145:4;9139;9135:15;9127:23;;8846:311;;;:::o;9163:117::-;9272:1;9269;9262:12;9303:710;9399:5;9424:81;9440:64;9497:6;9440:64;:::i;:::-;9424:81;:::i;:::-;9415:90;;9525:5;9554:6;9547:5;9540:21;9588:4;9581:5;9577:16;9570:23;;9641:4;9633:6;9629:17;9621:6;9617:30;9670:3;9662:6;9659:15;9656:122;;;9689:79;;:::i;:::-;9656:122;9804:6;9787:220;9821:6;9816:3;9813:15;9787:220;;;9896:3;9925:37;9958:3;9946:10;9925:37;:::i;:::-;9920:3;9913:50;9992:4;9987:3;9983:14;9976:21;;9863:144;9847:4;9842:3;9838:14;9831:21;;9787:220;;;9791:21;9405:608;;9303:710;;;;;:::o;10036:370::-;10107:5;10156:3;10149:4;10141:6;10137:17;10133:27;10123:122;;10164:79;;:::i;:::-;10123:122;10281:6;10268:20;10306:94;10396:3;10388:6;10381:4;10373:6;10369:17;10306:94;:::i;:::-;10297:103;;10113:293;10036:370;;;;:::o;10412:684::-;10505:6;10513;10562:2;10550:9;10541:7;10537:23;10533:32;10530:119;;;10568:79;;:::i;:::-;10530:119;10688:1;10713:53;10758:7;10749:6;10738:9;10734:22;10713:53;:::i;:::-;10703:63;;10659:117;10843:2;10832:9;10828:18;10815:32;10874:18;10866:6;10863:30;10860:117;;;10896:79;;:::i;:::-;10860:117;11001:78;11071:7;11062:6;11051:9;11047:22;11001:78;:::i;:::-;10991:88;;10786:303;10412:684;;;;;:::o;11102:222::-;11195:4;11233:2;11222:9;11218:18;11210:26;;11246:71;11314:1;11303:9;11299:17;11290:6;11246:71;:::i;:::-;11102:222;;;;:::o;11330:442::-;11479:4;11517:2;11506:9;11502:18;11494:26;;11530:71;11598:1;11587:9;11583:17;11574:6;11530:71;:::i;:::-;11611:72;11679:2;11668:9;11664:18;11655:6;11611:72;:::i;:::-;11693;11761:2;11750:9;11746:18;11737:6;11693:72;:::i;:::-;11330:442;;;;;;:::o;11778:323::-;11834:6;11883:2;11871:9;11862:7;11858:23;11854:32;11851:119;;;11889:79;;:::i;:::-;11851:119;12009:1;12034:50;12076:7;12067:6;12056:9;12052:22;12034:50;:::i;:::-;12024:60;;11980:114;11778:323;;;;:::o;12107:169::-;12191:11;12225:6;12220:3;12213:19;12265:4;12260:3;12256:14;12241:29;;12107:169;;;;:::o;12282:159::-;12422:11;12418:1;12410:6;12406:14;12399:35;12282:159;:::o;12447:365::-;12589:3;12610:66;12674:1;12669:3;12610:66;:::i;:::-;12603:73;;12685:93;12774:3;12685:93;:::i;:::-;12803:2;12798:3;12794:12;12787:19;;12447:365;;;:::o;12818:419::-;12984:4;13022:2;13011:9;13007:18;12999:26;;13071:9;13065:4;13061:20;13057:1;13046:9;13042:17;13035:47;13099:131;13225:4;13099:131;:::i;:::-;13091:139;;12818:419;;;:::o;13243:143::-;13300:5;13331:6;13325:13;13316:22;;13347:33;13374:5;13347:33;:::i;:::-;13243:143;;;;:::o;13392:351::-;13462:6;13511:2;13499:9;13490:7;13486:23;13482:32;13479:119;;;13517:79;;:::i;:::-;13479:119;13637:1;13662:64;13718:7;13709:6;13698:9;13694:22;13662:64;:::i;:::-;13652:74;;13608:128;13392:351;;;;:::o;13749:332::-;13870:4;13908:2;13897:9;13893:18;13885:26;;13921:71;13989:1;13978:9;13974:17;13965:6;13921:71;:::i;:::-;14002:72;14070:2;14059:9;14055:18;14046:6;14002:72;:::i;:::-;13749:332;;;;;:::o;14087:137::-;14141:5;14172:6;14166:13;14157:22;;14188:30;14212:5;14188:30;:::i;:::-;14087:137;;;;:::o;14230:345::-;14297:6;14346:2;14334:9;14325:7;14321:23;14317:32;14314:119;;;14352:79;;:::i;:::-;14314:119;14472:1;14497:61;14550:7;14541:6;14530:9;14526:22;14497:61;:::i;:::-;14487:71;;14443:125;14230:345;;;;:::o;14581:167::-;14721:19;14717:1;14709:6;14705:14;14698:43;14581:167;:::o;14754:366::-;14896:3;14917:67;14981:2;14976:3;14917:67;:::i;:::-;14910:74;;14993:93;15082:3;14993:93;:::i;:::-;15111:2;15106:3;15102:12;15095:19;;14754:366;;;:::o;15126:419::-;15292:4;15330:2;15319:9;15315:18;15307:26;;15379:9;15373:4;15369:20;15365:1;15354:9;15350:17;15343:47;15407:131;15533:4;15407:131;:::i;:::-;15399:139;;15126:419;;;:::o;15551:165::-;15691:17;15687:1;15679:6;15675:14;15668:41;15551:165;:::o;15722:366::-;15864:3;15885:67;15949:2;15944:3;15885:67;:::i;:::-;15878:74;;15961:93;16050:3;15961:93;:::i;:::-;16079:2;16074:3;16070:12;16063:19;;15722:366;;;:::o;16094:419::-;16260:4;16298:2;16287:9;16283:18;16275:26;;16347:9;16341:4;16337:20;16333:1;16322:9;16318:17;16311:47;16375:131;16501:4;16375:131;:::i;:::-;16367:139;;16094:419;;;:::o;16519:182::-;16659:34;16655:1;16647:6;16643:14;16636:58;16519:182;:::o;16707:366::-;16849:3;16870:67;16934:2;16929:3;16870:67;:::i;:::-;16863:74;;16946:93;17035:3;16946:93;:::i;:::-;17064:2;17059:3;17055:12;17048:19;;16707:366;;;:::o;17079:419::-;17245:4;17283:2;17272:9;17268:18;17260:26;;17332:9;17326:4;17322:20;17318:1;17307:9;17303:17;17296:47;17360:131;17486:4;17360:131;:::i;:::-;17352:139;;17079:419;;;:::o;17504:180::-;17552:77;17549:1;17542:88;17649:4;17646:1;17639:15;17673:4;17670:1;17663:15;17690:180;17738:77;17735:1;17728:88;17835:4;17832:1;17825:15;17859:4;17856:1;17849:15;17876:191;17916:3;17935:20;17953:1;17935:20;:::i;:::-;17930:25;;17969:20;17987:1;17969:20;:::i;:::-;17964:25;;18012:1;18009;18005:9;17998:16;;18033:3;18030:1;18027:10;18024:36;;;18040:18;;:::i;:::-;18024:36;17876:191;;;;:::o;18073:165::-;18213:17;18209:1;18201:6;18197:14;18190:41;18073:165;:::o;18244:366::-;18386:3;18407:67;18471:2;18466:3;18407:67;:::i;:::-;18400:74;;18483:93;18572:3;18483:93;:::i;:::-;18601:2;18596:3;18592:12;18585:19;;18244:366;;;:::o;18616:419::-;18782:4;18820:2;18809:9;18805:18;18797:26;;18869:9;18863:4;18859:20;18855:1;18844:9;18840:17;18833:47;18897:131;19023:4;18897:131;:::i;:::-;18889:139;;18616:419;;;:::o;19041:194::-;19081:4;19101:20;19119:1;19101:20;:::i;:::-;19096:25;;19135:20;19153:1;19135:20;:::i;:::-;19130:25;;19179:1;19176;19172:9;19164:17;;19203:1;19197:4;19194:11;19191:37;;;19208:18;;:::i;:::-;19191:37;19041:194;;;;:::o;19241:180::-;19289:77;19286:1;19279:88;19386:4;19383:1;19376:15;19410:4;19407:1;19400:15;19427:185;19467:1;19484:20;19502:1;19484:20;:::i;:::-;19479:25;;19518:20;19536:1;19518:20;:::i;:::-;19513:25;;19557:1;19547:35;;19562:18;;:::i;:::-;19547:35;19604:1;19601;19597:9;19592:14;;19427:185;;;;:::o;19618:410::-;19658:7;19681:20;19699:1;19681:20;:::i;:::-;19676:25;;19715:20;19733:1;19715:20;:::i;:::-;19710:25;;19770:1;19767;19763:9;19792:30;19810:11;19792:30;:::i;:::-;19781:41;;19971:1;19962:7;19958:15;19955:1;19952:22;19932:1;19925:9;19905:83;19882:139;;20001:18;;:::i;:::-;19882:139;19666:362;19618:410;;;;:::o;20034:168::-;20174:20;20170:1;20162:6;20158:14;20151:44;20034:168;:::o;20208:366::-;20350:3;20371:67;20435:2;20430:3;20371:67;:::i;:::-;20364:74;;20447:93;20536:3;20447:93;:::i;:::-;20565:2;20560:3;20556:12;20549:19;;20208:366;;;:::o;20580:419::-;20746:4;20784:2;20773:9;20769:18;20761:26;;20833:9;20827:4;20823:20;20819:1;20808:9;20804:17;20797:47;20861:131;20987:4;20861:131;:::i;:::-;20853:139;;20580:419;;;:::o;21005:223::-;21145:34;21141:1;21133:6;21129:14;21122:58;21214:6;21209:2;21201:6;21197:15;21190:31;21005:223;:::o;21234:366::-;21376:3;21397:67;21461:2;21456:3;21397:67;:::i;:::-;21390:74;;21473:93;21562:3;21473:93;:::i;:::-;21591:2;21586:3;21582:12;21575:19;;21234:366;;;:::o;21606:419::-;21772:4;21810:2;21799:9;21795:18;21787:26;;21859:9;21853:4;21849:20;21845:1;21834:9;21830:17;21823:47;21887:131;22013:4;21887:131;:::i;:::-;21879:139;;21606:419;;;:::o;22031:179::-;22171:31;22167:1;22159:6;22155:14;22148:55;22031:179;:::o;22216:366::-;22358:3;22379:67;22443:2;22438:3;22379:67;:::i;:::-;22372:74;;22455:93;22544:3;22455:93;:::i;:::-;22573:2;22568:3;22564:12;22557:19;;22216:366;;;:::o;22588:419::-;22754:4;22792:2;22781:9;22777:18;22769:26;;22841:9;22835:4;22831:20;22827:1;22816:9;22812:17;22805:47;22869:131;22995:4;22869:131;:::i;:::-;22861:139;;22588:419;;;:::o;23013:174::-;23153:26;23149:1;23141:6;23137:14;23130:50;23013:174;:::o;23193:366::-;23335:3;23356:67;23420:2;23415:3;23356:67;:::i;:::-;23349:74;;23432:93;23521:3;23432:93;:::i;:::-;23550:2;23545:3;23541:12;23534:19;;23193:366;;;:::o;23565:419::-;23731:4;23769:2;23758:9;23754:18;23746:26;;23818:9;23812:4;23808:20;23804:1;23793:9;23789:17;23782:47;23846:131;23972:4;23846:131;:::i;:::-;23838:139;;23565:419;;;:::o;23990:224::-;24130:34;24126:1;24118:6;24114:14;24107:58;24199:7;24194:2;24186:6;24182:15;24175:32;23990:224;:::o;24220:366::-;24362:3;24383:67;24447:2;24442:3;24383:67;:::i;:::-;24376:74;;24459:93;24548:3;24459:93;:::i;:::-;24577:2;24572:3;24568:12;24561:19;;24220:366;;;:::o;24592:419::-;24758:4;24796:2;24785:9;24781:18;24773:26;;24845:9;24839:4;24835:20;24831:1;24820:9;24816:17;24809:47;24873:131;24999:4;24873:131;:::i;:::-;24865:139;;24592:419;;;:::o;25017:442::-;25166:4;25204:2;25193:9;25189:18;25181:26;;25217:71;25285:1;25274:9;25270:17;25261:6;25217:71;:::i;:::-;25298:72;25366:2;25355:9;25351:18;25342:6;25298:72;:::i;:::-;25380;25448:2;25437:9;25433:18;25424:6;25380:72;:::i;:::-;25017:442;;;;;;:::o;25465:233::-;25605:34;25601:1;25593:6;25589:14;25582:58;25674:16;25669:2;25661:6;25657:15;25650:41;25465:233;:::o;25704:366::-;25846:3;25867:67;25931:2;25926:3;25867:67;:::i;:::-;25860:74;;25943:93;26032:3;25943:93;:::i;:::-;26061:2;26056:3;26052:12;26045:19;;25704:366;;;:::o;26076:419::-;26242:4;26280:2;26269:9;26265:18;26257:26;;26329:9;26323:4;26319:20;26315:1;26304:9;26300:17;26293:47;26357:131;26483:4;26357:131;:::i;:::-;26349:139;;26076:419;;;:::o;26501:239::-;26641:34;26637:1;26629:6;26625:14;26618:58;26710:22;26705:2;26697:6;26693:15;26686:47;26501:239;:::o;26746:366::-;26888:3;26909:67;26973:2;26968:3;26909:67;:::i;:::-;26902:74;;26985:93;27074:3;26985:93;:::i;:::-;27103:2;27098:3;27094:12;27087:19;;26746:366;;;:::o;27118:419::-;27284:4;27322:2;27311:9;27307:18;27299:26;;27371:9;27365:4;27361:20;27357:1;27346:9;27342:17;27335:47;27399:131;27525:4;27399:131;:::i;:::-;27391:139;;27118:419;;;:::o;27543:179::-;27683:31;27679:1;27671:6;27667:14;27660:55;27543:179;:::o;27728:366::-;27870:3;27891:67;27955:2;27950:3;27891:67;:::i;:::-;27884:74;;27967:93;28056:3;27967:93;:::i;:::-;28085:2;28080:3;28076:12;28069:19;;27728:366;;;:::o;28100:419::-;28266:4;28304:2;28293:9;28289:18;28281:26;;28353:9;28347:4;28343:20;28339:1;28328:9;28324:17;28317:47;28381:131;28507:4;28381:131;:::i;:::-;28373:139;;28100:419;;;:::o;28525:233::-;28564:3;28587:24;28605:5;28587:24;:::i;:::-;28578:33;;28633:66;28626:5;28623:77;28620:103;;28703:18;;:::i;:::-;28620:103;28750:1;28743:5;28739:13;28732:20;;28525:233;;;:::o;28764:147::-;28865:11;28902:3;28887:18;;28764:147;;;;:::o;28917:114::-;;:::o;29037:398::-;29196:3;29217:83;29298:1;29293:3;29217:83;:::i;:::-;29210:90;;29309:93;29398:3;29309:93;:::i;:::-;29427:1;29422:3;29418:11;29411:18;;29037:398;;;:::o;29441:379::-;29625:3;29647:147;29790:3;29647:147;:::i;:::-;29640:154;;29811:3;29804:10;;29441:379;;;:::o;29826:289::-;29966:34;29962:1;29954:6;29950:14;29943:58;30035:34;30030:2;30022:6;30018:15;30011:59;30104:3;30099:2;30091:6;30087:15;30080:28;29826:289;:::o;30121:366::-;30263:3;30284:67;30348:2;30343:3;30284:67;:::i;:::-;30277:74;;30360:93;30449:3;30360:93;:::i;:::-;30478:2;30473:3;30469:12;30462:19;;30121:366;;;:::o;30493:419::-;30659:4;30697:2;30686:9;30682:18;30674:26;;30746:9;30740:4;30736:20;30732:1;30721:9;30717:17;30710:47;30774:131;30900:4;30774:131;:::i;:::-;30766:139;;30493:419;;;:::o;30918:241::-;31058:34;31054:1;31046:6;31042:14;31035:58;31127:24;31122:2;31114:6;31110:15;31103:49;30918:241;:::o;31165:366::-;31307:3;31328:67;31392:2;31387:3;31328:67;:::i;:::-;31321:74;;31404:93;31493:3;31404:93;:::i;:::-;31522:2;31517:3;31513:12;31506:19;;31165:366;;;:::o;31537:419::-;31703:4;31741:2;31730:9;31726:18;31718:26;;31790:9;31784:4;31780:20;31776:1;31765:9;31761:17;31754:47;31818:131;31944:4;31818:131;:::i;:::-;31810:139;;31537:419;;;:::o;31962:177::-;32102:29;32098:1;32090:6;32086:14;32079:53;31962:177;:::o;32145:366::-;32287:3;32308:67;32372:2;32367:3;32308:67;:::i;:::-;32301:74;;32384:93;32473:3;32384:93;:::i;:::-;32502:2;32497:3;32493:12;32486:19;;32145:366;;;:::o;32517:419::-;32683:4;32721:2;32710:9;32706:18;32698:26;;32770:9;32764:4;32760:20;32756:1;32745:9;32741:17;32734:47;32798:131;32924:4;32798:131;:::i;:::-;32790:139;;32517:419;;;:::o;32942:168::-;33082:20;33078:1;33070:6;33066:14;33059:44;32942:168;:::o;33116:366::-;33258:3;33279:67;33343:2;33338:3;33279:67;:::i;:::-;33272:74;;33355:93;33444:3;33355:93;:::i;:::-;33473:2;33468:3;33464:12;33457:19;;33116:366;;;:::o;33488:419::-;33654:4;33692:2;33681:9;33677:18;33669:26;;33741:9;33735:4;33731:20;33727:1;33716:9;33712:17;33705:47;33769:131;33895:4;33769:131;:::i;:::-;33761:139;;33488:419;;;:::o;33913:99::-;33965:6;33999:5;33993:12;33983:22;;33913:99;;;:::o;34018:246::-;34099:1;34109:113;34123:6;34120:1;34117:13;34109:113;;;34208:1;34203:3;34199:11;34193:18;34189:1;34184:3;34180:11;34173:39;34145:2;34142:1;34138:10;34133:15;;34109:113;;;34256:1;34247:6;34242:3;34238:16;34231:27;34080:184;34018:246;;;:::o;34270:377::-;34358:3;34386:39;34419:5;34386:39;:::i;:::-;34441:71;34505:6;34500:3;34441:71;:::i;:::-;34434:78;;34521:65;34579:6;34574:3;34567:4;34560:5;34556:16;34521:65;:::i;:::-;34611:29;34633:6;34611:29;:::i;:::-;34606:3;34602:39;34595:46;;34362:285;34270:377;;;;:::o;34653:313::-;34766:4;34804:2;34793:9;34789:18;34781:26;;34853:9;34847:4;34843:20;34839:1;34828:9;34824:17;34817:47;34881:78;34954:4;34945:6;34881:78;:::i;:::-;34873:86;;34653:313;;;;:::o

Swarm Source

ipfs://ce9cbeae91608c56d4a32acf5d86ed6190848b1d4d2350711476243ca98caf28

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.